Извлечение полезной информации из поля MOSS 2007 Person или Group, выгруженного через пакет SSIS - PullRequest
1 голос
/ 01 марта 2011

У меня определен список, в котором в качестве одного из полей (фактически нескольких полей) есть средство выбора Персона или Группа. Я извлекаю весь список с помощью пакета служб SSIS, используя дамп источника данных списка SharePoint, дамп в таблицу SQL. Поле выбора PoG выводит свои данные следующим образом (каждая строка представляет собой один элемент данных):

163;#Jones, Danny S.
179;#Smith, Sandra M.
164;#Thomas, Rob Y.
161;#Ross, Danny L.
2064;#Smith, Michael D.

Я бы предположил, что число, предшествующее; # - это некий идентификатор пользователя, который SharePoint хранит у пользователя, а не что-то полезное, например, руководство по ADS. Могу ли я использовать SSIS для извлечения профилей пользователей SharePoint, чтобы сопоставить отображаемый идентификатор идентификатору ADS guid или имени пользователя ADS, и если да, то как? Я пытался использовать задачу веб-службы в SSIS для вызова службы профилей пользователей (http://www.my.site/_vti_bin/UserProfileService.asmx),, но я получаю сообщение об ошибке, что WSDL является неправильной версией.

Ответы [ 3 ]

1 голос
/ 02 марта 2011

К сожалению, идентификатор, отображаемый в полях сайта, является локальным для списка пользователей этого сайта.

Каждый пользователь уникально идентифицируется сайтом и направляющими списков вместе с полем идентификатора, но идентификатор не является уникальным среди списков пользователей и поэтому не может использоваться для чего-либо, кроме индексации в этой таблице.

Другая проблема, связанная с этими данными, заключается в том, что отображение профиля регулярно обновляется одним из заданий древесины службы UserProfileSynchronization.Я сталкивался с случаями, когда отображаемое имя пользователя не обновлялось правильно и ему было присвоено имя учетной записи из Active Directory.

Чтобы получить представление о том, что происходит под капотом, взгляните натаблица All_UserData в базе данных контента.

Вкратце

Только именная часть поля может использоваться значимым образом, и даже это не совсем надежно, но, возможно, достаточно хорошо.

0 голосов
/ 02 марта 2011

Ответ Ната близок.Это на самом деле таблица UserInfo.Числа соответствуют столбцу tp_ID этой таблицы.К сожалению, я до сих пор не могу понять, как получить эту информацию с помощью служб SSIS, поэтому я прибегаю к написанию консольного приложения, которое извлекает данные таблицы через веб-сервис Sharepoint, выгружает их в таблицу базы данных и планирует их с помощью задачи Windows.Планировщик.Кроме того, из-за того, как работает Sharepoint, каждое корневое семейство сайтов имеет разные идентификаторы для каждого человека, поэтому мне нужно будет выполнить отдельные операции для каждого корневого семейства сайтов.Вот метод, который я использую:

    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;
    }

Аргумент метода будет выглядеть примерно так: "http://www.my.site/_vti_bin/lists.asmx". Конфигурация моего приложения, которая устанавливает привязку и конечную точку:

<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>

Обратите внимание, чтоЯ увеличил // binding / @ maxBufferSize и // binding / @ maxReceivedMessageSize со значения по умолчанию 65536 до 5000000. У нас есть около 3000 записей, которые могут быть возвращены, и размер по умолчанию не был достаточно большим.все внутренние вызовы, я не беспокоюсь о задержке в сети. Другие изменения привязки по умолчанию находятся в элементе // security, в частности в атрибутах @mode и // transport / @ clientCredentialType.

Когда вы получаетеXML обратно, номер (хранится в поле PoG) находится в атрибуте // z: row / @ ows_ID, а его соответствующий логин ADS - в атрибуте // z: row / @ ows_Name. Вы также получаете адрес электронной почты обратнов атрибуте // z: row / @ ows_EMail.

Надеюсь, это поможет другим решить эту проблему!

0 голосов
/ 02 марта 2011

Можно ли изменить поля, экспортируемые из SharePoint? Можете ли вы добавить поле рассчитанного человека на основе этого поля? Если это так, то вы можете сделать так, чтобы в этом поле «Персона» хранилась другая форма данных о персонале, например, имя пользователя или адрес электронной почты, которые гораздо более полезны при взаимодействии с другими системами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...