Я бы погнался, почему вы не можете создать список через интерфейс, во-первых, эти два вызова веб-службы, кажется, не включают важный параметр при создании из пользовательских шаблонов, давайте проанализируем строки запроса:
Новые задачи проекта (из коробки)
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 не будет работать даже в пользовательском интерфейсе.
Если вы не можете обойтись с этим очевидным ограничением, мои предложения:
- .NET, обратите внимание, что в этом посте есть вуду в первом комментарии, если вы получите ту же ошибку
- Создайте 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, а веб-служба имеет только те методы, в которых вы не можете указать пользовательский шаблон.