# Monday, November 03, 2008
« Olympia Schwimmhalle München | Main | TechEd EMEA 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();