
定制开发
手册分类

- 1. 禅道SDK开发手册
- 1.1 配置使用与常见问题
- 1.2 调用SDK示例
- 1.3. 部门相关接口
- 1.4. 用户相关接口
- 1.4.1 获得添加用户所用的参数列表
- 1.4.2 添加单个用户
- 1.4.3 获取用户列表
- 1.5. 产品相关接口
- 1.5.1 获取产品列表
- 1.5.2 添加单个产品可选信息
- 1.5.3 添加单个产品
- 1.6. 项目相关接口
- 1.6.1 获取项目列表
- 1.6.2 添加单个项目可选信息
- 1.6.3 添加单个项目
- 1.7. 任务相关接口
- 1.7.1 获取任务列表
- 1.7.2 添加单个任务可选信息
- 1.7.3 添加单个任务
- 1.7.4 完成单个任务可选信息
- 1.7.5 完成单个任务
- 1.8. bug相关接口
- 1.8.1 获取Bug列表
- 1.8.2 添加单个Bug可选信息
- 1.8.3 添加单个Bug
- 1.8.4 解决单个Bug可选信息
- 1.8.5 解决单个Bug
- 2. 禅道RESTful API开发手册v1
- 3. 定制开发
- 3.1 二次开发机制
- 3.2 禅道的目录结构
- 3.3 找到要修改的文件
- 3.4 禅道的数据库结构
- 3.5 公用模块--common
- 3.6 12系列菜单登记和权限维护
- 3.7 18系列菜单登记和权限维护
- 3.8 示例:如何修改禅道的语言提示?
- 3.9 示例:创建bug时可以设置优先级字段
- 3.10 使用在线扩展编辑器
- 3.11 二次开发编辑器和翻译功能限制使用说明
- 3.12 禅道项目管理软件打包规范1.1版本
禅道PHP-SDK帮助手册-第二章 分享链接 /book/api/366.html
作者:雷勇
最后编辑:刘振华 于 2023-12-22 10:36:13
浏览量:2613
本篇目录
public function addBug() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array( 'product' => 1, 'module' => 2, 'project' => 1, 'openedBuild' => array('trunk', 3, 2), 'openedBuild[1]' => 'trunk', 'assignedTo' => 'lisi', 'deadline' => '2019-11-21', 'type' => 'codeerror', 'os' => 'windows', 'browser' => 'ie11', 'title' => '添加bug测试四', 'color' => '#2dbdb2', 'severity' => 2, 'pri' => 1, 'steps' => '重现步骤描述添加bug测试四', 'story' => 0, 'task' => 0, 'mailto[1]' => 'lisi', 'keywords' => 'bug4' ); // 请求参数 $result = $zentao->addBug($params); return $result; }
4.15完成单个任务可选信息
方法说明 |
请求此方法,可以获取该任务的所属项目详情、任务详情、任务操作记录,同时获取用于指派完成的用户列表。 |
|||||||||
使用示例 |
public function getTaskFinishParams() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array('taskID' => 1); // 请求参数 $extraFields = array('title', 'users', 'task', 'project', 'actions'); // 自定义返回字段 $result = $zentao->getTaskFinishParams($params, $extraFields); return $result; } |
|||||||||
请求方式 |
GET | |||||||||
方法名称 |
getTaskFinishParams | |||||||||
请求参数 |
|
|||||||||
响应结果 |
success | error | ||||||||
{ "status": 1, "msg": "success", "result": { //当前禅道项目导航位置 "title": "禅道系统 PHP-SDK 开发-完成", //可用指派用户列表 "users": { "_empty_": "", "admin": "A:admin", "lisi": "L:李四", "niuqi": "N:牛七", "wangwu": "W:王五", "zhangsan": "Z:张三", "zhapliu": "Z:赵六" }, //任务详情信息 "task": { "id": "1", "parent": "0", "project": "1", "module": "1", "story": "1", "storyVersion": "1", "fromBug": "0", "name": "确认禅道PHP-SDK需求,创建PHP-SDK文件 ", "type": "design", "pri": "1", "estimate": "4", "consumed": "6",//之前消耗时长【小时】 "left": "0", "deadline": "2019-11-11", "status": "done", "subStatus": "", "color": "", "mailto": "", "desc": "创建 zentao.sdk.class 文件,做好基本的用户认证,分析需求,开始进行功能开发。", "openedBy": "admin", "openedDate": "2019-11-11 15:29:27", "assignedTo": "admin", "assignedDate": "2019-11-20 15:30:15", "estStarted": "2019-11-11", "realStarted": "2019-11-11", "finishedBy": "admin", "finishedDate": "2019-11-20 15:30:15", "finishedList": "", "canceledBy": "", "canceledDate": "", "closedBy": "", "closedDate": "", "closedReason": "", "lastEditedBy": "admin", "lastEditedDate": "2019-11-20 15:30:15", "deleted": "0", "storyID": "1", "storyTitle": "确认禅道PHP-SDK需求,创建PHP-SDK文件", "latestStoryVersion": "1", "storyStatus": "active", "assignedToRealName": "admin", "children": [], "team": [], "files": [], "cases": [], "needConfirm": false, "progress": 100, "nextBy": "admin" }, //所属项目详情信息 "project": { "id": "1", "isCat": "0", "catID": "0", "type": "sprint", "parent": "0", "name": "禅道系统 PHP-SDK 开发", "code": "002", "begin": "2019-11-11", "end": "2019-11-23", "days": "10", "status": "doing", "subStatus": "", "statge": "1", "pri": "1", "desc": "开发禅道项目管理系统 PHP-SDK 的开发,用于 PHPer 高效便捷的进行项目管理。", "openedBy": "admin", "openedDate": "2019-11-11 15:24:14", "openedVersion": "11.6.4", "closedBy": "", "closedDate": "0000-00-00 00:00:00", "canceledBy": "", "canceledDate": "0000-00-00 00:00:00", "PO": "lisi", "PM": "lisi", "QD": "lisi", "RD": "lisi", "team": "雷勇开发", "acl": "custom", "whitelist": "1,2", "order": "5", "deleted": "0", "totalHours": "420.0", "totalEstimate": 28, "totalConsumed": 33, "totalLeft": 5 }, //操作记录详情列表 "actions": { "14": { "id": "14", "objectType": "task", "objectID": "1", "product": ",1,", "project": "1", "actor": "wangwu", "action": "started", "date": "2019-11-11 15:30:33", "comment": "", "extra": "", "read": "0", "history": [ { "id": "2", "action": "14", "field": "realStarted", "old": "0000-00-00", "new": "2019-11-11", "diff": "" }, { "id": "3", "action": "14", "field": "consumed", "old": "0", "new": "3", "diff": "" }, { "id": "4", "action": "14", "field": "status", "old": "wait", "new": "doing", "diff": "" } ] } } } } |
{ "status": 0, "msg": "error", "result": [] } |
4.16完成单个任务
方法说明 | 请求此方法,用于确认某一个任务完成,可指派完成任务的用户、消耗时间等信息。 |
|||||||||||||||||||||||||||||
使用示例 |
public function addTaskFinish() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array( 'taskID' => 16, 'currentConsumed' => 1, 'consumed' => 19, 'assignedTo' => 'lisi', 'finishedDate' => '2019-11-12', 'comment' => '完成任务描述' ); // 请求参数 $result = $zentao->addTaskFinish($params); return $result; } |
|||||||||||||||||||||||||||||
请求方式 |
POST | |||||||||||||||||||||||||||||
方法名称 |
addTaskFinish | |||||||||||||||||||||||||||||
请求参数 |
|
|||||||||||||||||||||||||||||
响应结果 |
success | error | ||||||||||||||||||||||||||||
{ "status": 1, "msg": "success", "result": [] } |
{ "status": 0, "msg": "error", "result": [] } |
4.17获取Bug列表
方法说明 | 请求此方法,可以根据不同产品下的不同状态获取该产品 Bug 列表。 |
|||||||||||||||||
使用示例 |
public function getBugList() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array('productID' => 1, 'branch' => 0, 'browseType' => 'unresolved'); // 请求参数 $extraFields = array('title', 'products', 'productID', 'productName', 'product', 'moduleName', 'modules', 'browseType', 'bugs'); // 自定义返回字段 $result = $zentao->getBugList($params, $extraFields); return $result; } |
|||||||||||||||||
请求方式 |
GET | |||||||||||||||||
方法名称 |
getBugList |
|||||||||||||||||
请求参数 |
|
|||||||||||||||||
响应结果 |
success | error | ||||||||||||||||
{ "status": 1, "msg": "success", "result": { //当前禅道项目导航位置 "title": "禅道项目管理系统-PHP-SDK-Bug", //已有产品名称列表 "products": { "1": "禅道项目管理系统-PHP-SDK", "2": "产品二", "3": "产品三", "4": "产品四", "5": "产品五", "6": "产品六", "9": "产品100" }, //当前产品ID "productID": 1, //当前产品名称 "productName": "禅道项目管理系统-PHP-SDK", //当前产品详情 "product": { "id": "1", "name": "禅道项目管理系统-PHP-SDK", "code": "001", "line": "0", "type": "normal", "status": "normal", "subStatus": "", "desc": "开发禅道PHP开发语言的SDK,以方便开发人员能快速来创建和使用禅道系统所提供的服务,同时减少开发者的学习成本和时间。", "PO": "admin", "QD": "admin", "RD": "admin", "acl": "open", "whitelist": "", "createdBy": "admin", "createdDate": "2019-11-11 12:22:29", "createdVersion": "11.6.4", "order": "5", "deleted": "0" }, //当前产品模块 "moduleName": "所有模块", //当前产品模块列表 "modules": [ "/", "/设计", "/开发", "/变更", "/测试" ], //当前 BUG 状态 "browseType": "unclosed", //当前状态下的 BUG 列表 "bugs": [ { "id": "7",//BUG ID "product": "1",//所属产品ID "branch": "0",//所属分支ID "module": "2",//所属模块ID "project": "1",//所属项目ID "plan": "0",//j所属计划ID "story": "0", "storyVersion": "1", "task": "0", "toTask": "0", "toStory": "0", "title": "添加bug测试三",//BUG 标题 "keywords": "修改bug",//BUG 关键词 "severity": "2",//严重程度 "pri": "1",//优先程度 "type": "codeerror",//BUG 类型 "os": "windows",//操作系统 "browser": "ie11",//浏览器 "hardware": "", "found": "", "steps": "重现步骤描述添加bug测试三",//重现步骤描述 "status": "active",//BUG 状态【active激活|resolved已解决|closed已关闭】 "subStatus": "", "color": "#2dbdb2",//BUG颜色 "confirmed": "0",//是否确认 "activatedCount": "0", "activatedDate": "0000-00-00 00:00:00", "mailto": "zhangsan", "openedBy": "admin", "openedDate": "2019-11-21 16:45:58", "openedBuild": "主干", "assignedTo": "zhangsan", "assignedDate": "2019-11-21 16:45:58", "deadline": "2019-11-21", "resolvedBy": "", "resolution": "", "resolvedBuild": "", "resolvedDate": "0000-00-00 00:00:00", "closedBy": "", "closedDate": "0000-00-00 00:00:00", "duplicateBug": "0", "linkBug": "", "case": "0", "caseVersion": "1", "result": "0", "testtask": "0", "lastEditedBy": "", "lastEditedDate": "0000-00-00 00:00:00", "deleted": "0", "delay": 1, "needconfirm": false } ] } } |
{ "status": 0, "msg": "error", "result": [] } |
4.18添加单个Bug可选信息
方法说明 | 请求此方法,用于为指定产品添加 Bug 之前,获取添加 Bug 时可能需要用到的一些相关信息。 |
|||||||||
使用示例 |
public function getBugCreateParams() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array('productID' => 1); // 请求参数 $extraFields = array('title', 'productID', 'productName', 'projects', 'moduleOptionMenu', 'users', 'stories', 'builds'); // 自定义返回字段 $result = $zentao->getBugCreateParams($params, $extraFields); return $result; } |
|||||||||
请求方式 |
GET | |||||||||
方法名称 |
getBugCreateParams | |||||||||
请求参数 |
|
|||||||||
响应结果 |
success | error | ||||||||
{ "status": 1, "msg": "success", "result": { //当前禅道项目导航位置 "title": "禅道项目管理系统-PHP-SDK-提Bug", //当前产品ID "productID": 1, //当前产品名称 "productName": "禅道项目管理系统-PHP-SDK", //当前产品下的项目列表 "projects": { "1": "禅道系统 PHP-SDK 开发", "_empty_": "" }, //当前产品的模块列表 "moduleOptionMenu": [ "/", "/设计", "/开发", "/变更", "/测试" ], //可指派用户列表 "users": { "_empty_": "", "lisi": "L:李四", "wangwu": "W:王五", "zhapliu": "Z:赵六", "admin": "A:admin", "niuqi": "N:牛七", "zhangsan": "Z:张三" }, //当前产品需求列表 "stories": { "1": "1:确认禅道PHP-SDK需求,创建PHP-SDK文件 (优先级:1,预计工时:4)", "2": "2:开发禅道SDK功能接口 (优先级:1,预计工时:24)", "_empty_": "" }, //当前产品影响版本列表 "builds": { "trunk": "主干" } } } |
{ "status": 0, "msg": "error", "result": [] } |
4.19添加单个Bug
方法说明 | 请求此方法,用于新增 Bug 反馈,新增 Bug 时可以绑定所属产品、项目、优先级等相关设置,并指派给某个用户。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用示例 |
public function addBug() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array( 'product' => 1, 'module' => 2, 'project' => 1, 'openedBuild' => array('trunk', 3, 2), 'assignedTo' => 'lisi', 'deadline' => '2019-11-21', 'type' => 'codeerror', 'os' => 'windows', 'browser' => 'ie11', 'title' => '添加bug测试四', 'color' => '#2dbdb2', 'severity' => 2, 'pri' => 1, 'steps' => '重现步骤描述添加bug测试四', 'story' => 0, 'task' => 0, 'mailto' => array('lisi', '张三'), 'keywords' => 'bug4' ); // 请求参数 $result = $zentao->addBug($params); return $result; } |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
请求方式 |
POST | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
方法名称 |
addBug |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
请求参数 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
响应结果 |
success | error | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ "status": 1, "msg": "success", "result": "保存成功" } |
{ "status": 0, "msg": "error", "result": { "title": [ "『Bug标题』不能为空。" ] } } |
4.20解决单个Bug可选信息
方法说明 | 请求此方法,可以获取当前 Bug 详细信息以及确认 Bug 解决时可能用到的信息。 |
|||||||||
使用示例 |
public function getBugResolveParams() { include_once('../vendor/zentao/zentao.php'); $zentao = new \zentao(); $params = array('bugID' => 14); // 请求参数 $extraFields = array('title', 'products', 'bug', 'users', 'builds', 'actions'); // 自定义返回字段 $result = $zentao->getBugResolveParams($params, $extraFields); return $result; } |
|||||||||
请求方式 |
GET | |||||||||
方法名称 |
getBugResolveParams |
|||||||||
请求参数 |
|
|||||||||
响应结果 |
success | error | ||||||||
{ "status": 1, "msg": "success", "result": { //当前禅道项目导航位置 "title": "禅道项目管理系统-PHP-SDK-解决", //已存在产品列表 "products": { "1": "禅道项目管理系统-PHP-SDK" }, //BUG详情【相关描述可参考 2.12 获取 BUG 列表】 "bug": { "id": "5", "product": "1", "branch": "0", "module": "2", "project": "1", "plan": "0", "story": "0", "storyVersion": "1", "task": "0", "toTask": "0", "toStory": "0", "title": "添加bug测试二", "keywords": "修改bug", "severity": "2", "pri": "1", "type": "codeerror", "os": "windows", "browser": "ie11", "hardware": "", "found": "", "steps": "重现步骤描述添加bug测试二", "status": "active", "subStatus": "", "color": "#2dbdb2", "confirmed": "1", "activatedCount": "0", "activatedDate": "", "mailto": "lisi", "openedBy": "admin", "openedDate": "2019-11-21 16:45:13", "openedBuild": "trunk", "assignedTo": "lisi", "assignedDate": "2019-11-22 15:22:21", "deadline": "2019-11-21", "resolvedBy": "", "resolution": "", "resolvedBuild": "", "resolvedDate": "", "closedBy": "", "closedDate": "", "duplicateBug": "0", "linkBug": "", "case": "0", "caseVersion": "1", "result": "0", "testtask": "0", "lastEditedBy": "admin", "lastEditedDate": "2019-11-22 15:22:21", "deleted": "0", "projectName": "禅道系统 PHP-SDK 开发", "storyTitle": null, "storyStatus": null, "latestStoryVersion": null, "taskName": null, "planName": null, "toCases": [], "files": [], "delay": 1 }, //可用用户列表【用于指派】 "users": { "_empty_": "", "admin": "A:admin", "lisi": "L:李四", "niuqi": "N:牛七", "wangwu": "W:王五", "zhangsan": "Z:张三", "zhapliu": "Z:赵六" }, //当前可用版本【用于解决版本】 "builds": { "_empty_": "", "trunk": "主干" }, //当前 BUG 的操作记录 "actions": { "791": { "id": "791", "objectType": "bug", "objectID": "5", "product": ",1,", "project": "1", "actor": "admin", "action": "bugconfirmed", "date": "2019-11-22 15:22:21", "comment": "", "extra": "", "read": "0", "history": [ { "id": "216", "action": "791", "field": "confirmed", "old": "0", "new": "1", "diff": "" } ] } } } } |
{ "status": 0, "msg": "error", "result": [] } |
4.21解决单个Bug
方法说明 | 请求此方法,用于确认一个 Bug 已解决,同时为其绑定解决方案、解决版本、解决日期等相关信息。
|
|||||||||||||||||||||||||||||||||||||||||||||
使用示例 |
public function addBugResolve()
{
include_once('../vendor/zentao/zentao.php');
$zentao = new \zentao();
$params = array(
'bugID' => 9,
'resolution' => 'duplicate',
'resolvedBuild' => '2',
'resolvedDate' => '2019-11-22',
'assignedTo' => 'lisi',
'comment' => '解决bug描述',
'buildProject' => 1,
'buildName' => '版本7.2.5',
'createBuild' => 1,
'duplicateBug' => 2
); // 请求参数
$result = $zentao->addBugResolve($params);
return $result;
}
|
|||||||||||||||||||||||||||||||||||||||||||||
请求方式 |
POST | |||||||||||||||||||||||||||||||||||||||||||||
方法名称 |
addBugResolve |
|||||||||||||||||||||||||||||||||||||||||||||
请求参数 |
|
|||||||||||||||||||||||||||||||||||||||||||||
响应结果 |
success | error | ||||||||||||||||||||||||||||||||||||||||||||
{ "status": 1, "msg": "success", "result": [] } |
{ "status": 0, "msg": "error", "result": [] } |
五、常见问题?
5.1调用禅道 SDK 类中方法,出现错误提示 "Trying to get property of non-object" ?
通常由以下情况造成,开发者可以打印输出 SDK 中请求结果 $result 查看返回信息以此查看原因。
- 第一种情况,需要修改密码。解决方案: 登录后台管理系统,找到 后台->安全->密码安全设置 关闭密码检查、关闭强制修改弱密码、关闭强制首次登录修改密码
<html><meta charset='utf-8'/> <style>body{background:white}</style> <script>self.location='/index.php?m=my&f=changepassword&t=json';</script>
- 第二种情况,没有操作权限。解决方案: 登录后台管理系统,给该账号设置相关权限。
<html><meta charset='utf-8'/> <style>body{background:white}</style> <script>self.location='/index.php?m=user&f=deny&t=json&module=dept&method=browse';</script>
- 第三种情况,缺失参数。解决方案: 在 API 列表 中找到对应方法,检查所传参数是否与文档列表中的参数相符。