项目脚本编程-JS

支持用户自定义全局JS 或 指定窗体JS

环境初始化与部署

确保本地开发环境安装node.js 与 npm命令 可用Windows CMD命令行 查看

推荐 安装node 版本 v14 过新版本可能导致最终打包错误

推荐安装一款前端开发工具,像HBuilder、Sublime Text、WebStorm、Visual Studio Code.. 等 便于后续开发

文件目录

工企开发平台提供前端开发目录文件自动生成 项目目录为 /Project/Client/LayerProject

  • cfgs : 打包配置文件目录

  • framework :客户端框架包目录

  • src :开发源文件目录

  • .babelrc : 配置文件

  • paakage.json : 项目打包配置文件

  • package-lock.json:配置文件

  • webpack.config.js: 配置文件

其中 src 目录下为开发源文件 与后台开发目录相对应 ,层、应用、插件和扩展都有对应自己的文件目录

拿 ent层举例 layer_ent 目录下包含 gongqi目录和index.js文件

undefined

undefined

与后台java开发文件相对应 客户端开发文件 也是 一个Form 对应一个目录 ,目录下包括 from_xx.js 文件与之相对应的base.js文件 还有 各个数据源datasource.js文件与之相对应的datadouscebase.js文件

拿Form_ParTable.js 为例 这里使用VSCode 打开客户端二次开发项目

对应的 form base 文件结构如下

datasource.js 结构如下

对应 datasourcebase 结构如下

对比后台form的java文件结构,可以看出是大同小异的

项目初始化

开发第一次使用客户端二次开发项目 需要在线下载项目所需要的包文件 可以使用VSCode打开到LayerProject目录下 唤出 终端 输入 npm install 命令(如果提示 npm 不是有效命令 请先确保已安装node环境 且 添加命令到环境变量) 然后按 回车 执行

如下图 会构造出一个node_modules目录 代表已经 初始化完成

客户端二次开发方法详解

客户端框架提供大部分后台form方法,如 form层面的 beforeInit、afterInit、buttonOK_ 等, 写法也与后台java写法类似

beforeInit(arg) 初始化后第一次打开画面时,在构造画面前触发此方法 主要用于调整画面结构,如控件的可见性、可编辑性等
afterInit(arg) 打开画面时,在画面构造后,数据加载前回调,在beforeInit()之后。常用于打开画面时做数据过滤。
formClosing(arg) 画面关闭时触发此方法。复写了此方法,如果需要关闭此画面,需要写命令doCloseForm关闭画面
formClosed(arg) 关闭画面后调用
buttonOK_(arg) 响应按钮单击事件
modifiedEditor_(arg, oldValue, newValue) 无数据源的Editor的值发生改变时,触发此方法。常用于根据某无数据源的Editor的值发生改变时,改变其他Editor的值。
dataTip_(arg) 鼠标悬停在无数据源的Editor上时,触发此方法。用于获取鼠标悬停时显示的文本。
... ...

数据源上支持

activeRecord(arg) 在画面上切换记录时触发此方法。打开画面时就会第一次触发此方法
modifiedField_(arg, oldValue, newValue, baseRecord, joinRecord, result) 字段变更值时会触发此方法
...

客户端框架提供CommnadResult 对象 可利用 该对象执行命令,命令与后台result 命令相同,也提供部分客户端独有命令

