В Sharepoint 2007 AddList и AddListFromFeature отсутствуют столбцы шаблона и содержимое данных. - PullRequest
5 голосов
/ 16 июля 2009

Что я сделал

  • Внутри SharePoint я создал список на основе шаблона задач проекта
  • Я удалил большинство столбцов по умолчанию и добавил новые пользовательские столбцы
  • Я добавил данные в новом формате
  • Затем я сделал «Сохранить как шаблон» и решил сохранить шаблон с содержимым

Что работает

Теперь, когда я использую этот шаблон для создания нового Списка внутри SharePoint, он работает отлично. Пользовательские столбцы присутствуют, и все данные предварительно заполнены, как и ожидалось.

Что не работает

Однако, когда я использую методы AddList или AddListFromFeature , предоставляемые веб-службами SharePoint, создается новый список, но он просто основан на исходном шаблоне задач проекта с столбцы по умолчанию и нет данных !

Что я пробовал

  • Я попытался следовать предложению в статье из Этапа 2 , чтобы настроить пользовательский идентификатор шаблона, но это только помешало мне использовать шаблон вообще (больше не было в списке, когда я делал "Создать" ).
  • Я все еще пытаюсь выяснить, применима ли эта статья - похоже, это похожая проблема, но она применяется к сайтам вместо списков.
  • Я обнаружил, что у другого человека была такая же проблема около года назад.

Настройка системы

Работа с SharePoint 2007 (я думаю?), Использование PHP с NuSOAP для подключения. Соединение определенно работает, поскольку я добавил элементы в списки, создал списки и прочитал данные.

Примеры кода

Запрос - по шаблону метода Фазы 2 выше

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2034="http://tempuri.org"><SOAP-ENV:Body>
<AddListFromFeature xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    <listName>2Test Milestone Release</listName>
    <description>Testing this out</description>
    <featureID>{00BFEA71-513D-4CA0-96C2-6A47775C0119}</featureID>
    <templateID>151</templateID>
</AddListFromFeature></SOAP-ENV:Body></SOAP-ENV:Envelope>

Ответ - не удается из-за того, что templateID не распознается

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.</faultstring><detail><errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">Cannot complete this action.

Please try again.</errorstring><errorcode xmlns="http://schemas.microsoft.com/sharepoint/soap/">0x81072101</errorcode></detail></soap:Fault></soap:Body></soap:Envelope>

Я в тупике! Так что, если вы можете помочь - я был бы очень счастливым человеком! Заранее спасибо!

1 Ответ

1 голос
/ 19 января 2012

Я бы погнался, почему вы не можете создать список через интерфейс, во-первых, эти два вызова веб-службы, кажется, не включают важный параметр при создании из пользовательских шаблонов, давайте проанализируем строки запроса:

Новые задачи проекта (из коробки)

http://site/_layouts/new.aspx?FeatureId={00bfea71-513d-4ca0-96c2-6a47775c0119}&ListTemplate=150

Новые задачи проекта (сохраняются в галерее шаблонов списков)

http://site/_layouts/new.aspx?CustomTemplate=PT6.stp&FeatureId={00bfea71-513d-4ca0-96c2-6a47775c0119}&ListTemplate=150

Пользовательские задачи нового проекта (манифест.xml изменен на 151)

http://site/_layouts/new.aspx?CustomTemplate=PT6.stp&FeatureId={00bfea71-513d-4ca0-96c2-6a47775c0119}&ListTemplate=151

Они все работают, поэтому я предполагаю, что веб-служба запрещена для пользовательских шаблонов, или у нее есть какая-то секретная магия (обычная в определениях списков), поскольку указание только ListTemplate без явного CUSTOM не будет работать даже в пользовательском интерфейсе.

Если вы не можете обойтись с этим очевидным ограничением, мои предложения:

  1. .NET, обратите внимание, что в этом посте есть вуду в первом комментарии, если вы получите ту же ошибку
  2. Создайте IFRAME с http://site/_layouts/new.aspx?CustomTemplate=PT6.stp&FeatureId={00bfea71-513d-4ca0-96c2-6a47775c0119}&ListTemplate=150 в качестве источника и заполните поля, используя javascript, а затем нажмите кнопку ОК, сделайте некоторый переход при полной загрузке страницы, и он даже будет хорошо выглядеть.

Способ 2 должен выполняться из одного домена, если вы не запускаете свой PHP из того же домена (маловероятно), вам нужно создать страницу на сайте SharePoint, чтобы содержать этот взлом, это может быть так же просто, как Страница веб-частей с веб-частью редактора контента. Вы читаете некоторые параметры строки запроса, размещаете их в полях, нажимаете кнопку ОК и ждете, пока страница изменится, чтобы вы могли перенаправить на страницу «успеха».

Редактировать: мне стало любопытно, и я посмотрел на источник New.aspx, у него есть этот маленький фрагмент (bIsCustomTemplate = strCustomTemplate! = Null, strCustomTemplate = querystring "CustomTemplate"):

<% if (bIsCustomTemplate) { %>
<input id="onetidCustomTemplate" type="Hidden" name="CustomTemplate" value=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(strCustomTemplate),Response.Output);%> />
<% } %>

Я посмотрел на дизассемблированный код, но я не думаю, что мы можем опубликовать его здесь, но он только доказывает, что пользовательский интерфейс создает его из сообщения (Request.Form) и ищет параметр CustomTemplate, а веб-служба имеет только те методы, в которых вы не можете указать пользовательский шаблон.

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