Pregunta

He estado tratando de reproducir mediante programación el comportamiento de editar las propiedades de campo de un Tipo de contenido en la pantalla de administración del sitio de SharePoint y seleccionando la opción "Obligatorio". botón de opción sin éxito utilizando el servicio web WSS 3.0 Webs.asmx " UpdateContentType " método.

La primera dificultad fue el problema con la documentación de MSDN de que dichos campos deberían ser del tipo FieldRef cuando de hecho deben ser del tipo Field ( referencia ). Agregar campos y eliminar campos funciona bien después de la corrección, pero la actualización de los campos parece no funcionar en absoluto. (También debe tenerse en cuenta que seguí la recomendación en el enlace anterior para usar Method = " 2 " para actualizar los campos, pero no cambia nada, y usar valores de métodos distintos de 1 para agregar u otros 3 para eliminar también funcionan correctamente).

Aquí está la llamada al servicio web (ligeramente modificada con cadenas en lugar de objetos XmlNode para facilitar la lectura):

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 />");

Después de la llamada, el campo sigue siendo obligatorio = " FALSE " ;.

Una mirada rápida al ensamblado stssoap.dll indica que el " Requerido " La propiedad aparentemente se ignora durante el proceso de actualización. ¿Es este comportamiento normal? Si es así, ¿cuál es el método recomendado para cambiar mediante programación el " Requerido " campo del código del cliente (no se ejecuta en el servidor de SharePoint)?

Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Investigué esto y encontré lo mismo. También intenté agregar el atributo Cmd = " Actualizar " al elemento Method sin éxito. Este ejemplo de cómo usar UpdateContentType también fue útil.

No creo que pueda hacer esto con los servicios de SharePoint listos para usar. Al verificar stssoap.dll, ha verificado que esto no parece funcionar correctamente. Otra opción de estilo 'cliente' es usar métodos RPC pero ninguno parece proporcionar funcionalidad para los tipos de contenido.

Los servicios web son particularmente frustrantes porque este tipo de casos no tan avanzados se presentan regularmente. Es muy raro que considere usarlos debido a la pérdida de tiempo relacionada con sus limitaciones.

¿Tiene alguna opción de implementar código personalizado en el servidor? Puede desarrollar esta funcionalidad utilizando el modelo de objetos y envolverlo en su propio servicio web personalizado (hay un tutorial aquí ) con bastante facilidad.

Aquí hay un ejemplo adaptado de Gabe Wishnie que hace lo que necesita:

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

Lo siento, esto no es más útil, pero es una historia común cuando se usan los servicios web WSS 3.0 / SharePoint 2007.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top