2017-11-02 1 views
0

Ich habe ein paar Dinge, die zusammenarbeiten, um mehrere Aufgaben aus einer Warteschlange abzuschließen.Aufruf von Javascript schlägt fehl MSCRM

Das erste ist Javascript, das eine Aktion (Workflow) aufruft, die eine CSV mit Aufgaben-IDs und der Benutzer-ID übergibt. Diese Aktion übergibt alles über ein Plugin, das die Aufgaben in einer Schleife ausführt, sie für den Benutzer auswählt und dann für die Ausführung festlegt.

Das läuft alles gut, es sei denn, eine Aufgabe ist bereits vergeben. Ich bekomme dann einen Fehler vom Javascript.

enter image description here

Zunächst war dies sagen „hat Artikel bereits an einen anderen Benutzer zugewiesen wurde“. Ich habe jedoch einen Versuch fangen als solche

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; 
    } 
} 

ich, dass Fang versucht haben, mit

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

und einfach alles zu kontrollieren. Und dennoch zeigt sich der Fehler noch. Ich bemerkte dann, dass die Aufgaben abgeschlossen waren, aber der Fehler wurde ausgelöst. Nach diesem Code wird die Aufgabe abgeschlossen. Das funktioniert, weil, wenn die Aufgabe nicht bereits ausgewählt ist, kein Fehler ausgelöst wird.

+0

Wie wäre diese Platte von der Fertigstellung Skipping, da dies bereits belegt ist? Ich denke im Grunde müssen Sie diese Warteschlange Element freigeben, bevor Sie es wieder auswählen. –

Antwort

1

Die Antwort ist in dem Fehler: in einem Plugin können Sie nicht catch Ausnahmen von der OrganizationService geworfen werden (oder eine Ausnahme, soweit ich weiß) und weiter laufen.

Sie müssen Ihren Code so erweitern, nicht werfen, wenn Sie wollen, dass es funktioniert. Umsonst.

+0

Ich habe an den Prozess und im Plugin, keine Ausnahme geworfen –

+0

Oh warten, ich habe was du meinst. Ich kann try catch nicht verwenden, um zu sehen, ob der Datensatz zugewiesen ist. Ich sollte prüfen, ob es zuerst zugewiesen wird. –

+1

Um dies zu lösen, anstatt einen try-catch zu verwenden, um zu bestimmen, ob das queueitem zugewiesen wurde, habe ich eine if-Anweisung ausgeführt, um mich selbst zu überprüfen. –

0

and just catching everything. And yet the error still shows. I then noticed the tasks were completing, but the error is getting thrown. After this code is where the task is set to complete. Which works because if the task is not already picked, no error is thrown.

Wie über das Überspringen dieses Datensatzes von der Fertigstellung, wie dies bereits zugewiesen ist? Grundsätzlich müssen Sie diesen Queue-Gegenstand freigeben, bevor Sie ihn erneut auswählen.

ReleaseToQueueRequest oder RemoveFromQueueRequest

Verwandte Themen