2017-07-26 6 views
0

Je rencontre actuellement un petit problème et je ne suis pas tout à fait sûr de la résoudre. La situation est la suivante. Dans SharePoint 2013, j'utilise l'API REST pour mettre à jour et créer des éléments de liste.SharePoint 2013 - Ajouter un utilisateur à l'UserInformationList

S'il existe un ppl-Picker, les valeurs sont les ID des utilisateurs dans UserInformationList. Jusqu'ici tout va bien. Mais maintenant, voici ma question.

Cela ne fonctionne pas pour les utilisateurs qui ne figurent pas encore dans UserInformationList. SharePoint dans nativc semble en quelque sorte faire des requêtes POST lorsque je suis à la recherche d'un utilisateur qui n'existe pas encore. Le premier semble chercher les utilisateurs d'une autre liste étant donné la chaîne entrée jusqu'ici dans le sélecteur ppl. Ce corps ressemble à ceci

<?xml version="1.0" encoding="UTF-8"?> 
<Request xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009" SchemaVersion="15.0.0.0" LibraryVersion="15.0.0.0" ApplicationName="Javascript Library"> 
    <Actions> 
     <StaticMethod TypeId="{xxxxxxxxxxxxx}" Name="ClientPeoplePickerSearchUser" Id="5"> 
     <Parameters> 
      <Parameter TypeId="{xxxxxxxxxxxxx}"> 
       <Property Name="AllowEmailAddresses" Type="Boolean">false</Property> 
       <Property Name="AllowMultipleEntities" Type="Boolean">true</Property> 
       <Property Name="AllUrlZones" Type="Boolean">false</Property> 
       <Property Name="EnabledClaimProviders" Type="String" /> 
       <Property Name="ForceClaims" Type="Boolean">false</Property> 
       <Property Name="MaximumEntitySuggestions" Type="Number">30</Property> 
       <Property Name="PrincipalSource" Type="Number">15</Property> 
       <Property Name="PrincipalType" Type="Number">1</Property> 
       <Property Name="QueryString" Type="String">jack</Property> 
       <Property Name="Required" Type="Boolean">false</Property> 
       <Property Name="SharePointGroupID" Type="Number">0</Property> 
       <Property Name="UrlZone" Type="Number">0</Property> 
       <Property Name="UrlZoneSpecified" Type="Boolean">false</Property> 
       <Property Name="Web" Type="Null" /> 
       <Property Name="WebApplicationID" Type="String">{00000000-0000-0000-0000-000000000000}</Property> 
      </Parameter> 
     </Parameters> 
     </StaticMethod> 
    </Actions> 
    <ObjectPaths /> 
</Request> 

Il obtient alors un retour JSON avec les informations utilisateur. Quand j'envoie maintenant la forme d'un second POST-demande est faite contenant essentiellement toute la forme d'information à la recherche un peu comme ce

