2009-07-09 5 views
0

Ich muss einen Benutzer in einer Liste finden, um die Eigenschaft "assignedto task" festzulegen, diese Informationen sind in einer Liste. So verwende ich diese Methode:warum stoppe mein Sharepoint-Workflow immer, wenn ich diesen Code verwende?

public static SPUser GetSPUser(SPListItem item, string key){ 
    SPFieldUser field = item.Fields[key] as SPFieldUser; 

    if (field != null) 
    { 
     SPFieldUserValue fieldValue = field.GetFieldValue(item[key].ToString()) as SPFieldUserValue; 
     if (fieldValue != null) 
     { 
      return fieldValue.User; 
     } 
    } 
    return null; 
} 

Das Problem ist, dass, wenn ich diese Methode verwenden oder diesen Teil des Codes, meinen Workflow Stopp ohne etwas zu sagen. Hier ein exemple von Code, wenn ich es verwenden:

using (SPSite site = new SPSite(adress_of_my_site)) 
{     
    using (SPWeb web = site.OpenWeb()) 
    { 
     SPList list = web.Lists["Acteurs du projet"]; 
     SPView view = cobj_ListeDesActeursDuProjet.DefaultView; 
     SPListItemCollection itemcollection = list.GetItems(view); 
     foreach (SPListItem item in itemcollection) 
     {      
      SPUser lobj_acteur = Utilities.GetSPUser(item,"acteur"); 
      // Dictionary<string,class> 
      ActeursDuProjet[item["Rôle"].ToString()] = 
       new ActeursDuProjet() 
       { 
       Login = lobj_acteur.LoginName, 
       Email = lobj_acteur.Email 
       }; 
     } 

    } 


} 

Wenn ich den Inhalt meiner foreach meinen Workflow weiterhin auch einen Kommentar ...

Wenn jemand eine Idee haben, wird es kühl sein.

Grüße, Loïc

edit: Problem im Code

+0

Haben Sie versucht, den Code zu debuggen? Schließen Sie Visual Studio einfach an den w3wp-Prozess an (kopieren Sie ggf. die Debug-PDB-Datei an den Speicherort, an dem die DLL mit dem obigen Code gespeichert ist (bin-Verzeichnis oder GAC) – Colin

+0

Ja, natürlich und kein Fehler ... – LoKtO

+0

Während der Workflow ausgeführt wird und kein Fehler auftritt Wie weiß man, dass es bei diesem bestimmten Loop-Inhalt stoppt? Es hört einfach auf zu laufen? – Colin

Antwort

1

Hier sind einige Tipps zur Fehlerbehebung, die helfen könnten:

ULS Protokolle

Alle Ausnahmen sollten hier im Detail gemeldet werden.

aktivieren Debugging für alle .NET-Code

Dies wird der Debugger führen zu brechen, wenn eine Ausnahme sowie Ihren Code in Sharepoint auftritt. Der Nachteil ist, dass der Debugger bei "normalen" Ausnahmen, die keine Nebenwirkungen verursachen, bricht. Also lass dich nicht irreführen!

Aktivieren: Wechseln Sie zu Debug, Ausnahmen und aktivieren Sie Common Language Runtime Exceptions. Gehen Sie auch zu Extras, Optionen, Debugging und deaktivieren Sie Nur Code aktivieren. Dann an w3wp.exe anhängen.

kommentierte Code

Sie können auch alle Ihre Code auskommentieren. Wenn der Workflow-Schritt fehlschlägt, wissen Sie, dass an anderer Stelle ein Problem aufgetreten ist. Wenn der Workflow-Schritt erfolgreich ist, starten Sie das Auskommentieren des Codes, bis er fehlschlägt - dann wissen Sie, wo Sie suchen müssen.

+0

nice :) Meine Klasse sind nicht als serializable gekennzeichnet, so habe ich eine serializationException Vor fünf Minuten versuche ich meinen Code kommentieren und ich fand, dass das Problem aus meinem Wörterbuch oder meiner Klasse kommen :) – LoKtO

+0

Großartig! Froh, dass ich helfen konnte :) –

0

Ich versuchte dies oben zu kommentieren, aber es formatiert nicht schön so ist es hier.

Es ist wahrscheinlich gut, aber das sieht mir fischig:

// Dictionary<string,class> 
ActeursDuProjet[item["Rôle"].ToString()] = 
    new ActeursDuProjet() 
    { 
    Login = lobj_acteur.LoginName, 
    Email = lobj_acteur.Email 
    }; 

Ich würde denken, dass es so etwas wie wäre:

// dictionary declared somewhere earlier 
Dictionary<string,ActeursDuProjet> roles = new Dictionary<string,ActeursDuProjet>(); 

// inside the foreach 
string role = item["Rôle"].ToString(); 
if (!roles.ContainsKey(role)) 
{ 
    ActeursDuProjet foo = new ActeursDuProjet(); 
    foo.Login = lobj_acteur.LoginName; 
    foo.Email = lobj_acteur.Email; 
    roles.Add(role, foo); 
} 
+0

yeah könnte es auch das sein :) ich benutze es einfach Objektinitialisierer aus 3.5 Framework für die Klasse. Aber das Problem scheint nicht darüber zu sein :) – LoKtO

+0

Nun, die Hauptsache, die ich sah, war "ActeursDuProjet [Element [" Rolle "]. ToString()]". Welche Sammlung ändert dies (es sieht aus wie es speichert ? in er etwas ActeursDuProjet genannt, die die gleichen Namen wie die Klasse sind) –

+0

mache ich einen Fehler meiner Wörterbuch Darsteller die Definition benannt ist: öffentlicher IDictionary cobj_ActeursDuProjet = new Dictionary (); Ich verwende dieses Dikton, um diese Liste zu speichern: http://img53.imageshack.us/img53/1817/problemesharepoint.jpg Ich möchte den Login-Namen (für asignedto Eigenschaften von Aufgaben) und die E-Mail des Benutzers, der ist im ersten Feld der Liste. – LoKtO