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

时间:2015-03-24 10:14:40

标签: acumatica

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

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

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

1 个答案:

答案 0 :(得分: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实例。

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