二次开发-数据环境-给类增加仪表板
本帖最后由 adminlily 于 2020-12-15 16:34 编辑在团队中添加仪表板先决条件:您必须熟悉教程中使用的语法 并且已经创建了一个扩展.
我们还假定您熟悉iTop中的仪表板设计和Q.
学习:在类上添加仪表板属性
水平:[ ttps://www.itophub.io/wiki/page?id=level&dataflt%5B0%5D=level_%3DBeginner]初学者
域:[ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DXML]XML, [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DDashboard]dashboard, [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DPresentation]presentation
最低版本:2.6.0
您想在每个团队上显示一个新的标签,其中显示了仪表板以及该团队的特定信息:
[*]分配给该团队的待售票清单
[*]仅限活跃成员的成员列表
[*]至少一名团队成员所在的位置列表
[*]…
这些只是可以定义的Dashlet的示例,此教程的目的不是解释如何创建仪表盘。
可以用于上述示例的OQL查询
分配给该团队的待售票清单:
SELECT UserRequest WHERE STATUS IN ('assigned') AND team_id=:this->id
UNION SELECT Incident WHERE STATUS IN ('assigned') AND team_id=:this->id
UNION SELECT Problem WHERE STATUS IN ('assigned') AND team_id=:this->id
仅限活跃成员的成员列表:
SELECT Person AS p
JOIN lnkPersonToTeam AS l ON l.person_id = p.id
WHERE l.team_id = :this->id AND STATUS='active'
至少一名团队成员所在的位置列表:
SELECT Location AS L
JOIN Person AS P ON P.location_id=L.id
JOIN lnkPersonToTeam AS l1 ON l1.person_id=P.id
JOIN Team AS T ON l1.team_id=T.id
WHERE T.id=:this->id
创建一个仪表板属性
为此,您将需要为Team类创建一个新的AttributeDashboard字段,并将其添加到详细信息显示中。
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aadd-dashboard-attribute&codeblock=3]itop_design / classes
<class id="Team" _delta="must_exist"> <fields>
<field id="dashboard" xsi:type="AttributeDashboard" _delta="define">
<is_user_editable>true</is_user_editable>
<!-- Use this default definition for creating a new dashboard -->
<definition>
<!-- Later replace the whole definition with the XML export -->
<layout>DashboardLayoutOneCol</layout>
<title/>
<auto_reload>
<enabled>false</enabled>
<interval>300</interval>
</auto_reload>
<cells>
<cell id="0">
<rank>0</rank>
<dashlets>
<dashlet id="0" xsi:type="DashletEmptyCell">
<rank>0</rank>
</dashlet>
</dashlets>
</cell>
</cells>
</definition>
</field>
</fields>
<presentation>
<!-- Dashboard can only be displayed in the details -->
<details>
<items>
<!-- Dashboard can be displayed neither in a fieldset, nor in a column
-->
<item id="dashboard" _delta="define">
<rank>100</rank>
</item>
</items>
</details>
</presentation>
</class>
对仪表板使用较高的等级,将其放在末尾(“历史记录”之前),否则,当切换到仪表板之后的关系选项卡上的修改模式时,最终将修改错误的关系选项卡。由于仪表板不可编辑,因此将其从编辑视图中删除,对标签进行了重新编号,并从读取切换为编辑,并保留在相同的标签号上
添加一个[:8082/bin/view/5/5.2/5.2.4/#creating_a_new_entry]字典条目class:Team/Attribute:dashboard.
设计您的仪表板
部署扩展的第一个版本,它将提供一个空的仪表板。在iTop中重新设计此仪表板
在团队仪表板中编写OQL查询时,可以使用诸如:this-> att_code的占位符,其中att_code可以是团队的任何字段使用团队ID的示例:
SELECT Person AS p JOIN lnkPersonToTeam AS lnk ON lnk.person_id = p.id WHERE lnk.team_id=:this->id
如果对设计感到满意,请将其导出为 XML,然后用导出<definition>替换初始<dashboard>内容:
<?xml version="1.0"?>
<dashboard xmlns:xsi="2001/XMLSchema-instance">
<layout>DashboardLayoutOneCol</layout>
<title/>
<auto_reload>
<enabled>false</enabled>
<interval>300</interval>
</auto_reload>
<cells>
<cell id="0">
<rank>0</rank>
<dashlets>
<dashlet id="1" xsi:type="DashletObjectList">
<rank>0</rank>
<title>Members</title>
<query>SELECT Person AS p
JOIN lnkPersonToTeam AS lnk ON lnk.person_id = p.id
WHERE lnk.team_id=:this->id
</query>
<menu>true</menu>
</dashlet>
</dashlets>
</cell>
<cell id="1">
<rank>1</rank>
<dashlets>
<dashlet id="0" xsi:type="DashletEmptyCell">
<rank>0</rank>
</dashlet>
</dashlets>
</cell>
</cells>
</dashboard>
当对您的设计满意时,导出以XML格式保存,并用导出的<仪表板>标签内容替换初始<definition>的内容:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aadd-dashboard-attribute&codeblock=5]itop_design / classes / class@Team / fields
<field id="dashboard" xsi:type="AttributeDashboard" _delta="define">
...
<definition>
<!-- Paste here the XML export of your Dashboard designed directly in iTop -->
</definition>
...
并再次运行安装程序。
[*]每个人都会在所有Team对象上看到仪表板。
[*]用户还可以将其扭曲为仪表板团队自己的构建,
[*]但是它们都共享您在iTop上设计并推送的通用版本。
如果您推送该仪表板的新版本:
[*]每个人都会得到它
[*]仪表板的定制版本,也就是以前的通用仪表板的构建,将保持不变。
页:
[1]