MENU

[泛微ecode] 字段联动-附件联动无感联动

• 2023 年 08 月 07 日 • 阅读: 3739 • 泛微OA

警告

本文由丸子原创,尊重原创,转载请注明出处!
作者:oneszhang
原文:https://oneszhang.com/archives/48.html

丸子近期较忙,暂不梳理该小项目过程,且暂不提供帮助,以下代码回复可见,有问题请留言或一起在下面讨论区交流。


泛微官方已于KB9002307中解决该问题!

泛微官方已于 2023年8月 发布新包 KB900230701 编号:2076641 流程引擎字段联动带出附件的需求,在该包中解决了这项问题!现在你可以使用标准功能实现附件联动了!

更新通知 V3版本 - 2024年2月26日

  • 修复的问题:同一流程节点下无法多个附件字段联动。
  • 更新了配置信息数组结构,支持一个 nodeId 下配置多个 fileFieldidlinkfileFieldid 的对应关系,使配置更加灵活。

旧版

附件联动功能 V2版本(旧版)

// 全局变量
let enable = true;
let nodeid = null;
let workflowId = null;
let fileFieldid = null;
let linkfileFieldid = null;

// 配置信息数组
const configInfo = [
{
workflowId: 87, //流程id
nodeId: 461, //节点id
fileFieldid: 'field9140', //上传附件控件ID
linkfileFieldid: 'field9297' //附件联动控件ID(文本框,请先配置联动信息)
}
];

// 设置节点ID对应的配置信息
function setConfigInfoForNodeId(nodeId) {
console.log("进入了获取联动信息函数");
const configInfoItem = configInfo.find(item => item.nodeId === nodeId);
console.log(configInfoItem);
if (configInfoItem) {
workflowId = configInfoItem.workflowId;
fileFieldid = configInfoItem.fileFieldid;
linkfileFieldid = configInfoItem.linkfileFieldid;
}
}

// 使用ID调用API
async function callApiWithId(id) {
const options = {
url: '/api/doc/save/getAccListForEdit',
method: 'GET',
params: { id },
type: 'json',
deep: true,
checkCode: false
};
const ApiResponse = await window.weaJs.callApi(options);
return ApiResponse;
}

// 检查条件是否满足
const checkConditions = () => {
const { hash } = window.location;
if (!hash.startsWith('#/main/workflow/req') || !WfForm) return false;

const baseInfo = WfForm.getBaseInfo();
({ nodeid } = baseInfo);

const isNodeIdAllowed = configInfo.some(item => item.nodeId === nodeid);
return isNodeIdAllowed;
};

// 覆写 WeaUpload 组件
ecodeSDK.overwritePropsFnQueueMapSet('WeaUpload', {
fn: async (newProps) => {

if (!enable || !checkConditions()) return;

console.log("条件已满足!");

setConfigInfoForNodeId(nodeid);

async function processIds(idArray) {
const fileLinkdatas = [];

for (const id of idArray) {
const ApiResponse = await callApiWithId(parseInt(id, 10));
console.log("请求 id 的 API:", id);
console.log("ApiResponse:", JSON.stringify(ApiResponse));

if (ApiResponse.dataList && ApiResponse.dataList.length > 0) {
const dataListItem = ApiResponse.dataList[0];

const fileData = {
fileExtendName: dataListItem.fileExtendName,
fileid: dataListItem.id,
filelink: dataListItem.filelink,
filename: dataListItem.filename,
filesize: dataListItem.filesize,
imgSrc: "/images/filetypeicons/txt_wev8.png",
loadlink: dataListItem.loadlink,
showLoad: true,
showDelete: true,
isImg: false,
imagefileid: dataListItem.fileid,
secretLevel: "4",
secretLevelValidity: "",
secretLevelValidityValue: "",
};

fileLinkdatas.push(fileData);
}


}
console.log("构建后的 fileLinkdatas:", fileLinkdatas);
return Promise.resolve(fileLinkdatas);
}

async function startProcessing(idArray, value) {
const fileLinkdatas = await processIds(idArray);

console.log("processIds 执行完毕,开始设置字段值");

const fileFieldValueObj = {
"value": value,
"specialobj": {
"filedatas": fileLinkdatas,
"showBatchLoad": false
}
};
console.log("构建的 fileFieldValueObj:", fileFieldValueObj);
WfForm.changeFieldValue(fileFieldid, fileFieldValueObj);
}

console.log("linkfileFieldid:", linkfileFieldid);
WfForm.bindFieldChangeEvent(linkfileFieldid, function (obj, id, value) {
console.log("字段变化触发 startProcessing 调用,值为:", value);

var idArray = value.split(',');
startProcessing(idArray, value);
});

},
order: 1,
desc: '附件联动功能 V2'
});

