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) 画面などの在庫画面の 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 インスタンスをインスタンス化することもできます。

最後に、トランザクション リリース プロセスのカスタマイズについて警告したいと思います。何をしているのかを確認してください。

于 2015-03-24T22:17:42.020 に答える