创建计算的时间持续时间字段,以跟踪工作流中事件之间的时间


时间持续时间自定义字段会自动计算并显示工作流中两个事件之间的持续时间。它们非常适合跟踪处理时间、响应时间、周期时间或项目中的任何基于时间的指标。

基本示例

创建一个简单的时间持续时间字段,以跟踪任务完成所需的时间:

mutation CreateTimeDurationField {
  createCustomField(input: {
    name: "Processing Time"
    type: TIME_DURATION
    projectId: "proj_123"
    timeDurationDisplay: FULL_DATE_SUBSTRING
    timeDurationStartInput: {
      type: TODO_CREATED_AT
      condition: FIRST
    }
    timeDurationEndInput: {
      type: TODO_MARKED_AS_COMPLETE
      condition: FIRST
    }
  }) {
    id
    name
    type
    timeDurationDisplay
    timeDurationStart {
      type
      condition
    }
    timeDurationEnd {
      type
      condition
    }
  }
}

高级示例

创建一个复杂的时间持续时间字段,以跟踪自定义字段更改之间的时间,并设定SLA目标:

mutation CreateAdvancedTimeDurationField {
  createCustomField(input: {
    name: "Review Cycle Time"
    type: TIME_DURATION
    projectId: "proj_123"
    description: "Time from review request to approval"
    timeDurationDisplay: FULL_DATE_STRING
    timeDurationTargetTime: 86400  # 24 hour SLA target
    timeDurationStartInput: {
      type: TODO_CUSTOM_FIELD
      condition: FIRST
      customFieldId: "status_field_id"
      customFieldOptionIds: ["review_requested_option_id"]
    }
    timeDurationEndInput: {
      type: TODO_CUSTOM_FIELD
      condition: FIRST
      customFieldId: "status_field_id"
      customFieldOptionIds: ["approved_option_id"]
    }
  }) {
    id
    name
    type
    description
    timeDurationDisplay
    timeDurationStart {
      type
      condition
      customField {
        name
      }
    }
    timeDurationEnd {
      type
      condition
      customField {
        name
      }
    }
  }
}

输入参数

CreateCustomFieldInput (TIME_DURATION)

参数 类型 必需 描述
name String! ✅ 是 持续时间字段的显示名称
type CustomFieldType! ✅ 是 必须是 TIME_DURATION
description String 显示给用户的帮助文本
timeDurationDisplay CustomFieldTimeDurationDisplayType! ✅ 是 如何显示持续时间
timeDurationStartInput CustomFieldTimeDurationInput! ✅ 是 开始事件配置
timeDurationEndInput CustomFieldTimeDurationInput! ✅ 是 结束事件配置
timeDurationTargetTime Float 用于SLA监控的目标持续时间(以秒为单位)

CustomFieldTimeDurationInput

参数 类型 必需 描述
type CustomFieldTimeDurationType! ✅ 是 要跟踪的事件类型
condition CustomFieldTimeDurationCondition! ✅ 是 FIRSTLAST 发生
customFieldId String Conditional 对于 TODO_CUSTOM_FIELD 类型是必需的
customFieldOptionIds [String!] Conditional 对于选择字段更改是必需的
todoListId String Conditional 对于 TODO_MOVED 类型是必需的
tagId String Conditional 对于 TODO_TAG_ADDED 类型是必需的
assigneeId String Conditional 对于 TODO_ASSIGNEE_ADDED 类型是必需的

CustomFieldTimeDurationType 值

描述
TODO_CREATED_AT 记录创建的时间
TODO_CUSTOM_FIELD 自定义字段值更改的时间
TODO_DUE_DATE 设置截止日期的时间
TODO_MARKED_AS_COMPLETE 记录被标记为完成的时间
TODO_MOVED 记录被移动到不同列表的时间
TODO_TAG_ADDED 记录被添加标签的时间
TODO_ASSIGNEE_ADDED 记录被分配人的时间

CustomFieldTimeDurationCondition 值

描述
FIRST 使用事件的第一次发生
LAST 使用事件的最后一次发生

