Wednesday, 17 February 2016

07:54 - 1 comment

Get the Count of Annotation (notes) Records in Case Record Entity | MS CRM

Get the count of annotation (notes) records in case record entity.

First add the latest  XRMServiceToolKit, JSON and Jquery





after that add the below code in OnLoad event 


function mycountsample()
{
debugger;
var id =Xrm.Page.data.entity.getId();
var entityName = Xrm.Page.data.entity.getEntityName();
var fetchxmlcount="<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"
+"<entity name='annotation'>"
+"<attribute name='subject' />"
+"<attribute name='notetext' />"
+"<attribute name='filename' />"
+"<attribute name='annotationid' />"
+"<order attribute='subject' descending='false' />"
+"<filter type='and'>"
+"<condition attribute='isdocument' operator='eq' value='1' />"
+"</filter>"
+"<link-entity name='incident' from='incidentid' to='objectid' alias='ab'>"
+"<filter type='and'>"
+"<condition attribute='incidentid' operator='eq' uitype='incident' value='"+id+"' />"
+"</filter>"
+"</link-entity>"
+"</entity>"
+"</fetch>";
var rCollection= XrmServiceToolkit.Soap.Fetch(fetchxmlcount);
alert(rCollection.length);
}






then refresh and open the record you will the count of annotation record..









Tuesday, 16 February 2016

20:09 - No comments

Identify the trigger for an On-load event for Sub-grid in Dynamics CRM | MS CRM

Introduction :

With CRM 2015 SP1, the client API was extended to allow attaching events to subgrid to manage the subgrid data operations.

The OnLoad event however executes on all of the following operations

1.Load of parent form
2.Save of parent form
3. Add a new record in sub grid
4. Remove a record from sub grid
5.Navigating to prev/next page in sub grid

when we register a method on the onload event, ts does not indicate in any way which of the above actually fired the onload event

Workaround to identifying the operation :

We cannot register an event when the record is added/removed from the sub grid. The only event available is onload so one way to identify if it was one of the add/remove operations that caused the grid to call the onload event. we can keep a check on the count of records in the grid.

we can register the onload event using the following code


   function onLoad() {

    var funtionName = "onLoad";

    try {

        //setting timeout beacuse subgid take some time to load after the form is loaded

        setTimeout(function () {

            //validating to check if the sub grid is present on the form

            if (Xrm.Page != null && Xrm.Page != undefined && Xrm.Page.getControl("contact_subgrid") != null && Xrm.Page.getControl("contact_subgrid") != undefined) {

                //stores the row count of subgrid on load event of CRM Form

                _rowCount = Xrm.Page.getControl("contact_subgrid").getGrid().getTotalRecordCount();

                //registering refreshform function onload event of subgrid

                Xrm.Page.getControl("contact_subgrid").addOnLoad(onGridLoad);

            }

        }, 5000);

    } catch (e) {

        Xrm.Utility.alertDialog(functionName + "Error: " + (e.message || e.description));

    }

}


The rowcount is defined as global variable and is updated here to store the count of  records in the grid when the form is loaded initially.



    function onGridLoad() {

    var functionName = " onGridLoad ";

    var currentRowCount = null;

    try {

        //setting timeout beacuse subgrid take some time to load after the form is loaded

        setTimeout(function () {

            //validating to check if the sub grid is present on the form

            if (Xrm.Page != null && Xrm.Page != undefined && Xrm.Page.getControl("contact_subgrid") != null &&                                   Xrm.Page.getControl("contact_subgrid") != undefined) {

                //stores the row count of subgrid on load event of CRM Form

                currentRowCount = Xrm.Page.getControl("contact_subgrid").getGrid().getTotalRecordCount();

                if (currentRowCount > _rowCount) {

                    //call the intended function which we want to call only when records are added to the grid

                    dosomething();

                    //set current row count to the global row count

                    _rowCount = currentRowCount;

                }

                else if (currentRowCount < _rowCount) {

                    //call the intended function which we want to call only when records are removed from the grid

                    dosomethingelse();

                    //set current row count to the global row count

                    _rowCount = currentRowCount;

                }

            }

        }, 2000);

    } catch (e) {

        Xrm.Utility.alertDialog(functionName + "Error: " + (e.message || e.description));

    }

}

Monday, 15 February 2016

05:01 - No comments

Make a subgrid “+” button launch a new record form | MS Dynamics CRM


 In Microsoft Dynamics CRM, to add a record to a subgrid on a form, you hit the + button in the upper right hand corner. You will notice that for some subgrids you will get a lookup field, while others will give you a new record form.

The reason for this different behavior is that the new button (+) can either function as “add new” or “add existing.” For example, when you are adding an opportunity, you probably will want to have the new button create a new opportunity, while when adding a contact to an account, you may want to have the user select from an existing list of contacts (or search existing first, then add a new one).

To control the behavior of the new record button on subgrids, look at the child entity being selected in the subgrid..If the lookup field for the parent is required, the user will get a “new record” form when clicking the + button. If the lookup field for the parent entity is not required on the child entity, the user will get the lookup field to “add existing.”