附件联动功能 V3版本

此处内容需要评论回复后方可阅读

特别鸣谢

在此,感谢交流群中每一位盆友的帮助,特别鸣谢大佬:eVER(JSP推广大使) 提供的技术帮助!

最后编辑于: 2024 年 07 月 24 日
返回文章列表 打赏
本页链接的二维码
打赏二维码
添加新评论

已有 110 条评论
  1. 孙

    牛逼了丸子

  2. h h

    丸子大牛逼

  3. 交换余生 交换余生

    丸子牛

  4. 不牛逼 不牛逼

    牛逼,丸子

  5. MIMIYA MIMIYA

    V50看结果

  6. 夜寒 夜寒

    牛逼了丸子

  7. 天M宇 天M宇

    不错的软件

  8. 1 1

    测试

  9. 1 1

    1

  10. 小黄鸭 小黄鸭

    1

  11. Derek Derek

    太牛了,感谢大佬

  12. 庞

    丸子牛逼了

  13. 打工仔 打工仔

    @(怒)

  14. 伟

    太厉害, 我也用JS做了一个附件字段联动只是没时间整, 但我是用附件字段类型, 然后WfForm,ModeForm的API处理的,
    因为考虑到react重写组件需要分别处理PC端和Mobile端

  15. ck ck

    牛批

  16. 周大帝 周大帝

    丸子牛啊

  17. Euphoria Euphoria

    666

  18. busuhu busuhu

    nice 大佬@(大拇指)

  19. wxvbee wxvbee

    看看

  20. wai wai

    厉害了

  21. pyy pyy

    1

  22. zi zi

    大佬厉害

  23. shing shing

    大佬看下

  24. shing shing

    大佬看下@(呵呵)

  25. shing shing

    大佬看下@(呵呵)

  26. wmqq wmqq

    1

  27. 王阳 王阳

    1

  28. 曾经我很刚 曾经我很刚

    牛的

  29. R R

    可以多讲讲ecode的开发吗

  30. R R

    这里面涉及的API接口代码可以提供一份吗,谢谢

    1. @R@(啊)我也没有介个东东,我需要API的时候都是自己开F12看或者百度看有有木有

  31. 。

  32. null null

    牛逼大丸子

  33. 邓

    老师

  34. 小钰哥哥 小钰哥哥

    666

  35. yuz_wl yuz_wl

    感谢分享

  36. wwwww wwwww

    !!!!!

  37. 小黄鸭 小黄鸭

    1

  38. 1 1

    1

  39. 追梦 追梦

    丸子牛

  40. 王

  41. 林

    厉害

  42. a a

    牛逼了丸子

  43. a a

    牛逼了丸子@(呵呵)

  44. 牛啊

  45. 蓝色血滴子 蓝色血滴子

    阅读理解

  46. 秃头小宝贝 秃头小宝贝

    666

  47. 王

    牛逼

  48. yogro yogro

    牛逼了丸子

  49. yms yms

    权限怎么解决呢

    1. @ymsemmm,想解决什么权限问题,详细说说,比如举个例子

    2. yms yms

      @丸子流程想带建模或者其他类型流程附件。如果带一类型流程中附件 ,可能本流程参与人,没得上个流程的附件权限。带是带过来了 但是打不开

    3. yms yms

      @丸子上面代码可以在插入代码块里弄吗? 覆写 WeaUpload 组件 我以为只能在ecode弄得

    4. @yms对于文档的权限问题,我还真没考虑过,如果需要的查看附件话,我感觉可以从文档权限那边着手。
      可以了解一下流程功能设置中的“跟随文档关联人赋权”不知道这个是否可以帮到你,因为我还没有用过\#(小眼睛)

      上面的代码,在你读懂之后,是可以直接提取出“API请求”、“附件字段赋值”两个主要操作组织一下新逻辑后,直接放置在代码块中实现联动操作的。(注意:不可直接将ecode代码放置代码块)

  50. 1 1

    1

  51. stan stan

    cool啊。希望常常更新

  52. 无忧 无忧

    666

  53. chen chen

    6666666

  54. win win

    我看看

  55. 11 11

    6666

  56. 霏

    厉害

  57. aaa aaa

    牛逼了丸子

  58. lee lee

    666

  59. wei wei

    厉害

  60. RHK RHK

    牛B大丸子

  61. Euphoria Euphoria

    丸子!

  62. 小明 小明

    想看

  63. 不知春 不知春

    牛逼

  64. 冯宝宝 冯宝宝

    6

  65. 吴彦祖 吴彦祖

    666

  66. 子

    谢谢

  67. robert robert

    测试

  68. robert robert

    kkk

  69. 孙

    看看

  70. boos boos

    收藏

  71. 牛逼了丸子

  72. pan pan

    牛,我正需要这个

  73. sig sig

    回复看看

  74. w w

    牛逼了丸子

  75. s s

    学习一下

  76. 1 1

    1

  77. 阿瑟 阿瑟

    那边

  78. 牛逼了丸子

  79. 36520479 36520479

    感谢

  80. 无

    学习了

  81. 哈

    牛的

  82. 呃呃 呃呃

    2

  83. 测试 测试

    学习

  84. ff ff

    牛逼了丸子

  85. 123 123

    hi

  86. 123 123

    22

  87. 樊

    牛逼了丸子

  88. A A

    标准功能实现附件联动,带出的附件为啥不能删掉呀

    1. @A啊?这标准功能还有这种问题哇?我还没使用过标准功能实现测试过。
      那个字段是可编辑的还是不能删吗? 0.0 还挺离谱

    2. A A

      @丸子字段只读和编辑,带出的附件都不能删除,附件字段新加的附件文件能删除,不知道是什么问题

    3. wintsa wintsa

      @Aconst config = [{
      workflowId: 58031,
      nodeId: 173548,
      fjfield: "field216913",
      },
      {
      workflowId: 125026,
      nodeId: 175548,
      fjfield: "field218866",
      }]
      ecodeSDK.overwritePropsFnQueueMapSet('WeaUpload', { //组件名
      fn: (newProps) => {

      if (!window.location.hash.startsWith('#/main/workflow/req')) return; const baseInfo = WfForm.getBaseInfo(); if (!newProps.fieldName) return; if (config.some(e => e.workflowId == baseInfo.workflowid && e.nodeId == baseInfo.nodeid && e.fieldName == baseInfo.fjfield)) { newProps.datas.forEach(e => { e.showDelete = true }) } return newProps

      },
      order: 1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
      desc: '添加模块带出的附件删除按钮'
      });

  89. ca ca

    1

  90. 牛逼

  91. meimu meimu

    太厉害了,感谢

  92. sig sig

    看看

  93. 张

    膜拜

  94. 22 22

    我问问

  95. wintsa wintsa

    6666牛逼

  96. wintsa wintsa

    尝试了这个代码,并不成功,主要是字段联动的附件字段,监听过了,他的值并没有发生修改,也就是bind监听方法不生效,我也很奇怪。我自己尝试使用组件复写也没有监听到组件发生变化

    1. wintsa wintsa

      @wintsa我又检查了一下,我的字段联动里面的接口,其他字段是有值带出来了,就是这个fj的字段,接口里面是空值。有意思的是,我尝试手动执行sql,发现是正常查找到结果的

  97. abc abc

    丸子大牛逼

  98. abc abc

    牛逼了丸子

  99. shocklock shocklock

    牛呀

  100. Monsoon Monsoon

    Monsoon

  101. yuz_wl yuz_wl

    了解下,谢谢