本帖最后由 adminlily 于 2020-12-15 16:30 编辑
从工单移除字段先决条件:您必须熟悉教程中使用的语法 并且已经创建了一个扩展.
学习:从类删除现有字段
水平:[ ttps://www.itophub.io/wiki/page?id=level&dataflt%5B0%5D=level_%3DIntermediate]中间[/url]
域:[ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DXML]XML[/url], [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DPHP]PHP[/url], [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DPortal]protal[/url], [ ttps://www.itophub.io/wiki/page?id=domains&dataflt%5B0%5D=domains_%3DLifecycle]Lifecycle[/url],[ :8082/bin/create/5/5.2/5.2.3/prentation/WebHome?parent=5.5%5C.2.5%5C.2%5C.3.WebHome]prsentation[/url]
最低版本: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[/url]
<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[/url]
<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[/url]
<!-- 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[/url]
<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[/url]
<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[/url]
<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[/url]
public function ComputePriority() { // priority[impact][urgency] $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[/url]
<presentation>
<search>
<items>
<!-- remove the urgency -->
<item id="urgency" _delta="delete"/>
</items>
</details>
</presentation>
辞典
从理论上讲,我们还应该删除相应的字典条目,但不要这样做,因为它对iTop行为没有影响。
OQL查询
删除的字段可用于存储的OQL查询中
- 在DataModel中:例如在外部密钥的过滤器标签上,…
- 在Dashlet中:在数据模型或用户偏好中定义
- 在QueryPhrases中
- 在审计规则中
- 在包含过滤器的书签URL中
- 在通知中
- 配置文件中的参数
- 扩展带给的其他地方
删除父类上的字段
在抽象类上删除字段时,必须在抽象类及其所有子类上完成XML中搜索的用法。
|