I've just committed an update to SparkleXRM with CRM2015 support and the process client API. One of the design decisions I made early on with SparkleXRM was to stick with a CRM2011 solution format to allow installation on both CRM2011 and CRM2013. Now that CRM2015 does not support installing CRM2011 solutions I've had to branch and make both CRM2011 and CRM2015 versions available. The code base still remains the same but they are distributed through two separate solution files depending on your target version. You can download the new CRM2015 SparkleXRM solution from github.
The new client side process control API is such a welcome addition. The latest version of SparkleXRM contains support for this so that you can:
Write code to run when the stage is changed or the user selects a process tab (such as hiding/showing sections on the form.
// Add On Process Stage change
Page.Data.Process.AddOnStageChange(delegate(ExecutionContext context){
// Stage Stepped forwards backwards
});
// Add On Process Stage change
Page.Data.Process.AddOnStageSelected(delegate(ExecutionContext context)
{
// Stage Tab Selected
});
Write code to get the current process and stage so that onload functions can show/hide sections on the form.
// Get Current Process
Process process = Page.Data.Process.GetActiveProcess();
Stage stage = Page.Data.Process.GetActiveStage();
Script.Alert("Process = " + process.GetName() + " Stage = " + stage.GetName());
Write code to get the stages and steps of the current process and find the attributes that are referenced – I've not found a use for this yet!
// Get Stages
ClientCollection stages = process.GetStages();
if (stages.GetLength() > 0)
{
// Get Steps
Stage stage0 = stages.Get(0);
ClientCollection steps = stage0.GetSteps();
steps.ForEach(delegate(Step step, int index)
{
Script.Alert(step.GetName() + " " + step.GetAttribute());
return true;
});
}
Write code to show/hide or collapse/expand the process ribbon:
// Show/Hide Process
Page.Ui.Process.SetVisible(true);
// Expand/collapse
Page.Ui.Process.SetDisplayState(ProcessExpanded.Collapsed);
Write to advance/step back the stage or change the process/stage completely:
// Change stage
Page.Data.Process.MoveNext(delegate(MoveStepResult result)
{
Script.Alert(result.ToString());
});
// Change process
Stage currentStage = stages.Get(0);
Page.Data.Process.SetActiveStage(currentStage.GetId(), delegate(SetActiveStageResult result)
{
Script.Alert(result.ToString());
});
// Change process to the first available process that the user has access to.
// If the same as the current process, this does nothing.
Page.Data.Process.GetEnabledProcesses(delegate(Dictionary processes)
{
Page.Data.Process.SetActiveProcess(processes.Keys[0], delegate(SetActiveProcessResult result)
{
Script.Alert(result.ToString());
});
});
Along with the server side branching support for processes – I think this really finishes off this feature nicely. The business process flow feature is now by far my favourite in terms of innovation, business usefulness and developer API. First it was gold in CRM203 RTM, then green in SP1 - now with CRM2015 I especially like the calming cool blue that the process ribbon is now rendered with!
Cheers,
@ScottDurow