{Tips and Tricks} Put icons/smileys in sub grids Dynamics CRM 2013

I have been spending last few blogs to do changes to Sub-grids in Dynamics CRM 2013.

Different customers want to see different representation of their customer data, something visual is often better perceived by customers. I often find customers talking about a visual element on CRM sub grids, so it is more visible than having to read a text field for status on sub grids. CRM off course doesn’t yet let us show icons on Grids. Here is a workaround I tried to achieve for one of the demos. I have used unsupported scripting to achieve this, but still it will work fine as long as DOM structure of CRM forms is not changed, after which another investigation and relook into this code might be required. However, it is often more visual to see cases on sub-grid like the one below, which makes us understand that first two are completed and the last two are in progress.


Now, if you want to try it here is the script bits:

How to put it up in a function and other stuff on Form load is mentioned in my other blog: Click here

Just put the below code in place of Logic here from the blog linked above:

$(‘#accountcasessgrid td’).filter(function() {
    return $(this).text() == ‘Active’;
html(“<img src=’web resource path for Active ‘>”); $(‘#accountcasessgrid td’).filter(function() {
    return $(this).text() == ‘Resolved’;}).
html(“<img src=’web resource path for Resolved’ >”);

You are done. Hope it helps!

{Scripting titbits} Coming in Dynamics CRM 2015: Business Process Flows{Part 1}

I was going through documentation on new scripting tit-bits coming in Dynamics CRM 2015 in scripting. Basically there is a new section in namespace coming up for Business Processes: The Xrm.Page.data namespace is extended to include methods under Xrm.Page.data.process. The Xrm.Page.ui namespace is extended to include methods under Xrm.Page.ui.process.

In CRM 2015, Business Process flows can have a structure like the one below:


This and other scripting changes included solves lots of workaround and unsupported scripting which needed to be done till Dynamics CRM 2013 to meet customer requirements. Methods and usage are mentioned below (Reference 2015 Developer Preview SDK):

Change the process when there are more than one process available for the entity.

Use Xrm.Page.data.process.getEnabledProcesses to retrieve information about enabled processes that the user can choose for the entity. Then use Xrm.Page.data.process.setActiveProcess to make one of the enabled processes the active one.

Move to the next stage when all required steps are completed to make it the current active stage.

Use Xrm.Page.data.process.moveNext.

Move to the previous stage and make it the current active stage.

Use Xrm.Page.data.process.movePrevious.

Select a stage to view the status of the steps in the stage.

Use Xrm.Page.data.process.getActivePath to retrieve information about the stages that have been completed, the current active stage, and valid stages available from the current active stage. Examine the steps included in that stage and compare the corresponding form attribute values to determine whether they are completed.

Complete a step

Steps are completed when the corresponding data in the form is entered. You can determine the attribute using the step getAttribute method. This will return the logical name of the attribute. Then use Xrm.Page.getAttribute to retrieve attribute from the Xrm.Page.data.entity.attributes collection and then use the attribute setValue method to set the value.

Detect whether a step is required

Use the step isRequired method to determine if a step is required by the business process flow.

Expand or collapse the business process flow control

Use Xrm.Page.ui.process.setDisplayState.

Things only developer can perform:

Hide the process control

Use Xrm.Page.ui.process.setVisible, you can control whether to display the business process flow control.

Skip to a valid stage without progressing through each one.

Use Xrm.Page.data.process.setActiveStage to set one of the valid stages returned using Xrm.Page.data.process.getActivePath as long as the stage is defined for the current entity.

Query the process definition including stages not currently visible

Use Xrm.Page.data.process.getActiveProcess to query the definition of the business process flow, including stages that might not be visible because of branching logic in the process.

Get Active Process:

var activeProcess = Xrm.Page.data.process.getActiveProcess();

Set Active Process:

Xrm.Page.data.process.setActiveProcess(processId, callbackFunction);

Get Active Stage:

var activeStage = Xrm.Page.data.process.getActiveStage();

Hope it helps!