Question

J'ai essayé de reproduire par programmation le comportement de modification des propriétés de champ d'un type de contenu dans l'écran de gestion du site SharePoint et de sélectionner l'option "Requis". bouton radio sans succès en utilisant Webs.asmx du service Web WSS 3.0 " UpdateContentType " méthode.

La première difficulté concernait la documentation MSDN selon laquelle les champs devaient être de type FieldRef alors qu’ils devaient en fait être de type Field ( référence ). L'ajout de champs et la suppression de champs fonctionnent bien après le correctif, mais la mise à jour des champs ne semble pas fonctionner du tout. (Il convient également de noter que j’ai suivi la recommandation du lien précédent d’utiliser Method = "2" pour la mise à jour des champs, mais cela ne change rien, et en utilisant des valeurs de méthode autres que 1 pour ajouter ou autre que 3 pour supprimer fonctionnent également correctement).

Voici l'appel de service Web (légèrement modifié avec des chaînes au lieu d'objets XmlNode pour des raisons de lisibilité):

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

Après l'appel, le champ est toujours Requis = "FALSE".

Un coup d'œil rapide sur l'assemblage stssoap.dll indique que le " Required " la propriété est apparemment ignorée pendant le processus de mise à jour. Est-ce un comportement normal? Si tel est le cas, quelle est la méthode recommandée pour modifier le paramètre "Required" champ du code client (ne s'exécute pas sur le serveur SharePoint)?

Toute aide serait grandement appréciée.

Était-ce utile?

La solution

J'ai étudié la question et découvert la même chose. J'ai également essayé d'ajouter l'attribut Cmd = "Update" à l'élément Method sans succès. Cet exemple d'utilisation de UpdateContentType a également été utile.

Je ne pense pas que vous puissiez le faire avec les services SharePoint prêts à l'emploi. Vous avez vérifié, en regardant stssoap.dll, que cela ne semblait pas fonctionner correctement. Une autre option de type 'client' consiste à utiliser des méthodes RPC , mais aucune semble fournir des fonctionnalités pour les types de contenu.

Les services Web sont particulièrement frustrants, car ce type de cas peu problématique se présente régulièrement. Il est très rare que j'envisage de les utiliser à cause du temps perdu à respecter leurs limitations.

Avez-vous une option pour déployer du code personnalisé sur le serveur? Vous pouvez développer cette fonctionnalité à l'aide du modèle d'objet et l'envelopper dans votre propre service Web personnalisé (il existe un procédure pas à pas ici ) assez facilement.

Voici un exemple adapté de Gabe Wishnie qui fait ce dont vous avez besoin:

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

Désolé, ce n'est pas plus utile, mais c'est une histoire courante lorsque vous utilisez les services Web WSS 3.0 / SharePoint 2007.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top