×

微信扫一扫,快捷登录!

二次开发-数据环境-隐藏或移除字段

标签: 暂无标签
本帖最后由 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}} &amp; {{'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中搜索的用法。






上一篇:二次开发-数据环境-给类增加字段
下一篇:二次开发-数据环境-给类增加仪表板

写了  篇文章,拥有财富 ,被  人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

Powered by IT 运维管理
返回顶部