【问题标题】:Running code on Release Action from Invoice and Memo screen在发票和备忘录屏幕的发布操作上运行代码
【发布时间】:2016-05-11 02:37:26
【问题描述】:

我有一个自定义项,我想在发布发票时运行一些代码(网络服务调用)。在训练中,在我的 Graph Extension 中,我使用并修改了以下示例,其中 CreateAPBills 方法是我想要在 Release Action(最终是 RowPersisted 事件)上运行的方法:

public class ARInvoiceEntryExt : PXGraphExtension<ARInvoiceEntry>
{
    public PXAction<ARInvoice> release;
    [PXUIField(DisplayName = "Release", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Update)]
    [PXProcessButton]
    public IEnumerable Release(PXAdapter adapter)
    {
        PXGraph.InstanceCreated.AddHandler<ARInvoiceEntry>((graph) =>
        {
            graph.RowPersisted.AddHandler<ARInvoice>((cache, args) =>
            {
                if (args.TranStatus == PXTranStatus.Completed)
                {
                    CreateAPBill(cache);
                }
            });
        });

        return Base.release.Press(adapter);
    }

不幸的是,这似乎不起作用。我错过了什么?

【问题讨论】:

  • 在和其他人讨论过这个问题之后——我不一定需要在 RowPersisted 事件上发生这种情况——因为 Release 可以在没有保存的情况下发生,对吗?因此,换句话说,我需要在 Release 操作时启动我的代码。我还需要为此添加事件处理程序吗?

标签: c# acumatica


【解决方案1】:

我认为您的约定颠倒了。 PXAction 成员以大写字母开头,方法以小写字母开头。另外,尝试使您的方法受保护虚拟并检查它是否有效。

public PXAction<ARInvoice> Release;
[PXUIField(DisplayName = "Release", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Update)]
[PXProcessButton]
protected virtual IEnumerable release(PXAdapter adapter)
{
    PXGraph.InstanceCreated.AddHandler<ARInvoiceEntry>((graph) =>
    {
        graph.RowPersisted.AddHandler<ARInvoice>((cache, args) =>
        {
            if (args.TranStatus == PXTranStatus.Completed)
            {
                CreateAPBill(cache);
            }
        });
    });

    return Base.release.Press(adapter);
}

【讨论】:

  • 非常感谢 - 我现在明白了。不幸的是,我从 T300 课程 pdf 中剪切和粘贴,这就是他们展示的方式。不过我应该注意到了……
猜你喜欢
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多