【问题标题】:"Bump" a SharePoint ListItem without changing values在不更改值的情况下“碰撞”SharePoint ListItem
【发布时间】:2013-02-04 16:47:15
【问题描述】:

首先,我使用的是什么:

  • SharePoint 2007
  • JavaScript
  • CAML 查询
  • 标准网络服务 (_vti_bin/lists.asmx)

我正在从列表中选择一个或多个项目,具体取决于某些条件。我得到这些物品,并对它们执行另一个条件。如果满足条件,我想碰撞该项目,意思是:将“修改”列更改为当前日期/时间,但不应更改任何值。

这可能吗?如果是这样,如何做到这一点?

提前致谢!

【问题讨论】:

    标签: web-services sharepoint sharepoint-2007 caml


    【解决方案1】:

    我已经不得不做同样的事情了。虽然我找不到代码,但我找到了那个帮助我的帖子。它是用 C# 编写的,但很容易适应 javascript:

    public void Test()
            {
                string webUrl = "http://myserver";
                string listName = "docs";
                Lists.ListsSoapClient listsClient = this.GetListsClient(webUrl);
    
                // 1st a call to Lists.GetList - we need the list's version - it is returned in the Version attribute
                XElement listData = XElement.Parse(listsClient.GetList(listName).OuterXml);
                string listID = listData.Attribute("ID").Value;
                string version = listData.Attribute("Version").Value;
                // in the updateFields parameter of Lists.UpdateList the full schema of the fields should be provided
                string updateFields = @"<Fields>
       <Method ID='1'>
          <Field ID='{28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f}' ColName='tp_Modified' RowOrdinal='0' ReadOnly='FALSE' Type='DateTime' Name='Modified' DisplayName='Modified' StorageTZ='TRUE' SourceID='http://schemas.microsoft.com/sharepoint/v3' StaticName='Modified' FromBaseType='TRUE' Version='4' ShowInNewForm='FALSE' ShowInEditForm='FALSE' />
       </Method>
       <Method ID='2'>
          <Field ID='{8c06beca-0777-48f7-91c7-6da68bc07b69}' ColName='tp_Created' RowOrdinal='0' ReadOnly='FALSE' Type='DateTime' Name='Created' DisplayName='Created' StorageTZ='TRUE' SourceID='http://schemas.microsoft.com/sharepoint/v3' StaticName='Created' FromBaseType='TRUE' Version='4' ShowInNewForm='FALSE' ShowInEditForm='FALSE' />
       </Method>
    </Fields>";
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(updateFields);
                // Lists.UpdateList: set fields to not read-only
                XElement result = XElement.Parse(listsClient.UpdateList(listID, null, null, doc.DocumentElement, null, version).OuterXml);
                // get updated version from the result XML - for the second call of Lists.UpdateList
                version = result.Elements().Where(el => el.Name.LocalName == "ListProperties").First().Attribute("Version").Value;
    
                // prepare the XML for the list item update
                string updateDates = @"<Batch OnError='Continue'>
      <Method ID='M0' Cmd='Update'>
        <Field Name='ID'>1</Field>
        <Field Name='FileRef'>/docs/zt.txt</Field>
        <Field Name='Modified'>2010-04-04T22:17:00Z</Field>
        <Field Name='Created'>2010-01-01T00:05:00Z</Field>
      </Method>
    </Batch>";
    
                doc.LoadXml(updateDates);
                // Lists.UpdateListItems: update Created & Modified
                result = XElement.Parse(listsClient.UpdateListItems(listID, doc.DocumentElement).OuterXml);
    
                // revert the fields' schema
                updateFields = updateFields.Replace("ReadOnly='FALSE'", "ReadOnly='TRUE'");
                doc.LoadXml(updateFields);
                // Lists.UpdateList: set fields back to read-only
                result = XElement.Parse(listsClient.UpdateList(listID, null, null, doc.DocumentElement, null, version).OuterXml);
            }
    

    基本上我们必须在尝试更新之前将字段的只读属性设置为 false,并在更新后将该属性设置回 true。

    来源: http://stefan-stanev-sharepoint-blog.blogspot.com.br/2010/04/updating-read-only-fields-with-lists.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多