2011-03-18 5 views
2

J'ai une page qui doit récupérer le département pour l'utilisateur connecté. Idéalement, j'aimerais pouvoir le faire via une requête JavaScript SOAP CAML. J'ai l'id de l'utilisateur (que je suppose assumant le double comme le GUID), ainsi il semble juste une question de récupérer la rangée qui correspond à l'identification. Je cherche à utiliser la fonction 'GetUserProfileByIndex' ou 'GetUserProfileByGuid' dans SOAP, mais je n'arrive pas à trouver de documentation solide ou d'exemples décents les utilisant. J'espère faire quelque chose comme ça dans JavaScript - (ce qui ne fonctionne pas):SharePoint obtenir l'attribut utilisateur actuel

var userId = 194; 
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
    <soapenv:Body> \ 
     <GetUserProfileByIndex xmlns='http://microsoft.com/webservices/SharePointPortalServer/UserProfileService'> \ 
      <index>userId</index> \ 
     </GetUserProfileByIndex > \ 
    </soapenv:Body> \ 
</soapenv:Envelope>"; 

Répondre

4

Je vous recommande de vérifier la bibliothèque jQuery pour SharePoint 2007 et 2010 ont appelé SPServices. $().SPServices.SPGetCurrentUser peut récupérer le Ministère dans un 4 lignes Effecient de code:

var thisDepartment = $().SPServices.SPGetCurrentUser({ 
fieldName: "Department", 
debug: false 
}); 
+0

Je regardais cette bibliothèque jQuery et cette fonction, mais cela ne fonctionnerait pas dans ma situation parce que: 1) Je suis ne pas utiliser un type de compte qui donne la permission d'afficher la page de profil (bien que les modifications de permissions puissent résoudre ce problème) 2) Je tire une valeur de code départemental d'une colonne que nous avons ajoutée (qui pourrait probablement être ajoutée à la page de profil) et 3) la méthode qu'il utilise pour récupérer les informations de profil utilisateur n'est pas aussi propre que je le souhaite - cela fonctionne en chargeant la page et puis "" gratte "les valeurs de la page en fonction du nom de champ interne '. –

+0

@Eric Cela a du sens. J'adore ta réponse parce que tu montres la méthode de la force brute que tant de gens ont tendance à éviter. Oui, votre code contient beaucoup plus de lignes, mais le travail est fait! –

3

Je ne l'ai jamais répondu à ma propre question, mais je réussi à trouver une solution simple. Voici comment je suis allé à ce sujet

  1. Lorsqu'un utilisateur est connecté, il y a une variable globale JavaScript qui comprend que l'ID de l'utilisateur, - __spUserId
  2. La liste des profils d'utilisateur est accessible via une requête CAML via SOAP, il s'intitule 'User Information List'.
  3. Lors de l'accès à cette liste, vous devez définir le site de niveau supérieur pour qu'il pointe sur _catalogs au lieu de listes (ou quoi que ce soit exactement). Vous faites cela en ajoutant l'élément _catalogs \
  4. Comme il accède à la liste des profils d'utilisateur sous la forme d'une liste et non par une fonction du profil utilisateur, définissez le type de requête (?) À « GetListItems »

Dans l'ensemble, ici est l'appel SOAP et CAML requête

$(document).ready(function() { 
    var soapEnv = 
     "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
      <soapenv:Body> \ 
       <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
        <listName>User Information List</listName> \ 
        <topLevelSite>_catalogs</topLevelSite> \ 
        <query> \ 
         <Query> \ 
          <Where> \ 
           <Contains> \ 
            <FieldRef Name='ID' /> \ 
             <Value Type='Text'>"+_spUserId+"</Value> \ 
           </Contains> \ 
          </Where> \ 
         </Query> \ 
        </query> \ 
        <viewFields> \ 
         <ViewFields> \ 
          <FieldRef Name='Name' /> \ 
          <FieldRef Name='Department' /> \ 
          <FieldRef Name='ID' /> \ 
         </ViewFields> \ 
        </viewFields> \ 
        <query> \ 
         <Query /> \ 
        </query> \ 
       </GetListItems> \ 
      </soapenv:Body> \ 
     </soapenv:Envelope>"; 

    $.ajax({ 
     url: "/_vti_bin/Lists.asmx", 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     complete: processResult, 
     contentType: "text/xml; charset=\"utf-8\"" 
    }); 
}); 
+0

s'il vous plaît marquer cela comme une réponse parce que son easyer puis pour les autres de trouver une solution aux problèmes communs. http://blog.stackoverflow.com/2009/01/accept-your-own-answers/ –

Questions connexes