1

作为标题,我不知道如何自定义此页面(处理页面)。我有覆盖初始化的扩展,如下所示

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

但是当我处理项目时 ReleaseDocExt 没有运行。

4

1 回答 1

3

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

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 类中的静态方法,而不是创建图形来执行此操作:

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 实例。

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

于 2015-03-24T22:17:42.020 回答