二次开发-数据环境-隐藏或移除字段
本帖最后由 adminlily 于 2020-12-15 16:30 编辑从工单移除字段先决条件:您必须熟悉教程中使用的语法 并且已经创建了一个扩展.
学习:从类删除现有字段
水平:[ ttps://www.itophub.io/wiki/page?id=level&dataflt%5B0%5D=level_%3DIntermediate]中间
域:[ 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_%3DPHP]PHP, [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DPortal]protal, [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DLifecycle]Lifecycle,[:8082/bin/create/5/5.2/5.2.3/prentation/WebHome?parent=5.5%5C.2.5%5C.2%5C.3.WebHome]prsentation
最低版本:2.1.0
为了删除字段,必须标识iTop XML数据模型中使用该字段的所有位置。为此,在添加扩展之前,请打开已安装的iTop的data/datamodel-production.xml文件。将其保存为引用。
对于UserRequest类的紧急度字段,您至少应删除此列表中的所有外观:
[*]itop_design / classes / class@UserRequest / fields / field@urgency
[*]itop_design / classes / class@UserRequest / properties (naming, order, reconciliation, …)
[*]itop_design / classes / class@UserRequest / lifecycle
[*]itop_design / classes / class@UserRequest / presentation
[*]itop_design / classes / class@UserRequest / methods
[*]itop_design / module_designs / module_design@itop-portal / forms
[*]itop_design / module_designs / module_design@itop-portal / classes / class@UserRequest
例如,某些字段必须在不破坏iTop的情况下才能删除。
[*]任何类的org_id字段,
[*]具有生命周期的任何类的status字段
[*]工单上的caller_id字段
[*]还有更多的领域,但这是一个好的开始
从iTop的标准数据模型中删除现有字段可能会破坏与iTop扩展的兼容性,后者将依赖于删除字段。
只是躲田野
您可以决定仅隐藏用户的字段。在某些情况下,这可能就足够了。
隐藏没有默认价值的必填字段不起作用。
[*]创建后,提交将失败
[*]如果转换中的字段为必填,则转换中将提示输入表单
隐藏在门户中
字段仅对于门户用户可以隐藏,因为门户中使用的表单是以XML定义的,并且独立于控制台。
这是在工单创建时如何将其隐藏的方法:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=0]itop_design / module_designs / module_design@itop-portal / forms
<form id="ticket-create" _delta="must_exist">
<twig _delta="redefine">
<div class="row">
<div class="col-sm-6">
<div class="form_field" data-field-id="service_id" data-field-
flags="mandatory"></div>
</div>
<div class="col-sm-6">
<div class="form_field" data-field-id="servicesubcategory_id" data-field-
flags="mandatory"></div>
</div>
</div>
<div id="service_details_placeholder">
<div class="form_field" data-field-id="service_details"></div>
</div>
<div class="row">
<div class="col-sm-6">
<div class="form_field" data-field-id="impact"></div>
</div>
<div class="col-sm-6">
<!-- lines to be removed from default Portal
<div class="form_field" data-field-id="urgency"></div>
-->
</div>
</div>
<div>
<div class="form_field" data-field-id="title"></div>
<div class="form_field" data-field-id="description"></div>
<div class="form_field" data-field-id="contacts_list"></div>
</div>
</twig>
</form>
更改此“细枝”,还可以将工单的创建方式显示为变更,并将其显示为用户这是如何在工单版上将其隐藏:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=1]itop_design / module_designs / module_design@itop-portal / forms
<form id="ticket-edit" _delta="must_exist">
<twig _delta="redefine">
<div class="row">
<div class="col-sm-7">
<fieldset>
<legend>{{'Ticket:baseinfo'|dict_s}}</legend>
<div class="col-sm-6">
<div class="form_field" data-field-id="title" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="service_id" data-field-
flags="read_only"/>
</div>
<div class="col-sm-6">
<div class="form_field" data-field-id="caller_id" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="servicesubcategory_id" data-
field-flags="read_only"/>
</div>
<div class="col-sm-12">
<div class="form_field" data-field-id="description" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="solution" data-field-
flags="read_only"/>
</div>
<div class="col-sm-6">
<div class="form_field" data-field-id="user_satisfaction" data-field-
flags="read_only"/>
</div>
<div class="col-sm-6">
<div class="form_field" data-field-id="user_comment" data-field-
flags="read_only"/>
</div>
</fieldset>
</div>
<div class="col-sm-5">
<fieldset>
<legend>{{'Ticket:Type'|dict_s}} & {{'Ticket:date'|dict_s}}</legend>
<div class="col-sm-6">
<div class="form_field" data-field-id="status" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="impact" data-field-
flags="read_only"/>
<!-- <div class="form_field" data-field-id="urgency" data-field-
flags="read_only"/> -->
<div class="form_field" data-field-id="priority" data-field-
flags="read_only"/>
</div>
<div class="col-sm-6">
<div class="form_field" data-field-id="start_date" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="last_update" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="resolution_date" data-field-
flags="read_only"/>
<div class="form_field" data-field-id="agent_id" data-field-
flags="read_only"/>
</div>
</fieldset>
</div>
</div>
<div>
<div class="form_field" data-field-id="contacts_list"/>
<div class="form_field" data-field-id="public_log"/>
</div>
</twig>
</form>
以上表格仅是特定安装的iTop 2.6的示例。
隐藏在控制台中
可以将其隐藏在控制台中的详细说明中
[*]这对门户没有影响
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=2]itop_design / classes / class@UserRequest
<!-- Display the 2 new fields in the details of the UserRequest -->
<presentation>
<details _delta="must_exist">
<items>
<!-- Second column of the UserRequest display -->
<item id="col:col2">
<items>
<!-- id of the fieldset should be found in datamodel-production.xml
file -->
<item id="fieldset:Ticket:Type">
<items>
<!-- remove the urgency -->
<item id="urgency" _delta="delete"/>
</items>
</item>
</items>
</item>
</items>
</details>
</presentation>
这不能完全删除该字段,因为仍然可以通过
[*]CSV导出,
[*]通过“配置此列表...”菜单在列表中
[*]CSV导入
[*]API REST/JSON
删除领域栏位定义
现在,我们想从该类对象中完全删除该字段,这意味着也从数据库中删除它。我们需要从类中删除该字段:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=3]itop_design / classes / class@UserRequest / fields
<field id="urgency" _delta="delete">
</field>
类属性
我们需要检查紧急度字段是否用于:
[*]UserRequest友好名称
[*]CSV导入使用的UserRequest对帐字段
[*]UserRequest废弃逻辑
[*]UserRequest唯一性规则
既然不是这种情况,我们无事可做。否则我们将不得不变更。
生命周期标志
我们需要在类的生命周期中将该字段删除任何引用。对于紧急度,仅在状态被解决上设置标志,因此只有一个XML节点要设置为“删除”:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=4]itop_design / classes / class@UserRequest / lifecycle / states
<state id="resolved">
<flags>
<attribute id="urgency" _delta="delete"/>
</flags>
</state>
方法
我们需要删除UserRequest类上定义的PHP方法中该字段的所有引用
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=5]itop_design / classes / class@UserRequest / methods
<method id="xxx">
<code>
<!-- check the PHP of each method as they could be relying on this code attribute -->
</ code>
</method>
要标识受影响的PHP方法,请使用代码属性的搜索
例如,到$ this→Get('紧急度')的任何引用(其中$ this是UserRequest)都会使iTop崩溃,并显示FatalError
UserRequest方法中紧急度搜索的结果导致产生ComputePriority方法,需要对其进行修改:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=6]class:UserRequest
public function ComputePriority() { // priority $aPriorities = ( // a department 1 => ( 1 => 1, 2 => 1, 3 => 2, 4 => 4, ), // a group 2 => ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, ), // a person 3 => ( 1 => 2, 2 => 3, 3 => 3, 4 => 4, ), ); $iPriority = 1; if (($aPriorities[(int)$this->Get('impact')]) && ($aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')])) { $iPriority = $aPriorities[(int)$this->Get('impact')][(int)$this->Get('urgency')]; } return $iPriority; }
介绍
由于此紧急度字段也用于表单定义中,因此您必须应用上述2项更改,也就是说,应在门户表单和演示文稿详细信息中将其删除。但这还不够,也许在演示文稿的其他部分中指定了该字段,例如搜索,list和default_搜索在我们的例子中,紧急度仅在搜索标准中定义,因此我们将其删除:
[ ttps://www.itophub.io/wiki/page?do=export_code&id=2_7_0%3Acustomization%3Aremove-field&codeblock=7]itop_design / classes / class@UserRequest
<presentation>
<search>
<items>
<!-- remove the urgency -->
<item id="urgency" _delta="delete"/>
</items>
</details>
</presentation>
辞典
从理论上讲,我们还应该删除相应的字典条目,但不要这样做,因为它对iTop行为没有影响。
OQL查询
删除的字段可用于存储的OQL查询中
[*]在DataModel中:例如在外部密钥的过滤器标签上,…
[*]在Dashlet中:在数据模型或用户偏好中定义
[*]在QueryPhrases中
[*]在审计规则中
[*]在包含过滤器的书签URL中
[*]在通知中
[*]配置文件中的参数
[*]扩展带给的其他地方
删除父类上的字段
在抽象类上删除字段时,必须在抽象类及其所有子类上完成XML中搜索的用法。
页:
[1]