如何将自定义UI Action添加至Alfresco多选工具?
解决Alfresco UI Action添加到多选工具的问题
看起来你已经搞定了单选场景下的UI Action,现在卡在多选集成上——这确实是文档比较零散的部分,我来分享下实际项目里验证过的步骤:
第一步:确保UI Action的逻辑支持多选
你之前的Action是针对单个节点写的,现在要适配多选,核心是把args.node改成处理args.nodes数组,同时兼容单选场景:
function onYourCustomAction(args) { // 兼容单选和多选场景,兜底处理空选择 const selectedNodes = args.nodes || (args.node ? [args.node] : []); if (selectedNodes.length === 0) { Alfresco.util.PopupManager.displayMessage({text: "请至少选择一个节点"}); return; } // 收集所有选中节点的nodeRef,供后续业务逻辑使用 const nodeRefs = selectedNodes.map(node => node.nodeRef); // 这里写你的业务逻辑,比如调用后端Web Script执行批量操作 Alfresco.util.Ajax.request({ url: "/proxy/alfresco/api/your/custom/endpoint", method: "POST", dataObj: { nodeRefs: nodeRefs }, successCallback: () => { Alfresco.util.PopupManager.displayMessage({text: "批量操作完成!"}); // 刷新文档库列表,让用户看到操作后的结果 Alfresco.util.Publish("ALF_DOCLIST_RELOAD_DATA", {}); }, failureCallback: () => { Alfresco.util.PopupManager.displayMessage({text: "批量操作失败,请重试"}); } }); }
第二步:正确配置share-config-custom.xml
你之前的配置能显示但功能异常,大概率是actionGroup或者evaluator配置不对,以下是标准的多选Action配置:
<config evaluator="string-compare" condition="DocumentLibrary"> <!-- 配置文档库的多选操作栏 --> <multi-select> <actions> <action id="custom-batch-action" type="javascript" label="你的批量操作名称"> <!-- 指定触发的JS函数 --> <param name="function">onYourCustomAction</param> <!-- 至少选中一个节点才显示该操作 --> <evaluator>selection-at-least-one</evaluator> <!-- 加入文档库多选操作组,确保出现在多选工具栏 --> <action-group>document-selection</action-group> <!-- 可选:设置操作图标 --> <param name="icon">document-actions</param> </action> </actions> </multi-select> </config>
关键配置说明:
action-group:文档库多选用document-selection,文件夹多选用folder-selection,通用多选场景可以用selection-actions;evaluator:selection-at-least-one确保只有选中节点时才显示,避免空操作;如果需要限制只能选中特定类型节点,可以自定义evaluator并在这里指定。
第三步:排查后端逻辑(如果有)
如果你的Action调用了后端Web Script,要确保接口能接收多个nodeRef参数:
- 在Web Script的描述文件(
*.desc.xml)里,参数要定义为多值:<param name="nodeRefs" type="string" multi="true" /> - 在Java/JS后端代码里,要处理
nodeRefs数组,而不是单个nodeRef。
常见坑点
- 忘记处理
args.nodes:很多人单选时只用到args.node,多选时这个属性不存在,直接导致逻辑报错; actionGroup选错:比如误用了document-actions(单选操作组)而不是document-selection,导致Action出现在错误的位置;- 没有刷新页面:批量操作完成后,记得发布
ALF_DOCLIST_RELOAD_DATA事件刷新文档库,让用户直观看到操作结果。
内容的提问来源于stack exchange,提问作者EmGee
相关产品推荐
相关产品推荐

