SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Listen-Workflow wirft Fehler bei erneuter Ausführung

Unbeantwortet Dieser Beitrag hat 0 Antworten

Ohne Rang
216 Beiträge
Nachtschelm erstellt 5 Apr. 2011 11:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Forum,
ich habe einen VS-Workflow, der auf dem auslösenden Element einige Modifikationen ausführt und danach einige SPD-Workflows aufruft, die Mails versenden. Die Abarbeitung der SPD-WFs dauert etwas. Wird in der Zeit, während die SPD-WFs noch laufen auf dem gleichen Listenelement der VS-Workflow erneut getriggert, erhalte ich folgende Fehlermeldung:
Workflow ID=GUID attempting to run on a thread currently executing workflow ID=GUID.  This workflow will be run at a later time.
Der VS-Workflow wird dann mit dem Status Fehler beendet und die SPD-Workflows laufen zwar mit dem Status Abgeschlossen durch, versenden allerdings keine Mails.

Nachfolgend der entsprechende Code-Ausschnitt:

 

private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            if (!workflowProperties.Originator.ToLower().Contains("system"))
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    initialize();
                    ...
                    ...
                    ...
                    triggerWorkflows(); //Hier werden die SPD-Workflows gestartet. Code weiter unten.
                });
            }
        }

private void triggerWorkflows()
        {
            SPWorkflowManager wfManager = currentSite.WorkflowManager;
            SPWorkflowAssociationCollection wfAssociationColl = currentList.WorkflowAssociations;

            foreach (SPWorkflowAssociation wfAssociation in wfAssociationColl)
            {
                try
                {
                    if (!wfAssociation.Id.Equals(workflowProperties.Workflow.AssociationId))
                        wfManager.StartWorkflow(currentListItem, wfAssociation, wfAssociation.AssociationData);
                }
                catch (ArgumentException aex)
                {
                }
                catch (SPException spex)
                {
                }
            }
        }

Ich habe mal versucht, wie es sich verhält, wenn ich jeden SPD-Workflow in einem eigenen Thread starte, aber da habe ich gleich bei mersten durchlauf die oben genannte Fehlermeldung bekommen. Trotzdem hier der entsprechende Code:

 

private void triggerWorkflows()
        {
            SPWorkflowManager wfManager = currentSite.WorkflowManager;
            SPWorkflowAssociationCollection wfAssociationColl = currentList.WorkflowAssociations;
            int counter = 0;

            foreach (SPWorkflowAssociation wfAssociation in wfAssociationColl)
            {
                Thread t = new Thread(new ParameterizedThreadStart(runWF));
                t.Name = "Thread " + ++counter;
                Object[] params_array = new Object[4];
                params_array[0] = wfManager;
                params_array[1] = currentListItem;
                params_array[2] = wfAssociation;
                params_array[3] = t;
                t.Start(params_array);
            }
        }// endmethod triggerWorkflows


        private void runWF(Object param)
        {
            try
            {
                Object[] params_array = (Object[])param;
                SPWorkflowManager wfManager = (SPWorkflowManager)params_array[0];
                SPListItem currentListItem = (SPListItem)params_array[1];
                SPWorkflowAssociation wfAssociation = (SPWorkflowAssociation)params_array[2];
                Thread currentThread = (Thread)params_array[3];

                SPWorkflow wf = wfManager.StartWorkflow(currentListItem, wfAssociation, wfAssociation.AssociationData);
            }
            catch (ArgumentException aex)
            {
            }
        }

 

Könnte jemand mich bitte auf meine(n) Fehler oder in Richtung Lösung stoßen? Auch Kritik bzgl. Programmierstil gerne gesehen :-)