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

Acumatica中删除Canceled状态服务合同的优选方案咨询

Acumatica 已取消服务合同合规删除方案

现有操作的问题

  • 在Service Contracts GI中直接添加删除按钮触发Error: The record cannot be deleted报错,原因是系统默认对状态为Canceled(状态值X)的服务合同设置了删除拦截,GI的通用删除逻辑不会自动处理该状态下的特殊校验、关联数据清理逻辑。
  • 直接在数据库执行DELETE FROM [FSServiceContract] WHERE Status = 'X'的方式禁止在生产环境使用:该操作完全绕过服务合同模块的所有内置业务规则,会残留关联的服务日程、计费明细、工单关联、审计日志等大量脏数据,后续会引发对账异常、报表统计错误、关联单据报错等不可追溯的隐性问题。

合规落地方案(覆盖全部需求)

单条自主删除实现

针对用户自主删除单条已取消合同的需求,扩展服务合同维护页面(页面IDFS300100)的业务图逻辑即可:

  1. 编写FSServiceContractMaint的图扩展,重写行删除事件,仅放开Canceled状态的删除限制,同时触发系统内置的关联数据清理逻辑,避免脏数据,参考代码如下:
    public class FSServiceContractMaint_Ext : PXGraphExtension<FSServiceContractMaint>
    {
        public void FSServiceContract_RowDeleting(PXCache sender, PXRowDeletingEventArgs e)
        {
            var contract = e.Row as FSServiceContract;
            if (contract?.Status != FSServiceContract.status.Canceled) return;
            e.Cancel = false;
            // 触发系统原生关联记录清理逻辑
            Base.ServiceContractRelatedRecords.DeleteAll();
        }
    }
    
  2. 配置页面删除按钮的角色权限,开放给对应岗位的用户即可。用户打开单条已取消服务合同点击删除时,系统会自动走完所有内置校验、数据清理、审计留痕流程,不会触发报错。

批量删除实现

针对批量删除所有已取消合同的需求,不要直接使用GI的批量删除功能,在服务合同列表页新增自定义批量操作按钮,基于系统原生业务图实现删除逻辑:

  1. 筛选所有状态为Canceled的服务合同记录
  2. 循环为每条记录实例化独立的FSServiceContractMaint图实例,调用图原生的Delete方法执行删除,全程由系统控制业务规则校验和关联数据处理
  3. 整个批量操作包裹在事务中,单条记录删除失败时记录错误日志、跳过该条,不影响其他记录的正常处理
    核心处理逻辑参考:
    var canceledContracts = PXSelect<FSServiceContract,
        Where<FSServiceContract.status, Equal<FSServiceContract.status.Canceled>>>.Select(Base);
    foreach (FSServiceContract contract in canceledContracts)
    {
        try
        {
            var graph = PXGraph.CreateInstance<FSServiceContractMaint>();
            graph.ServiceContract.Current = graph.ServiceContract
                .Search<FSServiceContract.serviceContractID>(contract.ServiceContractID);
            if (graph.ServiceContract.Current == null) continue;
            graph.ServiceContract.Delete(graph.ServiceContract.Current);
            graph.Actions.PressSave();
        }
        catch (Exception ex)
        {
            PXTrace.WriteError($"删除已取消合同[{contract.ContractNbr}]失败:{ex.Message}");
        }
    }
    

上线注意事项

  • 所有逻辑上线前必须在测试环境完成全流程验证,确认关联的服务计划、计费记录、历史工单关联数据的处理符合业务预期
  • 执行批量删除前必须完成全实例数据备份,避免误操作导致数据丢失
  • 批量删除权限仅开放给管理员角色,建议增加待删除清单核对、操作审批环节,避免误删

内容的提问来源于stack exchange,提问作者Ken S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:15:37