发布日期:2022-11-07
1.5.0版本目前已进入维护状态,不再新增功能,项目可继续使用,但无法获得以后版本发布的新功能。
重要变更
- 自本版本始,不再内置支持润乾报表,润乾报表采用外置独立部署模式,请从低版本升级上来的项目注意额外部署润乾报表独立服务,否则润乾报表无法正常工作。
- 自本版本始,将不再支持1.4.x及以下版本的nacos,请升级上来的项目注意升级nacos版本到2.x以上版本。
- 自本版本始,谷神框架不再默认支持RocketMQ功能,若项目需要用到RocketMQ,请下载插件包放到libs目录中,插件包下载地址:guthon-plugins-rocketmq-1.0-SNAPSHOT.jar
- 自本版本始,插件描述文件中,增加
group-id
和artifact-id
属性,用于配置您插件包对应的pom
文件:group-id
和artifact-id
为插件项目对应的pom.xml
文件对应的设置- 当前您的插件使用了
maven-shade-plugin
插件整合依赖包时,同时整合的依赖包里又含有另外的pom.xml
文件则必须设置此两个参数,否则上传插件时,会报插件包中存在多个pom.xml文件...
- 参数设置方式如下:
<?xml version="1.0" encoding="UTF-8"?> <Gdpaas plugin-id="com.golden.faas.plugins.basic" copy-right="杭州高达软件系统股份有限公司" version="1.0.0" min-framework="1.3.3" version-number="100" group-id="com.golden.faas.plugins" artifact-id="golden-faas-plugins-basic" is-right-protection="0"> <!-- 请求配置 --> <page-plugin page-id="com.golden.faas.plugins.basic.auth.dataAuthSetup" main-page="golden/gdpaas/basic/auth/data-auth-setup.html" title="数据权限设置" page-type="3" base-url="/gdpaas/basic/basesetup/dataauth"> <action method="getRolseType.htm" auth-type="select" /> </page-plugin> </Gdpaas>
主报表表格汇总合计算法变更兼容性警告:
- 原先算法:
select <用户自定义汇总表达式> from <原生SQL汇总语句FROM后的部分>
- 调整为:
select sum(field) from ( select 原生SQL from xxx )
- 实例(原):
select
sum(Amt) as AMT,
sum(a.AMC) as AMC,
sum(case when status =1 then amt else -amt end) as AMD
from table where billNo=#{bilNo}
AMT、AMC 为正常字段,AMD为表达式字段,这种表达式在老的算法里是支持.
其中AMC字段,新算法为了兼容老算法会把 a.AMC 转换为 AMC。
但类似 AMD 这些个性化表达式字段,无法进行转换,需要开发者自己调整,否则会报错,新的算法如下:
select
sum(AMT) as AMT,
sum(AMC) as AMC,
sum(AMD) as AMD
from (
select
AMT,
a.AMC,
case when status =1 then amt else -amt end as AMD,
a.billNo as billNo,
....
from tabe1 a,table2 b
where a.billNo = b.billNo
) t
在新的算法中,如果AMD仍旧使用 case when status =1 then amt else -amt end 子句将会出错。
功能修正
- 202506160932:
- 修复日志文件下载权限问题
- 修复其他已知BUG
- word打印支持libreoffice方式,以解决对复杂word文件转换格式错误问题
- gUtil增加base64方法:
gUtil.base64encode(str)
把字符串编码为base64字符串 - gUtil增加base64方法:
gUtil.base64decode(str)
把字符串解码为base64字符串
- 202503141011:
- 修复在线人数算法不准问题
- 修复JDBC读取数据时,返回日期类型为
LocalDateTime
类型,导致赋值失败问题
- 202503031511:
- 增加读取授权文件中额外配置功能,支持对表记录数扫码,若出现违规现象,将会锁闭单据保存功能,配置方式如下:
{ _TABLE_CHECK_:{ BASIC_ORG: { _COUNT_:3, STATUS:"1",ORG_ISLEAF:1 }, BASIC_DEPT:{ _COUNT_:8, STATUS: [1,2,3] } } } 1、BASIC_ORG 等效于select count(1) from BASIC_ORG where STATUS="1" and ORG_ISLEAF = 1; 2、BASIC_DEPT等效于select count(1) from BASIC_DEPT where STATUS in (1,2,3); 3、当对应的SQL返回结果超过_COUNT_值时,系统自动锁闭单据保存功能。
- 增加读取授权文件中额外配置功能,支持对表记录数扫码,若出现违规现象,将会锁闭单据保存功能,配置方式如下:
- 202501231044:
- 新增数字转中文大写方法:
$vs.format.numberToChinese($num)
- 新增数字转中文大写方法:
- 202501101522:
- 修复gUtil.round对负数四舍五入问题,如:
// JS和其他语言对 -0.5 负数round的结果存在偏差 // 原计算结果: gUtil.round(-1.235,2) = -1.23 // 现调整结果: gUtil.round(-1.235,2) = -1.24 // 正数结果不变: gUtil.round(1.235,2) = 1.24
- 修复其他已知BUG
- 修复gUtil.round对负数四舍五入问题,如:
- 202501091501:
- 主数据过程函数中,增附件下载前回调函数:
system.common.callback.attachmentBeforeDownload
,在谷神附件下载前触发,用于项目对文件下载权限判断,可以返回下载文件的文件名称
- 主数据过程函数中,增附件下载前回调函数:
- 202412101103:
- 增加在线感知功能,用于判断用户是否已经通过关闭浏览器退出系统。
- 202411291639:
SQLTools
增加新API:SQLTools.leftLike()
和SQLTools.rightLike()
$vs.report
新增API:$vs.report.exportDataToExcel()
// #set($datas = ....) // 数据列表 #set($title1 = $vs.util.newMap()) #set($title1.fieldId = "FIELD_CODE") // 字段 #set($title1.width = 130) // 字段宽度 #set($title1.format = "#,##0.00") // 格式 #set($title1.align = "right") // 对齐,left/right/center #set($title1.dataType = "VARCHAR") // 数据类型 #set($title1.label = "单据号码1") // 显示标题 #set($title2 = $vs.util.newMap()) #set($title2.fieldId = "KEY2") #set($title2.label = "单据号码2") #set($titles = $vs.util.newList($title1,$title2)) #set($file = $vs.report.exportDataToExcel($datas,$titles))
- 202411201211:
- 邮件增加个性化定制发送服务的功能:
#set($title="恭喜发财") #set($mail=$vs.mail.createMailService()) // 创建邮件发送服务 $mail.setSmtpHost("smtp.163.com") $mail.setSmtpUser("user") $mail.setSmtpPass("password") $mail.setSmtpSenderAddress("user@163.com") $mail.setSmtpSenderNickName("谷神低码") $mail.setTitle($title) // 邮件主题 $mail.setContext("<div>asld<font size='20' color='#f40'>kfj</font>lkj</div>") $mail.addReceivor("mail@qq.com") // 接受者 $mail.send() // $status => 0 - 成功 other 失败
- 邮件增加个性化定制发送服务的功能:
- 202411041352:
- 修复批量更新(含单据修改保存)数据大于100条(具体要看业务SQL复杂度)小于800条时,会出现部分数据被修改,部分数据被舍弃(比如:前113条被修改,其他没有修改)的情况.
$vs.proc.callDetailPageSearch
:屏蔽不自动加载的控件(控件设置为非自动加载的情况下,调用此方法不会读取此控件的数据)。
- 202410181631:
- 权限分配时,过滤当前管理员不拥有或者目录下没有菜单的树目录
- 增加附件操作回调事件
attachmentBeforePutFile
: 本函数将会在谷神附件上传后,正式上传到文件服务前触发,用于项目对文件进行判断和修改attachmentAfterSaveFileInfo
: 本函数将会在谷神附件上传到文件服务器,并记录谷神附件信息后调起,用于项目对附件信息进行修改
- 202409271358:
- 新增API:
$vs.report.wordToPdf
将word文档转为pdf - 新增API:
$vs.report.createPdfTextWaterMark
创建PDF水印
- 新增API:
- 202409181037:
- 修复微信、钉钉等扫码登录时选择语言无效问题
- 增加新API:
$vs.auth.doUserFieldLoginPC($userId,$loginField,$langId)
,增加$langId
登录语言参数。
- 202409021201:
- 增加新API
$vs.dbTools.remoteFindPage(xxx)
:执行远程分页查询方法
- 增加新API
- 202408230936:
- 主数据过程函数中,增加谷神附件上传新增文件类型配置:
guthon.web.upload.forbidden-file-types
: 在谷神默认允许上传的文件列表中,增加禁止上传的文件(如:.htm;.html;)guthon.web.upload.extend-file-types
: 在谷神默认允许上传的文件列表中,增加允许上传的文件(如:.org;.ntp;)
- 主数据过程函数中,增加谷神附件上传新增文件类型配置:
- 202407221712:
- 地址映射型服务组件支持
接口权限
校验方式,当三方系统访问映射的地址时,可以通过请求头中的appId
和accessToken
来校验接口权限,校验通过后才可以调起服务组件。
- 地址映射型服务组件支持
- 202407101031:
- 下载Excel导出模板中加入下列数据校验,示例如下:
gUtil.exportTemplate(self.pageId,"询价模板导出",{ "ALL_COLUMN_JSON": "{\"询价场次编号\":\"INQUIRY_BILLCODE\",\"询价场次名称\":\"INQUIRY_NAME\",\"报价截至时间\":\"END_DATE\",\"项目名称\":\"PROJECT_NAME\",\"项目所在城市\":\"CITY\",\"场次状态\":\"STATUS_NAME\",\"中选状态\":\"IS_FINAL_BID_NAME\"}", "MUST_INPUT_COLUMNS": "STATUS_NAME,INQUIRY_BILLCODE,INQUIRY_NAME", "DROP_DOWN_DATA ": "{\"STATUS_NAME\":[\"待提交\",\"待审核\",\"已拒绝\",\"报价中\",\"已结束\",\"已中止\"]}" }) // ALL_COLUMN_JSON:要导入的字段 // MUST_INPUT_COLUMNS:导入字段中必须填写字段 // DROP_DOWN_DATA:下列字段及下列数据信息
- 下载Excel导出模板中加入下列数据校验,示例如下:
- 202406201247:
- 地区库世界国家数据补全(遗漏了巴勒斯坦、哈萨克斯坦、法罗群岛、摩纳哥、南苏丹等几国)
- 更新最新(2023年)国家统计局地区库,取消已合并的区、新增新的地区
- 修复其他已知BUG
- 202405300903:
$vs.cipher.bytesToHex($bytes:byte[]):string
: 二进制转字符串$vs.cipher.hexToBytes($str:string):byte[]
: 字符串转二进制- 系统发布设置中,增加文件上传大小限制设置
golden.multipart.maxFileSize
- 文件上传大小限制由300M调高到2G,若项目需要限制文件大小,则请额外配置
- 修复了文件超过设定值的情况下没有提示文件太大的问题
- 修复了上传文件太大容易导致内存溢出问题。
- 系统登录设置中,增加
使用国密3加密密码
功能,设置后,密码会调整为SM3算法(警告:只有新项目才允许启用此设置,密码算法互不兼容,若中途更改算法,则必会导致登录用户密码失效) - 设置类增加新API:
$vs.properties.getUserPassType()
获取当前系统用户密码算法类型,返回MD5
或SM3
- 202405070944:
- 用户未读消息列表中,双击消息或者点击查看时,此消息自动从未读变为已读状态。
- 增加批量下载功能:
$vs.file.batchDownload($paths,$fileName)
- 在线用户管理增加手工
同步在线用户
功能,用于刷新真实在线用户。
- 202404261554:
- 修复编辑表格黏贴时,若为强制下拉列,存在被错误选择模糊匹配项问题
- 修复编辑表格黏贴时,若黏贴数据为带小数点,而被黏贴字段不允许小数点的格式化及数据转换问题
- 修复主表格侧边栏显示问题
- 修复表格清理下拉列函数clearFieldDropDown(field);API描述问题
- 202404011133:
- Word报表
${docUtils}
增加新的动态添加图片API:${docUtils.image.createImageWithUrl($url:string,$width:int,$height:int)}
:根据图片URL地址自动下载(限GET方式)图片并嵌入文档中(注意服务器必须能访问到此地址)。$url
:目标文件url地址,必须参数,必须为http://或者https://开头的图片全路径地址。$width
: 图片期望宽度,必须参数,无论原图宽度多少,都会自动缩放到此宽度,并且嵌入文档时,也是此宽度。$height
:图片期望高度,可缺省或为null
,缺省时,默认通过设定的$width
等比缩放。
${docUtils.image.createImage($filePath:string,$width:int,$height:int)}
:嵌入文件服务器上的图片$filePath
:文件保存路径,可以是本地私有文件区、本地公有文件区、本地临时文件区、文件服务私有区、文件服务公有区的图片文件。$width
: 图片期望宽度,必须参数,无论原图宽度多少,都会自动缩放到此宽度,并且嵌入文档时,也是此宽度。$height
:图片期望高度,可缺省或为null
,缺省时,默认通过设定的$width
等比缩放。
- Word报表
- 202403291139:
- 系统脚本中,增加H5移动端私有样式文件
- 模块参数增加恢复出厂功能
- 模块参数增加查看产品配置视图
- 202403121240:
$vs.http
增加API:$vs.http.request($url,$method,$buffer,$encode,$contextType,$header,$ignoreError):byte[]
$vs.http.formPostWithStringReturn($url,$param,$header,$encode,$ignoreError):string
$vs.http.formPost($url,$param,$header,$encode,$ignoreError):byte[]
- 202402291241:
- tab增加获取是否隐藏API,
tabpage.isVisable()
- tab增加获取是否隐藏API,
- 202401251634:
- 报表控件
report.load(param,isPrint)
增加立即打印参数,当设置为true时,打印预览窗口会立即弹出打印界面(仅word报表有效,其他报表需要自己调整对应参数) - 增加html字符串转义函数:
$vs.cipher.replaceHtmlToStr(str)
: html字符串转义$vs.cipher.replaceStrToHtml(str)
: html字符串转义
- 修复其他已知BUG。
- 报表控件
- 202401121401:
- 增加找回密码功能。
- 新增
模块参数
导出到项目功能。 - 新增
字段模版
导出到项目功能。 - 个人设置中增加显示绑定手机和解除绑定功能。
- 调度日志增加“清除日志”功能,用户可以删除指定调度的所有调度日志记录。
- 站内消息增加消息发送功能:
- 开发环境,消息模版设置增加是否同步发送手机短信设置
- 生产环境,消息模版设置增加是否同步发送手机短信设置
- 若用户已经绑定了手机号,且消息模版已开启短信发送功能,在在发送站内消息时,会同步发送手机短信。
- 增加短信验证码登录功能:
- 需实现
system.common.callback.sendSmsCode
方法后用户才能收到短信 - 若一个手机号下绑定了多个账号,则登录成功后,需要用户选择用那个账号登录。
- 需实现
- 增加短信发送API:
$vs.message.sendSmsCode(...)
: 发送验证码短信$vs.message.sendSmsMessage(...)
: 发送短信消息
- 主数据系统过程函数(
system.common.callback
)中,增加短信回调函数:sendSmsCode($mobile, $context, $code,$busCode)
: 发送短信验证码(短信登录和短信核实身份时使用)sendSmsMessage($mobile, $context,$busCode)
: 消息通知选择启用短信通知时使用
- 系统登录增加
短信验证码复核
功能:- 启用后,用户在现有的正常用户名密码登录成功后,还需要通过短信再次核实用户身份方可登录。
- 若用户没有绑定手机号,则首次登录时,会提示用户绑定手机号。
- 为了方便开发环境调试,可以通过增加开发环境配置
guthon.login.dis-sms-recheck=1
来跳过短信复核(此配置生产环境无效)。
- 应用管理,登录设置界面字段增加帮助浮动提示。
- 202401021652:
- 表格增加API:
table.reDrawRowNumCell()
,强制刷新行号列。 - 修复表格记录删除后,行号没有刷新问题。
- 表格增加API:
- 202312131107:
- 漏洞安全升级:
- spring-5.3.30 -> 5.3.31
- spring-boot-2.7.16 -> 2.7.18
- tomcat-9.0.80 -> 9.0.83
- 漏洞安全升级:
- 202312121530:
- 修复一个元组件,在不同页面内,被同时打开时,组件内表格最大化失效问题。
- 编辑表格增加页面动态过滤功能
- 修改其他已知的BUG
- 202311291118:
- 修复打包文件中,资源文件中文名称的情况下,在linux下升级后变成乱码问题
- 修改其他已知问题
- 202311211347:
- 增加
SHA-X
摘要算法:$vs.cipher.sha($str,$type)
,支持算法:MD2, MD5, SHA-1, SHA-224, SHA-256, SHA-512, SHA-384, SHA-512/224, SHA-512/256, SHA3-224, SHA3-256, SHA3-384, SHA3-512 inputform
表单控件分割线支持拖拽。
- 增加
- 202311170925:
- 主表格导出EXCEL采用SQL查询流的方式,不再采用分页查询的方式,这样可以加快导出数据的效率。
- 《高达谷神系统外部接口标准V.1.5.pdf》发布,外部标准接口
appId
和accessToken
允许放到http请求头中,原放在http请求参数中的代码继续有效,只是会优先读取http请求头数据,无法获取后才会读取http参数里的数据。 - SQL语句对
with
子句的支持,以及数据权限算法DEPT_CODE = DATA_AUTH('DEPT_CODE')
的支持。
- 202311131120:
itemTable
增加新API:createFieldDropDwon(fieldId,compId,codeType,params,onSelect,list, ownerSystemId)
: 将一个文本字段设置为下拉字段。clearFieldDropDwon(fieldId)
: 去除一个下拉字段的下拉状态,变为正常的文本字段。
- 修复开发环境推算控件默认名称时无法校验tabpage下控件的问题。
- 表格增加导出当前页面方法
table.exportDataAsExcel()
导出当前页面数据。
- 202311061628:
- 增加新API:
$vs.dbTools.executeDDL
用于执行非事务SQL语句,如:truncate、create、drop等。 $vs.proc.find()
增加参数$timeout:int
网络通信超时时间(秒),0 - 表示永不超时 默认:1800(半小时)- 远程调用超时时间从10分钟增加到30分钟。
- 定时调度超时时间从10分钟增加到12小时。
$vs.proc.callPageRemove
中的$whereData
参数修正为引用类型(可以返回过程中代码变更此对象属性的结果)- 新增方法
$vs.properties.getSystemDbInfo($systemId)
:获取指定系统数据库连接信息(用户、数据库、IP、端口等,不含密码)本方法支持跨微服务漫游。
- 增加新API:
- 202310311047:
- 修复缓存内存溢出问题。
- 优化EXCEL读取函数
- 202310301559:
- 开发日志增加:“副业务码”、“提交备注”查询条件
- 开发日志增加新字段:“提交备注”
- 页面脚本、过程函数、系统脚本、模块参数提交时,记录的开发日志增加“提交备注”。
$vs.dbTools.remoteList
方法增加isNeedDataAuth
参数用于指定远程查询是否需要数据权限(默认不需要)
- 202310240838:
gUtil.info()
和gUtil.error()
增加参数isCover
,消息是否覆盖模式,true 覆盖模式,只显示最后一条消息;false(默认)同时显示所有消息- 选单重复提示函数消息提示采用覆盖模式.
- 202310180925:
- 修复谷歌浏览器下代码字体变小问题。
- 修复移动端
checkbox
和radio
控件不易被选择的情况
- 202310110901:
- 框架漏洞升级:
- spring-5.3.29 -> 5.3.30
- spring-boot-2.7.14 -> 2.7.16
- tomcat-9.0.78 -> 9.0.80
- jackson-databind-2.13.5 -> 2.15.2
- com.google.guava:guava-31.1-jre -> 32.1.2-jre
- cn.hutool:hutool-core-5.3.3 -> 5.8.22
- commons-net-3.5 -> 移除
- commons-httpclient-3.1 -> 移除
- 框架漏洞升级:
- 202310071632:
- 增加压缩文件方法:
$vs.file.zipFile($path):string
,压缩文件(不是目录),并返回zip文件目录。 - 增加方法: gUtil.closeTabWin(self.pageId) 用于关闭指定页面,可以解决 gUtil.closeCurTabWin() 方法误关闭问题。
- 增加压缩文件方法:
- 202506160932:
底层包版本升级说明(2.6.8 -> 2.7.14)
序号 | 包名 | 原版本 | 新版本 |
---|---|---|---|
1 | spring-boot | 2.6.8 | 2.7.14 |
2 | spring-cloud | 2021.0.3 | 2021.0.8 |
3 | spring-framework | 5.3.20 | 5.3.29 |
4 | hibernate | 5.6.9.Final | 5.6.15.Final |
5 | tomcat | 9.0.63 | 9.0.78 |
新增功能
- 运维管理->报表数据源设置模块增加
新增数据源编码
和删除数据源编码
两个功能按钮,用于手工添加报表数据源编码(因润乾报表引擎剥离,导致无法解析报表数据源编码,故需要实施人员手工添加数据源编码)。 - gUtil增加新方法:
gUtil.isMobile()
获取当前运行环境是否为移动端。 - 打包后数据库密码支持加密保存
- 增加国密算法支持:
$vs.cipher.createSm2Keys()
: 创建国密非对称加密秘钥对$vs.cipher.sm2encrypt()
: 使用国密非对称算法用公钥对数据进行加密$vs.cipher.sm2decrypt()
: 使用国密非对称算法用私钥对数据进行解密$vs.cipher.sm2sign()
: 使用国密非对称算法用私钥对数据进行签名$vs.cipher.sm2verify()
: 使用国密非对称算法用公钥对数据进行验签$vs.cipher.sm3encode()
: 使用国密对数据进行摘要(类似MD5)$vs.cipher.sm4encode()
: 使用国密对称加密算法对数据进行加密(类似DES)$vs.cipher.sm4decode()
: 使用国密对称加密算法对数据进行解密(类似DES)
- 表格控件支持checkbox列:编辑表格和主表格都支持。
- 表格控件增加API:
table.setSingleSelect(b):
设置表格为单选或者多选模式table.isSingleSelect()
: 返回当前表格是多选还是单选模式
- 谷神脚本增加正则表达式支持:
$vs.regexp.match($str,$exp)
$vs.regexp.matchIgnore($str,$exp)
$vs.regexp.findFirst($str,$exp)
$vs.regexp.findFirstIgnore($str,$exp)
$vs.regexp.findAll($str,$exp)
$vs.regexp.findAllIgnore($str,$exp)
$vs.regexp.replaceAll($str,$exp,$newstr)
$vs.regexp.replaceAllIgnore($str,$exp,$newstr)
$vs.regexp.replaceFirst($str,$ex,$newstrp)
$vs.regexp.replaceFirstIgnore($str,$exp,$newstr)
$vs.regexp.replaceRegExValue($str)
- 代码样例:
#set($str='123Abc,AGD9090,asdf') // 原始搜索字符串 #set($exp='[a-z]+') // 正则 // $vs.log.info($vs.regexp.findFirst($str,$exp)) // --> bc $vs.log.info($vs.regexp.findFirstIgnore($str,$exp)) // --> Abc $vs.log.info($vs.regexp.findAll($str,$exp)) // --> ["bc","asdf"] $vs.log.info($vs.regexp.findAllIgnore($str,$exp)) // --> ["Abc","AGD","asdf"] // #set($matcher = $vs.regexp.match($str,$exp)) #set($list = $vs.util.newList()) #while ($matcher.find()) $list.add($matcher.group()) #set($start = $matcher.start()) // 匹配字符串开始位置 #set($end = $matcher.end()) // 匹配字符串结束位置 #end
- 达梦数据库支持:支持国产数据库达梦。
- 新增API支持:
$vs.proc.callPageSave
增加$ignoreDataAuth
参数,用于保存时禁止判断数据权限$vs.proc.callPageUpdate
增加$ignoreDataAuth
参数,用于修改时禁止判断数据权限$vs.proc.callPageRemove
增加$ignoreDataAuth
参数,用于删除时禁止判断数据权限- 新增
$vs.auth.offCurThreadDataAuth()
函数,用于禁用当前线程所有数据权限判断操作(可漫游到远程调用及子线程)
- 新增动态执行谷神脚本方法:
$vs.proc.executeScript($script:string,$param:Map<String,Object>):object
- 用法如下:
#set($script = 'return ($deptCode eq "0000") ? $user.userId : $deptCode') #set($param=$vs.util.newMap()) #set($param.deptCode = '0001') #set($ret = $vs.proc.executeScript($script,$param)) // --> 0001 // #set($ret = $vs.proc.executeScript('return ($deptCode eq "0000")',$param)) // --> false
- 审批流改版
- 整合谷神自研的审批流组件,原先开源审批流组件下个版本(2.0.0)后不再支持,对于老项目,计划采用手工增加支持插件包的方式兼容,谷神不再默认支持老的工作流组件。
- 运维管理中新增功能模块:审批岗位设置和审批流程设计器两个模块
- 审批岗位设置:新版本审批流支持按岗位分配审批人功能,用户需要在此新增岗位,并选择对应部门和部门内的审批领导。
- 审批流程设计器:新版本流程设计器
- 新增服务端API:
$vs.workflow.submit($userId,$billcode,$billtype,$processId,$data,$meta)
: 提交流程$vs.workflow.submitCancel($userId,$billcode,$billtype,$reason)
: 取消提交$vs.workflow.approve($userId,$billcode,$billtype,$comment)
: API的方式,审核同意当前单据$vs.workflow.reject($userId,$billcode,$billtype,$comment)
: API的方式,审核拒绝当前单据$vs.workflow.terminate($userId,$billcode,$billtype,$comment)
: API的方式,强制中止审批流程$vs.workflow.checkUserCanAudit($userId,$billcode,$billtype)
: 判断用户当前节点是否需要审核当前单据$vs.workflow.changeMetaData($userId,$billcode,$billtype,$data,$meta,$remark)
: 变更流程数据$vs.workflow.invalid($userId,$billcode,$billtype,$comment)
: 作废(作废已审核通过的流程)$vs.workflow.abstention($userId,$billcode,$billtype,$comment)
: 弃权$vs.workflow.addsign($userId,$billcode,$billtype,$addSignUserId)
: 加签加单人$vs.workflow.addsigns($userId,$billcode,$billtype,$addSignUserIds,$addSignType)
: 加签加多人$vs.workflow.changeUserSign($userId,$billcode,$billtype,$newUserId,$newUserName,$remark)
: 换一个人审批$vs.workflow.freeze($userId,$billcode,$billtype,$comment)
: 主动冻结实例$vs.workflow.activate($userId,$billcode,$billtype,$comment)
: 激活实例$vs.workflow.assign($userId,$billcode,$billtype,$comment,$targetNodeId,$assignId,$assignUserIds)
: 指派审批人$vs.workflow.addApprover($userId,$billcode,$billtype,$comment,$targetNodeId,$addUserIds)
: 添加审批人$vs.workflow.getUnassignList($billcode,$billtype)
: 获取待指派节点信息$vs.workflow.getInstanceInfo($billcode,$billtype)
: 获取审批流相关信息
- 新增页面端API:
gUtil.openWorkflowAuditWin(billCode,billType,callback)
:打开谷神内置的审批窗口(侧边窗模式)gUtil.openWorkflowViewWin(billCode,billType)
:打开谷神内置的审批窗口(侧边窗模式,仅查看,无审核)gUtil.openWorkflowDesignWin()
:打开流程设计器窗口(同运维管理中的审批流程设计器模块),此方法一般用于API的方式打开流程设计器gUtil.closeWorkflowWin()
: 关闭打开的审批窗口gUtil.openWorkflowEntrustWin()
: 打开审批委托(指派)窗口
- 新增回调过程函数:
- 审批流组件启动初始化时,会自动创建审批流回调过程函数(仅主数据),函数及说明如下:
- 函数包名:
system.workflow.callback
- 函数说明:
onSubmit($instanceId,$billCode,$billType,$userId,$metaData)
:审批流提交成功后的回调onSubmitCancel($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:审批流取消提交操作成功后的回调onApprove($instanceId,$billCode,$billType,$userId,$comment,$metaData,$nextuser)
:单个节点审批通过(不是所有单据审批完成)的回调onReject($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:单个节点审批拒绝(不是所有单据审批拒绝)的回调onAbstention($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:会签模式下,有人弃权时的回调onCancel($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:流程被驳回时(流程中止)的回调onComplete($instanceId,$billCode,$billType,$metaData)
:流程审批通过后的回调onTerminate($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:业务系统调用terminate方法,导致流程中止的回调onCarbon($instanceId,$billCode,$billType,$userId,$userIds,$metaData)
:审核人审批时增加了抄送人时触发的回调onAddSign($instanceId,$billCode,$billType,$userId,$userIds,$metaData)
:审核人加签触发的回调onInvalid($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:业务系统调用$vs.workflow.invalid方法,导致已审核通过的流程作废的回调onNeedAssign($instanceId,$billCode,$billType,$metaData,$unassigns)
:流程设计时,若设置了待指派节点,则在流程提交时会触发本事件onFreeze($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:当流程被冻结时回调此方法onActivate($instanceId,$billCode,$billType,$userId,$comment,$metaData)
:当流程被激活时回调此方法getUndefOrgs($memberCode)
:流程设计时调用,返回组织待定列表以供流程设计器设计时下拉选择
inputForm
增加新API:inputForm.createFieldDropDwon()
: 将一个文本字段设置为下拉字段inputForm.clearFieldDropDwon()
: 去除一个下拉字段的下拉状态,变为正常的文本字段
- 表格全局样式共享支持:
- 管理员设置并保存表格的样式为默认样式时,将自动推广到其他操作员对改表格的默认布局。
- 增加二维码、条码生成、识别函数:
$vs.barcode.decode($path:string,$charset:string):string
:解析二维码、条形码$vs.barcode.createQrCode($text:string,$width:int,$charset:string):byte[]
:创建二维码图片(无LOGO图片)$vs.barcode.createQrCodeWithLogo($text:string,$logoFilePath:string,$width:int,$charset:string):byte[]
:创建二维码图片(含LOGO图片)$vs.barcode.createUPCA($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建UPC_A类型的条码$vs.barcode.createUPCE($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建UPC_E类型的条码$vs.barcode.createEAN8($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建EAN8类型的条码$vs.barcode.createEAN13($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建EAN13类型的条码$vs.barcode.createEAN128($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建EAN128类型的条码$vs.barcode.createCode39($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建Code39类型的条码$vs.barcode.createCode128($text:string,$hideText:boolean,$dpi:int,$width:int,$height:int):byte[]
:创建Code128类型的条码
- 增加远程数据源连接器:
- 新增API:
$vs.dbTools.connect($ip,$port,$userName,$pass,$dbType,$dbName)
- 示例代码
#set($ip='192.168.0.xxx') #set($port= 3306) #set($userName= 'root') #set($pass= '密码') #set($dbName= 'gdpaas_cloud') #try #set($runner = $vs.dbTools.connect($ip,$port,$userName,$pass,1,$dbName)) // 打开数据库连接 #set($isAutoCommit = $runner.isAutoCommit()) // 获取当前连接是否为自动提交模式 $runner.setAutoCommit(false) // 设置当前连接为不是自动提交模式 #set($where = $vs.util.newMap('table_id','GD_BILL_TYPE')) #set($list = $runner.list('select * from gd_tables_field where table_id = #{table_id}',$where)) $vs.log.info($list) // 多结果集查询 #set($table = $runner.uniqueResult('select * from gd_tables where table_id = #{table_id}',$where)) $vs.log.info($table) // 单结果集查询 #set($pageSize = 10) #set($pageNumber = 2) #set($page = $runner.findPage('select * from gd_tables_field',$vs.util.newMap(),$pageSize,$pageNumber)) $vs.log.info($page) // 分页查询 #set($where.PARENT_TABLE_ID = 'demo') // update insert delete 等事务性操作 #set($count = $runner.execute('update gd_tables set PARENT_TABLE_ID=#{PARENT_TABLE_ID} where table_id = #{table_id}',$where)) $runner.commit(); // 提交数据 #catch($e) $runner.rollback(); // 回滚数据 $vs.exception.throwException($e.message) #finally #if ($runner) $runner.close() // 关闭数据库连接 #end #end
- 新增API:
- 增加调用主页面和子页面的查询API
$vs.proc.callMainPageFind()
:主页面分页查询$vs.proc.callMainPageList()
:主页面不分页查询$vs.proc.callMainPageSum()
:主页面汇总合计查询$vs.proc.callDetailPageSearch()
:子页面查询
- 附件插件新增扩展数据支持功能,打开附件时,传参及支持如下:
var args = { billTypeCode:"", // 单据类型,必填 billNo:"", // 单据号,必填 disabled: false, // 是否禁用(默认false),true - 禁用,不允许上传删除文件 // 以下代码选填,若填值,则会被保存到附件表扩展字段中 billExtNo1:"", billExtNo2:"", billExtNo3:"", userName:"", sealPerson:"", sealNum:"", fileState:"", refCode1:"", refCode2:"", refCode3:"", refCode4:"", refStr1:"", refStr2:"", refStr3:"", refStr4:"", refStr5:"", refNum1:"", refNum2:"", refNum3:"", refFlag1:"", refFlag2:"", refFlag3:"", refFlag4:"", refFlag5:"", sealState:"", search : { // 以下代码选填,若填值,则默认为额外过滤条件 billExtNo1:"", billExtNo2:"", billExtNo3:"", userName:"", sealPerson:"", sealNum:"", fileState:"", refCode1:"", refCode2:"", refCode3:"", refCode4:"", refStr1:"", refStr2:"", refStr3:"", refStr4:"", refStr5:"", refNum1:"", refNum2:"", refNum3:"", refFlag1:"", refFlag2:"", refFlag3:"", refFlag4:"", refFlag5:"", sealState:"" } } // 调起附件窗口 $vm.openDialog('plugins:com.golden.faas.plugins.basic.file.fileManager',args,'select');
- 新增支持按在线人数授权操作员:
- 制作授权书时,支持选择是否按在线人数控制操作员授权(操作员个数和在线人数授权二选一,需要升级最新版本的资源管理服务)
- 新增API:
$vs.properties.getRegIsOnlineUserModel():boolean
用于获取当前授权文件的操作员控制模式
- 增加数据源源代码导出和项目移植功能:
- 产品库可以在数据源管理中导出数据源下的系统的源码
- 可以在其他项目中导入源代码
- 注意:源码导出和导入功能类似场景导出及产品继承,但是,导入方不能升级代码,一旦完成导入,则表示两个系统的源码再无关系,不可再次导入升级。
- 增加数据源源代码克隆功能:可将一个微服务系统在本地开发环境,复制一套新的微服务系统,一般用于切分频道。
- EXCEL导出函数:
$vm.export(callback:Function,fileName,title)
增加新参数:fileName
:导出的Excel文件默认文件名称title
: 文件标题(若传值,则会在导出的EXCEL文件的第一行输出此字符串)
- 支持Word文件作为报表模板制作打印报表:
- 开发环境功能入口:开发环境->应用及资源->打印模板
- 生产环境功能入口:生产环境->系统管理员登录->右上角头像下拉->运维管理->报表打印模板设置
- Word需要编写取数脚本,通过谷神代码的方式生成填充数据对象,然后通过已经实现做好的word模板填充后得到打印文件。
- 谷神Word报表模板功能为集成了第三方开源组件
XDocReport
使用的语法为Freemarker
,在制作报表模板时,请自行搜索相关技术资料及语法。 - 关于模板中的图片问题(模版图片有两种,一种是静态一种是动态):
- 静态图片替换方法:
- Word模板支持静态图片替换,在制作模板时,请在word文件中,事先放置好一张图片,并设置图片的位置、大小以及根据
XDocReport
规定设置图片的书签名称 - 在编写代码时,需要将图片设置到
$result.$images
对象下(请注意,$result.$images
对象事先是没有的,需要您初始化,如:#set($result.$images=$vs.util.newMap())
), - 代码设置图片参数时,接收两种数据格式,一个是图片的二进制数组,还有一种是图片的存储路径,具体如下:
#set($result.$images.书签1 = '/upload/FD/45/13/33/667...D.png')
:此为图片存储路径,存储路径可以是服务器本地相对路径,也可以是文件服务器上的私有路径也可以是文件服务器上的公有路径。#set($result.$images.书签2 = $vs.barcode.createQrCode('123456'))
: 此为创建一个二维码图片并返回图片二进制数组的方式。
- Word模板支持静态图片替换,在制作模板时,请在word文件中,事先放置好一张图片,并设置图片的位置、大小以及根据
- 动态图片替换方法:
- 所谓动态图片,是指调用谷神API,根据业务单据内容,生成的动态图片,如果,条码、二维码等
- 动态图片采用调用文档api的方法实现,如:在文档中编写如下代码:
${docUtils.barcode.createQrCode(bill.code)}
,即可根据单据号生成该号码的二维码图片,并嵌入到文档中。 - 动态添加图片API说明(注:需要
1.5.0-202404011133
及以上版本才支持):${docUtils.image.createImageWithUrl($url:string,$width:int,$height:int)}
:根据图片URL地址自动下载(限GET方式)图片并嵌入文档中(注意服务器必须能访问到此地址)。$url
:目标文件url地址,必须参数,必须为http://或者https://开头的图片全路径地址。$width
: 图片期望宽度,必须参数,无论原图宽度多少,都会自动缩放到此宽度,并且嵌入文档时,也是此宽度。$height
:图片期望高度,可缺省或为null
,缺省时,默认通过设定的$width
等比缩放。
${docUtils.image.createImage($filePath:string,$width:int,$height:int)}
:嵌入文件服务器上的图片$filePath
:文件保存路径,可以是本地私有文件区、本地公有文件区、本地临时文件区、文件服务私有区、文件服务公有区的图片文件。$width
: 图片期望宽度,必须参数,无论原图宽度多少,都会自动缩放到此宽度,并且嵌入文档时,也是此宽度。$height
:图片期望高度,可缺省或为null
,缺省时,默认通过设定的$width
等比缩放。
- 静态图片替换方法:
- 文档内置工具对象
docUtils
说明:- 报表服务提供了文档内置对象,您可以在制作word模版时,直接在word文件中使用此对象(
docUtils
为关键字,请不要在运算脚本中,使用此名称命名您自定义的对象,否则会报名称重复异常) - 对象提供了如下API:
${docUtils.barcode.xxx}
:二维码条码生成对象,api同$vs.barcode.xxx
,如生成二维码图片,可以使用脚本:${docUtils.barcode.createQrCode(bill.code)}
${docUtils.format.xxx}
:日期数字格式化对象,api同$vs.format.xxx
,如格式化日期,可以使用${docUtils.format.formatDate(bill.createTime,'yyyy-MM-dd HH:mm:ss')}
${docUtils.log.xxx}
:调试日志输出对象,用于您编写word模版时调试是使用,api同$vs.log.xxx
,如输出调试信息:${docUtils.log.info('hello ' + bill.billNo)}
${docUtils.math.xxx}
:数学计算对象,api同$vs.math.xxx
${docUtils.util.xxx}
:常用工具类对象,api同$vs.util.xxx
,如:[#if (docUtils.util.isNotNull(bill.code))]
…[/#if]
- 报表服务提供了文档内置对象,您可以在制作word模版时,直接在word文件中使用此对象(
- 关于中文字体问题
- 若您的主数据运行在Linux服务器下,或者您使用了不是window的默认字体,那么默认情况下,是不支持显示中文的,您需要把您word文件中用到的中文字体拷贝到
${run_basic_home}/libs/fonts
目录下,其中fonts
目录默认情况下是不存在的,需要您自己创建,注意字母全部为小写字母。 - 字体文件以字体的名称命名,如:
宋体
,那么您拷贝到服务器上的文件名称通常为:宋体.ttc
- 提示:
- 本报表模板支持的字体文件格式为
ttc
和ttf
文件。 - 若使用
宋体.ttc
还是不能显示宋体字体,则可以尝试将宋体.ttc
改名为simsun.ttc
然后把这两个文件都上传到fonts目录试试 - window字体目录:
C:\Windows\Fonts
- 另外您还可自行搜索关于linux下安装字体的方法,来安装字体到linux系统中,这样可能更通用一些。
- 本报表模板支持的字体文件格式为
- 若您的主数据运行在Linux服务器下,或者您使用了不是window的默认字体,那么默认情况下,是不支持显示中文的,您需要把您word文件中用到的中文字体拷贝到
- Word报表模板的用法和其他报表模板大致相同,均可以作为报表组件的加载项,单也存在如下不同点:
- 方法
$vs.report.exportExcel()
不再是导出Excel文件,而是导出Word文件。 - 开发环境编写的取数脚本和上传的word模板文件发布到生产环境后,生产环境的系统管理员有权限可以修改脚本或者上传新的word模板来覆盖开发环境的相关设置,但是一旦这样操作了,那下次程序升级时,开发环境将无法升级这个模板
- 方法
- 新增同步执行指令
#synchronized
:支持多线程间同步锁功能,注意,此同步执行为基于JVM内部的同步执行锁不是分布式锁,起作用范围为当前JVM内部;若要实现分布式锁,则请使用redis的相关功能。 #try
指令支持没有#catch
代码块的语法$vs.util
增加新的API:$vs.util.newHashSet()
:创建一个对象不可重复的Set列表$vs.util.newLinkedHashSet()
:创建一个对象不可重复的有序的Set列表
$vm.openDialog
增加新参数:$vm.openDialog(pageId,data,openType,isNew,callback,title,width,height)
width
: 对话框宽度,默认设计时的宽度height
: 对话框高度,默认内容高度
inputForm
、searchForm
字段新增初始值
:允许不需要写代码,设计时设置字段初始值(如:默认查询条件)- $vs.mq增加新API:
$vs.mq.subscribe($topic:string,$tag:string,$procName:string,$funName:string,$accessKey:string,$secretKey:string)
: 有密订阅方法$vs.mq.subscribes($topics:List<string>,$tag:string,$procName:string,$funName:string,$accessKey:String,$secretKey:String)
: 有密订阅方法$vs.mq.start($topic:string,$accessKey:string,$secretKey:string)
:有密生产者方法$vs.mq.starts($topic:List<string>,$accessKey:string,$secretKey:string)
: 有密生产者方法(同秘钥批量订阅)
- SQLTools增加新函数:SQLTools.substr(field,start,length)
select SQLTools.substr('hello word',6,5) from dual; // word
- 增加HTTP接口对代理服务器的支持,系统打包配置增加如下项:
golden.system.proxy.host
: HTTP代理服务器地址,如:proxy.guthon.comgolden.system.proxy.port
: HTTP代理服务器地址端口,如:8080golden.system.proxy.user-name
: HTTP代理服务器地登录用户(如果需要身份验证)golden.system.proxy.password
: HTTP代理服务器地登录密码(如果需要身份验证)
- 增加文件内容加密方法:
$vs.file.putFile($localFilePath:string,$remoteFilePath:string,$desKey:string)
:加密文件,并上传一个本地文件到目标服务器$vs.file.getFileDownloadURL($filePath:string,$disName:string,$desKey:string)
:获取私有文件下载(访问)地址,并附带文件解密功能$vs.file.getFileBytes($path:string,$desKey:string)
:获取文件,并解密为明文
- 增加图片水印方法:
$vs.file.createPictureTextWaterMark($imagePath:string,$text:string,$x:int,$y:int,$color:string,$fontSize:int,$fontName:string,$a:int)
:创建图片的文字水印createPictureImageWaterMark($imagePath:string,$iconPath:string,$x:int,$y:int)
:创建图片的图标水印
- 数据权限分配新增: “
不控制当前用户的此项数据权限
”功能。- 分配权限时,若为当前用户(或角色)勾选了此项选项,则当前用户将拥有此数据权限项下的所有权限。
- 如:为“总经理”角色的“部门数据权限”勾选此选项,则所有属于“总经理”角色的用户在查询报表或者做单时,不再控制部门权限。
$vs.cipher
增加新加密解密API$vs.cipher.hmacSHA512($data:string,$secret:string,$charset:string):string
$vs.cipher.hmacSHA512B($data:byte[],$secret:byte[]):byte[]
$vs.cipher.hmacSHA512S($data:string,$secret:string):byte[]
$vs.cipher.rsaPrivateEncode($str:string, $key:string,$len:int):string
$vs.cipher.rsaPublicEncode($str:string, $key:string,$len:int):string
$vs.cipher.rsaPublicDecode($str:string, $key:string,$len:int):string
$vs.cipher.rsaPrivateDecode($str:string, $key:string,$len:int):string
$vs.cipher.rsaSign($str:string, $key:string,$type:string):string
$vs.cipher.rsaVerify($str:string, $sign:string, $key:string,$type:string):boolean
- 表格控件增加新事件:
- 事件:
table.isFieldEditable(rowData, rowIndex, fieldId, xxx):boolean
- 用途:用于返回指定行
rowIndex
对应的列fieldId
是否允许编辑的方法 - 返回:
false
- 禁止编辑true
or other - 允许编辑
- 事件:
- 表格新增加API:
table.isHaveColumn(fieldId)
:获取指定列是否在表格中存在table.isFieldVisible(fieldId)
:获取指定列是否在表格中存在且可视(没有被隐藏)
- 增加下载文件方法:
$vs.file.download($path,$name)
- 使用限制:必须在
地址映射
的服务组件里调用本方法 - 特别说明:若
$path
指向的文件在临时文件目录,则下载完成后,会自动清理该文件 - 页面调用:按钮事件中,直接
window.open(ROOT_PATH + '/gdpaas/comp/filedownload/demo.htm')
即可实现文件下载。
- 使用限制:必须在
- 增加导出主页面表格数据为EXCEL API:
$vs.proc.exportMainPage($pageId:string,$form:Map<String,Object>,$mainTableId:string,$fields:List<String>,$fileName:string,$title:string):string
- 开发环境增加编译包文件清理功能,清理规则:
- 一般编译包默认保存15天
- 开发者可以手工推迟清理时间
- 每个系统至少保留3个编译包
- 运维管理中,新增“注册授权信息”功能
- 自此版本后,系统注册授权需要在此完成,具体步骤如下:
1、系统安装后,启动日志中不再输出注册申请码,请系统成功后,用系统管理员身份登录系统
2、登录后,点击右上角头像,选择运维管理菜单,打开运维管理功能。
3、打开后,选择注册授权信息模块,点击获取授权申请码进行授权 - 注意:此功能仅打包环境使用,开发环境无法使用
- 自此版本后,系统注册授权需要在此完成,具体步骤如下:
- 协同系统数据权限设置支持
- 在开发环境启用协同数据权限时,增加了一个“单位代码字段”,用于过滤数据权限分配时,只显示指定单位编码的数据
- 单位的管理员默认拥有其单位编码下所有数据的权限(如:其单位内的部门编码)
- “不控制当前用户的此项数据权限”权限仍旧有效,当用户赋予了此权限时,默认当前用户拥有其单位内所有数据权限。
gUtil.getUserAuths
和gUtil.getUserAuthsSynch
增加参数pageId
:gUtil.getUserAuths(mkId,auths,callback,pageId)
pageId
:页面编码,如:子页编码或者主页面编码,其他编码无效,若存在页面编码,则复合判断菜单是否存在权限,若不存在,则会判断页面所属的菜单是否存在权限,若存在,则视为有权限
$vs.auth
增加新方法:getUserAuthsWithPageId($mkId:string,$auths:string,$pageId:string,$userId:string)
- 三方接口AccessToken机制调整
- 由原先的一个AppId对应一个AccessToken改为,AppId对应AccessToken池的方式,也就是,如果第三方系统存在多个应用时,由原先的必须共享一个AccessToken改为现在的,每个应用可以有自己独立的AccessToken
- 增加批量权限分配功能
- 入口:系统管理员登录-> 右上角头像 -> 运维管理 -> 批量权限分配
- 权限要求:管理员及以上权限
- 功能:用于批量分配(或撤销)用户、角色的权限
- 使用:开发者可以建立一个谷神模块菜单,在页面的
onOpen
事件中,用如下代码打开:gUtil.closeCurTabWin(true); // 关闭当前主页面 // 打开批量分配(权限要求至少要管理员权限) Gdpaas.doPlugin.showEditWin(null,"batch_opt_auth_page","index/setup/auths/batch-opt-auth/batch-opt-auth-page.html","批量权限分配","",{});
- 打包配置中增加:显示友好的错误消息
guthon.error.silent
开启友好的错误消息,开启后,服务器后台报错不会显示具体错误信息,需要查看具体错误消息,请到后台查看服务器日志 - 表格增加页面事件: getContextMenuItems:自定义表格右键菜单
- 示例代码:
// 注意:menus为引用参数,应用代码不可重新初始化此参数 menus.push({ // 添加动作菜单 name : 'HelloWord', action: function () { alert('HelloWord') }, tooltip: 'this is HelloWord menu', disabled: false, cssClasses: ['class1','class2'], icon: '<i class="iconfont icon-fuzhi1"></i>' }); menus.push('separator'); // 添加分隔符 menus.push({ name : '多级菜单', subMenu:[ { name: '子菜单1', action: function() { alert('hello1'); } }, { name: '子菜单2', action: function() { alert('hello2'); } }, ] });
- 主表格右键菜单增加导出所有页数据功能
- 表格(table)和表单(inputForm)新增批量按钮操作函数:
ctrl.hideAllButtonsExcept(array|function)
:批量隐藏所有按钮ctrl.showAllButtonsExcept(array|function)
:批量显示所有按钮- 示例代码:
// 函数参数可以接收两种类型: // 1、 按钮别名数组 // 2、 回调函数,参数为:bnt 对象, // 返回 true - 允许操作 false - 不允许(反向操作,如:调用的是hideAllButtons,当前按钮处于隐藏状态,则会显示他)。 table.hideAllButtonsExcept(['new-bnt','edit-bnt','delete-bnt']); table.showAllButtonsExcept(function(bnt){ // bnt : {id,aliasName,isDividerLine,text} if (bnt.aliasName == 'new-bnt') return false; if (bnt.aliasName == 'edit-bnt') return false; if (bnt.aliasName == 'delete-bnt') return false; return true; // 其他按钮都需要显示 })
$vs.cipher
增加新方法:$vs.cipher.createUserPassword($userId,$pass)
: 创建用户登录密码字符串
- 登录设置增加
相同密码使用次数
控制:设置后,一个用户对一组密码只能使用设置的次数,超过则不允许再使用这组编码。 - 谷神移动端H5支持:
- 开启方式:开发环境->应用及资源->应用管理->选择一个需要开启移动端的主数据服务,点击属性编辑-> 选择参数设置TAB页->勾选
移动端H5
后开启移动端H5支持功能(第一次开启需要全编译后生效)。 - 调试方式:开发环境,选择调试,打开调试页面后,按“F12”进浏览器开发者调试模式,然后打开移动端调试(“显示设备工具栏”)可开启移动端H5调试页面,然后刷新页面后,可出现移动端界面。
- 开发事项:
- 由函数
gUtil.isMobile()
返回当前运行环境是PC还是移动端 - 可视化设计界面中,菜单、按钮、字段等都有显示端设置,开发者可以选择 PC&H5(默认),仅PC显示,仅H5显示
- 由函数
- 支持范围:目前已知明确不支持的有如下模块:
- 自定义HTML页面,由于自定义HTML页面通常是基于PC调试是样式,故转移到移动端后,需要开发者另外调整,不能天然支持
- 特别复杂的主页面,如:多个tab页的查询页面,无法支持
- 其他模块基本可以支持从PC端零代码转换到移动端
- 支持平台:谷神只是把页面从PC版转换为移动的操作风格版,本质上,移动端H5仍旧属于是网站应用,故移动端H5适用于微信公众号、企业微信应用、钉钉应用等直接打开门户网站的应用。不支持微信小程序。
- 生产环境:谷神移动端H5功能为需要授权后才能在生产环境工作的模块,各软件开发商需要获得(或购买)谷神开发者中心关于移动端模块授权点后,才可以为各自的客户颁发移动端授权证书。
- 软件供应商每年可获得一定数量的免费移动端授权点。
- 获得授权点数后,软件供应商管理员可以为客户的生产环境授权并开启移动端功能;也可以分配给本公司的其他同事,授权其开启相关客户的生产环境移动端功能(具体请登录开发者中心->插件管理->插件库存中分配)
- 授权限制:
- 开发环境无需授权即可调试移动端功能,生产环境、测试环境必须授权后才可以使用。
- 生产环境和测试环境的只要有一个环境被授权后,另外一个环境会自动授权。
- 授权操作:
- 软件系统打包安装后,需要以系统管理员的身份登录管理后台,然后点击右上角头像,在下拉菜单中,选择
运维管理
菜单,打开界面后,选择注册授权信息
模块,在组件授权信息
栏目中,找到com.guthon.plugin.h5
然后点击授权 - 然后请根据授权模块提示进行操作即可。
- 软件系统打包安装后,需要以系统管理员的身份登录管理后台,然后点击右上角头像,在下拉菜单中,选择
- 开启方式:开发环境->应用及资源->应用管理->选择一个需要开启移动端的主数据服务,点击属性编辑-> 选择参数设置TAB页->勾选
- 获取模块参数配置API调整:
$vs.properties.getModuleConfig()
增加参数$systemId
$vs.properties.getModuleConfig($configId)
取数规则:读取当前数据源(数据库)下的配置参数,若存在且唯一,则返回,若存在且不唯一,则抛异常,必须传值系统编码进行过滤。即,模块参数编码尽量不要设置成一样的,每个应用的参数编码区分开来,如:com.golden.bdp.BTXXX 、 com.golden.ebp.BTXXX,这样就可以通过模块编码来作为唯一条件读取模块配置,注意:本方法不支持漫游,即,不可以在主数据通过模块配置编码读取业务微服务的配置信息$vs.properties.getModuleConfig($configId,$systemId)
取数规则:判断要求的系统是否为当前系统,若为当前系统,则读取本地库数据,若存在配置则返回,若不存在,则返回为空;若判断要求的系统编码不是本地,则漫游到要求的系统编码中读取对应的参数配置。
- gUtil.confirm增加参数
morebnts
:- 参数类型:Array ,如:
['保存并提交','保存为草稿']
,那么弹出提示按钮顺序为:保存并提交
,保存为草稿
,确定
,取消
。 - 完整函数定义:
gUtil.confirm(msg,okfun,cancelfun,title,morebnts)
- 回调函数返回:
cancelfun
函数参数未变,无参数okfun
函数增加参数index
,index
为被点击的按钮次序(从左到右数),第一个按钮为1
开始。
- 提示:关于修改
确定
,取消
按钮名称的方法,您传递的msg
格式为:{msg:'xxxxxx',btnok:'确定',btncl:'取消'}
,通过传递对象,可以修改按钮名称。
- 参数类型:Array ,如:
inputForm
增加每行显示列设置:允许开发者设置最大显示列格子数。- 模块参数配置增加版本管理:
- 增加用户签出功能
- 增加修改版本和历史版本功能
- 增加版本对比和还原功能
- 增量打包时,将根据提交版本进行打包
- 打包时,将只打包已提交的记录。
inputForm
、itemTable
增加onchange监控功能:- 优化原因:当用户修改了表格(或表单)的数据,没有使得编辑焦点失去,直接点击保存按钮,而编辑的焦点又存在onchange事件,且事件执行的时间较长,就会出现保存发生在onchange事件之前,导致数据错误。
- 现底层已对onchange事件做了处理,当发起onchange事件时,底层会将函数调用挂起,保存时,检测onchange事件是否已经执行完毕,若未执行完毕,则进行
无限时间等待
(注意,操作不当可能导致用户无法提交单据)。底层默认处理的未同步代码有效,对于异步请求(gUtil.request()
)则需要开发者自己设置。 - 新增API:
guid = ctrl.addOnChangeHook(name)
: 人为添加禁止提交标记ctrl.removeOnChangeHook(guid)
: 事务完成后,手工删除标记// onchange var hookid = itemTable.addOnChangeHook('异步执行'); // 添加一个标记以阻止保存行为 gUtil.request('com.guthon.bill.check',function(result){ try { // 业务处理 } catch(e) { // 异常处理 } finally { itemTable.removeOnChangeHook(hookid); // 删除标记 } },function(msg){ // 异常模式 gUtil.error(msg); itemTable.removeOnChangeHook(hookid); // 删除标记 })
- 表格增加样式读取和设置API:
table.getTableStyle():Array
: 获取表格字段列设置信息table.setTableStyle(columns:array)
: 设置表格字段列设置信息
- 虚拟地址服务组件功能增加:
返回类型(context-type)
- 返回图片流:
- 返回类型设置为
image/png
- 函数返回二进制数组,如:return $vs.barcode.createQrCode(‘123456’)
- HTML页面:<img src=”/gdpaas/comp/image.htm”/>
- 返回类型设置为
- 返回JS脚本:
- 返回类型设置为
application/javascript
- 函数返回js脚本,如:
#set($html = "var a = 1;alert(a);"); return $html;
- HTML页面:<script src=”/gdpaas/comp/script.htm”></script>
- 返回类型设置为
- 返回HTML:
- 返回类型设置为
text/html
- 函数返回html脚本
- 返回类型设置为
- 返回图片流:
- 谷神配套文件服务FTPS支持: 为了进一步加强文件服务的安全性,配套的文件服务增加了FTPS的支持,开启方法:
- 需要升级最新版的文件服务,并在配置文件中,开启
ftp.is-sftp=true
- 在谷神服务打包配置处,需要增加ftps支持配置:
golden.file-service.is-ftps=true
- 所有微服务都必须添加此配置,且文件服务器开启了ftps则所有客户端都需要以ftps的方式接入,否则无法访问。
- 需要升级最新版的文件服务,并在配置文件中,开启
- 增加以对话框的方式打开主窗口功能:
gUtil.openMainWinAsDialog()
- 对话框确定按钮会触发窗口事件:
page.doMethod("on-ok-button-click",{})
开发者需要在此处理确定按钮逻辑,返回true
则不执行关闭操作,不返回或者返回其他,则执行关闭窗口操作。
- 对话框确定按钮会触发窗口事件:
- 新增刷新用户权限API:
$vs.cache.refreshUserSession($userId,$systemId)
$userId
:需要刷新的用户编码$systemId
:用户所在系统编码,可缺省,若不传值则默认当前运行的系统- 刷新用户缓存,刷新内容包括:操作权限、数据权限、会员信息(协同用户)、用户身份(管理or系统管理员)、登录初始化脚本执行等
- 此API一般用于分配用户权限后,立即生效,不用用户重新登录的需求。
- 增加服务端用户身份初始化方法:
$vs.auth.doUserTaskLogin($userId,$systemId)
:以服务端身份登录,并初始化登录场景,一般用于接口调用时初始化当前请求的用户执行身份(注意:不可在用户发起的请求里调用本方法,只可在服务调用环境中心运行)
- 202308250851:
- 数据权限分配增加页面数据过滤功能
- 修复了其他开发环境BUG和开发环境功能优化
- 日志方法支持替换语法,如:
$vs.log.info('hello [{}]',$name)
- 202308281438:
- 开发环境,谷神脚本数据源报表支持运行数据源脚本解析出数据源字段。
- 开发环境,修复模块参数合并时,由于数据类型不一致导致合并是失效问题。
- 202308301648:
- 修复移动端复核表头情况下,行查看报错问题;
- 修复移动端checkbox行高不可变的问题
- 增加方法:
gUtil.isChinese(str)
- 增加方法:
gUtil.isHaveChinese(str)
- 增加方法:
gUtil.isChineseOrNumbOrLett(str)
- 增加方法:
gUtil.isCarPlateNum(str)
- 202308311634:
- 修复审批流岗位设置中,无法修改岗位下拉组件问题
- 修复报表日期查询中,带有时间的日期格式,点击月报错问题
$vs.http.xxx
方法增加新参数$ignoreError
:忽略服务器返回的错误码。默认false
(返回码超过400就会抛出异常),true
- 不管服务端返回什么码,都会读取服务端返回的数据不会抛出异常,需要开发者自行解析请求是否正确- 增加WPS文件预览功能,实现与solution.wps.cn在线预览服务对接
- 登录weboffice开放平台创建应用,配置相应的回调地址
- 在系统配置文件中设置weboffice申请到的AppSecret 、AppID
- 202309051146:
- 新增
gUtil.resetDialogHeight(pageId,height)
方法,用于动态刷新对话框高度。 - 谷神内置vuejs版本从
2.3.0
升级到2.6.11
- 新增
- 202309061624:
元组件
控件增加属性默认隐藏
,同时增加APIcustom.setVisable(isShow)
: 设置整个元组件控件在页面上的显示/隐藏custom.isVisable():boolean
: 获取当前组件是否显示- 示例代码:
// var custombox = tabPage.tabPage0.custombox.isVisable(); var isVisable = custombox.isVisable(); custombox.setVisable(!isVisable);
- 202309081614:
- 修改
inputform
按钮区为浮动层,可以不随滚动条滚动,方便用户制单操作。 tab
控件增加方法:tab.getTabLabel()
:获取标签文字tab.setTabLabel(text)
:设置标签文字
$vm.save
方法校验提示优化inputForm
错误提示不再显示气泡浮动提示- 在tab页内的表格列未填值时,会自动切换到当前tab页,提示语句也会显示当前tab页的标签。
- H5移动端增加新的接入方法:
${ROOT_PATH}/h5/shell/index.html
,和直接访问${ROOT_PATH}/gdpaas/home/index.htm
相比,修复了在微信公众号下,全面屏苹果手机下面黑线挡住分页栏问题。
- 修改
- 202309141309:
- 增加子窗口多开方法:
gUtil.openMultipleSubWin()
允许开发者同时多次打开同一个单据详情。 - 谷神工作流改为采用插件外置的方式,默认植入谷神基础版本(1.0.0版本),项目无需操作即可生效,若需要高级个性化版本,则由项目组自行下载升级插件。
inputForm
校验气泡浮动提示改为输入框右侧图标;所有错误一起检测。- 新增读取EXCEL API方法:
$vs.file.readExcelFileSheet($f:string,$sheetNo:int,$srow:int):Sheet
- 开发环境单据类型编码新增时,代码不再自动产生,而是由手工编写。
- 解决依赖包
snakeyaml
安全漏洞问题,版本从1.30
升级到2.2
。 - 插件开发增加
pom
文件检查约束,若插件jar文件中,包含多个pom.xml
则需要开发者在插件配置文件中,增加group-id
和artifact-id
来定位插件pom
文件
- 增加子窗口多开方法:
- 202309151149:
- 谷神脚本数据源的报表返回结果变更,增加主数据和sum数据同时加载的支持(在一个请求内同时读取主数据和汇总数据),实现方法如下:
- 谷神脚本返回数据结构:
{sql:'select field,xxx from table where ...',sum:''}
时,启动本算法 - 当前只返回了sql没有返回sum时,sum会自动通过sql子查询生成。
- 调用示例:
// .... 业务代码 #set($result = $vs.util.newMap()) #set($result.sql = $selectsql) // 主查询语句 #set($result.sum = $sumsql) // 汇总sql,可以不传值,不传值则通过sql自动生成 return $result // 返回给框架,注意,若存在临时表,不要删除,底层框架在读取完数据后会自动删除
- 谷神脚本返回数据结构:
- 修复oracle数据库下偶发删除临时表失败问题。
- 漏洞修复升级:
- nacos-client版本从
2.1.2
升级到2.2.4
- nacos-client版本从
- 谷神脚本数据源的报表返回结果变更,增加主数据和sum数据同时加载的支持(在一个请求内同时读取主数据和汇总数据),实现方法如下:
- 202309151349:
inputForm.disabled()
函数增加对checkbox
和radio
的支持,不需要再通过inputForm.checkbox('xx').disabledAll()
来操作- 消息提示
gUtil.info
、gUtil.error
支持多条消息同时显示。 - 修复已知BUG。
- 202309211546:
- 修复表格、表单更多按钮和组合按钮不支持默认禁用的问题
- 增加对
楚天云
等三方公有云对象存储(OSS)的支持(需要安装插件) - 修复已知BUG。
- 202309251723:
- 增加vue-2.7.14版本依赖,谷神html控件中可以使用vue进行编程
- 增加elementUI-2.15.3依赖,可以使用elementUI相关组件。
- 修复其他已知的BUG
- VUE编程方式如下(窗口onCreate事件):
// 窗口onCreate事件 selfPage.app = new Vue({ el: "#"+self.pageId + " #vue_context", data: function() { return { form: {}, }; }, computed:{ // xxx }, mounted(){ // 初始化谷神下拉组件示例 var that = this; var $input = $(this.$refs.s3input.$el); var input = $input.find('input')[0]; this.selectFields = new Gdpaas.select(input, 'CP-D27B-C6F5-D5284154', 2, {}, function(item){ that.$set(that.form,'select3',item.name); that.$set(that.form,'select3code',item.code); }); }, methods:{ // xxxx } });
- VUE编程方式如下(窗口onBeforeWinClose 事件):
try{selfPage.app.$destroy();}catch(e){} // 手动注销VUE实例否则可能导致有垃圾残余
- 运维管理->报表数据源设置模块增加
功能优化
- 手工新增站内信增加附件上传及查看功能。
- 表格控件功能优化:
- 表格属性,排序字段,对于已经隐藏的字段增加个标记
- 表格属性,表格列,字段批量设置为隐藏时,“允许用户手工放出” 选项可以批量修改(可放出列)。
- 表格属性,表格列,表格列增加批量选中删除功能。
- 下拉控件优化:若为静态下拉,则点击下三角不弹出高级窗口
- 修复主表格中无选择列时合计无法显示问题
- 开发平台插件管理功能优化,加入批量同步、查询条件
- 开发平台报表模板功能优化,加入批量同步
- 开发平台下拉组件高级查询优化:加入编辑、删除、调整位置
- 角色权限审计、用户权限审计中加入默认查询权限、过滤禁用模块
- 开发环境:模块开发页面,增加
保存后自动编译
选择,用户可以选择不勾选,即保存后不编译页面以加快保存速度。 - 开发环境:模块参数增加复制、分类设置、模版根据系统归类、模块可以系统间引用等功能
- 编辑表格
text
编辑列增加自动去除首尾不可见字符
设置,选上后,保存数据时,会自动去掉字段值首尾的不可见字符 - 主表格
分组小计查询
增加排序支持,可和其他报表一样点击字段对数据进行排序。 - 修复我的消息中发送时间不需要显示毫秒
- 修复系统脚本JAVASCRIPT合并时如果文件末尾没有分号结束,自动添加分号
- 修复ORACEL环境批量插入数据超长提示不友好问题
代码结构版本号
- 当前代码结构版本号:1.0.0
注:相同的代码结构版本号的版本开发的页面代码可以相互导出/升级。
- 当前代码结构版本号:1.0.0
文档更新时间: 2025-06-16 09:35 作者:weir