activeRecord 主动触发客户端的activeRecord事件
alert 弹框提示,需要传一个String类型的参数
bindEditorStyle 设置编辑框的样式条件。 设置时,会先清空原有的样式条件,不叠加条件。
bindRecordConditionTask 当前记录满足指定条件时执行相应的CommandResult 一般常用于替代LockField描述复杂的控制
bindRowStyle 设置表格行的样式条件。设置时,会先清空原有的样式条件,不叠加条件
buttonOK 模拟客户端操作,点击按钮,传按钮控件名称
clearTasks 清空tasks并设置其为一个新的空列表
clientRecordAdd 将已存在于数据库的一条记录,添加到客户端(对正式表有效)
clientRecordRefresh 将已存在于数据库的多条记录为准,刷新客户端的记录(对正式表有效)
clientRecordRemove 在客户端数据源中移除对应recId的记录(对正式表有效),可传Group参数
closeForm 关闭画面,如存在formClosing,将会执行,不可传输参数
doCloseForm 强制关闭画面,不再执行formClosing
contextMap 改变客户端存储的contextMap 当type==CLEAR,则key、value会被忽略 当type==PUT,则key、 value应按实际传入 当type==REMOVE,则value会被忽略
ds_AllowAdd 更新数据源的AllowAdd值, 数据源及所在Group是否允许新增操作
ds_AllowAttchment 更新数据源的AllowAttachment值,数据源及所在Group是否允许添加附件操作
ds_AllowDelete 更新数据源的AllowDelete值,数据源及所在Group是否允许删除操作
ds_AllowEdit 更新数据源的AllowEditor值,数据源及所在Group是否允许编辑操作
ds_AllowExport 更新数据源的AllowExport值,数据源及所在Group是否允许导出操作
ds_AllowQuery 更新数据源的AllowQuery值,数据源及所在Group是否允许查询操作
ds_AllowSave 更新数据源的AllowSave值,数据源及所在Group是否允许保存操作
executeQuery 模拟客户端操作,执行查询,可传Group参数,也可不传,不传默认是当前Group
fadeInfo 以淡入淡出效果显示信息,可传Arg参数
fetchAll 模拟客户端操作,执行查询全体,可传Group参数,指定查询数据的Group,默认为当前Group
formCmd 执行画面的服务端二次开发方法,需传Arg参数,参数为方法名,参数类型为String。
js 执行Js语句,需传Arg参数
locateToRecord 定位到指定的记录,可传指定记录的RecId或者传RecordCursorType定位
openForm 打开画面
openMainForm 进入主表
openResource 打开Server/GongqiERP/resource/帐套名或者Server/GongqiERP/tmp下的文件,需传Arg参数,参数为文件的相对路径,参数类型为String
openURL 在浏览器中新打开一个网页指向该地址
parentCmdResult 对于普通的画面,执行其父画面的客户端命令集,如果其父画面不存在则不做任何处理
recordRestore 模拟客户端操作,恢复当前记录,可传Group参数
refreshPlugin 刷新画面插件
refreshPlugin_Html 刷新画面Html插件,需传Plugin的名字和HtmlRefreshArg对象
refreshPlugin_Radio 刷新画面Radio插件,需传Plug的名字和RadioRefreshArg对象
refreshPlugin_Tree 刷新画面Tree插件,需传Plugin的名字和TreeRefreshArg对象
removeEditorStyle 移除编辑框的样式条件
removeRowStyle 移除表格行的样式条件
selectRecords 选择指定记录
showClipboard 显示剪贴板
showDialog 打开对话框,须传参数,参数为Dialog对象
updateControlAllowEdit 更新画面元素的AllowEditor值,控制控件是否可编辑
updateControlLabel 更新画面元素的Label值
updateControlVisible 更新画面元素的Visible值,控制控件是否可见
updateCurrentQuery 更新客户端的CurrentQuery为指定的QueryTable,需传Arg参数,参数内容为QueryTable对象,还可传Group参数,指定改变的CurrentQuery所属的Group
updateFormQuery 更改客户端的FormQuery为指定的QueryTable,需传Arg参数,参数内容为QueryTable对象,还可传Group参数,指定改变的FormQuery所属的Group
updateQuery 等同于UpdateQueryCurrent、UpdateQueryForm、ExecuteQuery连用,需传Arg参数,参数内容为QueryTable对象
writeEditor 对于无数据源的编辑框,写入值;并触发modifiedEditor事件
writeField 对于有数据源的字段,写入值;并触发modifiedField事件
writeImage 在Image控件上写入图片信息
registerRender 自定义构造datagrid的某一列
UpdateButtonClass 更新按钮的class名称
UpdateAllowEditorNotSelectAll 是否允许编辑框能编辑但是不能选中
... ...

实践与案例

例1:如下是一个简单客户端二次开发例子

在 Form 的afterInit 方法里面 初始化渲染一个 htmlPlugin 以及 一个 Button_Editor 按钮点击触发 result openForm

例2:在初始化DataGird 是时候 把指定的一列 渲染成自己一个组件

打包部署与应用

每个 层 、应用、插件或者扩展都在对应文件目录下有个 index.js 文件 该文件用于指定打包的时候 哪些js文件需要被打包进去

该文件内容可能有很多 这边建议是 先清理掉所有内容 然后 仅保留 import 二次开发过的文件 的 引入 如: 例子中的 Form_ParTable

然后 在终端 执行打包命令 如 需要打包ent层的就输入 命令 npm run dist --ent

相对应的app的就输入命令 npm run dist --app.gongqi.df.sales

相对应的ext 的就输入命令 npm run dist --ext.gongqi.df.sales

相对应的plg 的就输入命令 npm run dist --plg.gongqi.pl.salesPL

打包成功之后 会生成对应 .js 和 map.js 文件到 /Project/Client/GongqiERP/layers 目录下

然后就可以运行项目看实际效果 也可以进行前端调试

打开对应二次开发的画面 然后 打开浏览器的开发工具 切换到Sources选项页面 搜索 二次开发js文件

results matching ""

    No results matching ""