任务历史记录定义

本文介绍“项目历史记录”表中存储在 Dataverse 中的任务历史记录的定义。 任务历史记录表示对任务的更改。

“编辑类型”定义历史记录的类型。

语法 说明
TaskCreated 表示创建任务时
TaskEdited 表示编辑任务的时间
TaskDeleted 表示何时删除任务
Undo 表示何时撤消更改
Redo 表示已重做更改时
DependentEdit 表示由于对另一个任务的更改而修改的任务

历史记录

所有历史记录共享一组通用字段,包括:

字段 说明
Project 与历史记录相关的项目
项目任务 与历史记录相关的任务。 如果删除任务,则为空
XrmUserId 对任务进行更改的 Xrm 用户
Timestamp 生成更改的日期和时间
编辑类型 历史记录的类型
详细信息 包含 JSON 格式的历史记录数据

以下部分介绍了“详细信息”有效负载字段包含的内容,具体取决于历史记录的类型和编辑的内容。 有关详细信息中列的说明,请查看 导出项目内容定义

TaskCreated 详细信息

创建任务时会创建记录。 有效负载为空。

TaskDeleted 详细信息

包含单个属性“name”,这是删除任务时的任务的名称。

示例:

{"name":"Pour concrete"}

撤消/重做详细信息

包含已撤消或重做的所有修订号的数组值的“revisions”属性。 该数字对应于历史记录的修订属性中的后缀。

示例:

{"revisions":[11,12]}

与修订记录后缀 (0000000011 的历史记录匹配,) :

msxrm\_orgxxxyyyy.crm.dynamics.com\_ff69bc0e-3f66-41c3-b40c-aa3035517e38\_0000000011

TaskEdited 详细信息

TaskEdited 表示任务的直接属性编辑,并创建、删除和编辑任何任务子项,例如清单项、附件、作业、链接等。

直接任务域编辑

详细信息具有具有 JSON 对象值的“field”属性。 该对象具有已更改的属性名称作为键, (可以在单个用户操作) 中编辑多个任务属性,并将对象作为值。 该属性对象具有“previous”和“updated”键,这些值具有属性的旧值和新值。

示例:

{
  "fields": {
    "name": {
      "previous": "Pour concrete",
      "updated": "Eat donuts"
    }
  }
}

对于大型属性 (例如注释分配“totalWorkContour”) ,将发出空 JSON,而不是以前的/更新的值。

示例:

 {
  "fields": {
    "notes": {}
  }
}

完成任务的任务编辑

完成任务的任何属性编辑也会添加已完成的布尔属性。

示例:

{
  "fields": {
    "percentComplete": {
      "previous": 75,
      "updated": 100
    }
  },
  "completed": true
}

任务子元素编辑

子元素类似于字段编辑,但键是导航属性名称,值是数组。 数组中的项可以创建 (具有“created”:true 属性) 、删除 (“deleted”:true 属性) ,或编辑 (未创建或删除,但) 编辑的属性列表。 创建或删除的子元素具有呈现项所需的一组最小属性,这些项具有直接在属性上设置的值。 编辑的格式与任务中的字段编辑具有相同的格式,其中包含以前的值和更新的值。

创建示例:

{
  "fields": {
    "checklistItems": [
      {
        "id": "f4be3c03-bc04-ee11-83c4-e04f43e61e09",
        "created": true,
        "name": "checklistItem1"
      }
    ]
  }
}

示例编辑:

{
  "fields": {
    "checklistItems": [
      {
        "id": "54219e93-bd04-ee11-83c4-e04f43e61e09",
        "completed": {
          "previous": false,
          "updated": true
        }
      }
    ]
  }
}

创建和删除的包含属性

对于简单任务子元素 (,例如检查列表项、附件在创建和删除时) ,将包括呈现该项目所需的所有属性。 清单项包括名称,附件包括名称、URI 和类型。

