Understanding pipeline in CRM 4.0


Different stages in the event execution pipeline introduced in CRM 4.0.

Stage #1

•Pre-Operation – This is where custom logic can be registered to execute before the platform operation occurs. Logic that runs in this stage can stop further execution of the pipeline as we will discuss more in the plug-in chapters. Custom logic that runs in this stage is not part of the platform transaction.

Stage #2
•Pre-Operation – System – This stage is reserved as a pre-operation stage for system internal processing. Operations that occur as part of this stage are part of the Platform Transaction.You can’t register your own custom logic to run during this stage.

Stage #3
•Platform Operation – This is where the real work happens. The request/event that caused us to be in the pipeline is processed here and reflected on the state of the system. This stage is also part of the Platform Transaction. You can’t register your own custom logic to run during this stage.

Stage #4
•Post-Operation-System -This stage is also reserved as a post-operation stage for system internal processing. Operations that occur as part of this stage are part of the Platform Transaction. You can’t register your own custom logic to run during this stage.

Stage #5

•Post-Operation -This is where custom logic can be registered to execute. Custom logic in this stage can be either synchronous or asynchronous. Asynchronous logic will be handed off for processing by the Asynchronous Service queue. Custom logic that runs in this stage is not part of the platform transaction.

For better understanding of pipeline check out this wonderful article

http://crmscape.blogspot.com/2009/02/ms-crm-40-plug-in-stages-pipelines-and.html

Bye..

0x80044150 Generic SQL error. Platform : Server was unable to process the request in CRM


Hi,

I got this error while using CrmService from an web application.

Later i found that Crm Asynchronous Service(client)  was not running, so starting it solved the issue.

Just thought of sharing that !

Bye..

Hiding form assistant in CRM


Hi,

We could use the following script to hide the form assistant in Crm , we would use it in the form load event

document.getElementById(‘RelatedInformationPane’).style.display=’none’;

// ToggleInformationPane() to toggle the form assistant pane

document.all.RelatedInformationPane.ToggleInformationPane();

For CRM 4.0, go to customization ->customize entities-> select your entity–> select form properties->select Display tab and uncheck enable form assistant check box !!

Bye..

Cancel delete using PreDelete callout.


Just an example of using PreDelete callout !!!

public override PreCalloutReturnValue PreDelete(CalloutUserContext userContext,
   CalloutEntityContext entityContext,
   ref string errorMessage)
  {
   
   // Use retrive to get the status value
   CrmService service=new CrmService();
   service.CallerIdValue=new CallerId();
   service.CallerIdValue.CallerGuid=userContext.UserId;
   service.Credentials=System.Net.CredentialCache.DefaultCredentials;

   // Get status value
   ColumnSet cols=new ColumnSet();
   cols.Attributes=new String[]{“statuscode”};

   BusinessEntity busEntity= service.Retrieve(EntityName.salesorder.ToString(),entityContext.InstanceId,cols);

   salesorder poOrder=(salesorder)busEntity;
   // check for PO status value
   string poStatusValue=poOrder.statuscode.Value.ToString();

   // if status is found cancel the event and show error message
   if(poStatusValue==1)
   {
    errorMessage = “Aborting delete : Record cannot be deleted !”;
    return PreCalloutReturnValue.Abort;
   }
   
   return PreCalloutReturnValue.Continue;
  }

 Bye…

Recalculate and SubmitCrmForm JavaScript function in CRM


Hi,

I was trying to figure out what the recalcuate button does in case of Order and Quote form. Got to know that it calculates the total based on the Products added to that record. Behind the scene this is the html code for the recalculate button

<li tabIndex=”-1″ title=”Recalculate” id=”_MBcrmFormSubmitCrmForm1truetruefalse”
onclick=”window.execScript(action)”
action=”crmForm.SubmitCrmForm(1, true, true, false);”>

So basically it calls SubmitCrmForm function.

SubmitCrmForm triggers the save event even if there are no modifications made on the form.

SubmitCRMForm( Mode, Validate, ForceSubmit, closeWindow)        // we could use this function but it is unsupported

Different Mode could be -1,2,7,58,59

or alternatively we could use the below function

Save
Code: 1
Function: crmForm.Save();

SaveAndClose
Code: 2
Function: crmForm.SaveAndClose();

Send
Code: 7
Function: send();

SaveAsCompleted
Code: 58
Function: SaveAsCompleted();

SaveAndNew
Code: 59
Function: crmForm.SubmitCrmForm(59, true, true, false);

Bye…

Managing JavaScript Code in CRM


Hi,

Most of the time while writing JavaScript in CRM, we end up writing duplicate code i.e.

For e.g. if there are two fields say field1 and field2  and on selection of a particular value in field1,  we would like to make field2 mandatory.

Here we would first write the code for that in the onSave event of the field1.

Than again we would have to put the same code in the onload event also to reflect the same condition.

After some time it becomes really difficult to maintain it!

However there is a solution to that, just browsing through stunnware site, got this particular article on reusing Javascript.

Please go through that !!

Reusing code in OnLoad and OnChange event handlers

Just thought of sharing it ….