追踪器¶
注意** 跟踪器已在 DHIS2 2.36 中重新实现。本文件介绍了新的跟踪器端点
POST /api/tracker
GET /api/tracker/enrollments> *GET /api/tracker/enrollmentsGET /api/tracker/events *GET /api/tracker/trackedEntitiesª *GET /api/tracker/relationships跟踪器 (已废弃)](https://docs.dhis2.org/en/develop/using-the-api/dhis-core-version-master/tracker-deprecated.html) 描述了已废弃的端点
GET/POST/PUT/DELETE /api/trackedEntityInstances> *GET/POST/PUT/DELETE /api/enrollmentsGET/POST/PUT/DELETE /api/enrollments> *GET/POST/PUT/DELETE /api/enrollments *GET/POST/PUT/DELETE /api/events. *GET/POST/PUT/DELETE /api/relationships`.
- 如果您仍在生产中使用已废弃的跟踪器端点,请计划迁移 迁移到新的端点。迁移到新的跟踪器 端点 应能帮助您开始迁移。如果您在实践社区 实践社区 寻求帮助。注意:数据 同步(importMode=SYNC)功能没有在新的跟踪器端点中实现。 如果使用此功能,则必须推迟迁移,直到新的同步功能到位。
跟踪器对象¶
跟踪器由几种不同类型的对象组成,这些对象嵌套在一起以表示数据。在本节中,我们将展示并描述 Tracker API 中使用的每个对象。
跟踪实体¶
跟踪实体是跟踪器模型的根对象。
| 财产 | 描述 | 需要 | 不可变的 | 类型 | 例 |
|---|---|---|---|---|---|
| 跟踪实体 | 被跟踪实体的标识符。如果未提供则生成 | 不 | 是的 | String:Uid | ABCDEF12345 |
| trackedEntityType | 跟踪实体的类型。 | 是的 | 是的 | String:Uid | ABCDEF12345 |
| createdAt | 用户创建跟踪实体时的时间戳。在服务器上设置。 | 不 | 不 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| createdAtClient | 用户在客户端上创建跟踪实体时的时间戳。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAt | 上次更新对象的时间戳。在服务器上设置。 | 不 | 不 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAtClient | 对象上次在客户端更新的时间戳。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| orgUnit | 用户创建跟踪实体的组织部门。 | 是的 | 是的 | String:Uid | ABCDEF12345 |
| inactive | 指示被跟踪实体是否处于非活动状态。 | 不 | 是的 | Boolean | Default: False, True |
| deleted | 指示跟踪的实体是否已被删除。只有删除时才能改变。 | 不 | 不 | Boolean | 错误直到被删除 |
| geometry | 被跟踪实体的地理表示。基于 TrackedEntityType 的“featureType”。 | 不 | 是的 | GeoJson | { "type": "POINT", "coordinates": [123.0, 123.0] } |
| 存储者 | 存储/创建被跟踪实体的客户参考。 | 不 | 是的 | 字符串:任意 | 约翰·多伊 |
| 由...制作 | 仅用于读取数据。创建该对象的用户。在服务器上设置 | 不 | 是的 | 用户 | { "uid": "ABCDEF12345", "用户名": "用户名", "名字": "约翰", "姓氏": "Doe" } |
| 更新者 | 仅用于读取数据。最后更新对象的用户。在服务器上设置 | 不 | 是的 | 用户 | { "uid": "ABCDEF12345", "用户名": "用户名", "名字": "约翰", "姓氏": "Doe" } |
| 属性 | 被跟踪实体拥有的被跟踪实体属性值的列表。 | 不 | 是的 | TrackedEntityAttributeValue 列表 | 查看属性 |
| 入学人数 | 被跟踪实体拥有的注册列表。 | 不 | 是的 | 招生名单 | 查看报名 |
| 关系 | 连接到被跟踪实体的关系列表。 | 不 | 是的 | 关系列表 | 查看关系 |
| 程序所有者 | 可以通过特定程序访问此跟踪实体的组织单位列表。有关详细信息,请参阅“程序所有权”。 | 不 | 是的 | 程序所有者列表 | 请参阅“程序所有权”部分 |
注意
被跟踪实体"拥有"所有被跟踪实体属性值(或上表中所述的"属性")。然而,被跟踪实体属性要么通过被跟踪实体类型或程序连接到被跟踪实体。我们经常将这种分离称为跟踪实体类型属性和跟踪实体程序属性。这种分离的重要性与访问控制和限制用户可以看到的信息有关。
被跟踪实体中提到的"属性"是被跟踪实体类型属性。
注册¶
被跟踪实体可以注册其符合资格的项目。只要程序配置了与被跟踪实体相同的被跟踪实体类型,被跟踪实体就符合资格。我们用Enrollment对象来表示注册,我们将在本节中对此进行描述。
| 财产 | 描述 | 需要 | 不可变的 | 类型 | 例 |
|---|---|---|---|---|---|
| 注册 | 注册的标识符。如果未提供则生成 | 不 | 是的 | String:Uid | ABCDEF12345 |
| 程序 | 注册代表的计划。 | 是的 | 不 | String:Uid | ABCDEF12345 |
| 跟踪实体 | 对注册的跟踪实体的引用。 | 是的 | 是的 | String:Uid | ABCDEF12345 |
| 用户友好型消息,说明操作是否成功。 | enrollment | 不 | 不 | DateTime | String:Uid |
| orgUnit | 项目 | 是的 | 不 | String:Uid | ABCDEF12345 |
| 组织单位名称 | 仅用于读取数据。进行注册的组织单位名称。 | 不 | 不 | 不 | 塞拉利昂 |
| createdAt | trackedEntity | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| createdAtClient | 用户在客户端创建对象的时间戳 | 不 | 不 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAt | orgUnit | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAtClient | 对象最后一次在客户端更新的时间戳 | 不 | 不 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| 例 | createdAtClient | 是的 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| To retrieve an event with a specific ID: | updatedAt | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
WKT, can be omitted it in case of a Point type and with latitude and longitude provided | 用户完成注册的时间戳。在服务器上设置。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| 日期时间 | 参考谁完成了注册 | 不 | 不 | 是的 | Boolean |
| 跟进 | 表示注册是否需要跟进。如果未提供,则为假 | 不 | 不 | 布依兰 | Default: False, True |
| deleted | completedAt | 不 | 是的 | Boolean | Date:ISO 8601 |
| geometry | 注册的地理表示。基于计划的 "特征类型 | 不 | 不 | GeoJson | { "type": "POINT", "coordinates": [123.0, 123.0] } |
| 日期时间 | 跟进 | 不 | 不 | 不 | Boolean |
| GET /api/metadata/proposals/ | 仅用于读取数据。创建对象的用户。在服务器上设置 | 不 | 是的 | 用户 | String:Any |
Latitude of a Point type of Geometry | 仅用于读取数据。最后更新对象的用户。在服务器上设置 | 不 | 是的 | 用户 | { "uid": "ABCDEF12345", "用户名": "用户名", "名字": "约翰", "姓氏": "Doe" } |
| 属性 | storedBy | 不 | 不 | 是的 | String:Uid |
用于项目阶段引用的 IdScheme。默认为 idScheme 参数。 | createdBy | 不 | 不 | 是的 | 用户 |
| { "uid": "ABCDEF12345", "username": "username", "firstName": "John", "surname": "Doe" } | updatedBy | 不 | 不 | 不 | String:Uid |
| ABCDEF12345 | 属性 | 不 | 是的 | 不 | 用户 |
注
跟踪实体""拥有 "所有的 "跟踪实体属性值"(或前面表格中描述的 "属性")。然而,"跟踪实体属性 "是通过 "跟踪实体类型 "或 "程序 "连接到 "跟踪实体 "的。我们通常把这种分离称为 "跟踪实体类型属性 "和 "跟踪实体程序属性"。这种分离的重要性与访问控制和限制用户可查看的信息有关。
"注册 "中提到的 "属性 "是 "跟踪实体程序属性"。
大事记¶
事件 "是 "事件计划 "或 "跟踪计划 "的一部分。对于 "跟踪程序",事件属于 "注册",而 "注册 "又属于 "跟踪实体"。另一方面,"EVENT PROGRAM "是与特定 "注册 "或 "跟踪实体 "无关的 "事件"。两者的区别在于我们是否跟踪特定的 "被跟踪实体"。我们有时会把 EVENT PROGRAM 事件称为 "匿名事件 "或 "单一事件",因为它们只代表自己,而不代表另一个 `被跟踪实体'。
在 API 中,最大的区别在于所有事件要么连接到相同的注册表("事件程序"),要么连接到不同的注册表("跟踪程序")。下表将指出这两者之间的任何特殊情况。
| 指标组 | 描述 | 需要 | 是的 | 类型 | 例 |
|---|---|---|---|---|---|
| The message text. | 事件的标识符。如果未提供,则生成 | 不 | 是的 | String:Uid | ABCDEF12345 |
| 项目阶段 | List of Note | 是的 | 不 | String:Uid | ABCDEF12345 |
| 文本 | 对拥有该事件的注册的引用。不适用于 EVENT PROGRAM | 是的 | 是的 | String:Uid | ABCDEF12345 |
| 项目 | 仅用于读取数据。拥有该事件的注册项目类型。 | 不 | 是的 | String:Uid | ABCDEF12345 |
| storeCopy | 仅用于读取数据。拥有事件的被跟踪实体。不适用于 EVENT PROGRAM | 不 | 不 | String:Uid | ABCDEF12345 |
| 用户友好型消息,说明操作是否成功。 | 事件的状态。如果没有提供,则为 ACTIVE。 | 不 | 不 | DateTime | String:Uid |
| DateTime | 仅用于读取数据。拥有事件的注册状态。不适用于 EVENT PROGRAM | 不 | 不 | 枚举 | String:Uid |
| orgUnit | 项目 | 是的 | 不 | String:Uid | ABCDEF12345 |
| 组织单位名称 | 仅用于读取数据。用户登记事件的组织单位名称。 | 不 | 不 | 不 | 塞拉利昂 |
| createdAt | 用户创建事件的时间戳。在服务器上设置。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| createdAtClient | 用户在客户端创建事件的时间戳 | 不 | 不 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAt | 事件最后更新的时间戳。在服务器上设置。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAtClient | 客户端最后一次更新事件的时间戳 | 不 | 不 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
If not otherwise specified, JSON is the default response for the GET method. The API also | |||||
| supports CSV export for single and collection endpoints. Furthermore, it supports compressed | |||||
| JSON and CSV for the collection endpoint. | 事件计划发生的时间戳。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| To retrieve an event with a specific ID: | updatedAt | 是的 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
WKT, can be omitted it in case of a Point type and with latitude and longitude provided | 用户完成事件的时间戳。在服务器上设置。 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| 日期时间 | 关于完成活动者的参考信息 | 不 | 不 | 不 | Boolean |
| 跟进 | 表示事件是否被标记为需要跟进。如果未提供,则为假 | 不 | 不 | 布依兰 | Default: False, True |
| deleted | 表示事件是否已被删除。它只能在删除时更改。 | 不 | 是的 | Boolean | Date:ISO 8601 |
| geometry | 事件的地理表示。基于节目阶段的 "特征类型 | 不 | 不 | GeoJson | { "type": "POINT", "coordinates": [123.0, 123.0] } |
| 日期时间 | 跟进 | 不 | 不 | 不 | Boolean |
| GET /api/metadata/proposals/ | 仅用于读取数据。创建对象的用户。在服务器上设置 | 不 | 是的 | 用户 | String:Any |
Latitude of a Point type of Geometry | 仅用于读取数据。最后更新对象的用户。在服务器上设置 | 不 | 是的 | 用户 | { "uid": "ABCDEF12345", "用户名": "用户名", "名字": "约翰", "姓氏": "Doe" } |
| > 注 | |||||
| > | |||||
| > 以下属性可能使用了外部系统的引用,因此被特意排除在合并之外。如果这些字段出现问题,可能需要更新。 | |||||
| > | |||||
| > 指标: aggregateExportCategoryOptionCombo & aggregateExportAttributeOptionCombo | |||||
| > | |||||
| > 项目指标: aggregateExportCategoryOptionCombo & aggregateExportAttributeOptionCombo | storedBy | 不 | 不 | String:Uid | ABCDEF12345 |
| boolean | createdBy | 不 | 不 | String:Uid | ABCDEF12345 |
| 布尔 | updatedBy | 不 | 不 | 用户 | String:Any |
| { "uid": "ABCDEF12345", "username": "username", "firstName": "John", "surname": "Doe" } | attributeOptionCombo | 不 | 不 | 数据元素值列表 | 查看数据值 |
| { "uid": "ABCDEF12345", "username": "username", "firstName": "John", "surname": "Doe" } | attributeCategoryOptions | 不 | 不 | 不 | String:Uid |
| ABCDEF12345 | assignedUser | 不 | 是的 | 不 | 用户 |
关系{ #relationship }¶
关系 "是连接其他两个跟踪器对象的对象。关系的每一方必须遵守的约束条件都是基于 "关系 "的 "关系类型"。
| 指标组 | 描述 | 需要 | 是的 | 类型 | 例 |
|---|---|---|---|---|---|
| A list of relationships connected to the event. | 不 | 不 | 是的 | String:Uid | ABCDEF12345 |
| Notes connected to the event. It can only be created. | 不 | 是的 | 是的 | String:Uid | ABCDEF12345 |
Relationships are objects that link together two other tracker objects. The constraints each side | |||||
of the relationship must conform to are based on the Relationship Type of the Relationship. | 仅用于读取数据。此关系的关系类型名称 | 不 | 不 | 不 | 类型 |
| createdAt | relationship | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAt | relationshipType | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| Sibling | createdAt | 不 | 不 | Boolean | Date:ISO 8601 |
| YYYY-MM-DDThh:mm:ss | 关系中每一方的引用。必须符合关系类型中设置的约束条件 | 是的 | 是的 | 是的 | Date:ISO 8601 |
注
关系项 "代表一个对象的链接。由于 "关系 "可以是 "被跟踪实体"、"注册 "和 "事件 "等任何跟踪对象之间的关系,因此其值取决于 "关系类型"。例如,如果 "关系类型 "是从 "事件 "连接到 "跟踪实体",则格式严格: ``json { "from":{ "事件":{ "event":"abcdef12345" } }, "to":{ "trackedEntity":{ "trackedEntity":"fedcba12345" } } } ```
属性¶
属性 "是描述 "被跟踪实体 "的实际值。它们可以通过 "跟踪实体类型 "或 "程序 "连接。这意味着 "属性 "既可以是 "跟踪实体 "的一部分,也可以是 "注册 "的一部分。
| 指标组 | 描述 | 需要 | 是的 | 类型 | 例 |
|---|---|---|---|---|---|
| 不 | 不 | 是的 | 是的 | String:Uid | ABCDEF12345 |
| 码 | 是的 | 不 | 不 | 不 | 属性 |
| 属性是描述被跟踪实体的值。属性可以通过 | |||||
| 通过被跟踪实体类型或项目关联。这意味着属性既可以是被追踪实体的一部分,也可以是注册的一部分。 | |||||
| 跟踪实体和注册的一部分。重要的是,一个属性只能有一个值,即使一个 | |||||
| 一个属性只能有一个值,即使一个被跟踪实体有多个注册表来定义该属性。这是因为 | |||||
| 实体最终拥有属性值。 | Property | 不 | 不 | 字符串:任意 | 名称 |
| createdAt | attribute | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAt | 码 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| 日期时间 | displayName | 不 | 不 | 不 | Boolean |
| 名称 | createdAt | 不 | 不 | DateTime | Date:ISO 8601 |
| 价值 | updatedAt | 不 | 不 | 不 | Boolean |
注
添加数据时,"属性 "只需要 "属性 "和 "值 "属性。值 "可以为空,这意味着用户应删除该值。
在跟踪对象的上下文中,我们把 "跟踪实体属性 "和 "跟踪实体属性值 "称为 "属性"。然而,属性也是自己的东西,与元数据有关。因此,将跟踪器属性和元数据属性分开至关重要。在跟踪器 API 中,可以在指定 "idScheme "时引用元数据属性(更多信息请参阅请求参数)。
数据值{ #data-values }¶
属性 "描述的是 "跟踪实体 "或 "注册",而 "数据值 "描述的是 "事件"。主要区别在于,对于给定的 "跟踪实体","属性 "只能有一个值。相比之下,"数据值 "在不同的 "事件 "中可以有许多不同的值,即使这些 "事件 "都属于同一个 "注册 "或 "跟踪实体"。
| 指标组 | 描述 | 需要 | 是的 | 类型 | 例 |
|---|---|---|---|---|---|
| 最小最大数据元素 | 不 | 是的 | 是的 | String:Uid | ABCDEF12345 |
| 价值 | 不 | 不 | 不 | 不 | 123 |
| 日期时间 | While attributes describe a tracked entity, data values describe an event. | 不 | 不 | Boolean | Immutable |
| createdAt | 例 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| updatedAt | 码 | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| 日期时间 | displayName | 不 | 不 | 不 | Boolean |
| GET /api/metadata/proposals/ | 仅用于读取数据。创建对象的用户。在服务器上设置 | 不 | 是的 | 用户 | String:Any |
Latitude of a Point type of Geometry | 仅用于读取数据。最后更新对象的用户。在服务器上设置 | 不 | 是的 | 用户 | { "uid": "ABCDEF12345", "用户名": "用户名", "名字": "约翰", "姓氏": "Doe" } |
注
添加数据时,
数据元素只需要 "dataElement "和 "value "属性。"value "可以为空,这意味着用户应删除该值。
跟踪笔记{ #tracker-notes }¶
DHIS2 跟踪器允许使用数据元素和跟踪实体属性捕获数据。不过,有时可能需要记录有关当前问题的补充信息或评论。此类附加信息可使用跟踪注释来捕获。跟踪注释相当于 DHIS2 聚合系统中的数据值注释。
有两种类型的跟踪记录--在事件级别记录的记录和在注册级别记录的记录。一个注册可以有一个或多个事件。关于每个事件的注释--例如,为什么某个事件错过了、重新安排了,或者为什么只填写了几个数据元素等等--都可以用事件注释记录下来。注册中的每个事件都可以有自己的故事/注释。例如,可以使用家长注册笔记记录对这些事件的整体观察。注册笔记还有助于记录取消注册的原因。何时以及如何使用注释取决于用户的想象力和使用情况。
注册和事件都可以根据需要添加备注,没有数量限制。但是,这两种备注都不能删除或更新。它们就像一本日志。如果要修改备注,可以创建另一个备注。删除备注的唯一方法是删除父对象--事件或注册。
跟踪记录没有自己的专用端点,而是作为父事件和/或注册有效载荷的一部分进行交换。下面是一个有效载荷示例。
{
"trackedEntityInstance": "oi3PMIGYJH8",
<entity_details>,
],
"enrollments": [
{
"enrollment": "EbRsJr8LSSO",
<enrollment_details>
"notes": [
{
"note": "vxmCvYcPdaW",
"value": "Enrollment note 2.",
},
{
"value": "Enrollment note 1",
}
],
"events": [
{
"event": "zfzS9WeO0uM",
<event_details>,
"notes": [
{
"note": "MAQFb7fAggS",
"value": "Event Note 1.",
},
{
"value": "Event Note 2.",
}
],
},
{
...
}
]
}
]
}
| 指标组 | 描述 | 需要 | 是的 | 类型 | 例 |
|---|---|---|---|---|---|
| updatedBy | Only for reading data. User that last updated the object. Set on the server. | 不 | 是的 | String:Uid | ABCDEF12345 |
| 价值 | 笔记 | 是的 | 是的 | 不 | Notes do not have a dedicated endpoint; they are exchanged as part of the parent event and/or |
| enrollment payload. A sample payload is found below. | |||||
| ```json | |||||
| { | |||||
| "trackedEntity": "oi3PMIGYJH8", | |||||
| "enrollments": [ | |||||
| { | |||||
| "enrollment": "EbRsJr8LSSO", | |||||
| "notes": [ | |||||
| { | |||||
| "note": "vxmCvYcPdaW", | |||||
| "value": "Enrollment note 1" | |||||
| }, | |||||
| { | |||||
| "value": "Enrollment note 2." | |||||
| } | |||||
| ], | |||||
| "events": [ | |||||
| { | |||||
| "event": "zfzS9WeO0uM", | |||||
| "notes": [ | |||||
| { | |||||
| "note": "MAQFb7fAggS", | |||||
| "value": "Event Note 1." | |||||
| }, | |||||
| { | |||||
| "value": "Event Note 2." | |||||
| } | |||||
| ] | |||||
| } | |||||
| ] | |||||
| } | |||||
| ] | |||||
| } | |||||
| ``` | Property | 不 | 是的 | Date:ISO 8601 | YYYY-MM-DDThh:mm:ss |
| 日期时间 | note | 不 | 不 | 不 | Boolean |
| GET /api/metadata/proposals/ | 仅用于读取数据。创建对象的用户。在服务器上设置 | 不 | 是的 | 用户 | String:Any |
用户¶
| 指标组 | 描述 | 需要 | 是的 | 类型 | 例 |
|---|---|---|---|---|---|
| storedByDataValue | Client reference for who stored/created the note. | 不 | 是的 | String:Uid | ABCDEF12345 |
| 用户名 | Only for reading data. User that created the object. Set on the server. | 是的* | 是的 | 不 | 123 |
| { "uid": "ABCDEF12345", "username": "username", "firstName": "John", "surname": "Doe" } | Users | 不 | 是的 | 不 | Immutable |
| 类型 | 例 | 不 | 是的 | 字符串:任意 | 是的 |
必须提供
uid或username字段中的一个。如果两个都提供,则只考虑用户名。
计划阶段工作清单{ #webapi_working_list_filters }¶
采集应用项目中的项目阶段工作列表功能旨在显示与特定项目阶段相关的预设工作列表。此功能可让用户保存与节目阶段相关的筛选器和排序首选项,从而方便组织和管理他们的工作流程。要与它们交互,您需要使用 /api/programStageWorkingLists 资源。这些列表可以共享,并遵循与其他元数据相同的共享模式。使用 /api/sharing 时,类型参数将为 programStageWorkingLists。
/api/40/programStageWorkingLists
将 CRUD 操作的有效载荷转入项目阶段工作列表{ #payload-on-crud-operations-to-program-stage-working-lists }¶
上述端点可用于获取所有项目阶段工作列表。 要获取单个列表,只需在末尾添加您感兴趣的列表 id 即可。如果要删除,也是一样。 另一方面,如果要创建或更新项目阶段工作列表,除了上述端点外,还需要提供以下格式的有效载荷:
"assignedUsers":["DXyJmlo9rge"]
| Table: Period filter definition | 描述 | 例 |
|---|---|---|
| 名称 | periodFrom | |
| 描述 | Protected | |
| 项目 | 包含项目 ID 的对象。必须填写。 | {"id" : "uy2gU8kTjF"} |
| 项目阶段 | 包含项目阶段 ID 的对象。必须填写。 | {"id" : "oRySG82BKE6"} |
| 项目阶段查询标准 | 代表各种可能过滤值的对象。请参阅下面的*项目阶段查询标准*定义表。 |
/api/programStageWorkingLists
| Payload | 描述 | 例 |
|---|---|---|
| 用户友好型消息,说明操作是否成功。 | 事件状态。可能的值是 "活动"、"已完成"、"已访问"、"已安排"、"逾期"、"已跳过 "和 "已访问"。 | "状态": "已访问 |
| Name of the working list. Required. | DateFilterPeriod 对象,根据事件创建日期进行过滤。 | {"type":"ABSOLUTE","startDate":"2020-03-01","endDate":"2022-12-30"} |
If not otherwise specified, JSON is the default response for the GET method. The API also | ||
| supports CSV export for single and collection endpoints. Furthermore, it supports compressed | ||
| JSON and CSV for the collection endpoint. | DateFilterPeriod 对象,根据事件计划日期进行过滤。 | {"类型":"相对","期间":"今天"}。 |
| DateTime | 任何有效的 ProgramStatus。可能的值有 "激活"、"已完成 "和 "已取消"。 | "enrollmentStatus"(注册状态):"已完成" |
| 跟进 | Criteria values | "followUp":true |
| 例 | DateFilterPeriod 对象,根据事件注册日期进行过滤。 | "enrolledAt":{"type": "RELATIVE", "period": "THIS_MONTH"}。 |
"status":"VISITED" | DateFilterPeriod 对象,根据事件发生日期进行过滤。 | {"类型": "相对", "周期": "本月"} } |
| orgUnit | eventOccurredAt | "orgUnit":"Rp268JB6Ne4" |
{"type":"RELATIVE","period":"TODAY"} | eventScheduledAt | "项目":"a3kGcGDCuk6" |
| Enum | 事件的有效用户选择模式。可能的值有 CURRENT、PROVIDED、NONE、ANY 和 ALL。如果是 PROVIDED(或空),则有效负载中的分配用户应为非空。 | Any valid EnrollmentStatus. Options are ACTIVE, COMPLETED and CANCELLED. |
| Property | 事件的指定用户列表。与上述 PROVIDED assignedUserMode 一起使用。 | Indicates whether to filter enrollments marked for follow up or not |
| iasc 和 idesc 是不区分大小写的排序。如果需要对多个属性进行排序,请使用逗号将它们分开。 | enrolledAt | DateFilterPeriod object filtering based on the event enrollment date. |
"enrolledAt": {"type":"RELATIVE","period":"THIS_MONTH"} | enrollmentOccurredAt | DateFilterPeriod object filtering based on the event occurred date. |
{"type":"RELATIVE","period":"THIS_MONTH"} | orgUnit | A valid organisation unit UID |
| A description of the working list. | 属性值筛选器列表。在列出跟踪实体实例时,用于指定属性值筛选器 | A valid OU selection mode |
请看下面的有效载荷示例:
``json { "name": "Test WL"、 "program":{"id":"uy2gU8kT1jF"}, "programStage":{"id":"oRySG82BKE6"}, "描述":"测试 WL 定义"、 "programStageQueryCriteria": { "status": "VISITED"、 "eventCreatedAt":{"type":"ABSOLUTE","startDate":"2020-03-01","endDate":"2022-12-30"}, "scheduledAt":{"类型":"相对","期间":"今日"}、 "enrollmentStatus":"COMPLETED"、 "followUp" : true、 "enrolledAt":{"type": "RELATIVE", "period": "THIS_MONTH"}、 "enrollmentOccurredAt":{"类型":"相对","期间":"THIS_MONTH"}、 "orgUnit":"Rp268JB6Ne4"、 "ouMode":"SELECTED"、 "assignedUserMode": "PROVIDED"、 "assignedUsers":["DXyJmlo9rge"]、 "订单":"w75KJ2mc4zz:asc"、 "displayColumnOrder":["w75KJ2mc4zz", "zDhUuAYrxNC"]、 "dataFilters":[{ "dataItem":"GXNUsigphqK"、 "ge":"10", "le":"20" }], "attributeValueFilters":[{ "attribute":"ruQQnf6rswq"、 "eq":"15" }] } }
## Tracker Import (`POST /api/tracker`) { #webapi_nti_import }
The `POST /api/tracker` endpoint allows clients to import the following tracker objects into DHIS2:
* **跟踪实体**
* **入学人数**
* **活动**
* **关系**
* 嵌入其他[跟踪器对象]的数据(#webapi_nti_tracker_objects)
与其他跟踪器导入端点相比,主要变化有
1. 导入有效载荷可****嵌套式****或****扁平式****
2. 调用可以是****同步****或****异步****
3. 导入 ***CSV*** 事件有效载荷
### 请求参数{ #request-parameters }
目前,跟踪器导入端点支持以下参数:
| existing tracked entity UIDs | 描述 | 类型 | `order` |
|---|---|---|---|
| 异步导入时,会立即返回一个 *Location* 标头,指向 *importReport* 的位置。有效载荷还包含一个已创建任务的 json 对象。 | To resolve this, either: | Boolean | 跟踪器或事件项目的标识符。该参数为必填参数。 |
| ```
GET /tracker/jobs/{uid}
``` | The endpoint `POST /api/tracker` is also called the tracker importer. This endpoint allows clients
to import i.e. create, update and delete | DateTime | Enrollments |
| 设置整体导入模式,决定是否仅 `VALIDATE` 或也 `COMMIT` 元数据,这与我们旧的 dryRun 标志具有相似的功能。 | 表示导入模式。可以是仅验证(干运行)或提交(默认)。 | DateTime | 跟踪器导入项目支持以下参数: |
| 方案 | 表示导入时元数据引用使用的总体 idScheme。默认为 UID。可为特定元数据重写(如下所列) | DateTime | uid"、"代码"、"名称"、"属性 |
| 数据元素标识方案 | 表示导入数据元素时使用的 idScheme。 | DateTime | uid"、"代码"、"名称"、"属性 |
| programStageIdScheme | 表示导入时组织单位要使用的 idScheme。 | DateTime | uid"、"代码"、"名称"、"属性 |
| 程序标识方案 | 表示导入项目时使用的 idScheme。 | DateTime | uid"、"代码"、"名称"、"属性 |
| 程序阶段标识方案 | 表示导入时用于项目阶段的 idScheme。 | DateTime | uid"、"代码"、"名称"、"属性 |
| programIdScheme | 表示导入时类别选项组合使用的 idScheme。 | DateTime | uid"、"代码"、"名称"、"属性 |
| `UID`, `CODE`, `NAME`, `ATTRIBUTE:{uid}` | 表示导入时类别选项使用的 idScheme。 | DateTime | uid"、"代码"、"名称"、"属性 |
| Sets import strategy, `CREATE_AND_UPDATE` will try and match on identifier, if it doesn't exist, it will create the object. | Enum | DateTime | `idScheme` parameter |
| 设置原子模式,在旧的导入器中,我们总是进行*best effort*导入,这意味着即使某些引用不存在,我们仍然会导入(即数据元素组导入时缺少数据元素)。新进口商的默认设置是不允许这样做,并且类似地拒绝任何验证错误。设置 `NONE` 模式模拟了旧的行为. | Enum | DateTime | `idScheme` parameter |
| 设置刷新模式,控制何时刷新内部缓存。*强烈*建议将其保留为`AUTO`(这是默认设置)。仅将 `OBJECT` 用于调试目的,您会看到休眠异常并想查明堆栈发生的确切位置(休眠只会在刷新时抛出,因此很难知道哪个对象有问题)。 | Enum | DateTime | `idScheme` parameter |
| IdScheme used for category option references. Defaults to the `idScheme` parameter. | 表示验证步骤的完整性。可以跳过、设置为快速失败(第一次出错时返回)或完全失败(默认),后者将返回发现的所有错误。 | DateTime | `idScheme` parameter |
| Indicates the effect the import should have. Can either be `CREATE`, `UPDATE`, `CREATE_AND_UPDATE` and `DELETE`, which respectively only allows importing new data, importing changes to existing data, importing any new or updates to existing data, and finally deleting data. | Enum | Boolean | 跟踪器或事件项目的标识符。该参数为必填参数。 |
| Indicates how the import responds to validation errors. If `ALL`, all data imported must be valid for any data to be committed. For `OBJECT`, only the data committed needs to be valid, while other data can be invalid. | Enum | Boolean | 跟踪器或事件项目的标识符。该参数为必填参数。 |
| Indicates the frequency of flushing. This is related to how often data is pushed into the database during the import. Primarily used for debugging reasons, and should not be changed in a production setting | 如果为 "true",它将跳过运行导入的任何项目规则 | Boolean | 跟踪器或事件项目的标识符。该参数为必填参数。 |
**注意**:idScheme 及其元数据特定 idScheme 参数,如
orgUnitIdScheme、programIdScheme......用于允许和使用默认的 `AUTO`。
AUTO` 已被删除。默认 idScheme 已为 `UID`。任何
idScheme "AUTO "发送的请求将与之前的行为相同,即使用 "UID
使用 `UID`进行匹配。
### 扁平和嵌套有效载荷{ #flat-and-nested-payloads }
导入器支持平面和嵌套有效载荷。主要区别在于客户对数据结构的要求不同。
** 平坦部**
: 扁平结构有效载荷简单明了。它可以包含我们拥有的每个核心跟踪器对象的集合。这可与已分配了 UID 的现有数据无缝配合。但是,对于新数据,客户端必须为对象之间的任何引用提供新的 UID。例如,如果您导入一个带有新注册信息的新跟踪实体,则该跟踪实体要求客户端提供一个 UID,以便将注册信息与该 UID 相链接。
**嵌套**
: 嵌套有效载荷是最常用的结构。在这里,跟踪对象被嵌入其父对象中;例如,跟踪实体中的注册。这种结构的优点是,客户端不需要为这些连接提供 UID,因为在导入过程中,它们会被赋予这种连接,因为它们是嵌套在一起的。
> **注**
>
> 虽然嵌套有效载荷可能会让客户端更容易处理,但有效载荷总是会在导入前被扁平化。这意味着,对于大型导入,提供扁平结构的有效载荷既能提供更多控制,又能降低导入过程本身的开销。
下面列出了**FLAT**和**NESTED**版本有效载荷的示例。两种情况使用的数据相同。
#### ***扁平***有效载荷{ #flat-payload }
``json
{
"trackedEntities":[
{
"orgUnit":"O6uvpzGd5pu"、
"trackedEntity":"Kj6vYde4LHh"、
"trackedEntityType":"Q9GufDoplCL"
}
],
"注册":[
{
"orgUnit":"O6uvpzGd5pu"、
"program":"f1AyMswryyQ"、
"trackedEntity":"Kj6vYde4LHh"、
"注册": "MNWZ6hnn"MNWZ6hnuhSw"、
"trackedEntityType":"Q9GufDoplCL"、
"enrolledAt":"2019-08-19T00:00:00.000",
"deleted": false、
"occurredAt":"2019-08-19T00:00:00.000",
"状态":"ACTIVE"、
"备注":[],
属性[],
}
],
"事件":[
{
"scheduledAt":"2019-08-19T13:59:13.688",
"程序":"f1AyMswryyQ"、
"事件":"ZwwuwNp6gVd"、
"programStage":"nlXNK4b7LVr"、
"orgUnit":"O6uvpzGd5pu"、
"trackedEntity":"Kj6vYde4LHh"、
"enrollment":"MNWZ6hnuhSw"、
"enrollmentStatus":"ACTIVE"、
"状态":"ACTIVE"、
"occurredAt":"2019-08-01T00:00:00.000",
"attributeCategoryOptions":"xYerKDKCefk"、
"deleted": false、
"attributeOptionCombo":"HllvX50cXC0"、
"dataValues":[
{
"updatedAt":"2019-08-19T13:58:37.477",
"storedBy":"admin"、
"dataElement":"BuZ5LGNfGEU"、
"值":"20",
"providedElsewhere": false
},
{
"updatedAt":"2019-08-19T13:58:40.031",
"storedBy":"admin"、
"dataElement":"ZrqtjjveTFc"、
"值":"男性"、
"providedElsewhere": false
},
{
"updatedAt":"2019-08-19T13:59:13.691",
"storedBy":"admin"、
"dataElement":"mB2QHw1tU96"、
"值":"[-11.566044,9.477801]",
"providedElsewhere": false
}
],
"备注":[]
},
{
"scheduledAt":"2019-08-19T13:59:13.688",
"程序":"f1AyMswryyQ"、
"事件":"XwwuwNp6gVE"、
"programStage":"PaOOjwLVW23"、
"orgUnit":"O6uvpzGd"O6uvpzGd5pu"、
"trackedEntity":"Kj6vYde4LHh"、
"enrollment":"MNWZ6hnuhSw"、
"enrollmentStatus":"ACTIVE"、
"状态":"ACTIVE"、
"occurredAt":"2019-08-01T00:00:00.000",
"attributeCategoryOptions":"xYerKDKCefk"、
"deleted": false、
"attributeOptionCombo":"HllvX50cXC0"、
"备注":[]
}
],
"关系":[
{
"relationshipType":"Udhj3bsdHeT"、
"来自":{
"trackedEntity":{ "trackedEntity":"Kj6vYde4LHh" }
},
"到":{
"trackedEntity":{ "trackedEntity":"Gjaiu3ea38E" }
}
}
]
}
NESTED 有效载荷{ #nested-payload }¶
``json { "trackedEntities":[ { "orgUnit":"O6uvpzGd5pu"、 "trackedEntity":"Kj6vYde4LHh"、 "trackedEntityType":"Q9GufDoplCL"、 "关系":[ { "relationshipType":"Udhj3bsdHeT"、 "来自":{ "trackedEntity":{ "trackedEntity":"Kj6vYde4LHh" } }, "到":{ "trackedEntity":{ "trackedEntity":"Gjaiu3ea38E" } } } ], "注册":[ { "orgUnit":"O6uvpzGd5pu"、 "program":"f1AyMswryyQ"、 "trackedEntity":"Kj6vYde4LHh"、 "注册": "MNWZ6hnn"MNWZ6hnuhSw"、 "trackedEntityType":"Q9GufDoplCL"、 "enrolledAt":"2019-08-19T00:00:00.000", "deleted": false、 "occurredAt":"2019-08-19T00:00:00.000", "状态":"ACTIVE"、 "备注":[], "关系":[], 属性[], "事件": [[ { "scheduledAt":"2019-08-19T13:59:13.688", "程序":"f1AyMswryyQ"、 "事件":"ZwwuwNp6gVd"、 "programStage":"nlXNK4b7LVr"、 "orgUnit":"O6uvpzGd5pu"、 "trackedEntity":"Kj6vYde4LHh"、 "enrollment":"MNWZ6hnuhSw"、 "enrollmentStatus":"ACTIVE"、 "状态":"ACTIVE"、 "occurredAt":"2019-08-01T00:00:00.000", "attributeCategoryOptions":"xYerKDKCefk"、 "deleted": false、 "attributeOptionCombo":"HllvX50cXC0"、 "dataValues":[ { "updatedAt":"2019-08-19T13:58:37.477", "storedBy":"admin"、 "dataElement":"BuZ5LGNfGEU"、 "值":"20", "providedElsewhere": false }, { "updatedAt":"2019-08-19T13:58:40.031", "storedBy":"admin"、 "dataElement":"ZrqtjjveTFc"、 "值":"男性"、 "providedElsewhere": false }, { "updatedAt":"2019-08-19T13:59:13.691", "storedBy":"admin"、 "dataElement":"mB2QHw1tU96"、 "值":"[-11.566044,9.477801]", "providedElsewhere": false } ], "注释":[], "关系":[] }, { "scheduledAt":"2019-08-19T13:59:13.688", "程序":"f1AyMswryyQ"、 "事件":"XwwuwNp6gVE"、 "programStage":"PaOOjwLVW23"、 "orgUnit":"O6uvpzGd"O6uvpzGd5pu"、 "trackedEntity":"Kj6vYde4LHh"、 "enrollment":"MNWZ6hnuhSw"、 "enrollmentStatus":"ACTIVE"、 "状态":"ACTIVE"、 "occurredAt":"2019-08-01T00:00:00.000", "attributeCategoryOptions":"xYerKDKCefk"、 "deleted": false、 "attributeOptionCombo":"HllvX50cXC0"、 "备注":[], "关系":[] } ] } ] } ] }
### SYNC 和 ASYNC{ #sync-and-async }
对用户而言,同步导入与异步导入的主要区别在于 API 的即时响应。对于同步导入,一旦导入完成,将立即返回导入摘要(importSummary)。但是,对于异步导入,响应将是即时的,并包含客户端可以轮询导入更新的引用。
对于重要的导入,客户端使用异步导入可能会有好处,可以避免等待响应的时间过长。
下面是**ASYNC**响应的示例。关于 **SYNC** 响应,请查看 [importSummary 部分](#webapi_nti_import_summary)。
``json
{
"httpStatus":"OK"、
"httpStatusCode":200,
"status":"确定"、
"信息":"已添加跟踪任务"、
"响应":{
"responseType":"TrackerJob"、
"id":"LkXBUdIgbe3"、
"location":"https://play.dhis2.org/dev/api/tracker/jobs/LkXBUdIgbe3"
}
}
CSV 事件有效载荷{ #csv-events-payload }¶
为了保持与旧版本跟踪器的兼容性,API 允许使用 CSV 格式导入事件。 由于这种格式不允许将列表作为字段,因此 CSV 有效载荷的每一行都代表一个事件和一个数据值。 因此,对于具有多个数据值的事件,CSV 文件中每个事件将有 x 行,其中 x 是该事件中数据值的数量。 不支持其他列为***关系***和***注释***的字段。 要导入 CSV 有效负载,必须将请求的内容类型设置为 application/csv 或 text/csv 。
CSV PAYLOAD 示例{ #csv-payload-example }¶
|The message text.|用户友好型消息,说明操作是否成功。|项目|项目阶段|文本|orgUnit|To retrieve an event with a specific ID:|If not otherwise specified, JSON is the default response for the GET method. The API also supports CSV export for single and collection endpoints. Furthermore, it supports compressed JSON and CSV for the collection endpoint.|最小最大数据元素|价值|日期时间|日期时间 |---|---|---|---|---|---|---|---|---|---|---|---| |V1CerIi3sdL|已完成|IpHINAT79UW|A03MvHHogjR|CCBLMntFuzb|DiszpKrYNg8|2020-02-26T23:00:00Z|2020-02-27T23:00:00Z|a3kGcGDCuk6|11|管理|假 |V1CerIi3sdL|已完成|IpHINAT79UW|A03MvHHogjR|CCBLMntFuzb|DiszpKrYNg8|2020-02-26T23:00:00Z|2020-02-27T23:00:00Z|mB2QHw1tU96|[-11.566044,9.477801]|管理|假
导入摘要{ #webapi_nti_import_summary }¶
Tracker API 有两个主要端点,供消费者从导入中获取反馈。这些端点与异步导入作业最为相关,但也适用于同步作业。这些端点将返回与导入相关的日志或导入摘要本身。
注
这些端点依赖于应用项目内存中存储的信息。这意味着在某些情况下,如应用项目重启或在此请求之后有大量导入请求启动后,信息将不可用。
提交跟踪器导入请求后,我们可以访问以下端点,以便根据日志监控工作进度:
GET /tracker/jobs/{uid}
| 默认值 | 描述 | 例 |
|---|---|---|
{uid} | 现有跟踪器导入任务的 UID | ABCDEF12345 |
请求* 示例{ #request-example }¶
GET /tracker/jobs/mEfEaFSCKCC
****回复****示例{ #response-example }¶
[
{
"uid": "mEfEaFSCKCC",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:06.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) finished in 6.00000 sec. Import:Done",
"completed": true,
"id": "mEfEaFSCKCC"
},
{
"uid": "mEfEaFSCKCC",
"level": "DEBUG",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:05.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) commit completed in 1.00000 sec. Import:commit",
"completed": true,
"id": "mEfEaFSCKCC"
},
{
"uid": "mEfEaFSCKCC",
"level": "DEBUG",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:04.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) programruleValidation completed in 1.00000 sec. Import:programruleValidation",
"completed": true,
"id": "mEfEaFSCKCC"
},
{
"uid": "mEfEaFSCKCC",
"level": "DEBUG",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:03.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) programrule completed in 1.00000 sec. Import:programrule",
"completed": true,
"id": "mEfEaFSCKCC"
},
{
"uid": "mEfEaFSCKCC",
"level": "DEBUG",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:02.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) validation completed in 1.00000 sec. Import:validation",
"completed": true,
"id": "mEfEaFSCKCC"
},
{
"uid": "mEfEaFSCKCC",
"level": "DEBUG",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:01.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) preheat completed in 1.00000 sec. Import:preheat",
"completed": true,
"id": "mEfEaFSCKCC"
},
{
"uid": "mEfEaFSCKCC",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2021-01-01T00:00:00.00",
"message": "TRACKER_IMPORT_JOB ( mEfEaFSCKCC ) started by admin ( xE7jOejl9FI ) Import:Start",
"completed": true,
"id": "mEfEaFSCKCC"
}
]
此外,以下端点将返回导入任务的导入摘要。导入摘要只有在导入完成后才能使用:
GET /tracker/jobs/{uid}/report
| 默认值 | 描述 | 例 |
|---|---|---|
fields | 现有跟踪器导入任务的 UID | ABCDEF12345 |
| 报告模式 | 要返回的报告级别 | FULL|ERRORS|WARNINGS |
请求* 示例{ #request-example }¶
GET /tracker/jobs/mEfEaFSCKCC/report.
****回复****示例{ #response-example }¶
响应有效载荷](#sample-responses)与同步导入请求后返回的有效载荷相同。
注
这两个端点主要用于异步导入;不过,
GET /tracker/jobs/{uid}也可用于同步请求,因为它最终会使用与异步请求相同的导入流程和日志记录。
导入摘要结构{ #import-summary-structure }¶
Response example ``json { "status":"...", "validationReport":{ }, "统计":{ }, "timingsStats":{ }, "bundleReport":{ }, "message" : { } }
***状态****
导入摘要的属性 "status "表示导入的整体状态。如果在导入过程中没有出现错误或警告,"status "将报告为 "OK"。如果导入过程中出现任何错误或警告,则状态类型为 `ERROR` 或 `WARNING`。
状态 "基于最重要的 "验证报告"。ERROR "的重要性最高,其次是 "WARNING",最后是 "OK"。这意味着,只要在导入过程中发现一个错误,就会报告`ERROR`,而不管出现多少警告。
> **注**
>
> 如果使用 AtomicMode "OBJECT"(原子模式)执行导入,导入时将导入任何数据而不会出现验证错误,但如果发现任何错误,总体状态仍将是 "ERROR"。
***验证报告****
如果在导入过程中出现任何错误或警告,"validationReport "可能包括 "errorReports "和 "warningReports"。如果存在,它们会提供遇到的任何错误或警告的详细列表。
ID of an existing tracker import job.
```json
{
"validationReport": {
"errorReports": [
{
"message": "Could not find TrackedEntityType: `Q9GufDoplCL`.",
"errorCode": "E1005",
"trackerType": "TRACKED_ENTITY",
"uid": "Kj6vYde4LHh"
},
...
],
"warningReports" : [ ... ]
}
}
The report contains a message and a code describing the actual error (See the error codes section for more information about errors). Additionally, the report includes the trackerType and uid, which aims to describe where in the data the error was found. In this case, there was a TRACKED_ENTITY with the uid Kj6vYde4LHh, which had a reference to a tracked entity type that was not found.
注
当提及跟踪对象的
uid时,它们在有效载荷中被标记为对象名称。例如,被跟踪实体的uid在有效载荷中的名称是 "trackedEntity"。同样,"注册"、"事件 "和 "关系 "也分别代表注册、事件和关系。如果有效负载中没有提供 uid,导入过程将生成新的 uid。这意味着错误报告可能会提到一个不存在于有效负载中的 uid。
错误代表有效载荷中存在导入项目无法规避的问题。任何错误都会阻止数据的导入。另一方面,警告是指可以安全规避的问题,但应让用户知道发生了这种情况。警告不会阻止数据导入。
统计*
统计信息提供了导入的快速概览。导入完成后,这些将是实际计数,代表创建、更新、删除或忽略了多少数据。
例:
{
"stats": {
"created": 2,
"updated": 2,
"deleted": 1,
"ignored": 5,
"total": 10
}
}
created 指创建了多少个新对象。一般来说,有效载荷中没有 uid 的对象将被视为新对象。 updated 指更新对象的数量。如果一个对象在有效负载中设置了 uid,只要数据库中存在相同的 uid,就会被视为更新。
deleted "指的是导入过程中删除的对象数量。只有当导入配置为删除数据时才会删除,而且只有在有效载荷中的对象设置了现有 uids 时才会删除。
忽略 "指的是未被持久化的对象。对象被忽略有多种原因,例如试图创建已经存在的对象。忽略应始终是安全的,因此,如果某个对象被忽略,那么它是不必要的,或者是由于导入的配置造成的。
时间统计*
timingStats "表示导入不同步骤所花费的时间。这些统计信息并不提供导入的准确总时间,而是不同步骤在代码中花费的时间。
timingStats "主要用于调试导致问题的导入,以查看问题出在导入的哪个部分。
{
"timingsStats": {
"timers": {
"preheat": "0.234086 sec.",
"preprocess": "0.000058 sec.",
...
"totalImport": "0.236810 sec.",
"validation": "0.001533 sec."
}
}
}
捆绑报告*
状态
例如,TRACKED_ENTITY: ``json { "bundleReport":{ "typeReportMap":{ "tracked_entity":{ "trackerType":"tracked_entity"、 "统计":{ "创建":1, "updated":0, "删除":0, "忽略":0, "总数": 1 }, "objectReports":[ { "trackerType":"tracked_entity"、 "uid":"FkxTQC4EAKK"、 "index":0, "errorReports":[] } ] }, ... } } }
如图所示,每种类型的跟踪器对象都将被报告,每种类型都有自己的统计信息和 `对象报告`。这些 `objectReports` 将提供每个导入对象的详细信息,如类型、uid 以及任何适用的错误或警告报告。
***信息****
如果导入突然结束,"信息 "将包含与所发生情况有关的更多信息。
### 导入摘要报告级别{ #import-summary-report-level }
如前所述,可以使用特定的 `reportMode` 参数检索 `GET /tracker/jobs/{uid}/report`。默认情况下,该端点将返回一个`reportMode``ERROR`的`importSummary`。
| 默认值 | 描述 |
|---|---|
| importStrategy | The stats object provides an overview of the import operation. After an import is completed, these will be the
actual counts displaying how many objects were created, updated, deleted and ignored. |
| 警报 | ```json
{
"stats": {
"created": 2,
"updated": 2,
"deleted": 1,
"ignored": 5,
"total": 10
}
}
``` |
| ERRORS"(默认值) | The `updated` field refers to the number of objects updated. If an object has a uid set in the payload, it
will be treated as an update as long as that same uid exists in the database. |
此外,所有 `reportMode` 都会在适用时返回 `status`、`stats`、`bundleReport` 和 `message` 。
### 错误代码{ #webapi_nti_error_codes }
不同的错误情形有不同的错误代码。下表列出了新 Tracker API 抛出的错误代码列表,以及错误信息和一些附加说明。错误信息中的占位符(`{0}`、`{1}`、`{2}`...)通常是 uids,除非另有说明。
| When the import is completed, the `bundleReport` contains all the [tracker objects](#tracker-objects) imported. | An example for `TRACKED_ENTITY`: | 描述 |
|:--|:----|:----|
| E1000 | 信息 | If the import ended abruptly, the `message` would contain further information in relation to what
happened. |
| E1001 | A import summary report can be retrieved using a specific `reportMode` parameter in a `GET /tracker/jobs/{uid}/report`
request. By default the endpoint will return an `importSummary` with `reportMode` `ERROR`. | Parameter
| E1002 | TrackedEntityInstance: `{0}`,已存在。 | Returns everything from `WARNINGS`, plus `timingsStats` |
| WARNINGS | Returns everything from `ERRORS`, plus `warningReports` in `validationReports` | |
| E1005 | Returns only `errorReports` in `validationReports` | In addition, all `reportModes` will return `status`, `stats`, `bundleReport` and `message` when
applicable. |
| E1006 | There are various error codes for different error scenarios. The following table has the list of
error codes thrown from the new Tracker API, along with the error messages and some additional
descriptions. The placeholders in the error messages (`{0}`,`{1}`,`{2}`..) are usually uids unless
otherwise specified. | Error Code |
| E1007 | 描述 | E1000 |
| E1009 | User: `{0}`, has no data write access to TrackedEntityType: `{1}`. | The error occurs when the user is not authorized to create or modify data of the TrackedEntityType `{1}` |
| E1010 | TrackedEntity: `{0}`, already exists. | 系统无法找到在事件有效负载中指定了 uid `{0}` 的项目。这也可能意味着登录用户无法访问特定项目。 |
| E1011 | User: `{0}`, has no write access to TrackedEntity: `{1}`. | E1005 |
| E1012 | Error thrown when trying to fetch a non existing TrackedEntityType with uid `{0}` . This might also mean that the user does not have read access to the TrackedEntityType. | E1006 |
| E1013 | Error thrown when the system was not able to find a matching TrackedEntityAttribute with uid `{0}`. This might also mean that the user does not have access to the TrackedEntityAttribute. | E1007 |
| E1014 | Mismatch between value type of a TrackedEntityAttribute and its provided attribute value. The actual validation error will be displayed in `{1}`. | E1008 |
| E1015 | TrackedEntityInstance: `{0}`, 已经在计划 `{1}` 中注册。 | 如果该计划已存在另一个有效注册,则不能注册该计划。至少必须先完成当前注册。 |
| E1016 | TrackedEntityInstance: `{0}`, 已经在 Program. ` 中注册:{1}`,而且该项目只允许注册一次。 | 根据项目 `{1}` 配置,一个 TrackedEntity 只能注册该项目一次。看起来 TrackedEntity `{0}` 已经在该项目中注册过一次。因此不能再添加另一个注册。 |
| E1018 | E1011 | 有效负载中缺少被定义为项目强制属性的属性值。确保在有效负载中提供强制属性的属性值。 |
| E1019 | E1012 | 注册有效负载中指定的属性 uid `{0}` 与项目无关。 |
| E1020 | 注册日期:`{0}`,不能是未来日期。 | Could not find ProgramStage: `{0}`, linked to Event. |
| E1021 | 事件日期:`{0}`,不能是未来日期。 | 事件发生日期不能是未来日期,除非项目在配置中允许这样做。 |
| E1022 | TrackedEntityInstance: `{0}`,必须与 Program `{1}` 具有相同的 TrackedEntityType。 | 项目被配置为接受与注册有效负载中提供的不同的 TrackedEntityType uid。 |
| E1023 | DisplayIncidentDate 为 true,但属性 occurredAt 为空或格式无效:{0}`。 | 项目已配置 DisplayIncidentDate,但有效载荷中的日期要么为空,要么无效。 |
| E1025 | 属性 enrolledAt 为空或格式无效:{0}`。 | EnrolledAt Date 是注册的必填项。请确保它不是空值,并具有有效的日期格式。 |
| E1029 | E1019 | 事件有效载荷使用项目 `{1}`,该项目未配置为可被组织单位 `{0}` 访问。 |
| E1030 | E1020 | Enrollment date: `{0}`, cannot be a future date. |
| E1031 | E1021 | Incident date: `{0}`, cannot be a future date. |
| E1032 | E1022 | |
| E1033 | 项目被配置为接受与注册有效负载中提供的不同的 TrackedEntityType uid。 | |
| E1035 | 事件:{0}`,ProgramStage 值为 NULL。 | |
| E1036 | 事件:`{0}`,TrackedEntityInstance 没有指向现有对象。 | 系统无法找到事件有效载荷中指定 uid 的 TrackedEntity。这也可能意味着用户没有读取 TrackedEntity 的权限。 |
| E1039 | DisplayIncidentDate is true but property occurredAt is null. | 特定注册的 ProgramStage 已存在一个事件。由于项目阶段被配置为不可重复,因此无法为同一项目阶段添加另一个事件。 |
| E1041 | Property enrolledAt is null. | 注册有效载荷包含一个项目 `{1}`,该项目未配置为可被组织单位 `{0}` 访问。 |
| E1042 | 事件:{0}`,需要有完成日期。 | 如果项目被配置为具有 completeExpiryDays,则 COMPLETED 事件有效负载必须具有 CompletedDate 属性。状态为 "已完成 "的事件应具有非空的 completedDate 属性和有效的日期格式。 |
| E1043 | Event OrganisationUnit: `{0}`, and Program: `{1}`, don't match. | 没有 "F_EDIT_EXPIRED "权限的用户无法更新已过期的事件,因为该事件已在其项目中配置。 |
| E1046 | Event: `{0}`, already exists. | 事件有效负载中应包含 occuredAt 或 scheduledAt 属性。 |
| E1047 | Event occurredAt date is missing. | 事件 occuredAt 或 scheduledAt 的值早于 PeriodType 开始日期。 |
| E1048 | 对象:`{0}`,uid:`{1}`,uid 格式无效。 | 有效的 uid 有 11 个字符。第一个字符必须是字母(a-z 或 A-Z),其余 10 个字符可以是字母数字(a-z 或 A-Z 或 0-9)。 |
| E1049 | Event: `{0}`, do not exist. | E1033 |
| E1050 | E1039 | ProgramStage: `{0}`, is not repeatable and an event already exists. |
| E1055 | 由于项目具有非默认的 CategoryCombo,因此不允许使用默认的 AttributeOptionCombo。 | 项目被配置为包含非默认 CategoryCombo,但请求使用了默认 AttributeOptionCombo。 |
| E1056 | Event occurredAt or scheduledAt has a value that is earlier than the PeriodType start date. | E1049 |
| E1057 | The system could not find an OrganisationUnit with uid `{0}`. | E1050 |
| E1063 | TrackedEntityInstance: `{0}`, 不存在。 | E1051 |
| E1064 | Event completedAt can only be passed in the payload if status is COMPLETED | E1052 |
| E1068 | 找不到 TrackedEntityInstance: `{0}`,链接到 Enrollment。 | E1054 |
| E1069 | E1055 | 系统无法找到注册有效负载中指定的项目。这也可能意味着用户没有项目的读取权限。 |
| E1070 | E1056 | Event date: `{0}`, is before start date: `{1}`, for AttributeOption: `{2}`. |
| E1074 | E1057 | |
| E1075 | The CategoryOption has an end date configured, the Event date in the payload cannot be later than this end date. | |
| E1076 | TrackedEntity: `{0}`, does not exist. | |
| E1077 | E1064 | |
| E1080 | Could not find TrackedEntity: `{0}`, linked to Enrollment. | The system could not find the TrackedEntity specified in the Enrollment payload. This might also mean that the user does not have read access to the TrackedEntity. |
| E1081 | Could not find Program: `{0}`, linked to Enrollment. | 系统无法找到注册有效负载中指定的项目。这也可能意味着用户没有项目的读取权限。 |
| E1082 | Could not find OrganisationUnit: `{0}`, linked to Enrollment. | The system could not find the OrganisationUnit specified in the Enrollment payload. |
| E1083 | FeatureType is missing. | E1075 |
| E1084 | 文件资源:`{0}`,无法找到引用。 | |
| E1085 | 属性:{0}`,值与值类型不匹配:`{1}`. | 属性值类型与其提供的属性值不匹配。 |
| E1089 | E1076 | `{0}` `{1}` is mandatory and can't be null |
| E1090 | Attribute: `{0}`, text value exceed the maximum allowed length: `{0}`. | E1079 |
| E1091 | E1080 | 在项目共享配置中,用户没有该项目的写入权限。 |
| E1095 | E1081 | 在项目阶段共享配置中,用户没有写入该项目阶段的权限。 |
| E1096 | E1082 | 在项目共享配置中,用户没有该项目的读取权限。 |
| E1099 | E1083 | User: `{0}`, is not authorized to modify completed events. |
| E1100 | 用户: `{0}`, 没有'F_TEI_CASCADE_DELETE'权限删除 TrackedEntityInstance: `{1}`。 | Event: `{0}`, references a Program Stage `{1}` that does not belong to Program `{2}`. |
| E1102 | 用户: `{0}`, 没有访问被跟踪实体的权限:`{1}`, 项目:`{2}`, 组合。 | 当用户的组织单位不拥有该特定项目的 TrackedEntity 的所有权时,就会抛出此错误。拥有 TrackedEntity-Program 组合的组织单位应属于用户的捕获范围(有时是搜索范围)。 |
| E1103 | E1091 | User: `{0}`, has no data write access to Program: `{1}`. |
| E1104 | E1095 | 与项目相关联的 TrackedEntityType 的共享配置规定,用户没有数据读取权限。 |
| E1112 | E1096 | User: `{0}`, has no data read access to Program: `{1}`. |
| E1113 | E1099 | User: `{0}`, has no write access to CategoryOption: `{1}`. |
| E1114 | E1100 | User: `{0}`, is lacking 'F_TEI_CASCADE_DELETE' authority to delete TrackedEntity: `{1}`. |
| E1115 | E1102 | |
| E1116 | 当用户的组织单位不拥有该特定项目的 TrackedEntity 的所有权时,就会抛出此错误。拥有 TrackedEntity-Program 组合的组织单位应属于用户的捕获范围(有时是搜索范围)。 | E1103|
| E1117 | There exists undeleted Events for this Enrollment. If the user does not have 'F_ENROLLMENT_CASCADE_DELETE' authority, then these Events has to be deleted first explicitly to be able to delete the Enrollment. | |
| E1118 | User: `{0}`, has no data read access to program: `{1}`, TrackedEntityType: `{2}`. | |
| E1119 | E1112 | |
| E1120 | 项目阶段 `{0}` 不允许用户赋值 | 事件有效载荷具有 assignedUserId,但项目阶段未配置为允许用户分配。 |
| E1121 | If the Enrollment is soft deleted, no modifications on it are allowed. | |
| E1122 | TrackedEntity: `{0}`, is already deleted and can't be modified. | |
| E1123 | E1115 | |
| E1124 | E1116 | |
| E1125 | 值 `{0}` 不是选项集 `{3}` 中 `{1}` `{2}` 的有效选项。 | |
| E1300 | 由项目规则生成 (`{0}`) - `{1}` | |
| 事件有效载荷具有 assignedUserId,但项目阶段未配置为允许用户分配。 | 由项目规则生成 (`{0}`) - 不存在强制性数据元素 `{1}` | |
| E1302 | E1122 | |
| E1303 | E1123 | |
| E1304 | E1124 | |
| E1305 | 数据元素 `{0}` 不是 `{1}` 项目阶段的一部分 | |
| E1306 | 由项目规则 (`{0}`) 生成 - 不存在强制属性 `{1}` | |
| E1307 | 由项目规则生成 (`{0}`) - 无法为数据元素 `{1}` 赋值。提供的值必须为空或与计算值 `{2}` 匹配。 | |
| E1308 | 由项目规则 (`{0}`) 生成 - 数据元素 `{1}` 被事件 `{2}` 替换 | |
| E1309 | 由项目规则 (`{0}`) 生成 - 无法为属性 `{1}` 赋值。提供的值必须为空或与计算值 `{2}` 匹配。 | |
| E1310 | 由项目规则 (`{0}`) 生成 - 属性 `{1}` 被替换为 `{2}` | |
| 由项目规则生成 (`{0}`) - 不存在强制性数据元素 `{1}` | E1302 | DataElement `{0}` is not valid: `{1}` |
| E1303 | 由项目规则 (`{0}`) 生成 - 数据元素 `{1}` 是必填项,不能删除。 | |
| E1304 | DataElement `{0}` is not a valid data element| |
| E1305 | 数据元素 `{0}` 不是 `{1}` 项目阶段的一部分 | |
| E1306 | 由项目规则 (`{0}`) 生成 - 属性 `{1}` 是强制性的,不能删除。 | |
| E4000 | 由项目规则生成 (`{0}`) - 无法为数据元素 `{1}` 赋值。提供的值必须为空或与计算值 `{2}` 匹配。 | |
| E4001 | 由项目规则 (`{0}`) 生成 - 数据元素 `{1}` 被事件 `{2}` 替换 | |
| E4006 | 由项目规则 (`{0}`) 生成 - 无法为属性 `{1}` 赋值。提供的值必须为空或与计算值 `{2}` 匹配。 | |
| E4009 | 关系类型 `{0}` 无效。 | |
| E4010 | 由项目规则 (`{0}`) 生成 - 属性 `{1}` 被替换为 `{2}` | |
| E4012 | Event {0} of an enrollment does not point to an existing tracked entity. The data in your system might be corrupted | |
| E4014 | E1314 | |
| 由项目规则 (`{0}`) 生成 - 数据元素 `{1}` 是必填项,不能删除。 | E1315 | |
| Status `{0}` does not allow defining data values. Statuses that do allow defining data values are: {1} | E1316 | |
| No event can transition from status `{0}` to status `{1}`. | E1317 | |
| 由项目规则 (`{0}`) 生成 - 属性 `{1}` 是强制性的,不能删除。 | E4000 | |
| Relationship: `{0}` cannot link to itself | E4001 | |
| Relationship Item `{0}` for Relationship `{1}` is invalid: an Item can link only one Tracker entity. | E4006 | 导入项目无法持久化跟踪器对象,因为引用无法持久化。 |
| E9999 | 不适用 | E4012 |
### 验证方式 { #webapi_nti_validation }
使用跟踪器导入项目导入数据时,会执行一系列验证以确保数据的有效性。本节将介绍执行的一些不同类型的验证,以便更好地了解导入验证是否失败。
#### 所需属性{ #required-properties }
在导入数据时,每个跟踪器对象都有一些必须具备的属性。有关所需属性的完整列表,请参阅[跟踪器对象部分](tracker.md#webapi_nti_tracker_objects)。
在验证必填属性时,我们通常说的是对其他数据或元数据的引用。在这种情况下,有三个主要标准:
1. E4016
2. Relationship: `{0}`, do not exist.
3. E4017
如果第一个条件失败,导入将失败,并提示缺少引用。但是,假设引用指向的内容不存在或用户无法访问。在这种情况下,这两种情况都会导致无法找到引用的信息。
#### 格式{ #formats }
跟踪器对象的某些属性需要特定的格式。在导入数据时,这些属性中的每个属性都会根据预期格式进行验证,并根据格式错误的属性返回不同的错误信息。以下是一些通过这种方式验证的属性示例:
- E4020
- User: `{0}`, has no write access to relationship: `{1}`.
- E5000
#### 用户访问{ #user-access }
所有导入的数据都将根据数据中引用的元数据([共享](tracker.md#webapi_nti_metadata_sharing))和组织单位([组织单位范围](tracker.md#webapi_nti_ou_scope))进行验证。有关共享和组织单位作用域的更多信息,请参阅以下章节。
在数据库中查找引用的同时,也会验证共享。用户访问权限之外的元数据将被视为不存在。导入将验证数据中引用的任何元数据。
另一方面,组织单位具有双重作用。它主要是确保数据只有在导入用户 "捕获范围 "内的组织单位时才能导入。其次,组织单位还用于限制可用的项目。这意味着,如果你试图为一个无法访问你要导入的项目的组织单位导入数据,导入将是无效的。
拥有 "ALL "权限的用户在导入数据时将忽略共享和组织单位范围的限制。但是,他们不能导入不能访问注册程序的组织单位的注册信息。
#### 属性和数据值{ #attribute-and-data-values }
属性和数据值分别是被跟踪实体和事件的一部分。不过,属性可以通过类型(TrackedEntityType)或项目(Program)与被跟踪实体关联。此外,属性也可以是唯一的。
导入过程中的初始验证是确保为属性或数据元素提供的值符合预期的值类型。例如,假设你导入了一个数值类型数据元素的值。在这种情况下,预期值就是数值。任何与类型和值不匹配相关的错误都会导致相同的错误代码,但会有与违规类型相关的特定消息。
强制性属性和数据值也会被检查。目前不允许删除强制属性。有些用例要求单独发送值,而有些用例则要求将所有值作为一个整体发送。程序可配置为在 "ON_COMPLETE "或 "ON_UPDATE_AND_INSERT "时验证强制属性,以适应这些用例。
导入时将验证唯一属性。也就是说,只要所提供的值在整个系统中是唯一的属性,就会通过。但是,如果发现唯一值被导入实体以外的任何其他跟踪实体使用,则导入将失败。
#### 组态 { #configuration }
导入项目中最后一部分验证是基于用户对相关元数据的配置进行的验证。有关每种配置的更多信息,请查看相关章节。可配置验证的一些示例:
- 特征类型(用于几何图形)
- If the first condition fails, the import will fail with a message about a missing reference.
However, suppose the reference points to something that doesn't exist or which the user cannot
access. In that case, both cases will result in a message about the reference not being found.
- Formats
- Some of the properties of tracker objects require a specific format. When importing data, each of
these properties is validated against the expected format and will return different errors depending
on which property has a wrong format. Some examples of properties that are validated this way:
- 还有更多
UIDs (These cover all references to other data or metadata in DHIS2.)
### 计划规则{ #webapi_nti_program_rules }
用户可以配置[项目规则](metadata.md#webapi_program_rules),为跟踪器表单添加条件行为。除了在跟踪器应用项目中运行这些规则外,跟踪器导入项目也将运行这些规则的一部分。由于导入项目也会运行这些规则,因此我们可以确保额外的验证级别。
并非所有项目规则操作都受支持,因为它们只适用于前台演示。受支持的项目规则操作的完整列表如下。
|计划规则行动|支持的|
|---|:---:|
|**显示文本**| |
|**显示键值配对**| |
|**HIDEFIELD**||
|**隐藏部分**||
|**分配**|**X**|
|**显示警告**|**X**|
|**淋浴**|**X**|
|**完成时发出警告**|**X**|
|**完成时出错**|**X**|
|**创建活动**||
|**设置必填字段**|**X**|
|**发送信息**|**X**|
|**日程安排信息**|**X**|
项目规则在导入项目中的评估方式与在 Tracker 应用项目中的评估方式相同。总之,执行项目规则时会考虑以下条件:
* 项目规则必须与导入的数据相关联。例如,项目阶段或数据元素。
* 项目规则的条件必须为真
项目规则的结果取决于这些规则中定义的操作:
* 项目规则操作可能会导致两种不同的结果:警告或错误。
* X
* SHOWWARNING 和 WARNINGONCOMPLETION 操作只能生成警告。
* SHOWERROR、ERRORONCOMPLETION 和 SETMANDATORYFIELD 操作只能生成错误。
* ASSIGN 操作既可生成警告,也可生成错误。
* X
* ERRORONCOMPLETION
* 当操作要为一个已有值的属性/数据元素赋值,而要赋的值不同时,除非 `RULE_ENGINE_ASSIGN_OVERWRITE` 系统设置为 true,否则会产生错误。
此外,项目规则也会产生副作用,如发送和计划信息。有关副作用的更多信息,请参阅下一节。
> **注**
>
> 在导入过程中,可以使用 `skipProgramRules` 参数跳过项目规则。
### 副作用{ #webapi_nti_side_effects }
导入完成后,可能会触发一些特定任务。这些任务就是我们所说的 "副作用"。这些任务执行的操作并不影响导入本身。
副作用是脱离导入运行的任务,但总是由导入触发。由于副作用与导入分离,因此即使导入成功,副作用也可能失败。此外,只有在导入成功时才会运行侧效应,因此侧效应也不会失败。
SCHEDULEMESSAGE
|X|支持的|描述|
|---|:---:|---|
|**跟踪通知**|**X**| 更新可触发通知。触发通知的更新包括**注册**、**事件更新**、**事件或注册完成**。 |
|**计划规则通知***|**X**| 项目规则可触发通知。请注意,这些通知是通过 DHIS2 规则引擎生成的项目规则效果的一部分。|
> **注**
>
> 某些配置可以控制副作用的执行。可以在导入过程中设置 `skipSideEffects` 标志,以完全跳过副作用。例如,如果你导入了一些不想触发通知的内容,这个参数就很有用。
### 为事件分配用户{ #webapi_nti_user_event_assignment }
将事件当作任务来处理,对特定的工作流程大有裨益,因此可以为事件分配一个用户。
为事件指定用户不会改变用户的访问权限,但会在事件和用户之间创建一个链接。
当一个事件分配了一个用户时,您可以使用 API 中的 "assignedUser "字段作为参数来查询事件。
要为事件分配用户时,只需在 `assignedUser` 字段中提供要分配的用户的 UID 即可。请参阅以下示例:
```json
{
...
"events": [
{
"event": "ZwwuwNp6gVd",
"programStage": "nlXNK4b7LVr",
"orgUnit": "O6uvpzGd5pu",
"enrollment": "MNWZ6hnuhSw",
"assignedUser" : "M0fCOxtkURr"
}
],
...
}
在本例中,uid 为 M0fCOxtkURr 的用户将被分配给uid 为 ZwwuwNp6gVd 的事件。一个事件只能分配一个用户。
要使用此功能,相关项目阶段必须启用用户分配功能,为用户提供的 uid 必须是一个有效的现有用户。
跟踪器导出{ #webapi_nti_export }¶
The following side effects are currently supported:
- 跟踪实体
- 活动
- ** 注册**
- 关系
注意
- 所有这些端点目前都支持
JSON。仅跟踪实体和事件支持CSV。
常见请求参数{ #common-request-parameters }¶
以下终端支持分页的标准参数。
- Tracked Entities
GET /api/tracker/trackedEntities - Events
GET /api/tracker/events - Enrollments
GET /api/tracker/enrollments - Relationships
GET /api/tracker/relationships
类型¶
| 允许值 | 类型 | order | 描述 |
|---|---|---|---|
| comma separated list of fields or presets to include | 要返回的页码。如果缺少,默认为 1 | paging | Integer |
| 默认 | 要返回的页码。如果缺少,默认为 1 | paging | Boolean |
| 总页数 | Boolean | true|false | 表示是否在响应中返回总页数 |
| 跳过分页 | Boolean | true|false | 表示是否应忽略分页并返回所有行。默认为 "false",即默认情况下,除非 "skipPaging=true",否则所有请求都要分页。 |
注意事项
请注意,性能与请求的数据量直接相关。页面越大,返回所需的时间就越长。
组织单位选择模式的请求参数{ #request-parameters-for-organisational-unit-selection-mode }¶
可用的组织单元选择模式在 下表。
Only one parameter among trackedEntity, enrollment, event can be passed. | 描述 |
|---|---|
| 选择 | 申请中定义的组织单位。 |
| 儿童 | 被选中的组织单位及其直属单位,即下一级组织单位。 |
| 滗水器 | 选定的组织单位和所有子组织单位,即子层次结构中的所有组织单位。 |
| 可用 | 与当前用户和所有子用户(即子层次结构中的所有组织单位)相关联的数据视图组织单位。如果前者未定义,则会返回到与当前用户相关联的数据采集组织单位。 |
| 捕获 | 与当前用户和所有子用户(即子层级中的所有组织单位)相关联的数据采集组织单位。 |
| categoryOptionComboIdScheme | 系统中的所有组织单位。需要 ALL 权限。 |
用于过滤响应的请求参数{ #webapi_nti_field_filter }¶
pageSize
例子¶
| 参数示例 | 意义 |
|---|---|
fields=* | 返回所有字段 |
fields=createdAt,uid(字段=创建时间,uid) | 只返回字段 createdAt 和 `uid |
fields=enrollments[*,!uid] | 返回 enrollments 中除 uid 以外的所有字段 |
fields=enrollments[uid]``|只返回enrollments字段uid` | |
fields=enrollments[uid,enrolledAt]"(字段=注册[uid,注册时间 | 只返回 enrollments 字段 uid 和 enrolledAt |
跟踪实体 (GET /api/tracker/trackedEntities){ #tracked-entities-get-apitrackertrackedentities }¶
Organisation unit selection modes
GET /api/tracker/trackedEntities- Field filter responses { #webapi_tracker_field_filter }
GET /api/tracker/trackedEntities/{id}- 检索给定 id 的被跟踪实体
跟踪实体收集端点 GET /api/tracker/trackedEntities¶
You can omit it in case of a Point type and with latitude and longitude provided)
latitude (Latitude of a Point type of Geometry)
请求语法¶
| 允许值 | 类型 | order | 描述 |
|---|---|---|---|
query | JSON格式 | {操作符}:{过滤器值}"。 | 创建跟踪实体属性的过滤器。只有过滤器值是必须的。如果未指定 operator 操作符,则使用 EQ 操作符。 |
| 属性 | JSON格式 | 以逗号分隔的属性 UIDs 值 | 对于响应中的每个跟踪实体,只返回指定的属性 |
All endpoints of the /gist API accept the same set of parameters. | |||
| Parameters and their options that do not make sense in the endpoint context are | |||
| ignored. | JSON格式 | 描述 | 将响应缩小到符合给定过滤器的 TEI。过滤器是以冒号分隔的属性或属性 UID,带有可选的操作符和值对。例如:filter=H9IlTX2X6SL:sw:A,操作符以sw开头,后跟一个值。特殊字符(如 +)需要按百分比编码,因此应使用 %2B 代替 +。作为过滤值一部分的字符,如 :(冒号)或 ,(逗号),需要用 /(斜线)转义。同样,/ 也需要转义。允许对同一属性使用多个操作符/值对,如 filter=AuPLng5hLbE:gt:438901703:lt:448901704。不允许重复相同的属性 UID。用户需要访问属性才能对其进行过滤。 |
orgUnit | JSON格式 | 以分号分隔的组织单位UID列表 | 只返回属于所提供组织单位的被跟踪实体实例 |
ouMode 见 ouModes。 | JSON格式 | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | filterAttributes |
| 程序 | JSON格式 | 项目 UID | 计划的 UID ,响应中的实例必须注册到该计划中。 |
| 程序状态 | JSON格式 | ACTIVE|COMPLETED|CANCELLED | 给定项目中被跟踪实体实例的项目状态 |
| 程序阶段 | JSON格式 | Narrows response to tracked entities matching given filters. More on filters here | 一个项目阶段 UID,响应中的实例必须有以下事件 |
| 跟进 | Boolean | true|false | 表示跟踪的实体实例是否被标记为指定计划的跟进对象 |
| 更新后 | 日期时间 | ISO-8601 | 最后更新的开始日期 |
| 更新前 | 日期时间 | ISO-8601 | 上次更新的结束日期 |
| 更新范围 | 持续时间 | ISO-8601 | 返回不早于指定期限的 TEI |
| 注册后 | 日期时间 | ISO-8601 | 指定计划的注册开始日期 |
| 注册之前 | 日期时间 | ISO-8601 | 指定项目的注册结束日期 |
| 注册发生在`之后 | 日期时间 | ISO-8601 | 指定计划中事件的开始日期 |
| 注册发生在`之前 | 日期时间 | ISO-8601 | 给定项目中事件的结束日期 |
| 跟踪实体类型 | JSON格式 | The status of the tracked entities enrollment in the given program. | 只返回给定类型的跟踪实体实例 |
trackedEntity | JSON格式 | 以分号分隔的跟踪实体实例UID列表 | Filter the result down to a limited set of tracked entities using explicit uids of the tracked entity instances by using trackedEntity=id1;id2. This parameter will, at the very least, create the outer boundary of the results, forming the list of all tracked entities using the uids provided. If other parameters/filters from this table are used, they will further limit the results from the explicit outer boundary. |
| 指定用户模式 | JSON格式 | CURRENT|PROVIDED|NONE|ANY | 根据指定的用户选择模式,将结果限制为已分配事件的被跟踪实体。有关解释,请参阅下表 "分配的用户模式"。 |
| 指定用户 | JSON格式 | 以分号分隔的用户 UID 列表,用于根据分配给用户的事件进行过滤。 | 使用 "assignedUser=id1;id2",将结果筛选到事件分配给给定用户 ID 的一组有限的跟踪实体。仅当 assignedUserMode 为 "PROVIDED "或 "null "时,才会考虑该参数。例如,如果assignedUserMode=CURRENT和assignedUser=someId,API 将出错。 |
| 事件状态 | JSON格式 | ACTIVE|COMPLETED|VISITED|SCHEDULE|OVERDUE|SKIPPED | 指定项目中任何事件的状态 |
| 事件发生后 | 日期时间 | ISO-8601 | 指定计划的活动开始日期 |
| 事件发生之前 | 日期时间 | ISO-8601 | 指定计划的活动结束日期 |
| 跳过内容 | Boolean | true|false | 表示是否在响应中包含元数据。 |
| 包括删除 | Boolean | true|false | order |
| 包括所有属性 | Boolean | true|false | 表示是否包含所有 TEI 属性 |
| 附件 | JSON格式 | 导出为文件时的文件名 | |
| 潜在重复 | Boolean | true|false | true:返回标记为潜在重复的 TEI。false:返回未标记为潜在重复的 TEI。如果省略,我们将不检查 TEI 是否为潜在重复。 |
extent of fields selected by * field selector | JSON格式 | 以逗号分隔的属性名或属性 UID 和排序方向对的列表,格式为 propName:sortDirection。 | 支持的字段:已创建客户"、"已创建时间"、"已注册时间"、"未激活"、"已跟踪实体"、"已更新客户"、"已更新时间"。 |
DateTime
Only one parameter among trackedEntity, enrollment, event can be passed. | 描述 |
|---|---|
| Boolean | true, false |
| Indicates whether to include soft-deleted elements | potentialDuplicate |
| Boolean | true, false |
Filter the result based on the fact that a tracked entities is a potential duplicate. true: returns tracked entities flagged as potential duplicates. false: returns tracked entities NOT flagged as potential duplicates. | 包括所有分配的事件,只要是分配给某个人的事件,分配给谁并不重要。 |
查询不区分大小写。以下规则适用于查询 参数。
-
orgUnitIdScheme 参数(一个或多个),或必须指定
ouMode=ALL。 -
UID,CODE,NAME,ATTRIBUTE:{uid}指定(零或一)。 -
如果指定了 "程序状态",则 "程序 "也必须是 指定的。
-
Mode
-
描述 CURRENT
-
过滤器项目只能指定一次。
请求示例{ #example-requests }¶
查询与特定组织单位关联的所有实例 看起来像这样:
GET /api/tracker/trackedEntities?orgUnit=DiszpKrYNg8
使用一个带有过滤器的属性和一个属性来查询实例 没有过滤器的属性,一个组织单位使用 后代组织单位查询方式:
GET /api/tracker/trackedEntities?filter=zHXD5Ve1Efw:EQ:A
&attribure=AMpUYgxuCaE&orgUnit=DiszpKrYNg8;yMCshbaVExv
属性包含在响应中的实例查询 且一个属性被用作过滤器的实例的查询:
GET /api/tracker/trackedEntities?filter=zHXD5Ve1Efw:EQ:A
&filter=AMpUYgxuCaE:LIKE:Road
&orgUnit=DiszpKrYNg8
为过滤器指定了多个操作数和过滤器的查询 物品:
GET /api/tracker/trackedEntities?orgUnit=DiszpKrYNg8
&program=ur1Edk5Oe2n
&filter=lw1SqmMlnfh:GT:150
&filter=lw1SqmMlnfh:LT:190
Filter the result down to a limited set of tracked entities with events that are assigned to the given user IDs by using assignedUser=id1,id2.This parameter will only be considered if assignedUserMode is either PROVIDED or null. The API will error out, if for example, assignedUserMode=CURRENT and assignedUser=someId.
GET /api/tracker/trackedEntities?orgUnit=DiszpKrYNg8
&program=ur1Edk5Oe2n
&filter=lw1SqmMlnfh:EQ:/:/,//
要在 IN 过滤器中使用多个值查询属性:
GET /api/tracker/trackedEntities?orgUnit=DiszpKrYNg8
&filter=dv3nChNSIxy:IN:Scott;Jimmy;Santiago
限制对属于特定事件一部分的实例的响应 program 你可以包含一个 program 查询参数:
GET /api/tracker/trackedEntities?filter=zHXD5Ve1Efw:EQ:A
&orgUnit=O6uvpzGd5pu&ouMode=DESCENDANTS
&program=ur1Edk5Oe2n
要将程序注册日期指定为查询的一部分,请执行以下操作:
GET /api/tracker/trackedEntities?
&orgUnit=O6uvpzGd5pu&program=ur1Edk5Oe2n
&enrollmentEnrolledAfter=2013-01-01
&enrollmentEnrolledBefore=2013-09-01
要限制对特定跟踪实体实例的响应,您 可以包含跟踪实体查询参数:
GET /api/tracker/trackedEntities?filter=zHXD5Ve1Efw:EQ:A
&orgUnit=O6uvpzGd5pu
&ouMode=DESCENDANTS
&trackedEntity=cyl5vuJ5ETQ
默认情况下,实例以大小为 50 的页面返回,以更改 您可以使用 page 和 pageSize 查询参数:
GET /api/tracker/trackedEntities?filter=zHXD5Ve1Efw:EQ:A
&orgUnit=O6uvpzGd5pu
&ouMode=DESCENDANTS
&page=2&pageSize=3
您可以使用一系列运算符进行过滤:
| 所需值 | 描述 |
|---|---|
EQ | /api/analytics/events/query/IpHINAT79UW?stage=A03MvHHogjR&startDate=2016-03-01 |
| &endDate=2016-12-31&dimension=ou:O6uvpzGd5pu&dimension=UXz7xuGCEhU:GT:2000 | |
GT | 字符串、布尔值、整数、浮点、集合(检查大小)、日期 |
GE | 您可以使用以下方法过滤多个特定年龄的“年龄”数据元素 |
| 像这样的 IN 运算符: | |
| LT | 字符串、布尔值、整数、浮点、集合(检查大小)、日期 |
LE | Filter by AGE is not null |
NE | /api/analytics/events/query/eBAyeGv0exc?startDate=2016-01-01&endDate=2016-10-31 |
| &dimension=ou:O6uvpzGd5pu&dimension=qrur9Dvnyt5&desc=EVENTDATE&asc=qrur9Dvnyt5 | |
| 喜欢 | NV can be used with EQ, NE and IN operators |
| 在 | 等于用"; "分隔的多个值之一 |
回应格式¶
JSON` 响应可以如下所示。
可根据所需字段过滤响应,请参阅用于过滤响应的请求参数
{
"instances": [
{
"trackedEntity": "IzHblRD2sDH",
"trackedEntityType": "nEenWmSyUEp",
"createdAt": "2014-03-26T15:40:36.669",
"createdAtClient": "2014-03-26T15:40:36.669",
"updatedAt": "2014-03-28T12:28:17.544",
"orgUnit": "g8upMTyEZGZ",
"inactive": false,
"deleted": false,
"relationships": [],
"attributes": [
{
"attribute": "VqEFza8wbwA",
"code": "MMD_PER_ADR1",
"displayName": "Address",
"createdAt": "2016-01-12T00:00:00.000",
"updatedAt": "2016-01-12T00:00:00.000",
"valueType": "TEXT",
"value": "1061 Marconi St"
},
{
"attribute": "RG7uGl4w5Jq",
"code": "Longitude",
"displayName": "Longitude",
"createdAt": "2016-01-12T00:00:00.000",
"updatedAt": "2016-01-12T00:00:00.000",
"valueType": "TEXT",
"value": "27.866613"
},
...,
...,
],
"enrollments": [],
"programOwners": []
}
],
"page": 1,
"total": 39,
"pageSize": 1
}
Tracked Entities single object endpoint GET /api/tracker/trackedEntities/{uid}¶
该端点的目的是检索一个给定 uid 的被跟踪实体。
请求语法¶
GET /api/tracker/trackedEntities/{uid}?program={programUid}&fields={fields}
| 允许值 | 类型 | order | 描述 |
|---|---|---|---|
| ``` | |||
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
|JSON格式| | |||
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | 返回具有指定 uid 的跟踪实体实例 | ||
| 程序 | JSON格式 | ``` | |
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | 在响应中包含项目属性(仅限用户可访问的属性) | ||
The API supports CSV and JSON response for GET /api/tracker/events. | JSON格式 | Tracked entities single object endpoint | ```json |
| { | |||
| "pager": { | |||
| "page": 1, | |||
| "pageSize": 1 | |||
| }, | |||
| "events": [ | |||
| { | |||
| "event": "A7rzcnZTe2T", | |||
| "status": "ACTIVE", | |||
| "program": "eBAyeGv0exc", | |||
| "programStage": "Zj7UnCAulEk", | |||
| "enrollment": "RiLEKhWHlxZ", | |||
| "orgUnit": "DwpbWkiqjMy", | |||
| "occurredAt": "2023-02-13T00:00:00.000", | |||
| "scheduledAt": "2023-02-13T00:00:00.000", | |||
| "followUp": false, | |||
| "deleted": false, | |||
| "createdAt": "2017-09-08T21:40:22.000", | |||
| "createdAtClient": "2016-09-08T21:40:22.000", | |||
| "updatedAt": "2017-09-08T21:40:22.000", | |||
| "attributeOptionCombo": "HllvX50cXC0", | |||
| "attributeCategoryOptions": "xYerKDKCefk", | |||
| "geometry": { | |||
| "type": "Point", | |||
| "coordinates": [-11.468912037323042, 7.515913998868316] | |||
| }, | |||
| "dataValues": [ | |||
| { | |||
| "createdAt": "2016-12-06T18:22:34.438", | |||
| "updatedAt": "2016-12-06T18:22:34.438", | |||
| "storedBy": "bjorn", | |||
| "providedElsewhere": false, | |||
| "dataElement": "F3ogKBuviRA", | |||
| "value": "[-11.4880220438585,7.50978830548003]" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.423", | |||
| "updatedAt": "2013-12-30T14:23:57.423", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "eMyVanycQSC", | |||
| "value": "2018-02-07" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.382", | |||
| "updatedAt": "2013-12-30T14:23:57.382", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "oZg33kd9taw", | |||
| "value": "Male" | |||
| } | |||
| ], | |||
| "notes": [], | |||
| "followup": false | |||
| } | |||
| ] | |||
| } | |||
| ``` |
请求示例{ #example-requests }¶
查询跟踪实体实例:
GET /api/tracker/trackedEntities/IzHblRD2sDH?program=ur1Edk5Oe2n&fields=*
回应格式¶
如果在请求 json 格式时传递了 fields 请求参数,则该端点支持返回子对象。如果是 csv 格式,"fields "请求参数不起作用,响应将始终包含相同的字段: - 跟踪实体(标识符) - 跟踪实体类型(标识符) - Returns fields createdAt and uid - fields=enrollments[*,!uid] - Returns all fields of enrollments except uid - fields=enrollments[uid] - orgUnit (标识符) - fields=enrollments[uid,enrolledAt] - Returns enrollments fields uid and enrolledAt - Tracked entities { #webapi_tracker_export_tracked_entities } - 几何学 (WKT, https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry) - trackedEntityType (identifier in requested idScheme) - createdAt (Datetime) - createdAtClient (Datetime) - 属性(每个有效属性作为另一列列出)
json 响应示例: ``json { "trackedEntity":"IzHblRD2sDH"、 "trackedEntityType":"nEenWmSyUEp"、 "createdAt":"2014-03-26T15:40:36.669", "updatedAt":"2014-03-28T12:28:17.544", "orgUnit":"g8upMTyEZGZ"、 "inactive": false、 "deleted": false、 "关系":[], "属性": [[ { "属性": ["w75KJ2mc4zz"、 "代码":"MMD_PER_NAM"、 "displayName"(显示名称):"名字"、 "创建时间":"2016-01-12T09:10:26.986", "更新时间"2016-01-12T09:10:35.884", "valueType"(值类型):"TEXT"(文本"TEXT"、 "值":"韦加塔" }, { "属性":"zDhUuAYrxNC"、 "显示名":"姓氏"、 "创建时间":"2016-01-12T09:10:26.986", "更新时间": "2016-01-12t09:10:26.986", "updatedAt":"2016-01-12T09:10:35.884", "valueType"(值类型):"TEXT"(文本"TEXT"、 "值":"Goytiom } ], "注册":[ { "注册":"uT5ZysTES7j"、 "创建时间":"2017-03-28T12:28:17.539", "createdAtClient":"2016-03-28T12:28:17.539", "updatedAt":"2017-03-28T12:28:17.544", "trackedEntity":"IzHblRD2sDH"、 "trackedEntityType":"nEenWmSyUEp"、 "程序":"ur1Edk5Oe2n"、 状态"ACTIVE"、 "orgUnit":"g8upMTyEZGZ"、 "orgUnitName":"Njandama MCHP"、 "enrolledAt":"2020-11-10T12:28:17.532", "occurredAt":"2020-10-12T12:28:17.532", "followUp": false、 "deleted": false、 "事件": [[ { "事件": ["ixDYEGrNQeH"、 "状态":"ACTIVE"、 "程序":"ur1Edk5Oe2n"、 "程序阶段": "ZkbAXlQUYJG"ZkbAXlQUYJG"、 "注册": "uT5ZysTES7"uT5ZysTES7j"、 "enrollmentStatus"(注册状态):"ACTIVE"、 "trackedEntity":"IzHblRD2sDH"、 "关系":[], "scheduledAt":"2019-10-12T12:28:17.532", "followup": false、 "deleted": false、 "createdAt":"2017-03-28T12:28:17.542", "createdAtClient":"2016-03-28T12:28:17.542", "updatedAt":"2017-03-28T12:28:17.542", "attributeOptionCombo":"HllvX50cXC0"、 "attributeCategoryOptions":"xYerKDKCefk"、 "dataValues":[], "notes":[] } ], "关系":[], "属性":[], "备注": []:[] } ], "程序所有者":[ { "orgUnit":"g8upMTyEZGZ"、 "trackedEntity":"IzHblRD2sDH"、 "程序":"ur1Edk5Oe2n" } ] }
### 事件 (`GET /api/tracker/events`){ #events-get-apitrackerevents }
有两个端点专门用于处理事件:
- `GET /api/tracker/events`
- 检索符合给定条件的事件
- `GET /api/tracker/events/{id}`
- 检索给定 id 的事件
#### 事件收集端点 `GET /api/tracker/events`{ #events-collection-endpoint-get-apitrackerevents }
ID
|允许值|类型|`order`|描述|
|---|---|---|---|
|程序|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| 计划标识符|
|程序阶段|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| 日期时间|
|程序状态|`enum`| `ACTIVE`|`COMPLETED`|`CANCELLED`| 事件在项目中的状态 |
|All endpoints of the `/gist` API accept the same set of parameters.
Parameters and their options that do not make sense in the endpoint context are
ignored.|JSON格式|Returns a list of events based on the provided filters.|将响应缩小到与给定过滤器匹配的事件。过滤器是以冒号分隔的属性或数据元素 UID,带有操作符和值对。例如:`filter=fazCI2ygYkq:eq:PASSIVE`,操作符以`eq`开头,后跟一个值。作为过滤器值一部分的字符,如 `:`(冒号)或 `,`(逗号),需要用 `/`(斜线)转义。同样,`/` 也需要转义。允许对同一属性/数据元素使用多个操作符/值对,如 `filter=qrur9Dvnyt5:gt:70:lt:80`。不允许重复相同的数据元素 UID。用户需要访问数据元素才能对其进行筛选。|
|过滤器属性|JSON格式|描述|将响应缩小到符合给定过滤器的 TEI。过滤器是以冒号分隔的属性或属性 UID,带有可选的操作符和值对。例如:`filterAttributes=H9IlTX2X6SL:sw:A`,操作符以`sw`开头,后跟一个值。像 `filterAttributes=H9IlTX2X6SL` 这样的过滤器会返回给定属性有值的所有事件。特殊字符(如 `+`)需要按百分比编码,因此应使用 `%2B` 代替 `+`。作为过滤值一部分的字符,如 `:`(冒号)或 `,`(逗号),需要用 `/`(斜线)转义。同样,`/` 也需要转义。允许对同一属性使用多个操作符/值对,如 `filterAttributes=AuPLng5hLbE:gt:438901703:lt:448901704`。不允许重复相同的属性 UID。用户需要访问属性才能对其进行筛选。|
|跟进|`boolean`| `true`|`false` | 项目阶段|
|`trackedEntityInstance`|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| 被跟踪实体实例的标识符|
|`orgUnit`|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| filter|
|`ouMode` 见 [ouModes](#Request-parameters-for-Organisational-Unit-selection-mode)。|JSON格式| `SELECTED`|`CHILDREN`|`DESCENDANTS`| 机关单位选择模式|
|状态|JSON格式|`ACTIVE`|`COMPLETED`|`VISITED`|`SCHEDULE`|`OVERDUE`|`SKIPPED` | 跟进|
|发生在|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) | trackedEntity|
|之前发生|日期时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)| orgUnit|
|计划之后|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) | orgUnitMode see [orgUnitModes](#webapi_tracker_orgunit_scope)|
|计划之前|日期时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)| status|
|更新后|日期时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)| occurredAfter|
|更新前|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) | occurredBefore|
|更新范围|持续时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601#Durations)| Include only items which are updated within the given duration.<br><br> The format is [ISO-8601#Duration](https://en.wikipedia.org/wiki/ISO_8601#Durations)|
|注册后|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)|指定计划的注册开始日期|
|注册之前|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)|指定项目的注册结束日期|
|注册发生在`之后|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)|指定计划中事件的开始日期|
|注册发生在`之前|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)|给定项目中事件的结束日期|
|跳过内容|`Boolean`| `true`|`false` | 排除响应的元数据部分(提高性能)|
|extent of fields selected by `*` field selector|JSON格式|支持的字段有`assignedUser, assignedUserDisplayName, attributeOptionCombo, completedAt, completedBy, createdAt, createdBy, deleted, enrolledAt, enrollment, enrollmentStatus, event, followup, occurredAt, orgUnit, orgUnitName, program, programStage, scheduleAt, status, storedBy, trackedEntity, updatedAt, updatedBy`.|以逗号分隔的属性名称、属性或数据元素 UID 和排序方向对的列表,格式为 `propName:sortDirection`。<br><br> **注意:** `propName` 区分大小写,`sortDirection` 不区分大小写。 |
|事件|JSON格式|以逗号分隔的 `uid` 列表| Filter the result down to a limited set of IDs by using event=id1;id2.|
|`skipEventId`|`Boolean`| | 跳过响应中的事件标识符|
|属性 Cc"(见注释)|JSON格式| 属性类别组合标识符(必须与 attributeCos 结合使用)|
|属性 Cos"(见注释)|JSON格式| 属性类别选项标识符,用 ; 分隔(必须与 attributeCc 结合使用)|
|包括删除|`Boolean`| | IdScheme used for category option references. Defaults to the `idScheme` parameter.|
|指定用户模式|JSON格式| `CURRENT`|`PROVIDED`|`NONE`|`ANY`| 串|
|指定用户|JSON格式|以逗号分隔的列表 od `uid`| 使用`assignedUser=id1;id2`将结果筛选到分配给给定用户 ID 的有限事件集。<br><br> 只有当 assignedUserMode 为`PROVIDED`或`null`时,才会考虑该参数。<br><br> 如果出现`assignedUserMode=CURRENT`和`assignedUser=someId`等情况,API 将出错。|
> **注**
>
> 如果查询既不包含 `attributeCC` 也不包含 `attributeCos`、
> 服务器将返回用户具有读取权限的所有属性选项组合的事件。
##### 请求示例{ #example-requests }
attributeCategoryCombo (see note)
GET /api/tracker/events?orgUnit=YuQRtpLP10I&ouMode=CHILDREN
查询特定组织单位所有后代的所有事件
单位的所有事件,即子层次结构中的所有组织单位:
GET /api/tracker/events?orgUnit=O6uvpzGd5pu&ouMode=DESCENDANTS
使用特定程序和组织单位查询所有事件:
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc
查询具有一定节目和组织单位的所有事件,
按截止日期排序
上升:
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc&order=dueDate
查询某节目中活动日期最新的10个活动
和组织单位 - 按到期日降序分页和排序:
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc
&order=eventDate:desc&pageSize=10&page=1
查询具有特定节目和组织单位的所有事件
特定的跟踪实体实例:
GET /api/tracker/events?orgUnit=DiszpKrYNg8
&program=eBAyeGv0exc&trackedEntityInstance=gfVxE3ALA9m
查询某个程序和组织单位较旧的所有事件
或等于
2014-02-03:
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc&endDate=2014-02-03
查询具有一定节目阶段、组织单位和
2014年被跟踪实体实例:
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc
&trackedEntityInstance=gfVxE3ALA9m&occurredAfter=2014-01-01&occurredBefore=2014-12-31
串
GET /api/tracker/events?orgUnit=DiszpKrYNg8
&program=lxAQ7Zs9VYR
&filter=lw1SqmMlnfh:GT:150
&filter=lw1SqmMlnfh:LT:190
Filter the result down to a limited set of tracked entities with events that are assigned to the given user IDs by using `assignedUser=id1,id2`.This parameter will only be considered if `assignedUserMode` is either `PROVIDED` or `null`. The API will error out, if for example, `assignedUserMode=CURRENT` and `assignedUser=someId`.
GET /api/tracker/events?orgUnit=DiszpKrYNg8
&program=lxAQ7Zs9VYR
&filter=lw1SqmMlnfh:EQ:/:/,//
##### 回应格式 { #response-format }
JSON` 响应可以如下所示。
``json
{
"实例":[
{
"event":"rgWr86qs0sI"、
"状态":"ACTIVE"、
"程序":"kla3mAPgvCH"、
"程序阶段": "aNLq9ZYoy9W":"aNLq9ZYoy9W"、
"orgUnit":"DiszpKrYNg8"、
"orgUnitName":"Ngelehun CHC"、
"关系":[],
"occurredAt":"2021-10-12T00:00:00.000",
"followup": false、
"deleted": false、
"createdAt":"2018-10-20T12:09:19.492",
"更新时间": false"2018-10-20T12:09:19.492",
"attributeOptionCombo":"amw2rQP6r6M"、
"attributeCategoryOptions":"RkbOhHwiOgW"、
"dataValues"(数据值): [[
{
"createdAt":"2015-10-20T12:09:19.640",
"更新时间":"2015-10-20T12:09:19.640",
"storedBy":"系统"、
"providedElsewhere": false、
"dataElement":"HyJL2Lt37jN"、
"值":"12"
},
...
],
"备注":[]
}
],
"页":1,
"页面大小":1
}
CSV "响应可以如下所示。
|事件|状态|计划|计划阶段|注册|机构单位|发生在|计划在|数据元素|值|存储在|提供的其他地方
|---|---|---|---|---|---|---|---|---|---|---|---|
|V1CerIi3sdL|COMPLETED|IpHINAT79UW|A03MvHHogjR|CCBLMntFuzb|DiszpKrYNg8|2020-02-26T23:00:00Z|2020-02-27T23:00:00Z|a3kGcGDCuk6|11|admin|false
|V1CerIi3sdL|COMPLETED|IpHINAT79UW|A03MvHHogjR|CCBLMntFuzb|DiszpKrYNg8|2020-02-26T23:00:00Z|2020-02-27T23:00:00Z|mB2QHw1tU96|[-11.566044,9.477801]|admin|false
Events single object endpoint GET /api/tracker/events/{uid}¶
查询某一项目和组织单位中发生日期最新的 10 个事件 - 通过分页和按发生日期降序排序的方法 通过分页和按发生日期降序排序:
请求语法¶
GET /api/tracker/events/{uid}?fields={fields}
| 允许值 | 类型 | order | 描述 |
|---|---|---|---|
| ``` | |||
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
|JSON格式| | |||
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | Events response example | ||
The API supports CSV and JSON response for GET /api/tracker/events. | JSON格式 | The JSON response can look like the following: | ```json |
| { | |||
| "pager": { | |||
| "page": 1, | |||
| "pageSize": 1 | |||
| }, | |||
| "events": [ | |||
| { | |||
| "event": "A7rzcnZTe2T", | |||
| "status": "ACTIVE", | |||
| "program": "eBAyeGv0exc", | |||
| "programStage": "Zj7UnCAulEk", | |||
| "enrollment": "RiLEKhWHlxZ", | |||
| "orgUnit": "DwpbWkiqjMy", | |||
| "occurredAt": "2023-02-13T00:00:00.000", | |||
| "scheduledAt": "2023-02-13T00:00:00.000", | |||
| "followUp": false, | |||
| "deleted": false, | |||
| "createdAt": "2017-09-08T21:40:22.000", | |||
| "createdAtClient": "2016-09-08T21:40:22.000", | |||
| "updatedAt": "2017-09-08T21:40:22.000", | |||
| "attributeOptionCombo": "HllvX50cXC0", | |||
| "attributeCategoryOptions": "xYerKDKCefk", | |||
| "geometry": { | |||
| "type": "Point", | |||
| "coordinates": [-11.468912037323042, 7.515913998868316] | |||
| }, | |||
| "dataValues": [ | |||
| { | |||
| "createdAt": "2016-12-06T18:22:34.438", | |||
| "updatedAt": "2016-12-06T18:22:34.438", | |||
| "storedBy": "bjorn", | |||
| "providedElsewhere": false, | |||
| "dataElement": "F3ogKBuviRA", | |||
| "value": "[-11.4880220438585,7.50978830548003]" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.423", | |||
| "updatedAt": "2013-12-30T14:23:57.423", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "eMyVanycQSC", | |||
| "value": "2018-02-07" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.382", | |||
| "updatedAt": "2013-12-30T14:23:57.382", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "oZg33kd9taw", | |||
| "value": "Male" | |||
| } | |||
| ], | |||
| "notes": [], | |||
| "followup": false | |||
| } | |||
| ] | |||
| } | |||
| ``` |
请求示例{ #example-requests }¶
The CSV response can look like the following:
GET /api/tracker/events/rgWr86qs0sI
回应格式¶
``json { "event":"rgWr86qs0sI"、 "status":"ACTIVE"、 "程序":"kla3mAPgvCH"、 "程序阶段": "aNLq9ZYoy9W":"aNLq9ZYoy9W"、 "注册": "Lo3SHzCnMSm"Lo3SHzCnMSm"、 "enrollmentStatus"(注册状态):"ACTIVE"、 "orgUnit":"DiszpKrYNg8"、 "orgUnitName":"Ngelehun CHC"、 "关系":[], "occurredAt":"2021-10-12T00:00:00.000", "followup": false、 "deleted": false、 "createdAt":"2018-10-20T12:09:19.492", "创建时间": "2017-10-20t12:09:19.492", "createdAtClient":"2017-10-20T12:09:19.492", "updatedAt":"2018-10-20T12:09:19.492", "attributeOptionCombo":"amw2rQP6r6M"、 "attributeCategoryOptions":"RkbOhHwiOgW"、 "dataValues"(数据值): [[ { "createdAt":"2015-10-20T12:09:19.640", "更新时间":"2015-10-20T12:09:19.640", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"HyJL2Lt37jN"、 "值":"12" }, { "创建时间":"2015-10-20T12:09:19.514", "更新时间":"2015-10-20T12:09:19.514", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"b6dOUjAarHD"、 "值":"213" }, { "创建时间":"2015-10-20T12:09:19.626", "updatedAt":"2015-10-20T12:09:19.626", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"UwCXONyUtGs"、 "值":"3" }, { "创建时间":"2015-10-20T12:09:19.542", "更新时间":"2015-10-20T12:09:19.542", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"fqnXmRYo5Cz"、 "值":"123" }, { "createdAt":"2015-10-20T12:09:19.614", "updatedAt":"2015-10-20T12:09:19.614", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"Qz3kfeKgLgL"、 "值":"23" }, { "创建时间":"2015-10-20T12:09:19.528", "更新时间":"2015-10-20T12:09:19.528", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"W7aC8jLASW8"、 "值":"12" }, { "创建时间":"2015-10-20T12:09:19.599", "更新时间":"2015-10-20T12:09:19.599", "storedBy":"系统"、 "providedElsewhere": false、 "dataElement":"HrJmqlBqTFG"、 "值":"3" } ], "备注":[] }
### 注册人数 (`GET /api/tracker/enrollments`){ #enrollments-get-apitrackerenrollments }
有两个端点专门用于注册:
- `GET /api/tracker/enrollments`
- Tracked entity `UID`.
- `GET /api/tracker/enrollments/{id}`
- 检索给定 id 的注册信息
#### 注册信息收集端点 `GET /api/tracker/enrollments`{ #enrollment-collection-endpoint-get-apitrackerenrollments }
order
|允许值|类型|`order`|描述|
|---|---|---|---|
|`orgUnit`|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| filter|
|`ouMode` 见 [ouModes](#Request-parameters-for-Organisational-Unit-selection-mode)。|JSON格式| `SELECTED`|`CHILDREN`|`DESCENDANTS`|`ACCESSIBLE`|`CAPTURE`|`ALL| 机关单位选择模式|
|程序|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| 计划标识符|
|程序状态|`enum`| `ACTIVE`|`COMPLETED`|`CANCELLED`| 计划状态 |
|跟进|`boolean`| `true`|`false` | 跟踪给定程序的实例状态。可以是 `true`|`false` 或省略。|
|更新后|日期时间|[ISO-8601](https://en.wikipedia.org/wiki/ISO_8601) | 项目|
|更新范围|持续时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)| 项目状态 **已过时,将在第 43 版中移除,使用 `status`** |
|注册后|日期时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)| status|
|注册前|日期时间| [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601)| 跟进|
|跟踪实体类型|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| 被跟踪实体类型的标识符|
|`trackedEntity`|JSON格式|```
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
```| 被跟踪实体实例的标识符|
|注册|JSON格式|以逗号分隔的 `uid` 列表| Filter the result down to a limited set of IDs by using enrollment=id1;id2.|
|包括删除|`Boolean`| | IdScheme used for category option references. Defaults to the `idScheme` parameter.|
|extent of fields selected by `*` field selector|JSON格式|`UID`, `CODE`, `NAME`, `ATTRIBUTE:{uid}`|以逗号分隔的属性名称、属性或数据元素 UID 和排序方向对列表,格式为 `propName:sortDirection`。|
查询不区分大小写。以下规则适用于查询参数。
- orgUnitIdScheme
参数(一个或多个)或 *ouMode=ALL* 必须指定。
- 只能使用 *program* 和 *trackedEntity* 参数之一
指定(零或一)。
- 如果指定了 *programStatus*,那么 *program* 也必须是
指定的。
- 如果指定了*followUp*,则还必须指定*program*。
- 如果指定了 *enrolledAfter* 或 *enrolledBefore*,则还必须指定 *program*。
##### 请求示例{ #example-requests }
查询与特定组织单位关联的所有注册
看起来像这样:
GET /api/tracker/enrollments?orgUnit=DiszpKrYNg8
限制对作为特定活动一部分的注册的响应
程序,您可以包含程序查询
范围:
GET /api/tracker/enrollments?orgUnit=O6uvpzGd5pu&ouMode=DESCENDANTS&program=ur1Edk5Oe2n
要将程序注册日期指定为查询的一部分,请执行以下操作:
GET /api/tracker/enrollments?&orgUnit=O6uvpzGd5pu&program=ur1Edk5Oe2n
&enrolledAfter=2013-01-01&enrolledBefore=2013-09-01
限制对特定被跟踪实体的注册的响应
您可以包含跟踪实体查询
范围:
GET /api/tracker/enrollments?orgUnit=O6uvpzGd5pu&ouMode=DESCENDANTS&trackedEntity=cyl5vuJ5ETQ
要限制对特定被跟踪实体注册的响应
可以包含一个被跟踪实体实例查询参数,在
在本例中,我们将其限制为可为
当前
用户可查看的可用注册:
GET /api/tracker/enrollments?ouMode=ACCESSIBLE&trackedEntity=tphfdyIiVL6
##### 回应格式 { #response-format }
JSON` 响应可以如下所示。
```json
{
"instances": [
{
"enrollment": "iKaBMOyq7QQ",
"createdAt": "2017-03-28T12:28:19.812",
"createdAtClient": "2016-03-28T12:28:19.812",
"updatedAt": "2017-03-28T12:28:19.817",
"trackedEntity": "PpqV8ytvW5i",
"trackedEntityType": "nEenWmSyUEp",
"program": "ur1Edk5Oe2n",
"status": "ACTIVE",
"orgUnit": "NnQpISrLYWZ",
"orgUnitName": "Govt. Hosp. Bonthe",
"enrolledAt": "2020-10-23T12:28:19.805",
"occurredAt": "2020-10-07T12:28:19.805",
"followUp": false,
"deleted": false,
"events": [],
"relationships": [],
"attributes": [],
"notes": []
}
],
"page": 1,
"total": 1,
"pageSize": 5
}
Enrollments single object endpoint GET /api/tracker/enrollments/{uid}¶
该端点的目的是检索一个给定 uid 的 Enrollment。
请求语法¶
GET /api/tracker/enrollment/{uid}
| 允许值 | 类型 | order | 描述 |
|---|---|---|---|
| ``` | |||
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
|JSON格式| | |||
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | To constrain the response to enrollments of a specific tracked entity you can include a tracked | ||
| entity query parameter: | |||
The API supports CSV and JSON response for GET /api/tracker/events. | JSON格式 | ``` | |
| GET /api/tracker/enrollments?orgUnitMode=ACCESSIBLE&trackedEntity=tphfdyIiVL6 | |||
|json | |||
| { | |||
| "pager": { | |||
| "page": 1, | |||
| "pageSize": 1 | |||
| }, | |||
| "events": [ | |||
| { | |||
| "event": "A7rzcnZTe2T", | |||
| "status": "ACTIVE", | |||
| "program": "eBAyeGv0exc", | |||
| "programStage": "Zj7UnCAulEk", | |||
| "enrollment": "RiLEKhWHlxZ", | |||
| "orgUnit": "DwpbWkiqjMy", | |||
| "occurredAt": "2023-02-13T00:00:00.000", | |||
| "scheduledAt": "2023-02-13T00:00:00.000", | |||
| "followUp": false, | |||
| "deleted": false, | |||
| "createdAt": "2017-09-08T21:40:22.000", | |||
| "createdAtClient": "2016-09-08T21:40:22.000", | |||
| "updatedAt": "2017-09-08T21:40:22.000", | |||
| "attributeOptionCombo": "HllvX50cXC0", | |||
| "attributeCategoryOptions": "xYerKDKCefk", | |||
| "geometry": { | |||
| "type": "Point", | |||
| "coordinates": [-11.468912037323042, 7.515913998868316] | |||
| }, | |||
| "dataValues": [ | |||
| { | |||
| "createdAt": "2016-12-06T18:22:34.438", | |||
| "updatedAt": "2016-12-06T18:22:34.438", | |||
| "storedBy": "bjorn", | |||
| "providedElsewhere": false, | |||
| "dataElement": "F3ogKBuviRA", | |||
| "value": "[-11.4880220438585,7.50978830548003]" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.423", | |||
| "updatedAt": "2013-12-30T14:23:57.423", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "eMyVanycQSC", | |||
| "value": "2018-02-07" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.382", | |||
| "updatedAt": "2013-12-30T14:23:57.382", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "oZg33kd9taw", | |||
| "value": "Male" | |||
| } | |||
| ], | |||
| "notes": [], | |||
| "followup": false | |||
| } | |||
| ] | |||
| } | |||
| ``` |
请求示例{ #example-requests }¶
报名查询:
GET /api/tracker/enrollments/iKaBMOyq7QQ
回应格式¶
{
"enrollment": "iKaBMOyq7QQ",
"createdAt": "2017-03-28T12:28:19.812",
"createdAtClient": "2016-03-28T12:28:19.812",
"updatedAt": "2017-03-28T12:28:19.817",
"trackedEntity": "PpqV8ytvW5i",
"trackedEntityType": "nEenWmSyUEp",
"program": "ur1Edk5Oe2n",
"status": "ACTIVE",
"orgUnit": "NnQpISrLYWZ",
"orgUnitName": "Govt. Hosp. Bonthe",
"enrolledAt": "2020-10-23T12:28:19.805",
"occurredAt": "2020-10-07T12:28:19.805",
"followUp": false,
"deleted": false,
"events": [],
"relationships": [],
"attributes": [],
"notes": []
}
关系 (GET /api/tracker/relationships){ #relationships-get-apitrackerrelationships }¶
关系是跟踪器中两个实体之间的链接。 这些实体可以是跟踪实体实例、注册和事件。
类型
Allowed values
GET /api/tracker/relationships?[trackedEntity={trackedEntityUid}|enrollment={enrollmentUid}|event={eventUid}]&fields=[fields]
请求参数{ #request-parameters }¶
| 允许值 | 类型 | order | 描述 |
|---|---|---|---|
trackedEntity | JSON格式 | ``` | |
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | 被跟踪实体实例的标识符 | ||
| 注册 | JSON格式 | ``` | |
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | 注册的标识符 | ||
| 事件 | JSON格式 | ``` | |
| GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,// | |||
| ``` | 事件标识符 | ||
The API supports CSV and JSON response for GET /api/tracker/events. | JSON格式 | 任何有效的字段过滤器(默认为 "relationship,relationType,from[trackedEntity[被跟踪实体],rollment[注册],event[事件]],to[trackedEntity[被跟踪实体],rollment[注册],event[事件]]) | ```json |
| { | |||
| "pager": { | |||
| "page": 1, | |||
| "pageSize": 1 | |||
| }, | |||
| "events": [ | |||
| { | |||
| "event": "A7rzcnZTe2T", | |||
| "status": "ACTIVE", | |||
| "program": "eBAyeGv0exc", | |||
| "programStage": "Zj7UnCAulEk", | |||
| "enrollment": "RiLEKhWHlxZ", | |||
| "orgUnit": "DwpbWkiqjMy", | |||
| "occurredAt": "2023-02-13T00:00:00.000", | |||
| "scheduledAt": "2023-02-13T00:00:00.000", | |||
| "followUp": false, | |||
| "deleted": false, | |||
| "createdAt": "2017-09-08T21:40:22.000", | |||
| "createdAtClient": "2016-09-08T21:40:22.000", | |||
| "updatedAt": "2017-09-08T21:40:22.000", | |||
| "attributeOptionCombo": "HllvX50cXC0", | |||
| "attributeCategoryOptions": "xYerKDKCefk", | |||
| "geometry": { | |||
| "type": "Point", | |||
| "coordinates": [-11.468912037323042, 7.515913998868316] | |||
| }, | |||
| "dataValues": [ | |||
| { | |||
| "createdAt": "2016-12-06T18:22:34.438", | |||
| "updatedAt": "2016-12-06T18:22:34.438", | |||
| "storedBy": "bjorn", | |||
| "providedElsewhere": false, | |||
| "dataElement": "F3ogKBuviRA", | |||
| "value": "[-11.4880220438585,7.50978830548003]" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.423", | |||
| "updatedAt": "2013-12-30T14:23:57.423", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "eMyVanycQSC", | |||
| "value": "2018-02-07" | |||
| }, | |||
| { | |||
| "createdAt": "2013-12-30T14:23:57.382", | |||
| "updatedAt": "2013-12-30T14:23:57.382", | |||
| "storedBy": "lars", | |||
| "providedElsewhere": false, | |||
| "dataElement": "oZg33kd9taw", | |||
| "value": "Male" | |||
| } | |||
| ], | |||
| "notes": [], | |||
| "followup": false | |||
| } | |||
| ] | |||
| } | |||
| ``` | |||
extent of fields selected by * field selector | JSON格式 | 以逗号分隔的属性名称和排序方向对列表,格式为 propName:sortDirection。 | 支持的字段:创建时间 |
| 包括删除 | Boolean | true|false | enrollment |
串
- 只能传递 "trackedEntity"、"enrollment"、"event "中的一个参数
注
使用跟踪实体、注册或事件参数,将返回跟踪实体、注册或 事件是关系的一部分(从或至)。只要用户有访问权限,即是如此。
回复示例{ #example-response }¶
``json { "实例":[ { "relationship":"SSfIicJKbh5"、 "relationshipType":"Mv8R4MPcNcX"、 "来自":{ "trackedEntity":{ "trackedEntity":"neR4cmMY22o" } }, "到":{ "trackedEntity":{ "trackedEntity":"rEYUGH97Ssd" } } }, { "relationship":"S9kZGYPKk3x"、 "relationshipType":"Mv8R4MPcNcX"、 "来自":{ "trackedEntity":{ "trackedEntity":"neR4cmMY22o" } }, "到":{ "trackedEntity":{ "trackedEntity":"k8TU70vWtnP" } } } ], "page":1, "pageSize":2 } ```
跟踪器门禁控制{ #webapi_nti_access_control }¶
Tracker 在访问控制方面有几个不同的概念,如共享、组织单位范围、所有权和访问级别。下文将简要介绍不同的主题。
元数据共享{ #webapi_nti_metadata_sharing }¶
共享设置是 DHIS2 的标准功能,适用于跟踪和汇总元数据/数据以及仪表盘和可视化项目。共享的核心是定义谁能看到/做什么。一般来说,有五种可能的共享配置--无访问权限、元数据读取、元数据写入、数据读取和数据写入。这些访问配置可在用户和/或用户组级别授予(更具灵活性)。以 Tracker 为重点,以下元数据及其共享设置尤为重要:数据元素、类别选项、计划、计划阶段、跟踪实体类型、跟踪实体属性以及与跟踪器相关的仪表盘和仪表盘项目。
共享设置的工作原理非常简单,即在 Tracker 数据导入/导出过程中执行设置。要读取数据值,用户需要拥有数据读取权限。如果用户要修改数据,则需要拥有数据写入权限。同样,如果用户要修改元数据,则必须授予元数据写入权限。
Tracker 数据的一个关键点是需要采用整体方法。例如,用户无法只通过读取数据元素的访问权限来查看数据元素的值。用户需要通过读取数据来访问该数据元素所属的父计划阶段和计划。类别选项组合也是如此。在 Tracker 中,事件与属性选项组合(AttributeOptionCombo)相关,而属性选项组合是由类别选项组合而成的。因此,用户要读取一个事件的数据,需要有对所有类别选项和相应类别的数据读取权限,这些类别选项和相应类别构成了该事件的属性选项组合。如果用户只有一个类别选项或类别的访问权限,则无法访问整个事件。
要访问 "注册 "数据,必须先访问 "跟踪实体"。对跟踪实体的访问通过项目、跟踪实体类型和跟踪实体属性的共享设置来控制。访问 "注册 "后,就可以访问 "事件 "数据,这同样取决于 "计划阶段 "和 "数据元素 "共享设置。
另一个需要考虑的关键点是如何规划对不同项目阶段的访问。有时,我们可能需要向特定用户组(实验室技术人员)授予对特定阶段(例如 "实验室结果")的访问权限。在这种情况下,我们可以为 "化验结果 "阶段提供数据写入访问权限,也可以为一个或多个阶段提供数据读取权限,以防我们希望实验室技术人员读取其他医疗结果,或者,如果我们认为实验室技术人员没有必要查看与化验结果无关的数据,则不提供访问权限。
总之,DHIS2 具有细粒度的共享设置,我们可以用它在数据和元数据层面实施访问控制机制。这些共享设置可直接应用于用户层或用户组层。具体如何应用共享设置取决于手头的用例。
有关数据共享的详细信息,请查阅 数据共享。
组织单位范围{ #webapi_nti_ou_scope }¶
组织单位是 DHIS2 中最基本的对象之一。它们定义了允许用户记录和/或读取数据的范围。可分配给用户的组织单位有三种。它们是数据采集、数据查看和跟踪搜索。顾名思义,这些组织单位定义了一个范围,允许用户在此范围内进行相应的操作。
不过,为了进一步微调范围,DHIS2 Tracker 引入了一个概念,我们称之为**组织单位选择模式(**OrganisationUnitSelectionMode)。这种模式通常在导出跟踪器对象时使用。例如,用户有一个特定的跟踪器搜索范围,这是否意味着每次用户试图搜索跟踪器、登记或事件对象时,我们都必须使用这个范围?或者,用户是否有兴趣将搜索范围限制在选定的组织单位或整个捕获组织单位范围内,等等。
用户可以通过在 API 请求中传递 ouMode 的特定值来进行微调:
api/tracker/trackedEntities?orgUnit=UID&ouMode=specific_organisation_unit_selection_mode
目前有六种选择模式可供选择:选定、儿童、后代、捕获、可访问和全部。
- 选定:顾名思义,请求 API 的所有操作都会缩小到选定的组织单位。
- 子女:在此模式下,组织单位范围将使用所选组织单位及其直接子女来构建。
- 执行者:在这里,被选中的组织单位及其下的所有组织单位,而不仅仅是直接的子组织单位,构成了数据操作范围。
- 捕获:顾名思义,分配给用户数据捕获的组织单位构成了范围。请注意,在可分配给用户的三个组织单位中,数据捕获是必选的一个。如果用户没有数据视图和跟踪器搜索组织单位,系统将退回到数据捕获。这样,我们就能确保用户至少有一个宇宙。
- 可:从技术上讲,这与用户的跟踪器搜索组织单位的范围相同。
- ALL:如果我们面对的是超级用户,那么 ALL 这个名称就非常合理了。对于超级用户来说,这个范围意味着系统中可用的整个组织单位。但是,对于非超级用户来说,"ALL "归结为可访问的组织单位。
在进行跟踪器导入操作时传递这些模式意义不大。因为在写入跟踪器数据时,每个对象都需要附加一个特定的组织单位。然后,系统将确保所提及的每个组织单位都属于 CAPTURE 范围。如果不属于,系统将直接拒绝写入操作。
请注意,与跟踪对象相关的组织单位关联有 4 种类型。跟踪实体(TrackedEntity)有一个组织单位,通常称为注册组织单位。注册有一个与之关联的组织单位。事件也有一个与之相关的组织单位。跟踪实体-项目组合还有一个所有者组织单元。
获取跟踪器对象时,根据上下文,组织单位范围会应用到上述四个组织单位关联中的一个。
例如,在检索无项目上下文的 TrackedEntities 时,组织单位范围适用于 TrackedEntity 的注册组织单位。而当检索包含特定项目数据的 TrackedEntities 时,组织单位范围则应用于所有者组织单位。
- 解释它们与所有权的关系 - 与计划所有权的联系
跟踪器计划所有权{ #webapi_nti_ownership }¶
2.30 引入了一个新概念,称为 "追踪者所有权"(Tracker Ownership)。这为 TrackedEntity - Program 组合引入了一个新的组织单位关联。 我们称其为 TrackedEntity 的 Owner(或 Owning)组织单位。 组织单位。当读写与项目相关的跟踪数据时,所有者组织单位用于决定访问权限。 这与项目的[访问级别](#webapi_nti_access_level)配置一起,决定了项目相关数据(注册和事件)的访问行为。 如果 TrackedEntity-Program 组合的相应所有者组织单位属于用户的组织单位范围(搜索/捕获),用户就可以访问 TrackedEntity 的 Program 数据。对于访问级别为 OPEN 或 AUDITED 的项目,所有者组织单位必须在用户的搜索范围内。 对于访问级别为 PROTECTED 或 *CLOSED*的项目,所有者组织单位必须在用户的捕获范围内,才能访问特定被跟踪实体的相应项目数据。
请求跟踪实体而不指定项目时,响应将只包含满足 元数据共享设置 和以下标准之一的跟踪实体: - 被跟踪的实体已加入用户可访问数据的至少一个项目,且用户可访问所有者组织单元。 - 被跟踪实体未加入用户可访问数据的任何项目,但用户可访问被跟踪实体的注册组织单位。
CAPTURE¶
The data capture organisation units associated with the current user and all organisation units in the sub-hierarchy.
这种临时进入的行为被称为 "打破玻璃"。 目前,允许临时访问的时间为 3 小时。DHIS2 将对打破玻璃的行为以及用户指定的 用户指定的原因。不可能临时访问已配置为 * 关闭 * 访问级别的项目。 临时访问已配置为*关闭*访问级别的项目是不可能的。
全部
/ api / 33 / tracker / ownership / override?trackedEntityInstance = DiszpKrYNg8
&program = eBAyeGv0exc&reason =耐心+显示+急诊+急诊
跟踪器所有权转移¶
可以将一个 TrackedEntity-Program 的所有权 的所有权从一个组织单位转移到另一个组织单位。这在病人 转诊或迁移时非常有用。只有拥有所有权访问权限(或打破玻璃的临时访问权限)的用户才能转移所有权。要将一个 TrackedEntity-Program 的所有权转移到另一个组织单位,可以使用下面的 PUT 请求:
/ api / 33 / tracker /所有权/转让?trackedEntityInstance = DiszpKrYNg8
&program = eBAyeGv0exc&ou = EJNxP3WreNP
访问级别{ #webapi_nti_access_level }¶
DHIS2 对追踪器数据提供额外的保护。除了通过共享设置保护元数据和数据的标准功能外,跟踪器数据还受到额外访问级别保护机制的保护。 目前,可为项目配置四种访问级别:开放、审核、保护和关闭。
只有当用户尝试与计划数据(即 "注册 "和 "活动 "数据)交互时,才会触发这些访问级别。项目的不同访问级别配置是项目数据的开放(或封闭)程度。需要注意的是,所有其他共享设置仍然受到尊重,访问级别只是访问控制的附加层。以下是可为项目配置的四种访问级别的简短说明。
- 开放:该访问级别是访问级别中限制最少的。如果所有者组织单位属于用户的搜索范围,用户就可以访问和修改 OPEN 项目中的数据。 使用此访问级别,可以访问和修改捕获范围之外的数据,而无需任何理由或后果。
- 已审核:这与开放访问级别相同。不同之处在于,系统会自动为特定用户访问的数据添加审计日志条目。
- 受保护:此访问级别的限制稍多。只有当所有者组织单位属于用户的捕获范围时,用户才能访问受保护项目中的数据。不过,如果用户的搜索范围中只有所有者组织单位,他可以通过[打破玻璃](#webapi_nti_tracker_ownership_override)获得临时所有权。用户必须说明访问手头数据的理由。然后,系统会将理由和访问审核记录在案,并为用户提供 3 小时的临时访问权限。请注意,打碎玻璃后,所有者组织单元保持不变,只有打碎玻璃的用户才能获得临时访问权。
- 关闭:这是最受限制的访问级别。如果所有者组织单位不在用户的捕获范围内,则无法访问配置为 "关闭 "访问级别的项目下记录的数据。在此配置下也无法打破玻璃或获得临时所有权。请注意,仍有可能将所有权转移到另一个组织单位。只有有权访问数据的用户才能将 TrackedEntity-Program 组合的所有权转移给另一个组织单位。如果所有权转移,所有者组织单位将被更新。