丸子近期较忙,暂不梳理该小项目过程,且暂不提供帮助,以下代码回复可见,有问题请留言或一起在下面讨论区交流。
泛微官方已于KB9002307中解决该问题!
泛微官方已于 2023年8月 发布新包 KB900230701 编号:2076641 流程引擎字段联动带出附件的需求,在该包中解决了这项问题!现在你可以使用标准功能实现附件联动了!更新通知 V3版本 - 2024年2月26日
- 修复的问题:同一流程节点下无法多个附件字段联动。
- 更新了配置信息数组结构,支持一个
nodeId
下配置多个fileFieldid
与linkfileFieldid
的对应关系,使配置更加灵活。
旧版
附件联动功能 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推广大使) 提供的技术帮助![泛微ecode] 字段联动-附件联动无感联动 by https://oneszhang.com/archives/48.html
牛逼了丸子
丸子大牛逼
丸子牛
牛逼,丸子
V50看结果
牛逼了丸子
不错的软件
测试
1
1
太牛了,感谢大佬
丸子牛逼了
@(怒)
太厉害, 我也用JS做了一个附件字段联动只是没时间整, 但我是用附件字段类型, 然后WfForm,ModeForm的API处理的,
因为考虑到react重写组件需要分别处理PC端和Mobile端
牛批
丸子牛啊
666
nice 大佬@(大拇指)
看看
厉害了
1
大佬厉害
大佬看下
大佬看下@(呵呵)
大佬看下@(呵呵)
1
1
牛的
可以多讲讲ecode的开发吗
这里面涉及的API接口代码可以提供一份吗,谢谢
@(啊)我也没有介个东东,我需要API的时候都是自己开F12看或者百度看有有木有
牛
牛逼大丸子
老师
666
感谢分享
!!!!!
1
1
丸子牛
赞
厉害
牛逼了丸子
牛逼了丸子@(呵呵)
牛啊
阅读理解
666
牛逼
牛逼了丸子
权限怎么解决呢
emmm,想解决什么权限问题,详细说说,比如举个例子
流程想带建模或者其他类型流程附件。如果带一类型流程中附件 ,可能本流程参与人,没得上个流程的附件权限。带是带过来了 但是打不开
上面代码可以在插入代码块里弄吗? 覆写 WeaUpload 组件 我以为只能在ecode弄得
对于文档的权限问题,我还真没考虑过,如果需要的查看附件话,我感觉可以从文档权限那边着手。可以了解一下流程功能设置中的“跟随文档关联人赋权”不知道这个是否可以帮到你,因为我还没有用过\#(小眼睛)
上面的代码,在你读懂之后,是可以直接提取出“API请求”、“附件字段赋值”两个主要操作组织一下新逻辑后,直接放置在代码块中实现联动操作的。(注意:不可直接将ecode代码放置代码块)
1
cool啊。希望常常更新
666
6666666
我看看
6666
厉害
牛逼了丸子
666
厉害
牛B大丸子
丸子!
想看
牛逼
6
666
谢谢
测试
kkk
看看
收藏
牛逼了丸子
牛,我正需要这个
回复看看
牛逼了丸子
学习一下
1
那边
牛逼了丸子
感谢
学习了
牛的
2
学习
牛逼了丸子
hi
22
牛逼了丸子
标准功能实现附件联动,带出的附件为啥不能删掉呀
啊?这标准功能还有这种问题哇?我还没使用过标准功能实现测试过。那个字段是可编辑的还是不能删吗? 0.0 还挺离谱
字段只读和编辑,带出的附件都不能删除,附件字段新加的附件文件能删除,不知道是什么问题
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 const config = [{workflowId: 58031,
nodeId: 173548,
fjfield: "field216913",
},
{
workflowId: 125026,
nodeId: 175548,
fjfield: "field218866",
}]
ecodeSDK.overwritePropsFnQueueMapSet('WeaUpload', { //组件名
fn: (newProps) => {
},
order: 1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
desc: '添加模块带出的附件删除按钮'
});
1
牛逼
太厉害了,感谢
看看
膜拜
我问问
6666牛逼
尝试了这个代码,并不成功,主要是字段联动的附件字段,监听过了,他的值并没有发生修改,也就是bind监听方法不生效,我也很奇怪。我自己尝试使用组件复写也没有监听到组件发生变化
我又检查了一下,我的字段联动里面的接口,其他字段是有值带出来了,就是这个fj的字段,接口里面是空值。有意思的是,我尝试手动执行sql,发现是正常查找到结果的
丸子大牛逼
牛逼了丸子
牛呀
Monsoon
了解下,谢谢