3

プログラムでワークフローを停止しようとしています。さまざまな投稿と msdn の両方で、更新要求を介して Asyncoperation ステータスを更新することでこれを実行できることを読みました。ただし、リクエストを更新するたびに。ワークフローがキャンセルや一時停止などの途中で行き詰まり、最終的な状態に到達しません。

何か案は?

protected void ExecutePostAccountUpdate(LocalPluginContext localContext)
    {
        if (localContext == null)
        {
            throw new ArgumentNullException("localContext");
        }

        string fetchXML = "<fetch mapping='logical' count='50' version='1.0'>" +
                          "<entity name='asyncoperation'>" +
                          "<filter>" +
                          "<condition attribute='regardingobjectid' operator='eq' value='" +
                          localContext.PluginExecutionContext.PrimaryEntityId + "' />" +
                          "</filter>" +
                          "</entity>" +
                          "</fetch>";
        EntityCollection col = localContext.OrganizationService.RetrieveMultiple(new FetchExpression(fetchXML));
        if (col.Entities.Count > 0)
        {
            AsyncOperation a = (AsyncOperation)col[0];
            a.StateCode = AsyncOperationState.Completed;
            a.StatusCode = new OptionSetValue(32);
            localContext.OrganizationService.Update(a);



        }

    }
4

3 に答える 3

1

私のブログをご覧ください: C# を使用してプログラムでワークフローをキャンセルする方法

ユーザーがシステム ジョブをキャンセルする権限を持っていることを確認します。

于 2014-05-13T14:46:55.460 に答える
0

この投稿によると、コードを介してワークフローの公開を取り消すことができるようです。

注: これは必ずしも進行中のワークフローを停止するわけではありませんが、そのタイプの新しいワークフローが開始されないようにします。

const int WorkflowStatusDraft = 1;
const int WorkflowStatusPublished = 2;

public void PublishWorkflow(Guid workflowId)
{
    SetStateWorkflowRequest publishRequest = new SetStateWorkflowRequest();
    publishRequest.EntityId = workflowId;
    publishRequest.WorkflowState = WorkflowState.Published;
    publishRequest.WorkflowStatus = WorkflowStatusPublished;

    this.CrmService.Execute(publishRequest);
}

public void UnpublishWorkflow(Guid workflowId)
{
    SetStateWorkflowRequest unpublishRequest = new SetStateWorkflowRequest();
    unpublishRequest.EntityId = workflowId;
    unpublishRequest.WorkflowState = WorkflowState.Draft;
    unpublishRequest.WorkflowStatus = WorkflowStatusDraft;

    this.CrmService.Execute(unpublishRequest);
}
于 2012-07-09T11:40:12.977 に答える