无法使用Lists.UpdateListItems Web服务调用更新SharePoint 2010的托管元数据字段

duv*_*uvo 8 sharepoint-2010

我正在尝试使用Lists.UpdateListItems Web服务更新SharePoint托管元数据(MMD)字段,但它无法正常工作.

这是我的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>
Run Code Online (Sandbox Code Playgroud)

此请求将成功更新"文档标题"(文本字段),但MMD字段"会计年度"未更改,并且Web服务未返回任何错误.

请注意,MMD的值采用"WssId; #TermValue | TermGuid"格式,并且已为该站点创建术语.

请帮忙.

duv*_*uvo 10

弄清楚了.

我必须使用不同的字段名称.该字段的标签是"会计年度",但有效的字段名称实际上是"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>
Run Code Online (Sandbox Code Playgroud)

要获取此字段名称,我使用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"/>
Run Code Online (Sandbox Code Playgroud)

我还发现使用Lists.GetListContentTypes方法在Lists.GetListContentType方法调用中获取内容类型id是很有用的.

---- 更新 - 我发现你不必使用"WssId; #TermValue | TermGuid"的格式.您只需使用"TermValue | TermGuid"即可.因此,在上面的示例中,值将是"FY 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8".

这非常有用,因为您可以在不同的站点上重用相同的值,这与之前的值不同,后者只能在一个站点中使用它.对于多值,您只需要用";"分隔它 代替 ";#".例如"FY 2006 | 7e8205da-57a1-45a3-8147-469b795ad6e8; FY 2007 | 823205da-57a1-45a3-8147-469b795ade13".