ONES GraphQL 调用示例

目录

GraphQL 请求体案例

项目下的卡片列表

{
    cards(
        filter: {
            objectId_equal: "34QZDMqz",
            objectType_equal: "project_component",
            status_equal: "normal"
        }
    ) {
        key
        uuid
        name
        description
        type
        config
    }
}

更新卡片公告内容

{
    mutation UpdateCard {
        updateCard(
            config: {
                project_uuid: "FXWjFL8RERRdheM7",
                content: "<p>1232</p>",
            }
            key: "card-D89TnAyY"
        ) {
            key
        }
    }
}

迭代下的任务列表

{
    tasks(filter: { sprint_in: ["3XX1trc1"] }) {
        uuid
        parent {
            uuid
        }
    }
}

任务的关联用例数据

{
    tasks(filter: { uuid_equal: "RvJM8Q3FsTVRkDWO" }) {
        uuid
        name
        relatedTestcasePlans {
            uuid
            name
        }
        relatedTestcasePlanCases {
            testcaseCase {
                name
            }
            result
        }
        relatedCases {
            uuid
            name
        }
   }
}

任务类型(可指定父子任务类型)

{
    issueTypes(
        filter: {
            projects: { uuid_in: ["5EYNKKKBkkkkkk34"] }
            subIssueType_in: [true] # 父子任务类型(不传type将返回所有)
        }
    ) {
        uuid
        name
    }
}

任务类型下的任务列表

{
    tasks(filter: { issueType_in: ["Jmjaoxqb"] }) {
        uuid
        name
    }
}

任务关注者下的任务列表

关注者本质上是用户, 所以可以输出用户的相关的信息

{
    tasks(
        filter: { owner_in: ["5EYNKKKB"], watchers: { uuid_in: ["5EYNKKKB"] } }
    ) {
        uuid
        name
        watchers {
            uuid
        }
    }
}

 通过任务创建者筛选

{
    tasks(filter: { owner_in: ["5EYNKKKB"] }) {
        uuid
        name
        owner {
            uuid
        }
    }
}

通过任务创建时间筛选

{
    tasks(
        filter: {
            project: { uuid_in: ["5EYNKKKBkkkkkk21"] }
            # 方法1
            createTime_range: { from: "2017-02-01", to: "2019-03-11" }
            # 方法2
            createTime_range: {
                quick: "last_7_days" # last_14_days last_30_days yesterday today this_week this_month this_quarter this_year
            }
        }
    ) {
        uuid
        name
        deadline
        project {
            uuid
        }
    }
}

通过任务标题筛选

理论上文本类型的都支持 match模糊匹配搜索

NOTE: match 最后放在filter最下面,从而提高筛选性能

{
    tasks(
        filter: {
            project: { uuid_in: ["5EYNKKKBkkkkkk21"] }
            name_match: "怎么样" # 放在筛选条件的最下面, 提高筛选性能
        }
    ) {
        uuid
        name
        deadline
        project {
            uuid
        }
    }
}

通过截止日期筛选

{
    tasks(
        filter: {
            project: { uuid_in: ["5EYNKKKBkkkkkk21"] }
            # 方法1
            deadline_range: { from: "2017-02-01", to: "2019-03-11" }
            # 方法2
            deadline_range: {
                quick: "last_7_days" # last_14_days last_30_days yesterday today this_week this_month this_quarter this_year
            }
        }
    ) {
        uuid
        name
        deadline
        project {
            uuid
        }
    }
}

通过优先级筛选

{
    tasks(
        filter: { assign_in: ["5EYNKKKB"], priority: { uuid_in: ["5RgkarJA"] } }
    ) {
        uuid
        name
    }
}

通过任务负责人筛选

{
    tasks(
        filter: {
            assign_in: ["5EYNKKKB"]
            status: {
                uuid_in: ["GWjYu2WK"] # 任务的状态筛选
            }
        }
    ) {
        uuid
        name
    }
}

迭代下所有任务的总工时

{
    buckets(groupBy: { tasks: { sprint: {} } }, orderBy: {}) {
        sprint {
            uuid
        }
        aggregateInt(sum: "tasks.estimatedHours") # 统计
    }
}

迭代下的剩余工时

{
    buckets(
        groupBy: { tasks: { sprint: {} } }
        filter: { tasks: { sprint_in: ["MpmPXEYA"] } }
    ) {
        key
        sprint {
            uuid
        }
        remainingHours(sum: "tasks.remainingManhour")
    }
}

工时

接口请求body格式

{"query":"%s"} # "%s" string类型, 参考下面示例替换

添加预估/登记工时

  • 预估工时 type=estimated
  • 登记工时 type=recorded
    mutation
    {
      addManhour(
          task: "D2pLSaJ31125EH3X"
          hours: 100000
          start_time: 1598966836
          type: estimated
          description: "do something"
          owner: "D2pLSaJ3"
          hours_format:"avg"
      ){
          key
          owner{
              uuid
              name
          }
          task{
              key
              name
          }
          type
          hours
          description
          startTime
      }
    }
    

修改预估/登记工时

mutation
{
    updateManhour(
        key: "manhour-2CjkDZto"
        hours: 2000000
    ){
        key
        owner{
            uuid
            name
        }
        task{
            key
            name
        }
        type
        hours
        description
        startTime
    }
}

删除预估/登记工时

