2010-07-23 21 views
1

Est-il possible de convertir la chaîne suivante en un objet API Sharepoint tel que SPUser ou SPUserValueField? (Sans l'analyser)xmlns vers l'objet API sharepoint

"<my:Person xmlns:my=\"http://schemas.microsoft.com/office/infopath/2003/myXSD\"><my:DisplayName>devadmin</my:DisplayName><my:AccountId>GLINTT\\devadmin</my:AccountId><my:AccountType>User</my:AccountType></my:Person>" 

Merci, David Esteves

Répondre

0

Oui, l'assembly Microsoft.Office.Workflow.Utility a Contact.ToContacts qui désérialise Person XML en un tableau de Contact instances.

http://msdn.microsoft.com/en-us/library/ms553588

-Oisin

+0

Merci, c'était exactement ce que je cherchais. –

+0

Oui, je suis tombé dessus après environ deux ans. Tellement de choses cachées dans les API. – x0n

0

Résolu :)

(juste un exemple) La fonction suivante récupère la SPUser d'une personne:

protected SPUser GetSPUserFromExtendedPropertiesDelegateTo(string xmnls_node) 
    { 

     StringBuilder oBuilder = new StringBuilder(); 
     System.IO.StringWriter oStringWriter = new System.IO.StringWriter(oBuilder); 
     System.Xml.XmlTextWriter oXmlWriter = new System.Xml.XmlTextWriter(oStringWriter); 
     oXmlWriter.Formatting = System.Xml.Formatting.Indented; 

     byte[] byteArray = Encoding.ASCII.GetBytes(xmnls_node); 
     MemoryStream stream = new MemoryStream(byteArray); 
     System.IO.Stream s = (Stream)stream; 

     System.IO.StreamReader _xmlFile = new System.IO.StreamReader(s); 

     string _content = _xmlFile.ReadToEnd(); 
     System.Xml.XmlDocument _doc = new System.Xml.XmlDocument(); 
     _doc.LoadXml(_content); 

     System.Xml.XPath.XPathNavigator navigator = _doc.CreateNavigator(); 
     System.Xml.XmlNamespaceManager manager = new System.Xml.XmlNamespaceManager(navigator.NameTable); 

     manager.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD"); 

     System.Xml.XmlNode _node = _doc.SelectSingleNode("/my:Person/my:AccountId", manager); 

     if (_node != null) 
     { 

      return this.workflowProperties.Web.EnsureUser(_node.InnerText.ToString()); 

     } 

     return null; 


    } 
+0

Fonction mise à jour pour récupérer un objet SPUser au lieu d'une chaîne avec le AccountId. Quoi qu'il en soit, la bonne façon d'y parvenir est d'utiliser la fonction Oisin affichée. –