<?xml version="1.0" encoding="UTF-8"?> 
<Request xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009" SchemaVersion="15.0.0.0" LibraryVersion="15.0.0.0" ApplicationName="Javascript Library"> 
    <Actions> 
     <ObjectPath Id="3" ObjectPathId="2" /> 
     <ObjectPath Id="5" ObjectPathId="4" /> 
     <ObjectPath Id="7" ObjectPathId="6" /> 
     <ObjectPath Id="9" ObjectPathId="8" /> 
     <ObjectPath Id="11" ObjectPathId="10" /> 
     <ExceptionHandlingScopeSimple Id="12"> 
     <Method Name="ValidateUpdateListItem" Id="14" ObjectPathId="10"> 
      <Parameters> 
       <Parameter Type="Array"> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">Title</Property> 
        <Property Name="FieldValue" Type="String">___test</Property> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">Someone</Property> 
        <Property Name="FieldValue" Type="String" /> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">LookupField</Property> 
        <Property Name="FieldValue" Type="String" /> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">SomeTextField</Property> 
        <Property Name="FieldValue" Type="String" /> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">APerson</Property> 
        <Property Name="FieldValue" Type="String">[{"Key":"i:0#.w|dom\\xxxxxx","Description":"DOM\\xxxxx","DisplayText":"Some, Name","EntityType":"User","ProviderDisplayName":"Active Directory","ProviderName":"AD","IsResolved":true,"EntityData":{"Title":"","MobilePhone":"","SIPAddress":"[email protected]","Department":"XX-XX","Email":"[email protected]"},"MultipleMatches":[],"AutoFillKey":"i:0#.w|dom\\xxxxxxx","AutoFillDisplayText":"Person, Some","AutoFillSubDisplayText":"","AutoFillTitleText":"SomeString","DomainText":"some.domain.net","Resolved":true,"LocalSearchTerm":"some"}]</Property> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">ContentType</Property> 
        <Property Name="FieldValue" Type="String">Element</Property> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
        <Object TypeId="{xxxxxxxxxxx}"> 
        <Property Name="ErrorMessage" Type="Null" /> 
        <Property Name="FieldName" Type="String">ContentTypeId</Property> 
        <Property Name="FieldValue" Type="String">0x010020785F18D738D74797A0C6B07438E69E</Property> 
        <Property Name="HasException" Type="Boolean">false</Property> 
        </Object> 
       </Parameter> 
       <Parameter Type="Boolean">false</Parameter> 
       <Parameter Type="Null" /> 
      </Parameters> 
     </Method> 
     </ExceptionHandlingScopeSimple> 
    </Actions> 
    <ObjectPaths> 
     <StaticProperty Id="2" TypeId="{xxxxxxxxxxx}" Name="Current" /> 
     <Property Id="4" ParentId="2" Name="Web" /> 
     <Property Id="6" ParentId="4" Name="Lists" /> 
     <Method Id="8" ParentId="6" Name="GetById"> 
     <Parameters> 
      <Parameter Type="String">xxxxxxxxxxx</Parameter> 
     </Parameters> 
     </Method> 
     <Method Id="10" ParentId="8" Name="AddItem"> 
     <Parameters> 
      <Parameter TypeId="{xxxxxxxxxxx}"> 
       <Property Name="FolderUrl" Type="String">/sites/site/lists/theList</Property> 
       <Property Name="LeafName" Type="Null" /> 
       <Property Name="UnderlyingObjectType" Type="Number">0</Property> 
      </Parameter> 
     </Parameters> 
     </Method> 
    </ObjectPaths> 
</Request> 

Ce second poste aussi semble en quelque sorte à créer l'utilisateur dans le UserInformationList. Donc, ma question est.

Existe-t-il un moyen de créer les utilisateurs qui n'existent pas encore dans UserInformationList et de récupérer leurs ID après leur création?

Comme je n'ai développé que SharePoint sur le front-end, je ne connais pas très bien son architecture. Serait génial si quelqu'un d'entre vous pourrait m'aider ici

Répondre

1

Vous pouvez appeler la méthode EnsureUser sur le web qui va créer l'utilisateur, si elle n'existe pas, et retourner son ID.

+0

Merci. Je vais essayer de travailler dessus et revenir à la façon dont ça s'est passé;) – Chris

+0

Une chose qui serait encore ouverte. Depuis le People-Picker, je récupère seulement le UserLogin. Avec EnsureUser je peux créer un nouvel utilisateur, mais toujours un problème est, que je n'ai pas le reste de ses informations comme le département, Tilte etc. Y at-il également une partie dans cette API pour obtenir ce genre de choses? Je suppose que je dois imiter la première requête POST, mais avec le login pour obtenir une réponse unique. Je préférerais simplement une méthode/web/_api en essayant de reconstruire cette requête avec un corps xml où je ne suis pas sûr que la moitié de l'entrée signifie – Chris

+0

Il semble qu'une fois qu'un utilisateur est ajouté au sélecteur ppl, ils sont en l'Active Directory. Je devine maintenant que je dois trouver un moyen d'obtenir les informations d'utilisateurs à partir de Active Directory avec le nom de connexion donné – Chris