2010-07-28 24 views
0

Je ne reçois aucune exception, mais le code ci-dessous ne fonctionne tout simplement pas. Des idées?Impossible de mettre à jour un élément de liste à partir d'une tâche de workflow en C#

SPSecurity.RunWithElevatedPrivileges(delegate() {    
     using (SPWeb web = this.workflowProperties.Web) { 
     try { 
      SPListItem item = web.Lists["NewHireFormsLibrary"].Items[workflowProperties.ItemId - 1]; 
      item["Field 1"] = "Gotcha!!!"; 
      item.Update(); 

      LogHistory("Information", "Workflow indexing complete. " + item["Field 1"], ""); 
     } 
     catch (Exception ex) { 
      LogHistory("Error", ex.Message, ex.StackTrace); 
     } 
    } 
)}; 
+0

Ok, juste une mise à jour. Cela fonctionne si j'applique l'article à un champ non-infopath. Comment puis-je mettre à jour un champ infopath? –

Répondre

2

On dirait que vous n'êtes pas référencer le champ par son nom interne, ce qui est la façon dont vous avez à des champs de référence lors de leur accès à indexeur du SPListItem. Essayez quelque chose comme

item["Field_x0020_1"] = "Gotcha!!!"; 

et devraient travailler. Notez que les noms internes ne contiennent jamais d'espaces et sont remplacés par leur chaîne de caractères hexadécimaux comme ci-dessus.

+0

Je vais essayer, mais comment savoir quel est le nom interne? –

+0

Ça n'a pas marché, en fait. Est-ce important que c'est une bibliothèque de documents de formulaire infopath? –

+0

Normalement, je viens d'écrire une application rapide pour parcourir tous les champs d'un élément de liste donné et imprimer SPField.InternalName. En option, vous pouvez obtenir chaque ID de champ (Guid) et l'utiliser à la place du nom interne. Vos champs infopath peuvent avoir une sorte de préfixe ou quelque chose d'ajouté au nom interne (bien que je ne suis pas très familier avec l'intégration d'infopath, donc je ne peux pas dire avec certitude). –