2012-07-09 118 views
8

更新SharePoint 2010的託管元數據字段我嘗試使用Lists.UpdateListItems Web服務更新SharePoint託管元數據(MMD)字段,但它不起作用。無法使用Lists.UpdateListItems Web服務調用

這裏是我的SOAP請求

<?xml version="1.0" ?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Body> 
    <UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <listName>My Test List</listName> 
    <updates> 
     <Batch ListVersion="0" PreCalc="TRUE" OnError="Continue"> 
     <Method Cmd="Update" ID="1"> 
      <Field Name="ID">3</Field> 
      <Field Name="Document_x0020_Title">foo</Field> 
      <Field Name="Fiscal_x0020_Year1">13;#FY 2006|7e8205da-57a1-45a3-8147-469b795ad6e8</Field> 
     </Method> 
     </Batch> 
    </updates> 
    </UpdateListItems> 
</S:Body></S:Envelope> 

此請求將成功地更新了「文檔標題」(文本字段),但MMD現場,「會計年度」,是不變,並沒有從返回任何錯誤Web服務。

請注意,MMD的值格式爲「WssId; #TermValue | TermGuid」,並且該術語已爲該站點創建。

請幫忙。

回答

9

想通了。

我必須使用不同的字段名稱。該字段的標籤是「會計年度」,但工作的字段名稱實際上是「d3c0ddc947ab4b8c90b6a0fe2d4caf09」而不是「Fiscal_x0020_Year1」。所以,我的SOAP請求看起來像

<Method Cmd="Update" ID="1"> 
     <Field Name="ID">3</Field> 
     <Field Name="Document_x0020_Title">foo</Field> 
     <Field Name="d3c0ddc947ab4b8c90b6a0fe2d4caf09">13;#FY 2006|7e8205da-57a1-45a3-8147-469b795ad6e8</Field> 
    </Method> 

得到我使用Lists.GetListContentType Web服務方法返回字段的信息,並查找字段類型「注意」這一字段名。這裏是什麼的SharePoint返回

<Field Type="Note" DisplayName="Fiscal Year_0" 
StaticName="d3c0ddc947ab4b8c90b6a0fe2d4caf09" Name="d3c0ddc947ab4b8c90b6a0fe2d4caf09" 
ID="{1afa458b-d50a-4139-ad8d-f1172774de34}" ShowInViewForms="FALSE" Required="FALSE" 
CanToggleHidden="TRUE" SourceID="{77871b4e-f3ba-42dc-8940-ab33fb431099}" Hidden="TRUE" 
Version="1" Customization="" ColName="ntext8" RowOrdinal="0"/> 

我也覺得很有用Lists.GetListContentTypes的方法得到Lists.GetListContentType方法調用中的內容類型ID使用的例子。

---- 更新 - 我發現你沒有使用的格式 「WssId; #TermValue | TermGuid」。您可以簡單地使用「TermValue | TermGuid」。因此,在上面的示例中,值爲「2006財年| 7e8205da-57a1-45a3-8147-469b795ad6e8」。

這非常有用,因爲您可以在不同的網站上重複使用相同的值,而不像以前的值,只能在一個網站中使用它。對於多值,您只需要用「;」對其進行分隔代替 」;#」。例如「2006年度| 7e8205da-57a1-45a3-8147-469b795ad6e8; 2007年度| 823205da-57a1-45a3-8147-469b795ade13」。

+0

而當你設置字段 - 你可以完全省略Wssid部分。像「2006財年| 7e8205da-57a1-45a3-8147-469b795ad6e8」 – 2015-05-29 04:28:14

0

感謝您提及關於StaticName的一點。這結束了我的痛苦。

對於簡單的字段而言,似乎沒有鏈接到MMS,比如標題,允許更簡單的更新語法。例如,在它自己的,下面的更新處理沒有錯誤。

<Field Name="Title">Some Title</Field> 

但是,鏈接到MMS的字段的規則不相同。
按照上面的方法,我進入了我的彩信領域。這類型的字段可以用任意值,如果你被它識別它更新的友好名稱輸入一個整數,例如:

<Field Name="Activity">20</Field> 

的「20」只是翻譯一些名詞。
我嘗試了很多數字,他們都回來作爲相同的術語。

或者,如果我更接近於更新值的已記錄方式,但仍然使用「活動」標識字段,則服務返回錯誤0x80020005。

<Field Name="Activity">HTA|fe951639-7c90-41ee-9888-6ae0e6523120</Field> 

所以不要這樣做。
只有當衛星完全對齊,我才能找到成功。 StaticName是密鑰

<Field Name="j06a8d8240f84aec987f6a28effa3ae1">HTA|fe951639-7c90-41ee-9888-6ae0e6523120</Field> 

另一種方式找到StaticName是看字段類型的響應的GetList請求=「請注意」每個MMS場。此操作比GetListContentType少1個輸入。您只需要列表名稱而不需要contentTypeID。

岩石上。