照片做视频模板下载网站,网站网站制作需要多少钱,用ip做网站,西宁刚刚发生的大事一、前言
有一个需求#xff0c;想实现从页面上传一个excel文件#xff0c;点击提交#xff0c;就转发给forma模块#xff0c;然后用户在forma模块里#xff0c;确认下自动填写的信息是否正确#xff0c;正确的话就点击保存#xff0c;存入数据库#xff1b;不正确的话…一、前言
有一个需求想实现从页面上传一个excel文件点击提交就转发给forma模块然后用户在forma模块里确认下自动填写的信息是否正确正确的话就点击保存存入数据库不正确的话可以修改修改正确后保存入库。
这个功能想用intra-mart框架实现框架自带低代码平台模块logicDesigner和forma等。
logicDesigner大概就相当于一个接口写完后有一个url地址可以传参数调用内部自己写好处理逻辑后可以返回值。
forma就相当于一个表单模块自己拖组件画好页面后可以一键生成数据库访问时也是通过url访问但是会展示一个页面在页面上填好参数点击保存就会把数据保存到数据库。
二、思路
由于是低代码平台只能用提供的组件实现不能全用代码搞定有些地方是不太灵活的写软件效率高了灵活度低了。
forma就是一个像表单的页面不能直接加上传excel文件并处理、自动填好的逻辑
logicDesigner是一个接口有入参出参可以写内部处理逻辑但是要与forma对接起来才行虽然可以写逻辑、读取excel直接sql入库但是就是想用forma、人工确认下数据是否正确再决定是否入库。
最后实现的是先用bloomMaker写一个上传页面然后页面调用logicDesigner执行处理逻辑logicDesigner里再启动一个BPM任务BPM里把任务分派给指定用户指定用户处理BPM任务时、打开forma确认此时forma里就有已经填好的数据了用户可以确认数据是否正确、决定是否入库。
整个流程用到了bloomMakerlogicDesignerBPMforma。
三、实现步骤与代码
1.bloomMaker
这个是intra-mart框架里的一个模块可以用来低代码开发页面。
首先创建一个imui页面如下 (1)声明变量和常量
然后声明下变量和常量就和代码里声明一样自己起名字就行
{requestData: {fileKey: ,note: },respCode: 0,respMsg:
}这个是变量选择json格式填进去就行 点击请求按钮就会把requestData发送给logicDesigner后面会提到 respCode是logicDesigner处理完毕后返回的值例如200 respMsg是logicDesigner处理完毕后返回的消息体
{ENDPOINT_URL: logic/api/logic_designer/upload_geren_qqs,SUCCESS: ファイルアップロード成功、BPMのタスクに確認してください,ERROR: エラー発生,ERROR2: ファイルの様式は正しくありません
}这个是常量ENDPOINT_URL是logicDesigner的url根据需要自己改 其它的就是些提示信息。
(2)页面布局
然后页面中拖进去的组件是这些
先拖进去一个表单容器里面有标题、两行 第一行第二列拖进去一个文件上传组件value需要填成$variable.requestData.fileKey $是jqueryvariable是变量这个是框架起的不能改后面两个就是自己变量的名字 这个东西当点击这个按钮上传完毕文件后框架就会给这个变量赋值是一个128长度的文件唯一编号后续会用。
第二行第二列拖进去一个文本框value需要选择变数值值为$variable.requestData.note 这个东西当用户在文本框输入内容时框架就会给这个变量赋值值为文本框的内容。
“登录”按钮绑定的事件是register自己起名字的一个动作如下 这个后面会写到。
(3)编写按钮事件 画面右侧选择アクション动作上面是新建按钮下面是已经写好了一个出现的修改按钮。 创建了一个名字是register的动作左边选的是给某个url发请求拖到右边 右边url里写的就是常量$constant.ENDPOINT_URL这个就是自己创建的常量 方法post请求体用$variable.requestData 接收返回报文时用$variable.respCode存储响应值用$variable.respMsg存储响应体。
如果想加成功/失败消息提示也可以加不是重点这里不写了。注意失败提示需要加在右上方的发生错误时标签里。
2.logicDesigner
这个模块可以低代码编写接口处理逻辑收到入参、处理、返回出参。
首先创建一个逻辑流。
(1)定义入参出参、常量
入参的json格式是
{fileKey: ,note:
}注意入参之前bloomMaker传来的报文是requestData对应的值值就是这个json格式的所以这样就能接收到。
出参其实可以不写这个逻辑里没有用到写多了。 这个是写入参出参的截图左边两个参数不用管右边输出部分的参数写多了如果用json格式会比较方便如果手动写注意 选了配列型にする就能把这个变量变成数组 选了配下に配置する就能在这个变量下新建子变量。
变量这次没有用到常量如下 PublicStoragePath的值是ReqGeRen_Path/可以随便写个路径缓存文件用 bpm_key的值是upload_geren_qqs这个是BPM流程的ID需要与自己创建的保持一致后面会写到 timeZone的值是Asia/Tokyo根据时区需要写处理表格会用。
(2)画流程图 把左边需要的组件拖到右边连好线。 下面是详细说明
●第一个开始不用写
●第二个是IM-BloomMaker里的ファイル情報の登録作用是文件持久化 本来上传的文件会在Session Scope Storage里当用户退出就消失了 执行这个就能把文件存到数据库
双击打开把入参fileKey链接到key上这样才能使用。 fileKey是bloomMaker框架上传文件时自动生成的那个变量。
●第三个是IM-BloomMaker里的ファイル情報の取得用来获取文件详细信息 双击打开把fileKey链接到key上意思是读取这个文件的信息。
●第四个是一个自定义的sql任务执行后把文件信息入库
从左边栏目找到增加用户定义 里面有制作SQL定义
点击后会打开新建页面先写入参这个出参不能编辑只能写入参
入参的json格式如下
{id: ,file_key: ,file_name: ,note: ,create_date: null
}这些入参是sql语句用的id用框架的idcreate_date是时间戳格式也用框架的 file_key、note是bloomMaker传来的 file_name是读取到的。 继续编写下面的数据库类型选择一个看自己配了几个数据库链接这里是tenant的数据库 选执行sql类型是insert sql语句如下
INSERT INTO gsd_upload_file(id, file_key, file_name, note, create_date)
VALUES(/*id*/testId, /*file_key*/testK, /*file_name*/testName, /*note*/testNote, /*create_date*/2025-01-01)其中/**/部分里面的内容对应入参变量框架执行sql时就会填写为入参值了里的是默认值有入参用入参没有就用默认值。
把这个组件保存好连线后双击打开 给入参赋值的连线如图其中在左上下拉菜单里可以找到session情报和之前获取文件的组件im_bmGetFileInfo1第三步的组件点击追加就会出现在左边 在右上的下拉菜单里可以找到identifier点击按钮加入这个就是框架生成的id参数 然后连线fileKey和note是入参id是系统生成的file_name是第三步组件取得的文件名create_date是session里取得的当前时间。
●第五个是ストレージ操作里的ストレージ出力バイナリ作用是把二进制格式的文件内容保存到storage缓存里。 双击打开入参连线如图 其中storage传入了一个string格式的路径用到了concat拼接常量PublicStoragePath和变量fileKey拼好后就是ReqGeRen_Path/ladskjlafkejwf...这样的意思是把文件缓存到这个路径下文件名起成fileKey binary是文件内容把第三步读取到的文件内容contents赋值过去。
●第六个是Excel入力定義編集也是自定义的。
从左边栏目找到增加用户定义 里面有新建Excel输入处理逻辑
打开页面后这个组件的输入输出都不能手动编辑需要修改其它信息、才会自动生成输出参数 输入下方内容这里选择的是读取哪个sheet左边是指定sheet名字这里选的是右边指定sheet序号从零开始
继续向下
这个填的就是怎么处理excel表了例如选择第0个sheet表B2格子进行读取然后输出的变量叫req_no格式是string 还可以把excel格子读取成list如图选第0个sheet从B列到E列从18行开始向下读取当格子内容全部为空时停止读取 然后返回的list名字为req_table返回的变量名字叫tb1_textbox1类型string等。
保存后这个组件的输出就自动生成好了拖入右边连好线双击打开先配置好入参 需要传入file路径这里就是PublicStoragePath与fileKey拼接的字符串第五步执行后就会把文件保存到这个位置可以读取到 targetTimezone是时区使用了常量Asia/Tokyo 密码没有传测试excel文件没有加密。
●第七个是开启BPM工作流执行后创建BPM任务提醒指定用户继续处理。 拖入面板连好线后双击打开配置入参
先把第六步处理好后的结果加入到左边这个就是第六步的出参然后连线到右边variables表示把整个变量给到BPM供后续使用 processDefinitionKey传的是常量表示启动哪个BPM这个需要与后续创建的BPM模版对应。
●第八个是终了这个也可以填些出参的调用logicDesigner处理结束后就会返回出参。 这个例子里不需要写跳过。想写出参时也得先定义出参变量才行然后双击打开填写出参变量赋值连线
3.BPM
个人感觉这个就是像任务流的一个东西可以指定用户层层处理层层审批。 logicDesigner执行完毕后会创建一个BPM进程。 所以要先写一个BPM模版才能被调用。
打开サイトマップ-プロセスデザイナ网站地图-进程设计这里创建一个プロセス进程模版。
创建后先点击画面空白区域在右边填写下 这里写了进程定义key是upload_geren_qqs上方logicDesigner就是根据这个值来开启这个BPM进程 处理对象用户记得添加上允许开启进程的用户。
然后拖组件如图 一个开始一个用户任务一个结束。
点击用户任务在右边配置
可以配置一个负责人多个有权限处理这个进程的人 重点是配置下フォームキー值为forma:seikyusyo意思是这个任务会打开名叫seikyusyo的forma页面。
logicDesigner中给这个BPM进程的variables传递了一个json对象json对象中就是从excel里读取并处理好的内容json里变量的key与forma页面元素一一对应 然后这个forma就可以自动填写完毕用户浏览后确认是否入库即可。
先用检查模式保存才能发布
用这个deploy发布才能使用。
4.forma
这个东西可以低代码开发表单页面一键生成数据库自带新增、修改、查询页面。 需要注意的点就是创建后的id与BPM里的forma:对应需要先选テーブル設定创建好数据库表选権限設定设置好可以使用的用户 メニュー設定可以设置这个forma的入口按钮有新增页面和一览页面两种。(其实就是两个url入参正常创建好的forma可以用这两个入口使用)
内容样例如下
例如想自动给这个input赋值就要注意这个id现在是project_name前面BPM的variables里的json对象json对象是有这个数据的例如
{
...project_name:abc,req_table: [{tb1_textbox4: 100.0,tb1_textbox3: 100.0,tb1_textbox2: 100.0,tb1_textbox1: b},{tb1_textbox4: 200.0,tb1_textbox3: 200.0,tb1_textbox2: 200.0,tb1_textbox1: a},
...
}这样就可以自动给这个值填进去, project_name:abc
同理想给forma的table填值也是table的id、每列的id与json里的数据要对应好。
四、演示效果
1.用户先访问bloomMaker页面点击按钮上传excel后点击登录按钮就能触发logicDesigner后续处理。 2.logicDesigner会开启一个BPM进程用户可以在BPM-任务一览里查看到 这里就能看到属于自己的任务可以点击按钮进行处理。
3.点击处理按钮后就会跳转到forma页面forma页面里的信息是自动填写好的 用户自行确认如果有需要修改的地方就修改最后点击登录按钮就能保存入库。
五、总结
细节有点多可能写的有些乱。
总之就是intra-mart框架里想实现上传excel表格、用表格内容自动填写好forma页面、用户手动确认是否入库功能的话就可以参考这个例子。
先用bloomMaker写入口页面然后触发logicDesigner逻辑读取excel转换为json格式传给BPM BPM收到后给一个指定用户分派任务用户处理这个任务时打开forma页面此时forma页面是填写完毕的确认是否修改、是否入库即可。
六、备注
1.bloommaker与logicDesigner写好后还需要分别创建路由设置才行路由设置就是自己写一个url、配好自己写好的组件就可以访问到了 注意还得给路由设置好权限允许自己访问才能测试。
2.BPM则是要设置好哪个用户能开始这个任务、哪个用户能处理这个任务。 BPM每次改动后都得选deploy重新部署一个可执行包。
3.forma也要设置好、哪个用户能访问这个forma页面。