页面树结构
转至元数据结尾
转至元数据起始

上一章,以设备管理系统中的零部件自关联构成产品结构为案例,介绍了高级关联类父件到子件(PartToPart)。这一讲中,我们将围绕设备管理中的”产品结构“、设备列表功能中的”查看详情“—设备综合看板的建模过程,介绍高级关联结构树、可视化控件和查询控件使用,并扩展介绍一些基础的查询语法。

1. 产品结构建模过程分解

在之前的教程中,我们完成了实体类工单(SingleWO, MultiWO)、设备(SingleAsset, MultiAssets)、零部件(SinglePart, MultiParts)的表单定制,接下来就需要对高级关联类父件到子件(PartToPart)进行表单建模。与之前相似,维护父件到子件关联关系的单对象表单以及多对象列表建模方式同工单-零件(WorkOrderToPart)的建模过程,在本章中将不再赘述。

设备管理系统中“产品结构”的功能需要3个表单实现:

  • 1是创建子件和产品结构表单(PartToPartRight):基于产品创建零件和产品结构关系,即基于左对象创建右对象和关联类对象。
  • 2是产品结构树表单(PartToPartTree):用于产品结构树展示,在该表单“创建子件”操作弹出第1个表单(PartToPartRight)实现”创建子件“和建立产品BOM关系。
  • 3是零件的表单(SinglePart):其目标类为零部件(Part),目标类表单为SinglePart,用于产品结构树”创建产品“,即创建根节点,该表单的建模过程在表单建模入门(二)中有阐述。

下面将讲解产品结构建模的过程。

2. 创建子件和产品结构

创建子件和产品结构是产品结构建模中所设涉及的第1个表单。根据下图设计的功能,实现基于已有产品或父件(左对象)创建子件的关系(BOM关系)及新增零件(右类对象)。

图-创建子件和产品结构

根据上图设计,下面介绍如何基于左对象创建右对象及关联对象的表单建模过程:

1)进入关联类表单管理,为父件到子件(PartToPart)创建一个表单名为PartToPartRight的表单,跳转表单定制页面;

2)根据布局设计,往画布区拖入拖拽池后再拖入三个拖拽块,调整布局同上图所示;

3)修改最上方拖拽块的标题为“父件属性”,修改下排第一个拖拽块的标题为“子件图片”,第二个拖拽块标题为“子件属性”;

4)往“父件属性”拖拽块中拖入一个对象选择框,目标属性绑定关联类属性-“对象标识leftOid”。从用户体验角度考虑,可以修改标签名为“父件代号”。设置控件引用类为零部件(Part),浏览字段和显示字段分别设置为“零件名称partName”和“代号id”,回填字段设置为“全局唯一标识oid”;

5)往“子件图片”拖拽块中拖入一个附件,目标属性绑定右类属性-“零件图片partImg”,删除标签内容,设置附件显示形式为“图片”,调整图片样式-整体高度300px;

6)往“子件属性”拖拽块中拖入一个4行1列的行列布局。第1行拖入一个文本框,目标属性设置为右类属性-“零件名称partnName”;

7)第2行拖入一个单选框,目标属性设置为右类属性“零件类别partType”,自定义选项组为“产品,部件,零件“,点击确定按钮;

8)第3行拖入一个数字输入框,目标属性设置关联类属性-“数量number"。

9)第4行拖入一个文本框,目标属性设置为右类属性-“零件描述partDesc”,设置文本框类型为textarea;

完成以上步骤后,点击保存表单。关于该表单的用途,将在接下来的内容中介绍。

3.产品结构树

从用户角度看,对于具有层级关系的数据,用结构树的形式浏览比通过列表的形式更加直观。从父件到子件类(PartToPart)的列表中,很难一眼就看出某个产品关联了多少个系统,系统又关联了哪些零件。而且两个不同产品(不在同一关联体系)的零部件关系在列表中交叉排列,看上去比较混乱。但树控件能够有效梳理这些关联关系。关联结构树专门针对关联类设计,并且可以通过设定根节点查询条件来截取完整结构树中所需的一部分。接下来,我们通过新建一个父件到子件(PartToPart)表单来介绍关联结构树的使用方法。

图-产品结构树

3.1 产品结构树

产品结构树是产品结构建模所涉及到第2个表单。建模过程如下:

1)进入关联类表单管理,为父件到子件(PartToPart)创建一个表单名为PartToPartTree的表单,进入表单定制页面;

