如何自定义屏幕 GL501000 发布交易

How to custom the screen GL501000 Release Transactions

我正在尝试自定义 GL501000 发布交易屏幕,但在处理时它没有输入我的代码,它可能表明我应该使用什么事件来实现此目的。

提前致谢

    using System;
    using System.Text;
    using PX.Data;
    using System.Collections;
    using System.Collections.Generic;
    using PX.Objects.BQLConstants;
    using PX.Objects.CS;
    using PX.Objects.CM;
    using PX.SM;
    using System.Linq;
    using PX.Objects;
    using PX.Objects.GL;
    
    namespace PX.Objects.GL
    {
        public class BatchRelease_Extension : PXGraphExtension<BatchRelease>
        {
            public override void Initialize()
            {
                base.Initialize();
    
                PXGraph.InstanceCreated.AddHandler<JournalEntry>((JournalEntry graphGL) =>
                {
                    graphGL.GetExtension<JournalEntry_Extension>().ModifyBatchFrom = true;
                });
            }
        }
    }

您似乎想知道这是从处理屏幕而不是一次性用户条目调用的。我建议您可以查看 Acumatica OpenUni 网站上的免费 T240 Processing Forms 培训。他们通过包含一个参数来表明这项工作源自一种处理形式,这可以简化您的工作并提高性能。训练示例显示:

public void AssignOrder(RSSVWorkOrder order, bool isMassProcess = false)
{
    ...
    if (isMassProcess)
    {
        ...
    }
}

或者,您可能需要将添加的事件处理程序向下移动到 PostGraph 而不是 JournalEntry。它们都在代码存储库中的同一个文件中。尽管如此,如果您的目标是知道它是从处理屏幕调用的,我建议您考虑修改您的方法以匹配 T240 中的示例。

由于它是在静态方法中,重新处理它会很“有趣”,但你想替换:

pg.ReleaseBatchProc(copy);

与:

pg.ReleaseBatchProc(copy, isMassProcess: true);

并添加签名支持:

public virtual void ReleaseBatchProc(Batch b, bool unholdBatch = false, bool isMassProcess = false)

接下来,您将在批量处理时针对您的特殊情况使用 isMassProcess bool 值,然后调用原始签名:

public virtual void ReleaseBatchProc(Batch b, bool unholdBatch = false)

通过:

ReleaseBatchProc(b);

示例:

public virtual void ReleaseBatchProc(Batch b, bool unholdBatch = false, bool isMassProcess = false)
{
    MyMethod(isMassProcess);
    ReleaseBatchProc(b);
}