Веб-службы SharePoint - Обновление поля ContentType Обязательное свойство?

Я пытался программно воспроизвести поведение редактирования свойств поля Content Type на экране управления сайтом SharePoint и безуспешно выбирая переключатель «Required», используя метод UpdateContentType веб-службы WSS 3.0 Webs.asmx.

Первой трудностью была проблема с документацией MSDN, в которой указанные поля должны быть типа FieldRef, хотя на самом деле они должны иметь тип поля (ссылка). Добавление полей и удаление полей работает нормально после исправления, но обновление полей, похоже, вообще не работает. (Следует также отметить, что я выполнил рекомендацию по предыдущей ссылке использовать Method="2" для обновления полей, но это ничего не меняет, и использование значений метода, отличных от 1 для добавления или отличных от 3 для удаления, также работает правильно).

Вот вызов веб-службы (слегка измененный строками вместо объектов XmlNode для удобства чтения):

SharePointWebServices.Webs webService = new SharePointWebServices.Webs();
webService.Url = "http://mysharepointserver/site";
webService.UseDefaultCredentials = true;

webService.UpdateContentType(
    @"0x01005A089D9EC8A382458FB1F6C72096D52A", 
    @"<ContentType />", 
    @"<Fields />",
    @"<Fields><Method ID=""1""><Field Name=""SomeField"" ID=""{8a4803c4-6545-4a7a-804d-237eebff0ce3}"" Required=""TRUE"" Hidden=""FALSE"" ReadOnly=""FALSE"" PITarget="""" PIAttribute="""" PrimaryPIAttribute="""" Aggregation="""" Node="""" /></Method></Fields>",
    @"<Fields />");

После звонка поле по-прежнему Обязательное = "ЛОЖЬ".

Быстрый просмотр сборки stssoap.dll показывает, что свойство «Required» явно игнорируется в процессе обновления. Это нормальное поведение? Если да, то какой метод рекомендуется для программного изменения поля «Обязательное» из клиентского кода (не выполняется на сервере SharePoint)?

Любая помощь будет принята с благодарностью.


person CMerat    schedule 04.08.2009    source источник


Ответы (1)


Я исследовал это и нашел то же самое. Я также безуспешно пытался добавить атрибут Cmd="Update" к элементу Method. Этот пример использования UpdateContentType также оказался полезным.

Я не верю, что вы сможете сделать это с помощью готовых сервисов SharePoint. Посмотрев на stssoap.dll, вы убедились, что это работает некорректно. Другой вариант «клиентского» - использовать методы RPC, но ни один похоже, что они вообще обеспечивают функциональность для типов контента.

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

Есть ли у вас какой-либо вариант развертывания пользовательского кода на сервере? Вы можете разработать эту функциональность с помощью объектной модели и обернуть ее в свою собственную веб-службу (существует здесь) довольно легко.

Вот пример, адаптированный из Гейба Вишни это делает то, что вам нужно:

SPContentType myContentType = myWeb.ContentTypes["myContentType"];
string internalName = myContentType.Fields["fieldToUpdate"].InternalName;
myContentType.FieldLinks[internalName].Required = false;
myContentType.Update(true);

Извините, это не более полезно, но это обычная история при использовании веб-служб WSS 3.0 / SharePoint 2007.

person Alex Angas    schedule 12.08.2009
comment
К сожалению, для меня практически невозможно развернуть код на сервере, поэтому я ищу обходной путь. В конечном итоге, если других методов не будет найдено, мне придется полностью отказаться от этой функции. - person CMerat; 12.08.2009