2)在多对象控件处找到关联结构树()控件,将控件拖入画布区,点击画布区的关联结构树,右侧滑出关联结构树属性区;

3)首先为该控件设置一个易记忆的控件代号。在本案例中,设置“BomTree”,该控件代号将在后面的教程中用到;

4)关联类结构树实际上是展示左类(实体类)和右类(实体类)的关联关系,所以需要明确具有查看关联关系的实体类。在本案例中,实体类选择零部件(Part);

5)确定实体类后需要确定关联类,因为父件到子件是自关联,所以方向有两个:从左到右,从右到左。本案例中,我们选择从左到右方向的关联类,更符合日常习惯,便于理解;

6)关联结构树由多个节点构成,第一级节点叫根节点(第0层),其余节点叫子节点或子孙节点。根节点展示的对象实际是记录了左类实体类零部件的数据,子节点记录了关联类对象的信息(如果是从右到左方向的关联,则相反);

7)设置根节点标签,点击根节点标签下方输入框,勾选实体类(即左类零部件)“零件名称partName”和“代号id”属性;

8)设置子节点标签,点击子节点标签下方输入框,勾选关联实体(即右类零部件)属性中的“零件名称partName”和“代号id”;

9)设置根节点和子节点标签为空时的提示信息,默认为“该对象暂无所选属性信息”;

10)设置根节点查询条件,这一步尤为重要。我们知道关联类描述的是多对多的关系,如果想要用关联结构树描述其中一类对象和其它对象的关联结构,我们通过设置根节点查询条件来截取完整结构树中所需的部分。在本案例中,产品由零件和部件组成,所以我们可以将根节点的过滤条件设置如下:

and obj.partType='产品'

11)本案例中,未设置子节点查询条件,大家可根据实际应用场景设置子节点的查询条件,设置方法同根节点查询条件;

12)根节点和子节点的图标属性及图标属性映射表的设置方式同动态地图角标属性设置方式,即明确图标绑定的属性,再根据属性值映射不同的图标;

13)默认加载层数默认为1,如果想要关联结构树加载更多层节点,可按需设置;

完成上面的步骤后,如果关联结构树有数据,点击更新预览按钮,即可在建模端看到产品结构树(如下图)。

图-关联结构树属性设置

3.2 产品结构维护

上一节为大家演示了如何利用关联结构树将父件到子件的关联关系用结构树的形式展示出来。下面介绍如何在结构树的基础上,维护父件到子件(PartToPart)的产品结构。主要分为:创建产品(新增根节点)、创建子件(新增子节点)、删除节点三部分。

3.2.1 创建产品

我们之前有谈到根节点标签实际上是关联类的左类对象的属性。所以想要新增根节点,实际上是增加零件类型为“产品”的零件(根节点查询条件为"partType='产品'")。下面讲解根节点操作的的建模过程:

1)进入关联类表单管理,进入父件到子件(PartToPart)的PartToPartTree表单建模页面;

2)选中画布区关联结构树,在右侧属性区-事件处点击根节点操作配置右侧的“+”按钮,此时出现一个用于设置根节点按钮名的输入框和为根节点按钮绑定事件的选择框(支持无限制增加根节点操作,可按需定制);

3)设置根节点名称为“产品”。因为当前关联类上并没有我们想要的“创建产品”操作,点击绑定操作右侧的“+”按钮,新增并绑定一个动作为“create”,目标类为零部件(Part)和目标类表单为SinglePart的操作;

4)点击确定,根节点按钮绑定“创建产品“成功。

图-创建产品操作编辑框

3.2.2 创建子件

完成根节点操作后,下面讲解如何添加子节点操作。子节点与根节点不同,子节点上记录的是关联类对象的信息(包括左右类对象),为一个节点添加下级子节点时,实际上是在新增关联类的同时新增关联右对象。这就可以用到我们在上面降到讲到的“创建子件和产品结构”表单。下面讲解具体建模过程:

1)进入PartToPartTree表单定制页面,选中画布区的关联结构树,在右侧属性区-事件处点击子节点操作配置的“+”按钮,子节点操作配置同根节点,设置子节点操作名称为“创建子件”;

2)同样,当前关联类上并无“新增子件“的操作,需要新增并绑定“创建子件”操作。我们可以将“创建子件”的操作配置设置如下:

图-创建子件操作编辑框

3)因为创建子件,需要将选中的子件作为一个新的关联关系的左对象,因此可以为“创建子件”操作添加前处理脚本,使创建关联关系的弹窗能够回填选中子节点的信息。脚本内容如下:

