Monday, 19 September 2011

Cancelling workflows via the SDK

Hi guys,

Quick query

Does anyone know if it’s possible to cancel workflows via the SDK in CRM 2011? I find this hugely useful for cancelling long running workflows when a contacts state changes.

The CRM 4.0 code has been changed to crm 2011 style and throws the error:

[System.ServiceModel.FaultException] = {"The 'SetStateDynamicEntity' method does not support entities of type 'asyncoperation'."}


SetStateRequest request = new SetStateRequest();
request.State = new OptionSetValue(3); // completed
request.Status = new OptionSetValue(AsyncOperationStatus.Canceled);
request.EntityMoniker = new EntityReference("asyncoperation", singleWorkflowInstance.Id);
SetStateResponse updated = (SetStateResponse) CRMInstance.Execute(request);


Got it guys:

Set state is not supported, but strangely a manual update works:

Entity workflowToCancel = new Entity("asyncoperation");

workflowToCancel.Id = workflowID;
workflowToCancel["statecode"] = new OptionSetValue(3);
workflowToCancel["statuscode"] = new OptionSetValue(32);

myCRMService.Update(workflowToCancel);

I eventually found this article on it which mentioned that an update works

http://www.resultondemand.nl/support/sdk/78340765-afb7-47eb-a024-6c2dfd41cd6f.htm#bkmk_retrieve

possible statuscodes:

Canceled = 32;
Canceling = 22;
Failed = 31;
InProgress = 20;
Pausing = 21;
Succeeded = 30;
Waiting = 10;
WaitingForResources = 0;

Not sure on the rest of the state codes but I’m sure they would be reasonably simple

3 comments:

  1. Thanks so much. Been tearing my hair out all afternoon trying to figure this out.

    ReplyDelete
  2. Used such approach to Resume waiting WFs.
    Checked out many other ways, but only this worked.
    Thank you.

    ReplyDelete