MENU

[Ecologyecode] 字段联动-附件联动无感联动

• 2023 年 08 月 07 日 • 阅读: 15460 • 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 日
添加新评论

已有 139 条评论
  1. 孙

    牛逼了丸子

    1. hax hax

      @孙666

  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

    了解下,谢谢

  102. woy woy

    666

  103. 123 123

  104. 1 1

    1

  105. X X

    厉害

  106. 林先生 林先生

    感谢

  107. 1 1

    1

  108. H H

    感谢分享

  109. 周

    6666

  110. Π Π

    感谢大佬

  111. w w

    厉害

  112. hax hax

    厉害,学习

  113. mallstar mallstar

    太牛了!学习一下!

  114. OvO OvO

    666

  115. 魏

    666

  116. 米苏 米苏

    6666

  117. xuanqi xuanqi

    牛批,留言观看!

  118. z z

    1

  119. 罗

    好好好好

  120. 无忧 无忧

    666

  121. 冯

    666

  122. lomor lomor

    看看

  123. 亦凡 亦凡

    太厉害了

  124. 无忧 无忧

    0923

  125. kuan kuan

    看看结果

  126. oaweaver oaweaver

    ECODE

  127. 666

  128. 德玛西亚 德玛西亚

    牛逼了!

  129. 大方哥 大方哥

    点赞