タイトルの通り、このページ(処理ページ)のカスタマイズ方法がわかりません。私は以下のように初期化をオーバーライドする拡張機能を持っています
Base.INDocumentList.SetProcessDelegate(delegate(List<INRegister> list){ ReleaseDocExt(list); });
しかし、アイテムを処理するときに ReleaseDocExt が実行されません。
タイトルの通り、このページ(処理ページ)のカスタマイズ方法がわかりません。私は以下のように初期化をオーバーライドする拡張機能を持っています
Base.INDocumentList.SetProcessDelegate(delegate(List<INRegister> list){ ReleaseDocExt(list); });
しかし、アイテムを処理するときに ReleaseDocExt が実行されません。
拡張機能を作成し、リリース プロセスをオーバーライドすることができました。この拡張子を含めると、システムは「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) 画面などの在庫画面の 1 つからドキュメントをリリースするときに呼び出されません。その理由は、これらの画面が 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 インスタンスをインスタンス化することもできます。
最後に、トランザクション リリース プロセスのカスタマイズについて警告したいと思います。何をしているのかを確認してください。