属于其他实体之间关系的任何子元素都包括另一个实体的 ID。 例如,分配包括 resourceId,链接包括 predecessorId。

DependentEdit 详细信息

如果对另一个任务的更改导致修改当前任务,则为任务生成依赖编辑记录。 历史记录包括对当前任务的更改,以及一个 sourceEdit 属性,该属性指示对导致当前任务被修改的源任务的更改。

示例:将链接添加到另一个任务 (源) 当前任务,当前任务的开始日期在一天移出:

{
  "fields": {
    "start": {
      "previous": "2015-11-17T08:00:00Z",
      "updated": "2015-11-18T08:00:00Z"
    }
  },
  "sourceEdit": {
    "type": "TaskEdited",
    "taskId": "a6f33356-cd04-ee11-83c4-e04f43e61e09",
    "fields": {
      "predecessors": [
        {
          "id": "abf33356-cd04-ee11-83c4-e04f43e61e09",
          "created": true,
          "predecessorId": "a4f33356-cd04-ee11-83c4-e04f43e61e09"
        }
      ]
    }
  }
}

多个源编辑

批量操作可以一次更改多个任务,并可能导致多个依赖性更改。 在这种情况下,批量操作中的任务包含在 sourceEdit 中,其记录类型为 CompoundEdit。 这些方案的示例包括删除多个任务、链接多个任务、缩进多个任务。 CompoundEdit 记录包括编辑计数和前三次编辑。

示例

{
  "fields": {
    "start": {
      "previous": "2015-11-17T08:00:00Z",
      "updated": "2015-11-16T08:00:00Z"
    }
  },
  "sourceEdit": {
    "type": "CompoundEdit",
    "count": 2,
    "edits": [
      {
        "type": "TaskDeleted",
        "taskId": "f3233655-ce04-ee11-83c4-e04f43e61e09",
        "name": "Task A"
      },
      {
        "type": "TaskDeleted",
        "taskId": "f1233655-ce04-ee11-83c4-e04f43e61e09",
        "name": "Task B"
      }
    ]
  }
}

编辑摘要任务

如果编辑的任务是摘要任务,某些操作(如删除任务或缩进任务)可能会生成多个记录,因为这些编辑也适用于任务的子任务。 所有从属记录都包含作为 sourceEdit 的摘要任务。

记录大小

详细信息字段的最大大小为 1000 个字符。 如果初始更改记录超过 1000 个字符,则会剪裁历史记录。 所有字符串更改限制为 100 个字符,更改的字段数限制为 6。 “截断”属性指示未包含的直接字段数。 “truncatedElements”属性指示未写出的子元素的数量。

如果具有上述限制的记录的大小超过 1000 个字符,则不会生成整个记录。

示例

{
  "fields": {
    "start": {
      "previous": "2015-11-17T08:00:00Z",
      "updated": "2015-11-10T08:00:00Z"
    }
  },
  "sourceEdit": {
    "type": "CompoundEdit",
    "count": 2,
    "edits": [
      {
        "type": "TaskEdited",
        "taskld": "225a7a3b-a916-ee11-a35f-480fcf4e7967",
        "fields": {
          "name": {
            "previous": "Prepare Preliminary Project Scope Statement",
            "updated": "Summarize Project Results and Lessons Learned"
          },
          "start": {
            "previous": "2015-11-16T08:00:00Z",
            "updated": "2017-11-16T08:00: 00Z"
          },
          "truncated": 5
        }
      },
      {
        "type": "TaskEdited",
        "taskld": "245a7a3b-a916-ee11-a35f-480fcf4e7967",
        "fields": {
          "name": {
            "previous": "Prepare Preliminary Project Scope Statement",
            "updated": "Develop High Level Work Breakdown Structure"
          },
          "start": {
            "previous": "2015-11-16T08:00:00Z",
            "updated": "2017-11-16T08:00:00Z"
          },
          "truncated": 5
        }
      }
    ]
  }
}