You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为工作流操作的Case关闭按钮添加未完成任务校验?

实现Case关闭时未完成任务的校验方案

针对关闭Case(工作流动作)时需校验未完成任务的需求,以下是三种可行实现方案:

方案一:工作流中配置校验逻辑

无需编写代码,直接在工作流设计器中添加验证规则:

  • 打开对应Case的工作流设计界面,定位到Close动作的触发节点
  • 添加「自定义验证条件」,配置查询逻辑:关联当前Case的CaseID,过滤出状态不为“已完成”的CRTask记录
  • 设置验证失败时的错误提示文本(如“存在未完成任务,无法关闭Case”)
  • 保存并发布工作流,触发Close动作时会自动执行校验,不满足条件则阻止动作执行并弹出提示

方案二:代码重写Close动作的执行逻辑

通过PXOverride拦截工作流动作的执行,添加前置校验:

public delegate IEnumerable CloseDelegate(PXAdapter adapter);

[PXOverride]
public IEnumerable Close(PXAdapter adapter, CloseDelegate baseMethod)
{
    CRCase currentCase = adapter.Get<CRCase>();
    if (currentCase == null) return baseMethod(adapter);

    // 查询当前Case关联的未完成任务
    var uncompletedTasks = PXSelect<CRTask,
        Where<CRTask.caseID, Equal<Required<CRCase.caseID>>,
            And<CRTask.status, NotEqual<CRTaskStatus.completed>>>>
        .Select(Base, currentCase.CaseID);

    if (uncompletedTasks.Count > 0)
    {
        throw new PXException("存在未完成的任务,无法关闭当前Case");
    }

    return baseMethod(adapter);
}
  • 该代码需放置在CRCaseMaint扩展类中,执行Close动作前会先校验未完成任务,存在则抛出错误中断流程

方案三:代码动态禁用Close按钮

在Case页面加载时,根据未完成任务状态控制Close按钮的可用性:

protected virtual void CRCase_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
    CRCase currentCase = e.Row as CRCase;
    if (currentCase == null) return;

    // 判断是否存在未完成任务
    bool hasUncompletedTasks = PXSelect<CRTask,
        Where<CRTask.caseID, Equal<Required<CRCase.caseID>>,
            And<CRTask.status, NotEqual<CRTaskStatus.completed>>>>
        .Select(Base, currentCase.CaseID).Any();

    // 获取Close动作实例(需确认工作流动作的ActionID,通常为"Close")
    PXAction<CRCase> closeAction = Base.Actions["Close"] as PXAction<CRCase>;
    if (closeAction != null)
    {
        // 有未完成任务则禁用按钮
        closeAction.SetEnabled(!hasUncompletedTasks);
        // 若需隐藏按钮,替换为:closeAction.SetVisible(!hasUncompletedTasks);
    }
}
  • 该逻辑在CRCase_RowSelected事件中执行,用户打开Case页面时自动判断按钮状态,提前阻止无效操作

内容的提问来源于stack exchange,提问作者JvD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:22:24