2009-08-04 48 views
1

我一直在嘗試以編程方式重現在SharePoint網站管理屏幕中編輯內容類型的字段屬性並選擇使用WSS 3.0 Web服務的Webs.asmx「UpdateContentType」方法沒有成功的「必需」單選按鈕的行爲。SharePoint Web服務 - 更新ContentType字段必需的屬性?

第一個困難是MSDN文檔中的問題,即所謂的字段應該是FieldRef類型,實際上它們需要是字段類型(reference)。修復後添加字段和刪除字段可以正常工作,但更新字段似乎根本不起作用。 (還應該注意的是,我遵循上一個鏈接的建議,使用Method="2"來更新字段,但它沒有任何變化,並且使用除1以外的方法值進行添加,或者使用除3以外的方法進行刪除也可以正常運行。

這裏的Web服務調用(用繩子代替了可讀性的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 />"); 

通話結束後,現場仍需要=「FALSE」。

快速查看stssoap.dll程序集,指出在更新過程中顯然忽略了「必需」屬性。這是正常的行爲嗎?如果是這樣,推薦的方法是通過編程方式從客戶端代碼更改「必需」字段(不在SharePoint服務器上執行)?

任何幫助將不勝感激。

回答

2

我調查了這一點,發現相同的東西。我也嘗試添加屬性Cmd="Update"Method元素,但沒有成功。如何使用UpdateContentType的This example也有幫助。

我不相信您可以使用開箱即用的SharePoint服務來完成此任務。你已經通過查看stssoap.dll驗證了這看起來沒有正常工作。另一種「客戶端」式選項是使用RPC methods,但根本沒有一個可以提供內容類型的功能。

網絡服務是特別是令人沮喪,因爲這種類型的不那麼邊緣的情況經常出現。我考慮使用它們是非常罕見的,因爲時間浪費與他們的限制有關。

您是否有任何選項部署自定義代碼到服務器?您可以使用對象模型開發此功能,並將其包裝在您自己的自定義Web服務中(這裏有一個walkthrough here)很容易。

這是改編自Gabe Wishnie一個例子,做你需要什麼:

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

對不起,這不是更有益的,但它使用WSS 3.0/SharePoint 2007中的Web服務時是一個常見的故事。

+0

對我來說,在服務器上部署代碼實際上是不可能的,可悲的是,因此尋求解決方法。最終,如果找不到其他方法,我將不得不放棄這個功能。 – CMerat 2009-08-12 13:33:46