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.




Aus VS-Workflow gestartete SPD-Workflows laufen nicht richtig

Geprüfte Antwort Dieser Beitrag hat 2 Antworten

Ohne Rang
216 Beiträge
Nachtschelm erstellt 7 Juli 2010 09:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community,
ich stehe seit einigen Tagen vor einem Problem, zu dem ich keine Lösung finde. Doch erst mal das Szenario:

Ich habe zwei Listen, die ich über zwei VS-Workflows synchronisiere. Wenn es änderungen gibt, sollen Mails verschickt werden. Dafür habe ich SPD-Workflows hergenommen, weil ich ehrlich gesagt keine Erfahrung mit dem Mailversand aus C# habe. Der VS-Workflow synchronisiert also die Liste und soll dann aus dem Code heraus die SPD-Workflows (geht ja nicht anders, da das Systemkonto keine SPD-WFs triggern kann) anstoßen. Diese senden dann je nach gesetztem Status Mails oder eben nicht.

Das Anstoßen der Mails klappt auch ohne Probleme. Allerdings werden nicht alle SPD-Workflows korrekt abgearbeitet. Diese sind dadurch erkenntlich, dass deren Status auf "beendet" und nicht auf "abgeschlossen" steht. Das Resultat ist, dass nur eine anstatt drei Mails verschickt werden. Dazu sollte ich noch sagen, dass der Workflow nicht unter der Systemkonto-Identität läuft, sondern die Identität eines dezidierten Useraccounts annimmt. Im Log hab ich folgende Fehlermeldung gefunden, mit der ich leider nicht viel anfangen kann:

 