var tree = this.GetAddinById("RelationTree1");//获取关联结构树实例
var nodes = tree.getSelected();//获取关联结构树节点对象
return {
    obj:{
		//将选中节点的右对象oid赋值给新的关联类对象的左对象oid
        relation_leftOid: nodes[0].relation_rightOid
    }
}


3.2.3 删除节点

从左到右的关联类结构树,删除某个节点(根、子节点)相当于删除了一个关联类的右对象,这时只要为子节点操作配置添加一个按钮,绑定基本操作-删除右对象即可。

当关联类方向是从右到左时,删除节点需要绑定基本操作-删除左对象。

图-关联结构树操作节点配置

删除和删除左/右对象的含义

在上面的案例中,根节点和子节点绑定的操作是删除右对象,删除节点实际是解除了关联关系并删除关联的右对象;

如果用户只想要解除关联关系,并不想删除零部件对象(关联的右对象),子节点绑定基本操作-删除即可实现。

4.综合看板定制-设备产品结构

综合看板是为设备管理系统中设备列表模块中”查看详情“功能定制的一个表单。在上面阐述了实现的关联结构树除了方便用户查看和添加父子件的关联关系,也可展示在设备看板中,针对当前设备类型显示它的产品结构。这里,我们再为设备类创建一种左树右表结构的综合看板表单。下面是我们设计的设备结构看板效果图。

图-设备看板效果图

设备看板是一个基于设备实体类的表单,这个表单由3部分组成:

  • 上半部分是基于设备(Asset)实体类,用于描述设备的基本信息。
  • 左侧是基于关联类父件到子件(PartToPart)的产品结构树,用于展示设备的产品结构。
  • 右侧是基于工单实体类的表格,用于显示与该设备相关工单列表。

下面讲解创建该表单的建模过程:

1)在实体类表单管理-设备(Asset),创建一个表单英文名为“AssetComposition”的表单,进入表单定制页面;

2)根据布局设计,利用拖拽池/拖拽块进行布局设置;

3)设备信息展示所用到的基本控件,我们在之前的讲解中已经介绍,本节不再赘述。下面分别讲解设备相关的产品结构树和工单表格的定制过程。

4.1 综合看板定制-产品结构树

产品结构树的基本属性设置同上讲的PartToPartTree表单,两者的区别在于当前表单需要完成的业务不同——选中一个设备后,能够显示该设备的产品结构树,由此需要将该关联结构树根节点的查询条件设置如下。

图-产品结构树过滤条件设置

根节点查询条件:

and obj.partType ='产品' and obj.partName = '$obj.assetType'


注意

在表单定制页面,当关联结构树查条件中带有变量时($obj)点击更新预览不会有效果,因为建模端未带数据,相当于$obj对象为空。

4.2 综合看板定制-工单列表

产品结构树完成,现在对工单列表进行设置。首先设置工单表格列展示属性——代号id、工单标题woTitle、故障设备partOid、工单状态woState等。右表的业务功能——将与该设备有关的工单列表过滤显示。需要根据因此可将表格属性设置如下:

图-工单表格过滤条件设置

一个设备(产品)由多个零部件组成,其中的每一个零部件都可以出现需要维修的状况。针对同一设备不同部位我们可以创建多个工单。在创建工单界面,工单上有一个“故障设备assetOid”属性来作为设备类对象的外键,可以找到这个唯一的设备对象。所以,如果我们想要根据当前设备对象过滤显示其相关的工单,只需要满足工单的“故障设备assetOid”与引用的设备对象“全局唯一标识oid”相同,即可实现业务需求。

//工单的“故障设备assetOid”与引用当前设备对象的“全局唯一标识oid”相同
 and obj.assetOid  = '$obj.oid'
完成以上操作后,点击保存按钮,综合看板定制完成。同样的,为了和设备列表结合起来使用,需要在MultiAssets表单中新增一个按钮,新增并绑定操作——操作动作为“edit”,目标类Asset和表单
“AssetComposition”。

5.小结
创建表单PartToPartRight时,利用前处理脚本,可以实现基于一个已有对象创建一个关联关系(对象)及关联的右/左对象。

创建表单PartToPartTree时,利用DWF提供的关联结构树,将错中复杂的关联关系用树结构展示成产品结构树。

创建综合设备看板AssetComposition时,使用一些查询过滤条件,完成一个左树右表的综合看板定制。

6.附件

第十三章 表单模型高级.zip

  • 无标签