在 SharePoint 2013 中更改创建日期

Change Created Date in SharePoint 2013

我在 SharePoint 2013 中管理一个请求列表,我需要从另一个列表导入一些请求。但是,我想保留原始请求日期,而不是让 SharePoint 分配我上传请求的当前 date/time,因此我想更改默认的 "Created" 日期字段。我让这个适用于我添加的日期列:

var duedate = new Date(2015,01,11).toISOString();
$().SPServices({
    operation: "UpdateListItems",
    async: false,
    listName: "Requests",
    ID: 5,
    valuepairs: [["DueDate", duedate]],
    completefunc: function (xData, Status) {
    }
});

虽然它不适用于 "Created" 字段 - 我想是因为它是只读的。我需要一种使 "Created" 字段可编辑的方法,以便我可以更改日期。我已经编写了很多引用此专栏的代码,所以我宁愿不创建默认为 "Created" 的新专栏,除非更改。

奖励:我的下一个任务是更改默认 "Author" 字段,希望该解决方案也可以使该字段可编辑。

简短的回答:你不能。 CreatedModifiedCreated ByModified By 等系统字段不支持通过 SharePoint Web 服务 UpdateListItems 操作进行更新。

Note: Created By (Author) and Modified By(Editor) fields can be updated in this manner only for non-library SharePoint lists

但有一个解决方法。这些字段无法更新的原因基本上是因为它们被声明为 ReadOnly。因此,在修改列表架构以使系统字段可用于修改后(将 ReadOnly 属性设置为 false),如下所示 Created 字段:

var updateSystemFields = "<Fields>" + 
   "<Method ID='1'>" + 
      "<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>";
$().SPServices({
  operation: "UpdateList",
  listName: "Requests",
  listProperties:"",
  updateFields: updateSystemFields,
  newFields: "",
  deleteFields: "",
  listVersion: "",
  async: false,
  completefunc: function (xData, Status){ 
      console.log('List schema has been modified'); 
  }
});

列表项 Created 字段值可以使用 UpdateListItems 操作更新:

var dueDateVal = new Date('2016-01-01 6:00:00').toISOString();
$().SPServices({
    operation: "UpdateListItems",
    async: false,
    listName: "Requests",
    ID: 1,
    valuepairs: [["Created", dueDateVal]],
    completefunc: function (xData, Status) {
         console.log('List item has been updated');
    }
});