Acumatica:如何自定义页面 IN501000(发布文档)

Acumatica: how can i customize page IN501000 (Release IN Document)

如题,不知道如何自定义这个页面(处理页面)。我有覆盖初始化的扩展如下

Base.INDocumentList.SetProcessDelegate(delegate(List<INRegister> list){ ReleaseDocExt(list); });

但是当我处理项目时,ReleaseDocExt 不是 运行。

我能够创建扩展并覆盖发布过程。如果我包含此扩展名,系统将在尝试从批处理屏幕释放任何 IN 文档时显示 "Hello, World!":

namespace PX.Objects.IN
{
  public class INDocumentRelease_Extension:PXGraphExtension<INDocumentRelease>
  {
    public override void Initialize()
    {
    Base.INDocumentList.SetProcessDelegate(delegate(List<INRegister> list){ ReleaseDocExt(list); });
    }

    public static void ReleaseDocExt(List<INRegister> list)
    {
    throw new PXException("Hello, World!!");
    }
  }
}

从其中一个库存屏幕(如收据 (IN.30.10.00) 屏幕)发布文档时,不会调用此代码。原因是因为这些屏幕直接调用 INDocumentRelease class 中的静态方法,而不是创建图形来执行此操作:

public PXAction<INRegister> release;
[PXUIField(DisplayName = Messages.Release, MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Update)]
[PXProcessButton]
public virtual IEnumerable Release(PXAdapter adapter)
{
    PXCache cache = receipt.Cache;
    List<INRegister> list = new List<INRegister>();
    foreach (INRegister indoc in adapter.Get<INRegister>())
    {
        if (indoc.Hold == false && indoc.Released == false)
        {
            cache.Update(indoc);
            list.Add(indoc);
        }
    }
    if (list.Count == 0)
    {
        throw new PXException(Messages.Document_Status_Invalid);
    }
    Save.Press();
    PXLongOperation.StartOperation(this, delegate() { INDocumentRelease.ReleaseDoc(list, false); });
    return list;
}

因此系统没有机会在此过程中包含您的扩展程序。

如果您确实需要自定义此过程,您还需要覆盖各个屏幕中的发布操作。 Acumatica 也可以修改此代码以避免使用静态函数,而是实例化一个可以自定义的 INDocumentRelease 实例。

最后,我想提醒您关于自定义交易发布流程 - 确保您知道自己在做什么!