本文展示一种基于es/ju/nx的全新的填报方式。
客户需求
客户1:我想通过微信对话式的录入单据。
客户2:我想通过微信把照片上传到已有的表单中。
客户3:我不想打字,只想点点点,扫扫扫,拍拍拍……
实现场景1
首先,制作一个【交互Demo】
模板,里面包含4个字段:品名(文字),安全库存(数字),图片1和图片2(图形)。
接下来,在企业微信的应用中增加一个【建商品】菜单,ID=jsp
在esap查询中建立一组查询,这里有5个查询,其中第一个查询由菜单(ID=jsp)发起,模式=2,表示新建表单模式,设置下一步
,后续查询将依次执行。
实际填报效果如下,在点击【建商品】菜单后,依次填写或传图即可。
同时,工作台也生成了相应表单,客户1的应用场景搞定了。
实现场景2
这次,仍然用【交互Demo】
模板做示例,手工建立两个表单,保时捷
和兰博基尼
,没有传图片。
接下来,在企业微信的应用中增加一个【扫品名】菜单,ID=spm
在esap查询中再建立一组查询,这里有3个查询,其中第一个查询由菜单(ID=spm)发起,设置下一步
,后续查询将依次执行。
做一个兰博基尼
文字二维码用于扫描,实际中可能是订单号之类的唯一ID:
实际填报效果如下,在点击【扫品名】菜单后,依次传图即可。
工作台相应表单也自动补齐了,客户2和客户3的应用场景一起搞定了。
难点解析
addpic函数
这是一个ESAP高级自定义sql函数,原型是DownloadPic(picUrl, tableName, fieldName, rcid, picNo)
Demo中的{ {if addpic .praw "交互Demo" "图片1" .rcid $pic} }
意思是从.praw
下载图片到交互Demo
表的图片1
字段,praw
参数类似于P
参数,主要用于微信图片URL获取
gettablevalue函数
这是一个ESAP高级自定义sql函数,原型是GetTableValue(dbs, table, cond, ret, value)
sql模板中的{ {$rcid := (gettablevalue "nxt" "交互Demo" "品名" "recordid" .pf0)} }
实际是执行了一个sql:
select recordid from nxt..交互Demo where 品名=.pf0
,.pf0是第一次按钮扫描的值,也就是兰博基尼
,代入后就是:
select recordid from nxt..交互Demo where 品名='兰博基尼'
,结果赋值给$rcid变量,用于后续数据处理。
小结
主要应用了连续查询,并使用了支持JU/NX/ES的ESAP高级自定义函数。
本文示例应用ESAP3.0.31+支持,本文涉及的JU/NX/ES数据库备份可在ESAP达摩院中下载。
PS:JUAP模式下,需要通过admin控制台重新打JU补丁。
2019-03-19