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

如何在Release流程中将APTran用户字段同步至GLTran?

AP单据Release时同步APTran用户字段到GLTran的问题修复

原代码未生效的核心问题是无法正确关联GLTran对应的APTran记录,以下是修正后的代码及问题说明:

问题点分析

  1. 原代码中使用PXResult<APTran>.Current获取APTran是错误的,在JournalEntry生成GLTran的上下文里,当前上下文不会自动持有对应的APTran实例,必须主动通过关联字段查询。
  2. 未处理GLTran可能存在的空值情况,匹配逻辑的可靠性不足。

修正后的代码

public class APReleaseProcessExt : PXGraphExtension<APReleaseProcess>
{
    public static bool IsActive() { return true; }

    #region Event Handlers
    public delegate List<APRegister> ReleaseInvoiceDelegate(JournalEntry je
                                                             , ref APRegister doc
                                                             , PXResult<APInvoice, CurrencyInfo, Terms, Vendor> res
                                                             , Boolean isPrebooking
                                                             , ref List<INRegister> inDocs);

    [PXOverride]
    public List<APRegister> ReleaseInvoice(JournalEntry je, ref APRegister doc, PXResult<APInvoice, CurrencyInfo, Terms, Vendor> res, bool isPrebooking, ref List<INRegister> inDocs, ReleaseInvoiceDelegate baseMethod)
    {
        // 为JournalEntry的GLTran添加RowInserting事件处理器
        je.RowInserting.AddHandler<GLTran>((s, e) =>
        {
            GLTran glTran = e.Row as GLTran;
            if (glTran == null) return;

            // 跳过非AP来源的GLTran
            if (glTran.TranType != APInvoice.TypeInvoice && glTran.TranType != APInvoice.TypeDebitMemo && glTran.TranType != APInvoice.TypeCreditMemo)
                return;

            // 通过GLTran的关联字段查询对应的APTran记录
            APTran apTran = PXSelect<APTran,
                Where<APTran.tranType, Equal<Required<APTran.tranType>>,
                    And<APTran.refNbr, Equal<Required<APTran.refNbr>>,
                    And<APTran.lineNbr, Equal<Required<APTran.lineNbr>>>>>>
                .Select(Base, glTran.TranType, glTran.RefNbr, glTran.TranLineNbr);

            if (apTran == null) return;

            // 获取APTran的扩展字段值并同步到GLTran
            APTranExt apTranExt = apTran.GetExtension<APTranExt>();
            if (!string.IsNullOrEmpty(apTranExt.UsrGrantID))
            {
                GLTranExt glTranExt = glTran.GetExtension<GLTranExt>();
                glTranExt.UsrGrantID = apTranExt.UsrGrantID;
                // 标记字段为已修改,确保值被保存
                s.Cache.SetValueExt<GLTranExt.usrGrantID>(glTran, apTranExt.UsrGrantID);
            }
        });

        return baseMethod(je, ref doc, res, isPrebooking, ref inDocs);
    }

    #endregion
}

关键修改说明

  • 主动查询APTran:通过GLTran的TranType、RefNbr、TranLineNbr三个关联字段,从数据库中精准查询对应的APTran记录,确保关联关系正确。
  • 增加类型过滤:只处理AP单据类型的GLTran,避免无关记录干扰。
  • 标记字段修改:使用SetValueExt方法明确标记GLTran的用户字段已修改,确保系统能正确保存同步后的值。
  • 空值校验:在每一步都增加空值判断,避免空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:47:36