Benjamins Blog

Benjamin Wegner über Weisheiten, SharePoint und IT Zeugs

Benjamins Blog header image 2

Infopath XML im Eventhandler oder Workflow verändern

November 3rd, 2008 ·

Im Eventhandler oder in einem Workflow kann man das XML eines Infopath Dokuments verändern. Dazu liest man es wie folgt ein:


   1:  XmlDocument doc = new XmlDocument();
   2:  SPFile file = properties.ListItem.File;
   3:   
   4:  Stream stream = new MemoryStream(file.OpenBinary());
   5:              
   6:  doc.PreserveWhitespace = true;
   7:  doc.Load(stream);
   8:             
   9:  string tns = doc.DocumentElement.GetNamespaceOfPrefix(„my“);
  10:   
  11:  nsmgr = new XmlNamespaceManager(doc.NameTable);
  12:  nsmgr.AddNamespace(„my“, tns);

 


Mit dem XmlDocument kann man dann über die Nodes iterieren oder auch Werte ändern.


Wichtig ist Zeile 6 – ohne diese kann es zu folgender Fehlermeldung beim Öffnen des Dokuments in FormsServices kommen:


„Das Formular wurde geschlossen“


Was im Log so aussieht:

The form template failed to load.[…] Type: SchemaValidationException, Exception Message: Schema validation found non-datatype errors.)    […]
 

Zum Schluss dann noch das Dokument wegschreiben:


   1:  Stream stream = new MemoryStream();
   2:  XmlTextWriter xw = new XmlTextWriter(stream, Encoding.UTF8);
   3:  xw.Formatting = Formatting.Indented;
   4:  doc.Save(xw);
   5:   
   6:  properties.ListItem.File.SaveBinary(stream);
   7:  properties.ListItem.File.Update();

Tags: Allgemein

0 Antworten bis jetzt ↓

  • Es gibt keine Kommentare bis jetzt...Trete Sachen weg, die vom Formular runterfallen.

Hinterlasse ein Kommentar

*