* Refactor actionModel::getList, and modify its unit test.

This commit is contained in:
liumengyi
2023-10-12 17:07:51 +08:00
parent 35232dfc5a
commit b9738598c7
9 changed files with 525 additions and 215 deletions
+5 -6
View File
@@ -172,8 +172,8 @@ class actionModel extends model
{
$actionName = strtolower($action->action);
if(substr($actionName, 0, 7) == 'linked2') $this->actionTao->getLinked2Extra($action, substr($actionName, 7));
if(substr($actionName, 0, 12) == 'unlinkedfrom') $this->actionTao->getUnlinkedFromExtra($action, substr($actionName, 12));
if(substr($actionName, 0, 7) == 'linked2') $this->actionTao->getLinkedExtra($action, substr($actionName, 7));
if(substr($actionName, 0, 12) == 'unlinkedfrom') $this->actionTao->getLinkedExtra($action, substr($actionName, 12));
if(in_array($actionName, array('svncommited', 'gitcommited')) && isset($commiters[$action->actor])) $action->actor = $commiters[$action->actor];
if(!in_array($action->objectType, array('feedback', 'ticket')) && $actionName == 'tostory') $this->actionTao->processToStoryActionExtra($action);
@@ -185,10 +185,9 @@ class actionModel extends model
if($actionName == 'createrequirements') $this->actionTao->processCreateRequirementsActionExtra($action);
if($actionName == 'buildopened') $this->actionTao->processActionExtra(TABLE_BUILD, $action, 'name', 'build', 'view');
if($actionName == 'fromlib' && $action->objectType == 'case') $this->actionTao->processActionExtra(TABLE_TESTSUITE, $action, 'name', 'caselib', 'browse');
if($actionName == 'finished' && $objectType == 'todo') $this->actionTao->finishToDoActionExtra($action);
if(($actionName == 'closed' && $action->objectType == 'story') || ($actionName == 'resolved' && $action->objectType == 'bug')) $this->actionTao->processClosedStoryAndResolvedBugActionExtra($action);
if(($actionName == 'finished' && $objectType == 'todo') || ($actionName == 'closed' && in_array($action->objectType, array('story', 'demand'))) || ($actionName == 'resolved' && $action->objectType == 'bug')) $this->actionTao->processAppendLinkByExtra($action);
if(in_array($actionName, array('totask', 'linkchildtask', 'un', 'linkparenttask', 'unlinkparenttask', 'deletechildrentask')) && $action->objectType != 'feedback') $this->actionTao->processActionExtra(TABLE_TASK, $action, 'name', 'task', 'view');;
if(in_array($actionName, array('totask', 'linkchildtask', 'unlinkchildrentask', 'linkparenttask', 'unlinkparenttask', 'deletechildrentask')) && $action->objectType != 'feedback') $this->actionTao->processActionExtra(TABLE_TASK, $action, 'name', 'task', 'view');;
if(in_array($actionName, array('linkchildstory', 'unlinkchildrenstory', 'linkparentstory', 'unlinkparentstory', 'deletechildrenstory'))) $this->actionTao->processActionExtra(TABLE_STORY, $action, 'title', 'story', 'view');
if(in_array($actionName, array('testtaskopened', 'testtaskstarted', 'testtaskclosed'))) $this->actionTao->processActionExtra(TABLE_TESTTASK, $action, 'name', 'testtask', 'view');
if(in_array($actionName, array('importfromstorylib', 'importfromrisklib', 'importfromissuelib', 'importfromopportunitylib')) && $this->config->edition == 'max') $this->actionTao->processActionExtra(TABLE_ASSETLIB, $action, 'name', 'assetlib', $action->objectType);
@@ -1933,7 +1932,7 @@ class actionModel extends model
$action->extra = '';
if($linkedProducts && $this->config->vision == 'rnd')
{
foreach($linkedProducts as $productID => $productName) $linkedProducts[$productID] = html::a(helper::createLink('product', 'browse', "productID=$productID"), "#{$productID} {$productName}");
foreach($linkedProducts as $productID => $productName) $linkedProducts[$productID] = html::a(helper::createLink('product', 'browse', "productID={$productID}"), "#{$productID} {$productName}");
$action->extra = sprintf($this->lang->execution->action->extra, '<strong>' . join(', ', $linkedProducts) . '</strong>');
}
}
+31 -110
View File
@@ -340,23 +340,26 @@ class actionTao extends actionModel
}
/**
* 获取linked操作记录的附加信息。
* 获取 linked 和 unlinked 操作记录的附加信息。
* Get action extra info.
*
* @param object $action
* @param string $type
* @param object $action
* @param string $type
* @access protected
* @return bool
*/
protected function getLinked2Extra(object $action, string $type): bool
protected function getLinkedExtra(object $action, string $type): bool
{
$table = $this->getTableByType($type);
if($type == 'plan') $type = 'productplan';
if($type == 'revision') $type = 'repohistory';
if($type == 'bug') $type = 'build';
$table = zget($this->config->objectTables, $type, '');
if(empty($table)) return false;
$method = 'view';
if(in_array($type, array('execution', 'kanban')))
{
$execution = $this->fetchObjectInfoByID($table, (int)$action->extra, 'name, type, multiple');
$execution = $this->fetchObjectInfoByID(TABLE_EXECUTION, (int)$action->extra, 'name, type, multiple');
if($execution->type != 'project' && empty($execution->multiple)) return false;
$name = $execution->name;
@@ -374,7 +377,7 @@ class actionTao extends actionModel
}
elseif($type == 'plan' || $type == 'productplan')
{
$plan = $this->fetchObjectInfoByID($table, (int)$action->extra, 'title');
$plan = $this->fetchObjectInfoByID($table, (int)$action->extra, 'title');
if($plan && $plan->title) $action->extra = common::hasPriv('productplan', 'view') ? html::a(helper::createLink('productplan', $method, "planID={$action->extra}"), $plan->title) : $plan->title;
}
elseif(in_array($type, array('build', 'bug', 'release', 'testtask')))
@@ -384,7 +387,12 @@ class actionTao extends actionModel
}
elseif($type == 'revision')
{
$this->processRevision($action, $table);
$commit = $this->fetchObjectInfoByID($table, $action->extra, 'repo, revision');
if($commit)
{
$revision = substr($commit->revision, 0, 10);
$action->extra = common::hasPriv('repo', 'revision') ? html::a(helper::createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}"), $revision) : $revision;
}
}
return true;
}
@@ -403,34 +411,6 @@ class actionTao extends actionModel
return $this->dao->select($field)->from($table)->where('id')->eq($objectID)->fetch();
}
/**
* 获取unlinked操作记录的附加信息。
* Get unlinked action extra info.
*
* @param object $action
* @param string $type
* @access protected
* @return bool
*/
protected function getUnlinkedFromExtra(object $action, string $type): bool
{
if($type == 'plan') $type = 'productplan';
$table = $this->getTableByType($type);
if(empty($table)) return false;
$method = 'view';
if($type == 'revision')
{
$this->processRevision($action, $table);
}
elseif(in_array($type, array('execution', 'project', 'build', 'release', 'testtask', 'productplan')))
{
$fields = $type == 'productplan' ? 'title' : 'name';
$this->processActionExtra($table, $action, $fields, $type, $method);
}
return true;
}
/**
* 组建Action的extra信息。
* Build action extra info.
@@ -452,42 +432,6 @@ class actionTao extends actionModel
if($object && $object->{$fields}) $action->extra = $condition ? html::a(helper::createLink($type, $method, $this->processParamString($action, $type)), "#{$action->extra} " . $object->{$fields}) : "#{$action->extra} " . $object->{$fields};
}
/**
* 处理revision
* Process revision.
*
* @param object $action
* @param string $table
* @access protected
* @return void
*/
protected function processRevision(object $action, string $table)
{
$fields = 'repo, revision';
$commit = $this->fetchObjectInfoByID($table, $action->extra, $fields);
if($commit)
{
$revision = substr($commit->revision, 0, 10);
$action->extra = common::hasPriv('repo', 'revision') ? html::a(helper::createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}"), $revision) : $revision;
}
}
/**
* 根据类型获取对象表。
* Get object table by type.
*
* @param string $type
* @access protected
* @return string
*/
protected function getTableByType(string &$type): string
{
if($type == 'plan') $type = 'productplan';
if($type == 'revision') $type = 'repohistory';
if($type == 'bug') $type = 'build';
return $this->config->objectTables[$type] ?? '';
}
/**
* 处理属性。
* Process attribute.
@@ -574,61 +518,38 @@ class actionTao extends actionModel
*/
protected function processCreateRequirementsActionExtra(object $action): void
{
$names = $this->dao->select('id,title')->from(TABLE_STORY)->where('id')->in($action->extra)->fetchPairs('id', 'title');
$names = $this->dao->select('id,title')->from(TABLE_STORY)->where('id')->in($action->extra)->fetchPairs();
$action->extra = '';
if($names)
{
foreach($names as $id => $name) $action->extra .= common::hasPriv('requriement', 'view') ? html::a(helper::createLink('story', 'view', "storyID=$id"), "#{$id} " . $name) . ', ' : "#{$id} " . $name . ', ';
foreach($names as $id => $name) $action->extra .= common::hasPriv('requriement', 'view') ? html::a(helper::createLink('story', 'view', "storyID={$id}"), "#{$id} " . $name) . ', ' : "#{$id} " . $name . ', ';
}
$action->extra = trim(trim($action->extra), ',');
}
/**
* 搭建关闭用户故事和解决bug的Action的extra信息。
* Build closed story and resolve bug action extra info.
* 通过 extra 获取对象的 appendLink。
* Get object appendLink by extra.
*
* @param object $action
* @access protected
* @return void
*/
protected function processClosedStoryAndResolvedBugActionExtra(object $action): void
protected function processAppendLinkByExtra(object $action): void
{
$action->appendLink = '';
if(strpos($action->extra, '|') !== false) $action->extra = substr($action->extra, 0, strpos($action->extra, '|'));
if(strpos($action->extra, ':') !== false)
{
list($extra, $id) = explode(':', $action->extra);
$action->extra = $extra;
if($id)
{
$table = $action->objectType == 'story' ? TABLE_STORY : TABLE_BUG;
$name = $this->dao->select('title')->from($table)->where('id')->eq($id)->fetch('title');
if($name) $action->appendLink = html::a(helper::createLink($action->objectType, 'view', "id={$id}"), "#{$id} " . $name);
}
}
}
/**
* 结束待办Action的extra信息。
* Finish todo action extra info.
*
* @param object $action
* @access protected
* @return void
*/
protected function finishToDoActionExtra(object $action): void
{
$action->appendLink = '';
if(strpos($action->extra, ':')!== false)
{
list($extra, $id) = explode(':', $action->extra);
$action->extra = strtolower($extra);
if($id)
{
$table = $this->config->objectTables[$action->extra];
$field = $this->config->action->objectNameFields[$action->extra];
$name = $this->dao->select($field)->from($table)->where('id')->eq($id)->fetch($field);
if($name) $action->appendLink = html::a(helper::createLink($action->extra, 'view', "id={$id}"), "#{$id} " . $name);
$extra = strtolower($extra);
$module = $action->objectType == 'todo' ? $extra : $action->objectType;
$table = $this->config->objectTables[$module];
$field = $this->config->action->objectNameFields[$module];
$name = $this->dao->select($field)->from($table)->where('id')->eq($id)->fetch($field);
if($name) $action->appendLink = html::a(helper::createLink($module, 'view', "id={$id}"), "#{$id} " . $name);
}
}
}
@@ -646,7 +567,7 @@ class actionTao extends actionModel
protected function processLinkStoryAndBugActionExtra(object $action, string $module, string $method): void
{
$extra = '';
foreach(explode(',', $action->extra) as $id) $extra .= common::hasPriv($module, $method) ? html::a(helper::createLink($module, $method, "{$module}ID=$id"), "#$id ") . ', ' : "#$id, ";
foreach(explode(',', $action->extra) as $id) $extra .= common::hasPriv($module, $method) ? html::a(helper::createLink($module, $method, "{$module}ID={$id}"), "#{$id} ") . ', ' : "#{$id}, ";
$action->extra = trim(trim($extra), ',');
}
@@ -662,15 +583,15 @@ class actionTao extends actionModel
{
$productShadow = $this->dao->select('shadow')->from(TABLE_PRODUCT)->where('id')->in(trim($action->product, ','))->fetch('shadow');
$title = $this->dao->select('title')->from(TABLE_STORY)->where('id')->eq($action->extra)->fetch('title');
$defaultExtra = "#$action->extra " . $title;
$defaultExtra = "#{$action->extra} {$title}";
if($productShadow)
{
$projectID = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($action->extra)->fetch('project');
if($title) $action->extra = (common::hasPriv('projectstory', 'view') && $projectID) ? html::a(helper::createLink('projectstory', 'view', "storyID={$action->extra}&projectID=$projectID"), $defaultExtra) : $defaultExtra;
if($title) $action->extra = common::hasPriv('projectstory', 'view') && $projectID ? html::a(helper::createLink('projectstory', 'view', "storyID={$action->extra}&projectID={$projectID}"), $defaultExtra) : $defaultExtra;
}
else
{
if($title) $action->extra = common::hasPriv('story', 'view') ? html::a(helper::createLink('story', 'view', "storyID=$action->extra"), $defaultExtra) : $defaultExtra;
if($title) $action->extra = common::hasPriv('story', 'view') ? html::a(helper::createLink('story', 'view', "storyID={$action->extra}"), $defaultExtra) : $defaultExtra;
}
}
+24 -8
View File
@@ -107,22 +107,38 @@ class actionTest
*
* @param string $objectType
* @param int $objectID
* @param string $edition
* @access public
* @return object
* @return string
*/
public function getListTest($objectType, $objectID)
public function getListTest(string $objectType, int $objectID, string $edition = 'pms'): string
{
$objects = $this->objectModel->getList($objectType, $objectID);
global $tester;
$oldEdition = $tester->config->edition;
$tester->config->edition = $edition;
$objects = $this->objectModel->getList($objectType, $objectID);
$tester->config->edition = $oldEdition;
global $tester;
$modules = $objectType == 'module' ? $tester->dao->select('id')->from(TABLE_MODULE)->where('root')->in($objectID)->fetchPairs('id') : array();
$actions = $this->objectModel->getActionListByTypeAndID($objectType, $objectID, $modules);
if(dao::isError()) return dao::getError();
$dirname = dirname(__DIR__) . DS;
$actionID = key($actions);
$objects[$objectID]->extra = str_replace($dirname, '', $objects[$objectID]->extra);
$objects[$objectID]->extra = trim($objects[$objectID]->extra, "\n");
if(strpos($objects[$objectID]->extra, 'href') !== false) $objects[$objectID]->extra = 'a';
if(isset($objects[$actionID]->appendLink)) return 'link';
return $objects[$objectID];
if($objects[$actionID]->extra == $actions[$actionID]->extra) return 'nochanged';
$dirname = dirname(__DIR__) . DS;
$newExtra = str_replace($dirname, '', $objects[$actionID]->extra);
$newExtra = trim($newExtra, "\n");
$newExtra = strpos($newExtra, 'href') !== false ? 'link' : 'title';
return $newExtra;
}
/**
+283 -83
View File
@@ -2,98 +2,298 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/action.class.php';
su('admin');
zdTable('action')->gen(45);
zdTable('action')->config('action')->gen(99);
zdTable('project')->gen(20, true, false);
zdTable('project')->config('execution')->gen(90, false, false);
zdTable('product')->config('product')->gen(50, true, false);
zdTable('projectstory')->gen(10);
zdTable('productplan')->gen(10);
zdTable('story')->gen(10);
zdTable('task')->gen(20);
zdTable('bug')->gen(10);
zdTable('kanban')->gen(1);
zdTable('build')->gen(10);
zdTable('release')->gen(10);
zdTable('testsuite')->gen(10);
zdTable('testtask')->gen(10);
zdTable('assetlib')->gen(10);
zdTable('user')->gen(10);
su('admin');
/**
title=测试 actionModel->getList();
cid=1
pid=1
测试获取objectType product objectId 1的动态信息 >> 1,admin,1
测试获取objectType story objectId 2的动态信息 >> 2,dev17,1
测试获取objectType productplan objectId 3的动态信息 >> 3,test18,1
测试获取objectType release objectId 4的动态信息 >> 4,admin,1
测试获取objectType project objectId 5的动态信息 >> 5,dev17,11
测试获取objectType task objectId 6的动态信息 >> 6,test18,1
测试获取objectType build objectId 7的动态信息 >> 7,admin,1
测试获取objectType bug objectId 8的动态信息 >> 8,dev17,1
测试获取objectType testcase objectId 9的动态信息 >> 9,test18,2
测试获取objectType case objectId 10的动态信息 >> 10,admin,1
测试获取objectType testtask objectId 11的动态信息 >> 11,dev17,1
测试获取objectType user objectId 12的动态信息 >> 12,test18,1
测试获取objectType doc objectId 13的动态信息 >> 13,admin,1
测试获取objectType doclib objectId 14的动态信息 >> 14,dev17,1
测试获取objectType todo objectId 15的动态信息 >> 15,test18,1
测试获取objectType branch objectId 16的动态信息 >> 16,admin,1
测试获取objectType module objectId 17的动态信息 >> 17,dev17,1
测试获取objectType testsuite objectId 18的动态信息 >> 18,test18,a
测试获取objectType caselib objectId 19的动态信息 >> 19,admin,1
测试获取objectType testreport objectId 20的动态信息 >> 20,dev17,1
测试获取objectType entry objectId 21的动态信息 >> 21,test18,1
测试获取objectType webhook objectId 22的动态信息 >> 22,admin,a
测试获取objectType review objectId 23的动态信息 >> 23,dev17,1
测试获取objectType product objectId 24的动态信息 >> 24,test18,1
测试获取objectType story objectId 25的动态信息 >> 25,admin,1
测试获取objectType productplan objectId 26的动态信息 >> 26,dev17,1
测试获取objectType release objectId 27的动态信息 >> 27,test18,1
测试获取objectType project objectId 28的动态信息 >> 28,admin,33
测试获取objectType task objectId 29的动态信息 >> 29,dev17,1
测试获取objectType build objectId 30的动态信息 >> 30,test18,1
测试获取objectType bug objectId 31的动态信息 >> 31,admin,1
测试获取objectType testcase objectId 32的动态信息 >> 32,项目经理17,1
测试获取objectType case objectId 33的动态信息 >> 33,test18,1
测试获取objectType testtask objectId 34的动态信息 >> 34,admin,1
测试获取objectType user objectId 35的动态信息 >> 35,dev17,1
测试获取objectType doc objectId 36的动态信息 >> 36,test18,1
测试获取objectType doclib objectId 37的动态信息 >> 37,admin,1
测试获取objectType todo objectId 38的动态信息 >> 38,dev17,1
测试获取objectType branch objectId 39的动态信息 >> 39,test18,a
*/
$objectType = array('product', 'story', 'productplan', 'release', 'project', 'task', 'build', 'bug', 'testcase', 'case', 'testtask', 'user', 'doc', 'doclib', 'todo', 'branch', 'module', 'testsuite', 'caselib', 'testreport', 'entry', 'webhook', 'review');
$objectId = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39);
$objectType = array('story', 'task', 'bug', 'feedback', 'ticket', 'module', 'release', 'case', 'todo', 'testtask', 'risk', 'issue', 'opportunity', 'execution', 'project');
$storyID = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43);
$taskID = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
$bugID = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$feedbackID = array(1, 2, 3, 4, 5, 6, 7);
$hasOneID = array(1);
$hasTwoID = array(1, 2);
$todoID = array(1, 2, 3, 4, 5);
$testtaskID = array(1, 2, 3);
$executionID = array(101, 102, 103, 104);
$projectID = array(11, 12, 13, 14);
$action = new actionTest();
r($action->getListTest($objectType[0], $objectId[0])) && p('id,actor,extra') && e('1,admin,1'); // 测试获取objectType product objectId 1的动态信息
r($action->getListTest($objectType[1], $objectId[1])) && p('id,actor,extra') && e('2,dev17,1'); // 测试获取objectType story objectId 2的动态信息
r($action->getListTest($objectType[2], $objectId[2])) && p('id,actor,extra') && e('3,test18,1'); // 测试获取objectType productplan objectId 3的动态信息
r($action->getListTest($objectType[3], $objectId[3])) && p('id,actor,extra') && e('4,admin,1'); // 测试获取objectType release objectId 4的动态信息
r($action->getListTest($objectType[4], $objectId[4])) && p('id,actor,extra') && e('5,dev17,11'); // 测试获取objectType project objectId 5的动态信息
r($action->getListTest($objectType[5], $objectId[5])) && p('id,actor,extra') && e('6,test18,1'); // 测试获取objectType task objectId 6的动态信息
r($action->getListTest($objectType[6], $objectId[6])) && p('id,actor,extra') && e('7,admin,1'); // 测试获取objectType build objectId 7的动态信息
r($action->getListTest($objectType[7], $objectId[7])) && p('id,actor,extra') && e('8,dev17,1'); // 测试获取objectType bug objectId 8的动态信息
r($action->getListTest($objectType[8], $objectId[8])) && p('id,actor,extra') && e('9,test18,2'); // 测试获取objectType testcase objectId 9的动态信息
r($action->getListTest($objectType[9], $objectId[9])) && p('id,actor,extra') && e('10,admin,1'); // 测试获取objectType case objectId 10的动态信息
r($action->getListTest($objectType[10], $objectId[10])) && p('id,actor,extra') && e('11,dev17,1'); // 测试获取objectType testtask objectId 11的动态信息
r($action->getListTest($objectType[11], $objectId[11])) && p('id,actor,extra') && e('12,test18,1'); // 测试获取objectType user objectId 12的动态信息
r($action->getListTest($objectType[12], $objectId[12])) && p('id,actor,extra') && e('13,admin,1'); // 测试获取objectType doc objectId 13的动态信息
r($action->getListTest($objectType[13], $objectId[13])) && p('id,actor,extra') && e('14,dev17,1'); // 测试获取objectType doclib objectId 14的动态信息
r($action->getListTest($objectType[14], $objectId[14])) && p('id,actor,extra') && e('15,test18,1'); // 测试获取objectType todo objectId 15的动态信息
r($action->getListTest($objectType[15], $objectId[15])) && p('id,actor,extra') && e('16,admin,1'); // 测试获取objectType branch objectId 16的动态信息
r($action->getListTest($objectType[16], $objectId[16])) && p('id,actor,extra') && e('17,dev17,1'); // 测试获取objectType module objectId 17的动态信息
r($action->getListTest($objectType[17], $objectId[17])) && p('id,actor,extra') && e('18,test18,a'); // 测试获取objectType testsuite objectId 18的动态信息
r($action->getListTest($objectType[18], $objectId[18])) && p('id,actor,extra') && e('19,admin,1'); // 测试获取objectType caselib objectId 19的动态信息
r($action->getListTest($objectType[19], $objectId[19])) && p('id,actor,extra') && e('20,dev17,1'); // 测试获取objectType testreport objectId 20的动态信息
r($action->getListTest($objectType[20], $objectId[20])) && p('id,actor,extra') && e('21,test18,1'); // 测试获取objectType entry objectId 21的动态信息
r($action->getListTest($objectType[21], $objectId[21])) && p('id,actor,extra') && e('22,admin,a'); // 测试获取objectType webhook objectId 22的动态信息
r($action->getListTest($objectType[22], $objectId[22])) && p('id,actor,extra') && e('23,dev17,1'); // 测试获取objectType review objectId 23的动态信息
r($action->getListTest($objectType[0], $objectId[23])) && p('id,actor,extra') && e('24,test18,1'); // 测试获取objectType product objectId 24的动态信息
r($action->getListTest($objectType[1], $objectId[24])) && p('id,actor,extra') && e('25,admin,1'); // 测试获取objectType story objectId 25的动态信息
r($action->getListTest($objectType[2], $objectId[25])) && p('id,actor,extra') && e('26,dev17,1'); // 测试获取objectType productplan objectId 26的动态信息
r($action->getListTest($objectType[3], $objectId[26])) && p('id,actor,extra') && e('27,test18,1'); // 测试获取objectType release objectId 27的动态信息
r($action->getListTest($objectType[4], $objectId[27])) && p('id,actor,extra') && e('28,admin,33'); // 测试获取objectType project objectId 28的动态信息
r($action->getListTest($objectType[5], $objectId[28])) && p('id,actor,extra') && e('29,dev17,1'); // 测试获取objectType task objectId 29的动态信息
r($action->getListTest($objectType[6], $objectId[29])) && p('id,actor,extra') && e('30,test18,1'); // 测试获取objectType build objectId 30的动态信息
r($action->getListTest($objectType[7], $objectId[30])) && p('id,actor,extra') && e('31,admin,1'); // 测试获取objectType bug objectId 31的动态信息
r($action->getListTest($objectType[8], $objectId[31])) && p('id,actor,extra') && e('32,dev17,1'); // 测试获取objectType testcase objectId 32的动态信息
r($action->getListTest($objectType[9], $objectId[32])) && p('id,actor,extra') && e('33,test18,1'); // 测试获取objectType case objectId 33的动态信息
r($action->getListTest($objectType[10], $objectId[33])) && p('id,actor,extra') && e('34,admin,1'); // 测试获取objectType testtask objectId 34的动态信息
r($action->getListTest($objectType[11], $objectId[34])) && p('id,actor,extra') && e('35,dev17,1'); // 测试获取objectType user objectId 35的动态信息
r($action->getListTest($objectType[12], $objectId[35])) && p('id,actor,extra') && e('36,test18,1'); // 测试获取objectType doc objectId 36的动态信息
r($action->getListTest($objectType[13], $objectId[36])) && p('id,actor,extra') && e('37,admin,1'); // 测试获取objectType doclib objectId 37的动态信息
r($action->getListTest($objectType[14], $objectId[37])) && p('id,actor,extra') && e('38,dev17,1'); // 测试获取objectType todo objectId 38的动态信息
r($action->getListTest($objectType[15], $objectId[38])) && p('id,actor,extra') && e('39,test18,a'); // 测试获取objectType branch objectId 39的动态信息
// 操作以 linked2 或 unlinked2 开头
r($action->getListTest($objectType[0], $storyID[0])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 1 的动态信息
r($action->getListTest($objectType[0], $storyID[1])) && p() && e('link'); // 测试获取对象类型 story 对象ID 2 的动态信息
r($action->getListTest($objectType[0], $storyID[2])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 3 的动态信息
r($action->getListTest($objectType[0], $storyID[3])) && p() && e('link'); // 测试获取对象类型 story 对象ID 4 的动态信息
r($action->getListTest($objectType[0], $storyID[4])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 5 的动态信息
r($action->getListTest($objectType[0], $storyID[5])) && p() && e('link'); // 测试获取对象类型 story 对象ID 6 的动态信息
r($action->getListTest($objectType[0], $storyID[6])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 7 的动态信息
r($action->getListTest($objectType[0], $storyID[7])) && p() && e('link'); // 测试获取对象类型 story 对象ID 8 的动态信息
r($action->getListTest($objectType[0], $storyID[8])) && p() && e('link'); // 测试获取对象类型 story 对象ID 9 的动态信息
r($action->getListTest($objectType[0], $storyID[9])) && p() && e('link'); // 测试获取对象类型 story 对象ID 10 的动态信息
r($action->getListTest($objectType[0], $storyID[10])) && p() && e('link'); // 测试获取对象类型 story 对象ID 11 的动态信息
r($action->getListTest($objectType[0], $storyID[11])) && p() && e('link'); // 测试获取对象类型 story 对象ID 12 的动态信息
r($action->getListTest($objectType[0], $storyID[12])) && p() && e('link'); // 测试获取对象类型 story 对象ID 13 的动态信息
r($action->getListTest($objectType[0], $storyID[13])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 14 的动态信息
r($action->getListTest($objectType[0], $storyID[14])) && p() && e('link'); // 测试获取对象类型 story 对象ID 15 的动态信息
r($action->getListTest($objectType[0], $storyID[15])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 16 的动态信息
r($action->getListTest($objectType[0], $storyID[16])) && p() && e('link'); // 测试获取对象类型 story 对象ID 17 的动态信息
r($action->getListTest($objectType[0], $storyID[17])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 18 的动态信息
r($action->getListTest($objectType[0], $storyID[18])) && p() && e('link'); // 测试获取对象类型 story 对象ID 19 的动态信息
r($action->getListTest($objectType[0], $storyID[19])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 20 的动态信息
r($action->getListTest($objectType[0], $storyID[20])) && p() && e('link'); // 测试获取对象类型 story 对象ID 21 的动态信息
r($action->getListTest($objectType[0], $storyID[21])) && p() && e('link'); // 测试获取对象类型 story 对象ID 22 的动态信息
r($action->getListTest($objectType[0], $storyID[22])) && p() && e('link'); // 测试获取对象类型 story 对象ID 23 的动态信息
r($action->getListTest($objectType[0], $storyID[23])) && p() && e('link'); // 测试获取对象类型 story 对象ID 24 的动态信息
r($action->getListTest($objectType[0], $storyID[24])) && p() && e('link'); // 测试获取对象类型 story 对象ID 25 的动态信息
r($action->getListTest($objectType[0], $storyID[25])) && p() && e('link'); // 测试获取对象类型 story 对象ID 26 的动态信息
r($action->getListTest($objectType[0], $storyID[26])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 27 的动态信息
// 操作是 tostory 对象类型 bug
r($action->getListTest($objectType[2], $bugID[0])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 1 的动态信息
r($action->getListTest($objectType[2], $bugID[1])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 2 的动态信息
r($action->getListTest($objectType[2], $bugID[2])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 3 的动态信息
// 操作是 tostory 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[0])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 1 的动态信息
// 操作是 tostory 对象类型 ticket
r($action->getListTest($objectType[4], $hasOneID[0])) && p() && e('nochanged'); // 测试获取对象类型 ticket 对象ID 1 的动态信息
// 操作是 moved 对象类型是 task
r($action->getListTest($objectType[1], $taskID[0])) && p() && e('link'); // 测试获取对象类型 task 对象ID 1 的动态信息
// 操作是 moved 对象类型是 module
r($action->getListTest($objectType[5], $hasOneID[0])) && p() && e('nochanged'); // 测试获取对象类型 module 对象ID 1 的动态信息
// 操作 frombug
r($action->getListTest($objectType[0], $storyID[27])) && p() && e('link'); // 测试获取对象类型 story 对象ID 28 的动态信息
// 操作 importedcard 对象存在
r($action->getListTest($objectType[1], $taskID[1])) && p() && e('link'); // 测试获取对象类型 task 对象ID 2 的动态信息
// 操作 importedcard 对象不存在
r($action->getListTest($objectType[1], $taskID[2])) && p() && e('nochanged'); // 测试获取对象类型 task 对象ID 3 的动态信息
// 操作 createchildren 关联任务非空
r($action->getListTest($objectType[1], $taskID[3])) && p() && e('link'); // 测试获取对象类型 task 对象ID 4 的动态信息
// 操作 createchildren 关联任务为空
r($action->getListTest($objectType[1], $taskID[4])) && p() && e('title'); // 测试获取对象类型 task 对象ID 5 的动态信息
// 操作 createrequirements 关联需求非空
r($action->getListTest($objectType[0], $storyID[28])) && p() && e('link'); // 测试获取对象类型 story 对象ID 29 的动态信息
// 操作 createrequirements 关联需求为空
r($action->getListTest($objectType[0], $storyID[29])) && p() && e('title'); // 测试获取对象类型 story 对象ID 30 的动态信息
// 操作 buildopened 关联发布非空
r($action->getListTest($objectType[6], $hasTwoID[0])) && p() && e('link'); // 测试获取对象类型 release 对象ID 1 的动态信息
// 操作 buildopened 关联发布为空
r($action->getListTest($objectType[6], $hasTwoID[1])) && p() && e('nochanged'); // 测试获取对象类型 release 对象ID 2 的动态信息
// 操作 fromlib 对象类型是 case 关联用例非空
r($action->getListTest($objectType[7], $hasTwoID[0])) && p() && e('link'); // 测试获取对象类型 case 对象ID 1 的动态信息
// 操作 fromlib 对象类型是 case 关联用例为空
r($action->getListTest($objectType[7], $hasTwoID[1])) && p() && e('nochanged'); // 测试获取对象类型 case 对象ID 2 的动态信息
// 操作 fromlib 对象类型是 story
r($action->getListTest($objectType[0], $storyID[30])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 31 的动态信息
// 操作 finished 对象类型 todo extra task 存在
r($action->getListTest($objectType[8], $todoID[0])) && p() && e('link'); // 测试获取对象类型 todo 对象ID 1 的动态信息
// 操作 finished 对象类型 todo extra task 不存在
r($action->getListTest($objectType[8], $todoID[1])) && p() && e('link'); // 测试获取对象类型 todo 对象ID 2 的动态信息
// 操作 finished 对象类型 todo extra 为空
r($action->getListTest($objectType[8], $todoID[2])) && p() && e('link'); // 测试获取对象类型 todo 对象ID 3 的动态信息
// 操作 finished 对象类型 story
r($action->getListTest($objectType[0], $storyID[31])) && p() && e('nochanged'); // 测试获取对象类型 story 对象ID 32 的动态信息
// 操作 closed 对象类型 story extra story 存在
r($action->getListTest($objectType[0], $storyID[32])) && p() && e('link'); // 测试获取对象类型 story 对象ID 33 的动态信息
// 操作 closed 对象类型 story extra story 不存在
r($action->getListTest($objectType[0], $storyID[33])) && p() && e('link'); // 测试获取对象类型 story 对象ID 34 的动态信息
// 操作 closed 对象类型 story extra 为空
r($action->getListTest($objectType[0], $storyID[34])) && p() && e('link'); // 测试获取对象类型 story 对象ID 35 的动态信息
// 操作 closed 对象类型 todo
r($action->getListTest($objectType[8], $todoID[3])) && p() && e('nochanged'); // 测试获取对象类型 todo 对象ID 4 的动态信息
// 操作 resolved 对象类型 bug extra bug 存在
r($action->getListTest($objectType[2], $bugID[3])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 4 的动态信息
// 操作 resolved 对象类型 bug extra bug 不存在
r($action->getListTest($objectType[2], $bugID[4])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 5 的动态信息
// 操作 resolved 对象类型 bug extra 为空
r($action->getListTest($objectType[2], $bugID[5])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 6 的动态信息
// 操作 resolved 对象类型 todo
r($action->getListTest($objectType[8], $todoID[4])) && p() && e('nochanged'); // 测试获取对象类型 todo 对象ID 5 的动态信息
// 操作 totask 对象类型 task
r($action->getListTest($objectType[1], $taskID[5])) && p() && e('link'); // 测试获取对象类型 task 对象ID 6 的动态信息
// 操作 linkchildtask 对象类型 task
r($action->getListTest($objectType[1], $taskID[6])) && p() && e('link'); // 测试获取对象类型 task 对象ID 7 的动态信息
// 操作 unlinkchildrentask 对象类型 task
r($action->getListTest($objectType[1], $taskID[7])) && p() && e('link'); // 测试获取对象类型 task 对象ID 8 的动态信息
// 操作 linkparenttask 对象类型 task
r($action->getListTest($objectType[1], $taskID[8])) && p() && e('link'); // 测试获取对象类型 task 对象ID 9 的动态信息
// 操作 unlinkparenttask 对象类型 task
r($action->getListTest($objectType[1], $taskID[9])) && p() && e('link'); // 测试获取对象类型 task 对象ID 10 的动态信息
// 操作 deletechildrentask 对象类型 task
r($action->getListTest($objectType[1], $taskID[10])) && p() && e('link'); // 测试获取对象类型 task 对象ID 11 的动态信息
// 操作 totask 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[1])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 2 的动态信息
// 操作 linkchildtask 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[2])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 3 的动态信息
// 操作 unlinkchildrentask 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[3])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 4 的动态信息
// 操作 linkparenttask 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[4])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 5 的动态信息
// 操作 unlinkparenttask 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[5])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 6 的动态信息
// 操作 deletechildrentask 对象类型 feedback
r($action->getListTest($objectType[3], $feedbackID[6])) && p() && e('nochanged'); // 测试获取对象类型 feedback 对象ID 7 的动态信息
// 操作 linkchildstory
r($action->getListTest($objectType[0], $storyID[35])) && p() && e('link'); // 测试获取对象类型 story 对象ID 36 的动态信息
// 操作 unlinkchildrenstory
r($action->getListTest($objectType[0], $storyID[36])) && p() && e('link'); // 测试获取对象类型 story 对象ID 37 的动态信息
// 操作 linkparentstory
r($action->getListTest($objectType[0], $storyID[37])) && p() && e('link'); // 测试获取对象类型 story 对象ID 38 的动态信息
// 操作 unlinkparentstory
r($action->getListTest($objectType[0], $storyID[38])) && p() && e('link'); // 测试获取对象类型 story 对象ID 39 的动态信息
// 操作 deletechildrenstory
r($action->getListTest($objectType[0], $storyID[39])) && p() && e('link'); // 测试获取对象类型 story 对象ID 40 的动态信息
// 操作 testtaskopened
r($action->getListTest($objectType[9], $testtaskID[0])) && p() && e('link'); // 测试获取对象类型 testtask 对象ID 1 的动态信息
// 操作 testtaskstarted
r($action->getListTest($objectType[9], $testtaskID[1])) && p() && e('link'); // 测试获取对象类型 testtask 对象ID 2 的动态信息
// 操作 testtaskclosed
r($action->getListTest($objectType[9], $testtaskID[2])) && p() && e('link'); // 测试获取对象类型 testtask 对象ID 3 的动态信息
// 开源版 导入资产库相关
// 操作 importfromstorylib
r($action->getListTest($objectType[1], $taskID[11])) && p() && e('nochanged'); // 测试获取对象类型 task 对象ID 12 的动态信息
// 操作 importfromrisklib
r($action->getListTest($objectType[10], $hasOneID[0])) && p() && e('nochanged'); // 测试 开源版 获取对象类型 risk 对象ID 1 的动态信息
// 操作 importfromissuelib
r($action->getListTest($objectType[11], $hasOneID[0])) && p() && e('nochanged'); // 测试 开源版 获取对象类型 isue 对象ID 1 的动态信息
// 操作 importfromopportunitylib
r($action->getListTest($objectType[12], $hasOneID[0])) && p() && e('nochanged'); // 测试 开源版 获取对象类型 opportunity 对象ID 1 的动态信息
// 旗舰版 导入资产库相关
// 操作 importfromstorylib
r($action->getListTest($objectType[1], $taskID[11], 'max')) && p() && e('link'); // 测试获取对象类型 task 对象ID 12 的动态信息
// 操作 importfromrisklib
r($action->getListTest($objectType[10], $hasOneID[0], 'max')) && p() && e('link'); // 测试 开源版 获取对象类型 risk 对象ID 1 的动态信息
// 操作 importfromissuelib
r($action->getListTest($objectType[11], $hasOneID[0], 'max')) && p() && e('link'); // 测试 开源版 获取对象类型 isue 对象ID 1 的动态信息
// 操作 importfromopportunitylib
r($action->getListTest($objectType[12], $hasOneID[0], 'max')) && p() && e('link'); // 测试 开源版 获取对象类型 opportunity 对象ID 1 的动态信息
// 操作 opened 对象类型 execution
r($action->getListTest($objectType[13], $executionID[0])) && p() && e('link'); // 测试获取对象类型 execution 对象ID 1 的动态信息
// 操作 managed 对象类型 execution
r($action->getListTest($objectType[13], $executionID[1])) && p() && e('link'); // 测试获取对象类型 execution 对象ID 2 的动态信息
// 操作 edited 对象类型 execution
r($action->getListTest($objectType[13], $executionID[2])) && p() && e('link'); // 测试获取对象类型 execution 对象ID 3 的动态信息
// 操作 closed 对象类型 execution
r($action->getListTest($objectType[13], $executionID[3])) && p() && e('nochanged'); // 测试获取对象类型 execution 对象ID 4 的动态信息
// 操作 opened 对象类型 project
r($action->getListTest($objectType[14], $projectID[0])) && p() && e('link'); // 测试获取对象类型 project 对象ID 1 的动态信息
// 操作 managed 对象类型 project
r($action->getListTest($objectType[14], $projectID[1])) && p() && e('link'); // 测试获取对象类型 project 对象ID 2 的动态信息
// 操作 edited 对象类型 project
r($action->getListTest($objectType[14], $projectID[2])) && p() && e('link'); // 测试获取对象类型 project 对象ID 3 的动态信息
// 操作 closed 对象类型 project
r($action->getListTest($objectType[14], $projectID[3])) && p() && e('nochanged'); // 测试获取对象类型 project 对象ID 4 的动态信息
// 操作 linkstory
r($action->getListTest($objectType[0], $storyID[40])) && p() && e('link'); // 测试获取对象类型 story 对象ID 41 的动态信息
// 操作 unlinkstory
r($action->getListTest($objectType[0], $storyID[41])) && p() && e('link'); // 测试获取对象类型 story 对象ID 42 的动态信息
// 操作 createchildrenstory
r($action->getListTest($objectType[0], $storyID[42])) && p() && e('link'); // 测试获取对象类型 story 对象ID 43 的动态信息
// 操作 linkbug
r($action->getListTest($objectType[2], $bugID[6])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 7 的动态信息
// 操作 unlinkbug
r($action->getListTest($objectType[2], $bugID[7])) && p() && e('link'); // 测试获取对象类型 bug 对象ID 8 的动态信息
// 操作 svncommited 操作者存在
r($action->getListTest($objectType[1], $taskID[12])) && p() && e('nochanged'); // 测试获取对象类型 task 对象ID 13 的动态信息
// 操作 svncommited 操作者不存在
r($action->getListTest($objectType[1], $taskID[13])) && p() && e('nochanged'); // 测试获取对象类型 task 对象ID 14 的动态信息
// 操作 gitcommited 操作者存在
r($action->getListTest($objectType[1], $taskID[15])) && p() && e('nochanged'); // 测试获取对象类型 task 对象ID 16 的动态信息
// 操作 gitcommited 操作者不存在
r($action->getListTest($objectType[1], $taskID[14])) && p() && e('nochanged'); // 测试获取对象类型 task 对象ID 15 的动态信息
@@ -0,0 +1,143 @@
title: table zt_action
desc: "系统日志"
author: Mengyi Liu
version: "1.0"
fields:
- field: objectType
note: "对象类型"
range: "story,
story{13},
story{13},
bug{3},feedback,ticket,
task,module,
story,
task{2},
task{2},
story{2},
release{2},
case{2},story,
todo{3},story,
story{3},todo,
bug{3},todo,
task{6},
feedback{6},
story{5},
testtask{3},
task,risk,issue,opportunity,
execution{4},project{4},
story{3},
bug{2},
task{2},
task{2}"
- field: objectID
note: "对象ID"
range: "1,
2-14,
15-27,
1-3,1{2},
1{2},
28,
2-3,
4-5,
29-30,
1-2,
1-2,31,
1-3,32,
33-35,4,
4-6,5,
6-11,
2-7,
36-40,
1-3,
12,1,1,1,
101-104,11-14,
41-43,
7-8,
13-14,
15-16"
- field: product
note: "产品"
range: "1,
1{13},
1{13},
1,2,3,1{2},
0{2},
0,
0{2},
0{2},
1{2},
1{2},
1{3},
0{4},
1{4},
1{4},
0{6},
0{6},
1{5},
1{3},
0{4},
0{4},
0{4},
0{2},
0{2}"
- field: project
note: "项目"
range: 1-86,11-14
- field: action
note: "动作"
range: "linked2product,
linked2project{2},linked2execution{2},linked2kanban{2},linked2plan,linked2productplan,linked2build,linked2bug,linked2release,linked2testtask,linked2revision,
unlinkedfromproject{2},unlinkedfromexecution{2},unlinkedfromkanban{2},unlinkedfromplan,unlinkedfromproductplan,unlinkedfrombuild,unlinkedfrombug,unlinkedfromrelease,unlinkedfromtesttask,unlinkedfromrevision,
tostory{5},
moved{2},
frombug,
importedcard{2},
createchildren{2},
createrequirements{2},
buildopened{2},
fromlib{3},
finished{4},
closed{4},
resolved{4},
totask,linkchildtask,unlinkchildrentask,linkparenttask,unlinkparenttask,deletechildrentask,
totask,linkchildtask,unlinkchildrentask,linkparenttask,unlinkparenttask,deletechildrentask,
linkchildstory,unlinkchildrenstory,linkparentstory,unlinkparentstory,deletechildrenstory,
testtaskopened,testtaskstarted,testtaskclosed,
importfromstorylib,importfromrisklib,importfromissuelib,importfromopportunitylib,
opened,managed,edited,closed,opened,managed,edited,closed,
linkstory,unlinkstory,createchildrenstory,
linkbug,unlinkbug,
svncommited{2},
gitcommited{2}"
- field: extra
note: "附加参数"
range: "1,
11,102,101,102,161,162,1{7},
11,102,101,102,161,162,1{7},
2,6,9,1{2},
1{2},
1,
1,2,
`2,3`,0,
`2,3`,0,
`2,3`,0,
`2,3`,0{2},
`task:1`,`task:10000`,0{2},
`story:1`,`story:10000`,0{2},
`bug:1`,`bug:10000`,0{2},
1{6},
1{6},
1{5},
1{3},
`1,2`{8},
1{4},
1{4},
1{2},
1{2}"
- field: actor
note: "操作者"
fields:
- field: actor1
range: admin,user,admin,test
- field: actor2
range: "[],1,[],2"
@@ -0,0 +1,8 @@
title: table zt_product
desc: "产品"
author: Mengyi Liu
version: "1.0"
fields:
- field: shadow
note: "影子产品"
range: 0,1,0{38}
+2
View File
@@ -73,3 +73,5 @@ fields:
- from: common.user.v1.yaml
use: three{8}
prefix: ","
- field: multiple
range: 1,0,1{28}
+29
View File
@@ -0,0 +1,29 @@
title: zt_assetlib
author: Mengyi liu
version: "1.0"
fields:
- field: id
range: 1-1000
- field: name
fields:
- field: name1
range: 需求,风险,问题,机会
- field: name2
range: 库
- field: name3
range: 1-10000{4}
- field: type
range: story,risk,issue,opportunity
- field: desc
range: ""
- field: order
range: 0
- field: createdBy
range: admin
- field: createdDate
note: "创建日期"
range: "(M)-(w)"
type: timestamp
format: "YY/MM/DD"
- field: deleted
range: 0
-8
View File
@@ -69,13 +69,5 @@ fields:
type: timestamp
format: "YYYY-MM-DD"
prefix: "\t"
- field: lastEditedBy
range: ""
- field: lastEditedDate
range: ""
- field: closedBy
range: ""
- field: closedDate
range: ""
- field: deleted
range: "0"