La réponse de Nat est proche. C'est en fait la table UserInfo. Les nombres correspondent à la colonne tp_ID de cette table. Malheureusement, je n'arrive toujours pas à comprendre comment extraire ces informations à l'aide de SSIS. J'utilise donc une application de console qui extrait les données de la table via le service Web Sharepoint et les dépose dans une table de base de données. Planificateur. De plus, en raison du fonctionnement de Sharepoint, chaque collection de sites racine a des ID différents pour chaque personne. Je dois donc effectuer des extractions distinctes pour chaque collection de sites racine. Voici la méthode que je utilise:
private static XElement GetUserInfo(string siteCollectionListsSvc)
{
SharepointListsSvc.ListsSoapClient ws = new SharepointListsSvc.ListsSoapClient();
ws.Endpoint.Address = new System.ServiceModel.EndpointAddress(siteCollectionListsSvc);
ws.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
ws.ClientCredentials.Windows.AllowNtlm = true;
ws.ClientCredentials.Windows.ClientCredential = (System.Net.NetworkCredential)System.Net.CredentialCache.DefaultCredentials;
XElement userInfo = ws.GetListItems("UserInfo", String.Empty, null, null, "4000", null, null);
return userInfo;
}
L'argument de la méthode serait quelque chose comme « http://www.my.site/_vti_bin/lists.asmx ». Ma config application qui met en place la liaison et le point final:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ListsSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="5000000" maxBufferPoolSize="524288" maxReceivedMessageSize="5000000"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.my.site/_vti_bin/lists.asmx"
binding="basicHttpBinding" bindingConfiguration="ListsSoap"
contract="SharepointListsSvc.ListsSoap" name="ListsSoap" />
</client>
</system.serviceModel>
</configuration>
Notez que j'augmenté la // liant/@ // MaxBufferSize et la liaison/@ maxReceivedMessageSize de la valeur par défaut de 65536 à 5000000. Nous avons environ 3000 enregistrements qui pourraient être retournés, et la taille par défaut n'était pas assez grande. Comme ce sont tous des appels internes, je ne m'inquiète pas du décalage réseau. Les autres modifications de la liaison par défaut sont dans l'élément de sécurité //, en particulier les attributs @mode et // transport/@ clientCredentialType.Lorsque vous récupérez le code XML, le numéro (stocké dans le champ PoG) figure dans l'attribut // z: row/@ ows_ID et son identifiant ADS correspondant se trouve dans l'attribut // z: row/@ ows_Name. . Vous récupérez également l'adresse e-mail dans l'attribut // z: row/@ ows_EMail.
Espérons que cela aidera les autres à traverser le même problème!
La partie nom n'est pas utile dans mon cas. C'est pour un employeur avec environ 3000 employés - devinez combien de Mike Smiths nous avons. Je comprends que les identifiants peuvent changer au fil du temps - tout ce qui me tient à cœur est de pouvoir tirer une copie de la table d'utilisateur qui est utilisée au moment où je tire la liste d'origine. Je peux exécuter toutes les jointures nécessaires après avoir obtenu des copies locales des deux tables. – minameismud