07/07/2010 09:13:01.17     w3wp.exe (0x15D0)                           0x1414    Windows SharePoint Services       General                           0    Unexpected    ERROR: request not found in the TrackedRequests. We might be creating and closing webs on different threads. ThreadId = 11, Free call stack =    bei Microsoft.SharePoint.SPRequestManager.Release(SPRequest request)     bei Microsoft.SharePoint.SPSite.Close()     bei Microsoft.SharePoint.SPSite.Dispose()     bei Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver.AutoStartWorkflow(SPItemEventProperties properties, Boolean bCreate, Boolean bChange, AssocType atyp)     bei Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver.AutoStartWorkflow(SPItemEventProperties properties, Boolean bCreate, Boolean bChange)     bei Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver.ItemAdded(SPItemEventProperties properties)     bei Microsoft.SharePoint.SPEventManager.RunItem...     
07/07/2010 09:13:01.17*    w3wp.exe (0x15D0)                           0x1414    Windows SharePoint Services       General                           0    Unexpected    ...EventReceiver(SPItemEventReceiver receiver, SPItemEventProperties properties, SPEventContext context, String receiverData)     bei Microsoft.SharePoint.SPEventManager.RunItemEventReceiverHelper(Object receiver, Object properties, SPEventContext context, String receiverData)     bei Microsoft.SharePoint.SPEventManager.<>c__DisplayClass8`1.<InvokeEventReceivers>b__0()     bei Microsoft.SharePoint.SPSecurity.CodeToRunElevatedWrapper(Object state)     bei Microsoft.SharePoint.SPSecurity.RunAsUser(SPUserToken userToken, Boolean bResetContext, WaitCallback code, Object param)     bei Microsoft.SharePoint.SPSecurity.RunAsUser(SPUserToken userToken, CodeToRunElevated code)     bei Microsoft.SharePoint.SPEventManager.InvokeEventReceivers[ReceiverType](SPUserToken userToken, RunEventReceiver runEven...     
07/07/2010 09:13:01.17*    w3wp.exe (0x15D0)                           0x1414    Windows SharePoint Services       General                           0    Unexpected    ...tReceiver, Object receivers, Object properties, Boolean checkCancel)     bei Microsoft.SharePoint.SPEventManager.InvokeEventReceivers[ReceiverType](Byte[] userTokenBytes, RunEventReceiver runEventReceiver, Object receivers, Object properties, Boolean checkCancel)     bei Microsoft.SharePoint.SPEventManager.HandleEventCallback[ReceiverType,PropertiesType](Object callbackData)     bei Microsoft.SharePoint.Utilities.SPThreadPool.WaitCallbackWrapper(Object state)     bei System.Threading.ExecutionContext.runTryCode(Object userData)     bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)     bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  ...     
07/07/2010 09:13:01.17*    w3wp.exe (0x15D0)                           0x1414    Windows SharePoint Services       General                           0    Unexpected    ...   bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)     bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)  , Allocation call stack (if present) null

 

Kann wirklich jede Hilfe bruachen, da ich langsam unter Termindruck gerate.

DANKE!

 

Alle Antworten

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 7 Juli 2010 09:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich kann dir nicht sagen, wie du das spezifische Problem löst, aber ich würde dir raten, die Emails direkt aus deinem VS / VB (??) Workflow zu senden. Macht die Wartung und Fehlerkorrektur hinterher einfach.

Das Senden aus einem VS-Workflow ist auch nicht so schwer. Du brauchst du Aktivität "SendEmail" der du einen entsprechenden Namen gibst (z.B. sendEmail). Wenn du diese in deinen Workflow intergriert hast ziehst du vor diese Aktivität eine z.B. Code-Aktivität. In dieser Code Aktivität kannst du dann die zu versendende Email zusammenbauen und zwar in dem du den Namen der "SendEmail"-Aktivität angibst und dann die Properties auswählst:

sendEmail.To = "EmailAdresse-Empfänger";
sendEmail.Subject = "Betreff";
send.Email.Body = "Inhalt";

usw... mehr musst du gar nicht machen.

Dann brauchst du dich nicht um zwei Workflows auf uunterschiedlichen Ebenen kümmern und solche Fehler treten nicht auf.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
216 Beiträge
Nachtschelm Als Antwort am 7 Juli 2010 10:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo C.Kaiser,

vielen Dank für die schnelle Antwort! Vorweg: Muss natürlich VS heißen, nicht VB. Hab es Mittlerweile korrigiert.

Ich habe mittlerweile auch mein Problem lösen können. Es bestand darin, dass ich den VS-Workflow eine andere Identität habe annehmen lassen.

Das geschieht über folgenden Code. Alles was sich innerhalb des {}-Paares abspielt, wird mit der Identität von IMPERSONATE_USER bewerkstelligt.

          SPUserToken utoken = workflowProperties.Web.AllUsers[IMPERSONATED_USER].UserToken;
          using (currentSite = new SPSite(workflowProperties.SiteUrl, utoken))
          {
             ...
           }

Um als IMPERSONATE_USER zu agieren, müssen allerdings auch die Objekte SPWeb, SPList und SPListitem, die man normalerweise aus den workflowProperties holt, neu instanziiert werden. Auf jeden Fall hatte ich zwei Site-Objekte und zwei Web-Objekte offen, worüber SharePoint wohl nicht so glücklich war. Ich habe den Identitätswechsel nun weggelassen und es funktioniert.

Anbei noch ein Beitrag von Andi Fandrich aus meinem anderen Beitrag (hab versehentlich zweimal gepostet). Er bringt das Problem genau auf den Punkt:

Nachtschelm:
ERROR: We might be creating and closing webs on different threads

 

Wenn die Fehlermeldung damit zu tun hat, dann sagt sie alles, was Du wissen mußt. Entweder Du arbeitest selbst mit verschiedenen Threads oder Du Dispose()d ein Web an der falschen Stelle (auch bei RunWithElevatedPriviledges) oder Du Dispose()d ein Web gar nicht und SharePoint tut es dann an der falschen Stelle.

Warum machst Du das nicht alles innerhalb eines WF? Mails versenden kannst Du mit einer MailActivity. Eventuell könnte man das Ganze auch innerhalb eines SPD-Workflows machen, aber ich weiß nicht, wie Deine Synchronisierung aussieht...

Viele Grüße
Andi
af (ät) evocom (Punkt) de
www.evocom.de

Viele Grüße
Nachtschelm