作为标题,我不知道如何自定义此页面(处理页面)。我有扩展覆盖初始化如下
Base.INDocumentList.SetProcessDelegate(delegate(List<INRegister> list){ ReleaseDocExt(list); });
但是当我处理项目时,ReleaseDocExt不会运行。
答案 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实例。
最后,我想提醒您关于自定义事务发布流程 - 确保您知道自己在做什么!