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.




Visual Studio: Workflow und Aufgaben erstellen

Geprüfte Antwort Dieser Beitrag hat 4 Antworten

Ohne Rang
7 Beiträge
Yuri Li erstellt 2 Apr. 2012 10:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Hallo :)
Ich habe eine benutzerdefinierte Liste bei der manuell ein Workflow ausgelöst wird. Wenn dieser Workflow startet, soll in der Liste "Aufgaben" eine Aufgabe erstellt werden.
Im Prinzip einfach und mit SharePoint Designer wahrscheinlich schnell umsetzbar. Aber ich mach das Ganze in Visual Studio, weil ich bei meinem Workflow vor der Aufgabenerstellung  einmal alle Elemente aus der benutzerdefinierten Liste abfrage.
Men Problem ist nun, dass er die Aufgabe zwar beginnt zu erstellen, aber sobald er damit fertig ist, bricht er ab. DIe Aufgabe wurde nicht erstellt und als Status steht: Fehler beim Start (Vorgang wird wiederholt)
 
Der Workflow Design in Visual Studio sieht folgendermaßen aus:
onWorkflowActivated -> createTask -> whileActivity(onTaskChanged) -> completeTask
Der Quelltext für createTask lautet so:
 
public Guid createTask1_TaskId1 = default(System.Guid);
public SPWorkflowTaskProperties createTask1_TaskProperties1 = new SPWorkflowTaskProperties();
 
private void createTask(object sender, EventArgs e)
{
   createTask1.TaskId = Guid.NewGuid();
   createTask1_TaskProperties1 = new SPWorkflowTaskProperties();
   createTask1_TaskProperties1.AssignedTo = "server//user";
   createTask1_TaskProperties1.Title = "Test";
 
   createTask1.TaskProperties = createTask1_TaskProperties1;
}
 
Bei AssignedTo steht natürlich der richtige Wert drin.
Noch ein paar Nebeninfos:
Ich arbeite mit VisualStudio 2010 Ultimate und Sharepoint 2010. Programmiersprache ist c#.
Der Workflow ist ein sequenzieller Workflow der einer benutzerdefinierten Liste zugeordnet ist, die Workflowaufgabenliste ist "Aufgaben" zugeordnet.
Habe ich etwas falsch bzw vergessen aufzuschreiben in meinem Programm oder habe ich ein Denkfehler?
Vielen Dank für die Anwtorten
Yuri Li

Alle Antworten

Ohne Rang
508 Beiträge
Tom Scheuermann Als Antwort am 4 Apr. 2012 07:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi !

Fliegt irgendwo ein Exception ? Wenn ja, was steht im StackTrace ?
Evtl. findest Du hinweise in den Tracelogs des SharePoints unter "C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\LOGS" ?

Für mich sieht das auf den ersten Blick nach einem Problem mit dem PeoplePicker aus - also ein Problem beim zuweisen des Feldes AssignedTo.

Siehe hierzu http://social.msdn.microsoft.com/Forums/eu/sharepointdevelopment/thread/efe51de8-d7f4-4045-919c-ebed974d968d

Hope that helps ...

Greets

Tom

ts (-at-) computer-kreativ.de

Microsoft Certified IT Professional: SharePoint 2010 Administration
Microsoft Certified Technoligie Specialist: SharePoint 2010 Configuring

Ohne Rang
7 Beiträge
Yuri Li Als Antwort am 4 Apr. 2012 08:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Hi,
Erstmal vielen Dank für die Antwort.
 
Also, wenn ich um den Code selber eine try-catch Anweisung mache, springt er nicht ins catch. Also rein theoretisch ist der Code, sowie er da steht richtig.
Sobald er aber den Code zu Ende ausgeführt hat und aus der createTask-Funktion wieder rausgeht, kommt folgende Exception: Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in System.Workflow.Runtime.dll aufgetreten.
 
Ich habe mir daraufhin nochmal den Link angeschaut, den Du geschrieben hast und habe mein Quellcode folgendermaßen geändert:
 
using(SPSite site = new SPSite("hier steht die original URL"))
{
  using (SPWeb web = site.OpenWeb())
  {
     SPList list = web.Lists["Aufgaben"];
     SPListItem taskItem = list.Items.Add();
     taskItem[SPBuiltInFieldId.Title] = "Test";
     taskItem[SPBuiltInFieldId.AssignedTo] = "server\\user"; (natürlich mit richtigen Werten)
  }
}
 
Aber auch hier kam am Ende die gleiche Exception wie oben, nachdem er die Funktion verlassen hat.
Ich habe die beiden Quellcodes auch ohne .AssignedTo ausprobiert: selbe Exception wie oben.
 
Bzgl den Log-files. Ich habe es schon beim erstenmal durchgesehen, in der Hoffnung was auffälliges zu finden. Aber dem war nicht so. Mir ist nichts auffälliges ins Auge gesprungen, aber vielleicht habe ich auch einfach nach den falschen Schlagwörtern gesucht?
 
Bis Dann
Yuri Li
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 4 Apr. 2012 14:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Yuri Li"]taskItem[SPBuiltInFieldId.AssignedTo] = "server\\user";[/quote]

Ein Benutzerfeld erwartet als Wert ein SPFieldUserValue oder zumindest die ID eines Benutzers. Nur der Loginname reicht nicht.

[quote user="Yuri Li"]SPListItem taskItem = list.Items.Add();[/quote]

Das solltest Du niemals tun. SPList.Items ruft immer (bei jedem Aufruf!) alle Elemente der Liste ab. Benutze lieber SPList.AddItem().

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
Yuri Li Als Antwort am 4 Apr. 2012 16:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut
Ah okay, dass wusste ich nicht. Vielen Dank.
 
Ich habe aber jetzt mein Problem gelöst, nachdem ich der Exception ein wenig auf den Zahn gefühlt habe.
Der CorrelationToken war die Ursache. Ich hatte ursprünglich bei allen "workflowToken" als CorrelationToken. Ich brauchte aber für die Task-Aktivitäten (also createTask, onTaskChanged, completeTask) eine anderen correlationToken.
Nachdem ich dies geändert habe, lief alles reibungslos ab :)
 
Vielen Dank aber für eure Hilfe. Jetzt werde ich mich mit dem AssignedTo auseinandersetzen ;)
Bis Dann
Yuri Li