CustomFieldTimeDurationDisplayType 值

描述 示例
FULL_DATE 天:小时:分钟:秒格式 "01:02:03:04"
FULL_DATE_STRING 完整单词书写 "Two hours, two minutes, three seconds"
FULL_DATE_SUBSTRING 带单位的数字 "1 hour, 2 minutes, 3 seconds"
DAYS 仅以天为单位的持续时间 "2.5" (2.5 days)
HOURS 仅以小时为单位的持续时间 "60" (60 hours)
MINUTES 仅以分钟为单位的持续时间 "3600" (3600 minutes)
SECONDS 仅以秒为单位的持续时间 "216000" (216000 seconds)

响应字段

TodoCustomField 响应

字段 类型 描述
id String! 字段值的唯一标识符
customField CustomField! 自定义字段定义
number Float 持续时间(以秒为单位)
value Float 数字的别名(持续时间,以秒为单位)
todo Todo! 此值所属的记录
createdAt DateTime! 值创建的时间
updatedAt DateTime! 值最后更新的时间

CustomField 响应 (TIME_DURATION)

字段 类型 描述
timeDurationDisplay CustomFieldTimeDurationDisplayType 持续时间的显示格式
timeDurationStart CustomFieldTimeDuration 开始事件配置
timeDurationEnd CustomFieldTimeDuration 结束事件配置
timeDurationTargetTime Float 目标持续时间(以秒为单位,用于SLA监控)

持续时间计算

工作原理

  1. 开始事件:系统监控指定的开始事件
  2. 结束事件:系统监控指定的结束事件
  3. 计算:持续时间 = 结束时间 - 开始时间
  4. 存储:持续时间以数字形式存储(以秒为单位)
  5. 显示:根据 timeDurationDisplay 设置格式化

更新触发器

当以下情况发生时,持续时间值会自动重新计算:

  • 记录被创建或更新
  • 自定义字段值发生变化
  • 标签被添加或移除
  • 分配人被添加或移除
  • 记录在列表之间移动
  • 记录被标记为完成/未完成

读取持续时间值

查询持续时间字段

query GetTaskWithDuration {
  todo(id: "todo_123") {
    id
    title
    customFields {
      id
      customField {
        name
        type
        timeDurationDisplay
      }
      number    # Duration in seconds
      value     # Same as number
    }
  }
}

格式化显示值

持续时间值会根据 timeDurationDisplay 设置自动格式化:

// FULL_DATE format
93784 seconds → "01:02:03:04" (1 day, 2 hours, 3 minutes, 4 seconds)

// FULL_DATE_STRING format
7323 seconds → "Two hours, two minutes, three seconds"

// FULL_DATE_SUBSTRING format
3723 seconds → "1 hour, 2 minutes, 3 seconds"

// DAYS format
216000 seconds → "2.5" (2.5 days)

// HOURS format
7200 seconds → "2" (2 hours)

// MINUTES format
180 seconds → "3" (3 minutes)

// SECONDS format
3661 seconds → "3661" (raw seconds)

常见配置示例

任务完成时间

timeDurationStartInput: {
  type: TODO_CREATED_AT
  condition: FIRST
}
timeDurationEndInput: {
  type: TODO_MARKED_AS_COMPLETE
  condition: FIRST
}

状态变化持续时间

timeDurationStartInput: {
  type: TODO_CUSTOM_FIELD
  condition: FIRST
  customFieldId: "status_field_id"
  customFieldOptionIds: ["in_progress_option_id"]
}
timeDurationEndInput: {
  type: TODO_CUSTOM_FIELD
  condition: FIRST
  customFieldId: "status_field_id"
  customFieldOptionIds: ["completed_option_id"]
}

特定列表中的时间

timeDurationStartInput: {
  type: TODO_MOVED
  condition: FIRST
  todoListId: "review_list_id"
}
timeDurationEndInput: {
  type: TODO_MOVED
  condition: FIRST
  todoListId: "approved_list_id"
}

分配响应时间

