从Javascript调用操作失败MSCRM

时间:2017-11-02 06:16:42

标签: plugins dynamics-crm workflow

我有一些共同努力从队列中完成多项任务。

第一个是javascript,它调用Action(工作流)处理任务ID的CSV和用户ID。这个动作将它交给一个循环任务的插件,为用户选择它们然后将它们设置为完成。

除非已经分配任务,否则这一切都很好。然后我从javascript中收到错误。

enter image description here

首先,这是说“项目已经分配给另一个用户”。但是我添加了一个try catch这样的

try
{
    Entity queueItem = RetrieveQueueItemIdByObjectId(service, new Guid(taskId));

    // Create the Request Object and Set the Request Object's Properties
    PickFromQueueRequest pickFromQueueRequest = new PickFromQueueRequest
    {
        QueueItemId = queueItem.Id,
        WorkerId = new Guid(_UserId)
    };
    // Execute the Request
    service.Execute(pickFromQueueRequest);
}
catch(FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
{
    if (ex.Detail.ErrorCode != -2147220891)
    {
        throw ex;
    }
}

我尝试了

if(!ex.Message.Contains("Item has already been assigned to another user"))
{
    throw ex;
}

并抓住一切。然而错误仍然显示。然后我注意到任务正在完成,但错误正在被抛出。在此代码之后,任务设置为完成。这是有效的,因为如果没有选择任务,则不会抛出任何错误。

2 个答案:

答案 0 :(得分:1)

答案出现在错误中:在插件中,catch引发的OrganizationService异常(或实际上任何异常,据我所知)并继续运行。

您必须扩展您的代码,以便不会抛出,如果您希望它能够工作。没办法解决这个问题。

答案 1 :(得分:0)

  

并抓住一切。然而错误仍然显示。然后我注意到任务正在完成,但错误正在被抛出。在此代码之后,任务设置为完成。这是有效的,因为如果没有选择任务,则不会抛出任何错误。

如果已完成此记录,则如何从完成中跳过此记录?基本上你必须在再次挑选它之前释放这个队列项。

ReleaseToQueueRequestRemoveFromQueueRequest