Frage

Ich habe versucht worden programmatisch das Verhalten zu reproduzieren Verfahren Feld einen Inhaltstypen Eigenschaften der Bearbeitung in dem Sharepoint-Site-Management-Bildschirm und Auswählen der „Required“ Radio-Button ohne Erfolg mit dem WSS 3.0 Web-Service des Webs.asmx „UpdateContentType“ .

Die erste Schwierigkeit das Problem mit der MSDN-Dokumentation war, daß die Felder einer FieldRef Art sein sollen, wenn in der Tat müssen sie von einem Feldtyp ( Referenz ). Hinzufügen von Feldern und Feldern Löschen funktioniert nach dem Update, aber Felder zu aktualisieren scheint nicht zu funktionieren. (Es sollte auch darauf hingewiesen, dass ich die Empfehlung auf diesen Link gefolgt Method="2" zu verwenden, um Felder zu aktualisieren, aber es ändert sich nichts, und unter Verwendung von Werten andere Methode als 1 für das Hinzufügen oder anderen als 3 zum Löschen auch richtig funktionieren).

Hier ist der Web-Service-Aufruf (leicht statt XmlNode Objekte zur besseren Lesbarkeit mit Strings modifiziert):

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

Nach dem Aufruf wird das Feld immer noch Erforderlich = „false“.

Ein kurzer Blick in die stssoap.dll Montage zeigt an, dass die „Required“ Eigenschaft offenbar während des Update-Vorgangs wird ignoriert. Ist das ein normales Verhalten? Wenn ja, was ist die empfohlene Methode für programmatisch Ändern des „Required“ Feld von Client-Code (nicht auf dem Sharepoint-Server ausgeführt wird)?

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Ich habe dies untersucht und festgestellt, das gleiche. Ich habe auch versucht, ohne Erfolg das Attribut Cmd="Update" zum Method Element hinzugefügt wird. Dieses Beispiel wie UpdateContentType verwenden war ebenfalls hilfreich sein.

Ich glaube nicht, werden Sie in der Lage sein, dies zu tun mit den Out-of-the-box-Sharepoint-Diensten. Sie haben aus der Betrachtung stssoap.dll verifiziert, dass dies scheint nicht richtig zu funktionieren. Eine weitere ‚client'-Stil Option ist auf RPC Methoden aber keine erscheinen Funktionalität Typen für den Inhalt überhaupt zu ermöglichen.

Der Web-Service ist insbesondere frustrierend, weil diese Art von nicht-so-Rande Fall regelmäßig kommt. Es ist sehr selten, dass ich sie in Betracht ziehe wegen der Zeit, mit ihren Einschränkungen beteiligt zu verschwenden.

Haben Sie jede Option von benutzerdefinierten Code auf dem Server bereitstellen? Sie konnten diese Funktionalität mit dem Objektmodell entwickeln und wickeln Sie es in Ihrem eigenen Web-Service (es gibt ein Komplettlösung hier ) ganz leicht.

Hier ist ein Beispiel angepasst von Gabe Wishnie das tut, was Sie benötigen:

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

Leider nicht mehr hilfreich ist, aber es ist eine gemeinsame Geschichte, wenn die WSS mit 3.0 / Sharepoint 2007 Web-Service.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top