本章将进一步介绍如何通过DWF的前端脚本访问加载到界面的业务对象数据。
在介绍前端数据访问的脚本编程方法之前有必要先简单介绍一下前端数据的概念,在之前的定制培训过程中,读者应该初步了解到DWF的表单可以展示单个的对象,也可以展示多个对象,每当表单显示在用户面前的时候,DWF一方面按照表单的模板把表单的样子展示给了用户,同时,DWF还通过与服务器通讯,将用户希望展示的数据也填入了表单之中。这些填入到表单中的数据也就是前端的数据的组成。
和上一章介绍的内容相同,DWF的提供了一系列用于访问前端数据的保留字,通过这些保留字可以实现对表单数据的访问,这些保留字包括:
举个例子,如下图的两幅表单所示:
图-设备类表单中数据的访问示意
当拿到对象的引用之后,下一步是访问对象的属性取值,在DWF中存在实体类和关联类两种数据类型,这两种类型对应的对象属性的访问方式有所不同,分别介绍如下:
对于实体类,属性的取值的获取方式比较简单,如下所示:
例如:访问设备类(Asset)的设备名称:this.obj.assetName
而对于关联类对象,由于涉及左类对象、右类对象和关联类对象,因此在前端脚本中需要进行区分,因此属性的取值的访问方式如下:
例如:访问一个父件到子件关联类对象的取值的时候,可以这么写:
在前端的脚本中如果获得对象的引用之后,也可以直接通过脚本将变更对象传递到后端保存,后端对已经存在的对象进行修改保存,或者是删除,具体的用法如下:
上述三个函数中create表示新建保存对象,edit表示更新保存对象,delete表示删除指定的对象,传递参数的含义如下:
上述三个函数调用之后的返回值是另一个函数then,包含1个参数,表示后台返回结果,对结果的处理方式如下面的代码所示:
this.edit(targetAsset, targetClass).then(result=>{ console.log(result); this.msgbox.info(`更改设备${targetAsset.id}的状态`); //刷新前端… }) |
为了减轻在DWF编写脚本的时候的记忆负担,DWF在脚本编辑工具之外提供了一个辅助工具用于帮助建模人员快速得到业务对象模型数据,即类名以及类的属性名。如下图所示:
图-前端数据模型信息获取辅助工具
接下来,围绕设备状态管理的应用,做几个示例用于展示前端数据访问的方法。
首先,在设备类(Asset)的多设备列表浏览表单中(MultiAssets)添加一个按钮,增加绑定的操作,显示当前被选中设备的代号。
图-选中设备对象消息显示脚本操作定义
脚本如下所示:
console.log(this.selectedObjs, this.className); if (this.selectedObjs) { if (this.selectedObjs.length > 0) { this.msgbox.info(`hello ${this.selectedObjs[0].id}`); } } |
在App端打开以后,显示效果如下:
图-访问对象数据示例
接下来,在单个设备表单(SingleAsset)中放入一个按钮,按照同样的方法放入如下的单对象访问前端脚本,获取并显示单个设备对象的代号
console.log(this.obj, this.className); if (this.obj) { this.msgbox.info(`hello ${this.obj.id}`); } |
图-单对象数据访问示例
在设备列表的表单(MultiAssets)之中,放入一个按钮,将其绑定到一个新的操作上,前端输入脚本如下:
if (this.selectedObjs) { if (this.selectedObjs.length > 0) { var targetClass = this.className; var targetAsset = this.selectedObjs[0]; targetAsset.assetState = "已安装"; this.edit(targetAsset, targetClass).then(result => { console.log(result); this.msgbox.info(`更改设备${targetAsset.id}的状态`); }) } } |
点击该按钮可以改变设备的状态属性,如下所示:
图-更改设备状态的脚本操作示意
回到之前的设备列表表单(MuitiAssets),再放入一个按钮,将其绑定到一个新的操作上,命名为:删除选中设备,在前端代码中输入如下的代码
if (this.selectedObjs) { if (this.selectedObjs.length > 0) { var targetClass = this.className; var targetObj = this.selectedObjs[0]; this.delete(targetObj, targetClass).then(result => { console.log(result); this.msgbox.info(`删除设备${targetObj.id}`); //控制后端刷新 var addins = this.GetTargetAddin(); addins.forEach(x => { x.freshData(); }); }); } } |
点击此按钮后会将选中的设备对象从数据库中删除。
本章介绍了单对象表单和多对象表单的数据引用方法,并且结合四个例子展示了对象引用脚本的用途,其中需要记住的保留字如下:
后续,将在数据的基础上进一步介绍操作表单中控件。