Pergunta

Eu tenho tentado reproduzir programaticamente o comportamento de editar propriedades de campo de um tipo de conteúdo na tela de gerenciamento de site SharePoint e selecionando o botão de rádio "Required" sem sucesso usando o método do serviço Web WSS 3.0 Webs.asmx "UpdateContentType" .

A primeira dificuldade foi o problema com a documentação MSDN que dizia campos devem ser de um tipo FieldRef quando na verdade eles precisam ser de um tipo de campo ( referência rel = "nofollow noreferrer">). Adicionando campos e apagar campos fina funciona após a correção, mas atualizando campos parece não funcionar em todos. (Deve também ser notado que eu segui a recomendação no link anterior para uso Method="2" para campos de atualização, mas não muda nada, e usando Método valores diferente de 1 para adicionar ou diferente de 3 para apagar também funcionam corretamente).

Aqui está a chamada de serviço web (ligeiramente modificada com cordas em vez de XmlNode objetos para facilitar a leitura):

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

Após a chamada, o campo é ainda necessária = "FALSE".

Um olhar rápido para o Stssoap.dll indica montagem que a propriedade "Obrigatório" é aparentemente ignorados durante o processo de atualização. É este o comportamento normal? Se sim, qual é o método recomendado para programaticamente alterar o campo "necessária" a partir do código do cliente (não execução no servidor SharePoint)?

Qualquer ajuda seria muito apreciada.

Foi útil?

Solução

Eu já investigou este e encontrou a mesma coisa. Eu também tentei adicionar o Cmd="Update" atributo para o elemento Method sem sucesso. Este exemplo de como usar UpdateContentType foi útil também.

Eu não acredito que você vai ser capaz de fazer isso com os serviços do SharePoint out-of-the-box. Você já verificada de olhar para Stssoap.dll que este não parece trabalho corretamente. Outro 'opção de estilo client' é usar métodos RPC mas nenhum parecem fornecer funcionalidade para tipos de conteúdo em tudo.

Os serviços web são especialmente frustrante, porque este tipo de caso não tão de ponta vem regularmente. É muito raro que eu considerar usá-los por causa da perda de tempo envolvido com suas limitações.

Você tem qualquer opção de implantar código personalizado para o servidor? Você poderia desenvolver essa funcionalidade usando o modelo de objeto e envolvê-la em seu próprio serviço personalizado web (há um passo a passo aqui ) com bastante facilidade.

Aqui está um exemplo adaptado de Gabe Wishnie que faz o que você precisa:

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

Infelizmente este não é mais útil, mas é uma história comum ao usar o WSS 3.0 / SharePoint 2007 serviços web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top