{
    deleteManhour(
        key: "manhour-BEA9LMgd"
    ){
        key
    }
}

修改剩余工时

mutation
{
    UpdateRemainingHour(
        key: "remaining_hour-D2pLSaJ3YSkyDm1l-DAyGEN19"
        hours: 2000000
    ){
        key
    }
}

查询某工作项下某用户的工时

 query FetchUserManhours {
      manhours(
        filter: {
          "owner_in": [
              "DAyGEN19"
          ],
          "task_in": [
              "D2pLSaJ3YSkyDm1l"
          ]
      }
        orderBy: {
          "createTime": "DESC",
          "startTime": "DESC"
      }
      ) {
        key
        hours
        startTime
        description
        type
        owner {
          uuid
          avatar
          name
        }
      }
    }

查询某工作项下的用户工时信息,并按用户分组

query {
      buckets (
        groupBy: {
          "manhours": {
              "owner": {},
              "task": {}
          }
      }
        orderBy: {
          "owner": {
              "namePinyin": "ASC"
          }
      }
      ) {
        manhours(
          filter: {
            "task_in": [
                "D2pLSaJ3YSkyDm1l"
            ]
        }
        ) {
          key
        }
        owner {
          uuid
          name
          avatar
        }
        actualHours(sum: "manhours.recordedHour")
        estimatedHours(sum: "manhours.estimatedHour")
        remainingHour
      }
    }

查询某工作项汇总工时

query  {
      buckets (
        groupBy: {
          "manhours": {
              "owner": {},
              "task": {}
          }
      }
        orderBy: $orderBy
      ) {
        manhours(
          filter: {
            "owner_in": [
                "D2pLSaJ3"
            ],
            "task_in": [
                "D2pLSaJ3YSkyDm1l"
            ]
        }
        ) {
          key
        }
        actualHours(sum: "manhours.recordedHour")
        estimatedHours(sum: "manhours.estimatedHour")
        remainingHour
        remainingHourDeviation
      }
    }

项目计划

新建计划

mutation{
        addActivity(
            name: "测试2" 
            chart_uuid: "7cSvWRJi"
            assign: "Pqmud3zh" 
            type: "ppm_task" 
            progress: 0
            start_time: 1610640000 
            end_time: 1610726399 
            parent: ""
            )
            {
            key
            name
            ganttDataType: type
            uuid
            number
            progress
            createTime
            chartUUID
            planStartTime: startTime
            planEndTime: endTime
            position
            assign {
                uuid
                name
                avatar
            }
            task {
                uuid
                parent {
                    uuid
                }
                issueType {
                    icon
                    uuid
                }
                subIssueType {
                    icon
                    uuid
                }
            }
            sprint {
                uuid
            }
            }
        }

查询计划

{
    activities(
        orderBy: {position: "ASC"},
        filter:{
            chartUUID_in:["7cSvWRJi"]
        }
    ) 
    {
        key
        name
        uuid
        number
        progress
        parent
        createTime
        chartUUID
        planStartTime: startTime
        planEndTime: endTime
        estimatedHours
        totalManhour
        remainingManhour
        isVirtual
        ppmTask{
            uuid
        }
        milestone{
            uuid
        }
        deliverable{
            uuid
            key
            name
        }
    }
}

修改项目计划

mutation UpdateGanttData 
{
    updateActivity (
        name: "测试333" 
        key: "activity-6hgEt3mj") 
    {
        key
    }
}

删除项目计划

mutation DeleteGanttData {
    deleteActivity(
        key:"activity-2Lb3ZPXW"
        ) 
        {
            key
        }
}

通过日期筛选

range 支持的动态操作属性: gt gte lt lte equal not_equal, 这些参数也填入绝对值, 例如2018-09-09

其中 gtgte + ltlte 可有实现介于 的操作. 否则只能同时使用上面的其中一个操作.

{
    tasks(
        filter: {
            createTime_range: {
                fromUnix: 1511798381
                # toUnix: 1552898381
                # gte: "today-10d"
                # lte: "2019-03-20"
                # equal: "today-99d"
                # not_equal: "today-1d"
            }
            _1Ssfdsdf_range: {
                #自定义属性 "日期" 筛选
                equal: "today-99d"
            }
        }
    ) {
        uuid
        _1Ssfdsdf
    }
}

单行文本筛选

包括标题等的匹配,不匹配,等于,不等于的操作

{
    tasks(
        name_euqal: ["你好"] # name完全等于
        name_notEqual: ["你好"] # name 完全不等于
        name_match: ["你好"] # name 包含“你好”
        name_notMatch: ["你好"] # name 不包含“你好”
    ) {
        uuid
    }
}

数字字段筛选

等于,不等于,大于,小于,大于等于,小于等于

{
    tasks(
        relatedCount_between: {
            equal: 1 # 等于
        }
    )
    {
        uuid
    }
}
{
    tasks(
        relatedCount_between: {
            not_equal: 1 # 不等于
        }
    ) {
        uuid
    }
}
{
    tasks(
        relatedCount_between: {
            gt: 1
            lt: 10 # 大于1 小于10
        }
    ){
        uuid
    }
}
{
    tasks(
        relatedCount_between: {
            gte: 1
            lte: 10 # 大于等于1 小于等于10
        }
    ){
        uuid
    }
}

results matching ""

    No results matching ""