找回密码
 注册成为天翎用户
楼主: IT小白

[解决中] 表单中获取手写签字,若不同节点的如何共存??????

[复制链接]
李国权 发表于 2020-1-2 16:47:12 | 显示全部楼层
可以看一下这个脚本,这个是获取这条数据的所有手写意见。
  1. (function(){      
  2.       var docc=getCurrentDocument();      
  3.       var pic="";      
  4.       var dep;      
  5.       var depp;      
  6.       var docid = docc.getId();      
  7.       //第一步:在  t_actorhis 表中 根据 表单docid(即表单的id) 获取  SIGNATURE 字段的值      
  8.       var sql=" select  SIGNATURE  from T_ACTORHIS  where doc_id='"+docid+"' ";      
  9.       var query=queryByDSName("培训数据",sql);      
  10.       var imgdata = "data:image/png;base64,";   
  11. var img="";          
  12.       println("meiji"+sql);      
  13.       println("query的大小===="+query.size());      
  14.       if(query!=null && query.size()>0){      
  15.                               println("jinjini");      
  16.                   for(var iter = query.iterator(); iter.hasNext();){      
  17.                               println("22222");      
  18.                     var  doc = iter.next();      
  19.                       depp= doc.get("SIGNATURE");      
  20.                                       dep="["+depp+"]";      
  21.                                     
  22.       println("galon"+dep);      
  23.       //第二步:解析JSON字符串      
  24.       var jsonArray = new Packages.org.json.JSONArray(dep);      
  25.       var data= "";      
  26.             
  27.               for(var i=0;i<jsonArray.length();i++){      
  28.                       var jsonObject = jsonArray.getJSONObject(i);      
  29.                       data= jsonObject.getString("data");      
  30.                                             
  31.              }      
  32.                 println("data"+data);              
  33.       //第三步:在表单上显示图片      
  34.       var imgt = imgdata + data;      
  35.       println("imgt---->"+imgt);              
  36.       img=img+"<img  src='"+imgt+"'>";              
  37.       println("img---->"+"dddddddd");  
  38. }          
  39.       }      
  40.       return img;      
  41.       })();
复制代码
 楼主| IT小白 发表于 2020-1-6 10:26:32 | 显示全部楼层
李国权 发表于 2020-1-2 16:47
可以看一下这个脚本,这个是获取这条数据的所有手写意见。

可以,暂时这样就行,谢谢,可结帖
admin 发表于 2026-9-11 22:54:58 | 显示全部楼层
【本回复由 AI 根据产品文档自动生成】

您好,关于不同流程节点手写签字如何共存的问题,在 M3-1.6.0SP10 版本中,手写签字控件(HandwritingField)已标记为 `@Deprecated`(废弃),不存储值。以下是解决方案:

## 原因分析

1. `HandwritingField`(手写签名)在平台中已废弃,**不存值**(`VALUE_TYPE` 无),签字数据不会持久化到业务表
2. 不同流程节点的签字数据如果使用同一个控件,后节点的签字会覆盖前节点的签字
3. 1.6 版本的签字数据存储在文档的 `SIGN` 系统固定列和 `KINGGRIDSIGNATURE` 列中,不支持多节点独立存储

## 方案1:使用多个图片上传控件替代(推荐)

为每个流程节点配置独立的图片上传控件(ImageUploadField),通过隐藏条件脚本控制只在对应节点显示:

```javascript
// 节点1的签字控件隐藏条件 - 仅在非节点1时隐藏
(function() {
    var stateLabel = getCurrentDocument().getStateLabel();
    // 假设节点1的状态标签为 "经理审批"
    return stateLabel !== "经理审批";
})()
```

```javascript
// 节点2的签字控件隐藏条件 - 仅在非节点2时隐藏
(function() {
    var stateLabel = getCurrentDocument().getStateLabel();
    // 假设节点2的状态标签为 "总监审批"
    return stateLabel !== "总监审批";
})()
```

这样每个节点的签字数据存储在各自独立的 `ITEM_` 列中,不会互相覆盖。

## 方案2:使用自定义控件 + 手写签名图片 Base64 存储

使用 CustomField(自定义控件)嵌入前端手写签名 JS 库(如 signature_pad),将签名图片转为 Base64 存储到字段中:

```javascript
// 自定义控件的 htmlScript 中嵌入前端手写签名
(function() {
    var html = '<canvas id="signaturePad" width="400" height="200" style="border:1px solid #ccc;"></canvas>' +
        '<button onclick="saveSignature()">保存签名</button>' +
        '<button onclick="clearSignature()">清除</button>' +
        '<script>' +
        'function saveSignature() {' +
        '  var canvas = document.getElementById("signaturePad");' +
        '  var dataURL = canvas.toDataURL("image/png");' +
        '  // 将Base64写入隐藏字段' +
        '  var hiddenField = document.querySelector("[name=item_签字]");' +
        '  if (hiddenField) hiddenField.value = dataURL;' +
        '}' +
        'function clearSignature() {' +
        '  var canvas = document.getElementById("signaturePad");' +
        '  var ctx = canvas.getContext("2d");' +
        '  ctx.clearRect(0, 0, canvas.width, canvas.height);' +
        '}' +
        '</script>';
    return html;
})()
```

为每个流程节点配置独立的自定义控件,通过隐藏条件控制显示。

## 方案3:使用富文本编辑器(HTMLEditorField)嵌入签字

在富文本编辑器中嵌入签字图片,每个节点使用独立的 HTMLEditorField 字段存储签字内容。

## 方案4:使用附件上传控件

为每个节点配置独立的附件上传控件,用户手写签名后截图上传,通过隐藏条件脚本按节点显示。

## 注意事项

- `HandwritingField` 已废弃,不建议在新项目中使用
- 系统固定列 `SIGN` 和 `KINGGRIDSIGNATURE` 用于存储平台级签名/签章数据,不支持多节点独立管理
- 使用图片上传控件方案时,签字图片以 JSON 数组字符串形式存储在 `TLK_` 表的 `ITEM_` 列中
- 隐藏条件脚本 `true` = 隐藏,`false` = 可见(注意方向)
- 升级到 4.x 版本后可使用更丰富的前端组件实现手写签名

参考文档:
http://docs.myapps.cn/design/core-component/dyna-form-field/
http://docs.myapps.cn/iscript-guid/scene/03-permission-visibility/
http://docs.myapps.cn/design/core-component/dyna-form/

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-9-27 05:02

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表