Sharepoint 2010 无法更新SharePoint 2010';s托管元数据字段与Lists.UpdateListItems web服务调用

Sharepoint 2010 无法更新SharePoint 2010';s托管元数据字段与Lists.UpdateListItems web服务调用,sharepoint-2010,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/

我正在尝试使用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>

我的测试表
3.
福
13;#2006财年| 7e8205da-57a1-45a3-8147-469b795ad6e8
此请求将成功更新“文档标题”(文本字段),但MMD字段“会计年度”未更改,并且web服务未返回任何错误

请注意,MMD的值的格式为“WssId;#TermValue | TermGuid”,并且已经为站点创建了术语

请帮忙。

把它弄明白了

我必须使用不同的字段名。该字段的标签是“财政年度”,但实际使用的字段名称是“d3c0ddc947ab4b8c90b6a0fe2d4caf09”,而不是“财政年度0020”。所以我的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>

3.
福
13;#2006财年| 7e8205da-57a1-45a3-8147-469b795ad6e8
要获取此字段名,我使用Lists.GetListContentType web服务方法返回字段信息并查找字段类型“Note”。下面是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”。感谢您提及有关静态名称的部分。这结束了我的痛苦

对于简单的字段,如Title,没有链接到彩信,可以使用更慢的更新语法。例如,就其本身而言,处理以下更新时不会出现错误

<Field Name="Title">Some Title</Field>
一些标题
但是,链接到彩信的字段的规则不同。
按照上述方法,我进入了我的彩信字段。如果您通过友好名称识别该类型字段并输入整数,则可以使用任意值更新该类型字段,例如:

<Field Name="Activity">20</Field>
20
“20”只是翻译成某个术语。
我试了很多数字,结果都是一样的

或者,如果我更接近于记录的更新值的方式,同时仍然使用“活动”标识字段,则服务返回错误0x80020005

<Field Name="Activity">HTA|fe951639-7c90-41ee-9888-6ae0e6523120</Field>
HTA | fe951639-7c90-41ee-9888-6ae0e6523120
所以不要这样做。
只有当月亮完全对齐时,我才能找到成功静态名称为key

<Field Name="j06a8d8240f84aec987f6a28effa3ae1">HTA|fe951639-7c90-41ee-9888-6ae0e6523120</Field>
HTA | fe951639-7c90-41ee-9888-6ae0e6523120
查找StaticName的另一种方法是查找GetList请求响应中每个MMS字段的字段Type=“Note”。此操作的输入比GetListContentType少1。您只需要列表名,而不需要contentTypeID


继续摇滚。

当您设置该字段时,您可以将Wssid部分全部删除。如“2006财年7e8205da-57a1-45a3-8147-469b795ad6e8”