timeDurationStartInput: {
  type: TODO_ASSIGNEE_ADDED
  condition: FIRST
  assigneeId: "user_123"
}
timeDurationEndInput: {
  type: TODO_CUSTOM_FIELD
  condition: FIRST
  customFieldId: "status_field_id"
  customFieldOptionIds: ["started_option_id"]
}

所需权限

操作 所需权限
Create duration field Project-level OWNER or ADMIN role
Update duration field Project-level OWNER or ADMIN role
View duration value Any project member role

错误响应

配置无效

{
  "errors": [{
    "message": "Custom field is required for TODO_CUSTOM_FIELD type",
    "extensions": {
      "code": "VALIDATION_ERROR"
    }
  }]
}

找不到引用的字段

{
  "errors": [{
    "message": "Custom field not found",
    "extensions": {
      "code": "NOT_FOUND"
    }
  }]
}

缺少必需的选项

{
  "errors": [{
    "message": "Custom field options are required for select field changes",
    "extensions": {
      "code": "VALIDATION_ERROR"
    }
  }]
}

重要说明

自动计算

  • 持续时间字段是只读的 - 值会自动计算
  • 您无法通过API手动设置持续时间值
  • 计算通过后台作业异步进行
  • 当触发事件发生时,值会自动更新

性能考虑

  • 持续时间计算是排队并异步处理的
  • 大量持续时间字段可能会影响性能
  • 在设计持续时间字段时,请考虑触发事件的频率
  • 使用特定条件以避免不必要的重新计算

空值

当以下情况发生时,持续时间字段将显示 null

  • 开始事件尚未发生
  • 结束事件尚未发生
  • 配置引用不存在的实体
  • 计算遇到错误

最佳实践

配置设计

  • 尽可能使用特定事件类型,而不是通用类型
  • 根据您的工作流选择适当的 FIRSTLAST 条件
  • 在部署之前使用示例数据测试持续时间计算
  • 为团队成员记录您的持续时间字段逻辑

显示格式

  • 对于最易读的格式,使用 FULL_DATE_SUBSTRING
  • 对于紧凑且宽度一致的显示,使用 FULL_DATE
  • 对于正式报告和文档,使用 FULL_DATE_STRING
  • 对于简单的数字显示,使用 DAYSHOURSMINUTESSECONDS
  • 在选择格式时,请考虑您的UI空间限制

使用目标时间进行SLA监控

在使用 timeDurationTargetTime 时:

  • 设定目标持续时间(以秒为单位)
  • 将实际持续时间与目标进行比较,以确保符合SLA
  • 在仪表板中使用,以突出逾期项目
  • 示例:24小时响应SLA = 86400秒

工作流集成

  • 设计持续时间字段以匹配您的实际业务流程
  • 使用持续时间数据进行流程改进和优化
  • 监控持续时间趋势以识别工作流瓶颈
  • 如有需要,设置持续时间阈值的警报

常见用例

  1. 流程性能

    • 任务完成时间
    • 审核周期时间
    • 批准处理时间
    • 响应时间
  2. SLA监控

    • 首次响应时间
    • 解决时间
    • 升级时间框架
    • 服务水平合规性
  3. 工作流分析

    • 瓶颈识别
    • 流程优化
    • 团队绩效指标
    • 质量保证时间
  4. 项目管理

    • 阶段持续时间
    • 里程碑时间
    • 资源分配时间
    • 交付时间框架

限制

  • 持续时间字段是只读的,无法手动设置
  • 值是异步计算的,可能不会立即可用
  • 需要在您的工作流中设置适当的事件触发器
  • 无法计算尚未发生的事件的持续时间
  • 限于跟踪离散事件之间的时间(而不是连续时间跟踪)
  • 没有内置的SLA警报或通知
  • 无法将多个持续时间计算聚合到单个字段中

相关资源

AI助手

响应是通过人工智能生成的,可能包含错误。

我能帮您什么?

随时问我关于 Blue 或本文档的任何问题。

输入发送 • Shift+Enter 换行 • ⌘I 打开