【问题标题】:Is it possible to copy the course to make a custom copy of a standard Acumatica function?是否可以复制课程以制作标准 Acumatica 功能的自定义副本?
【发布时间】:2019-12-13 00:03:09
【问题描述】:

我遇到了一种情况,我们希望能够自定义 SO Copy Order 功能(具体来说,我们希望只复制一组特定的详细信息,并在复制时对标题进行一些更改)。

我希望我可以查看源代码,然后找到 CopyOrderCopyOrderProc 并将它们放入我的图形扩展和自定义菜单结构中。菜单部分工作得很好,但是 CopyOrderProc 给我留下了很多编译问题(尝试删除它发送的参数,因为我真的只需要复制并且会有固定选项。似乎我的错误以 @ 开头987654323@,也就是你知道的第一行。)

这是我应该能够做的事情,只是不明白某些事情,还是超出了可能的范围?

【问题讨论】:

  • 首先,您需要将复制代码中所有出现的“this”替换为“Base”。然后对视图的任何引用,您需要附加 Base 例如文档到 Base.Document。 Base 是您要扩展的图形。不要与“base”混淆 - 小写字母 b。哪个是父类。
  • 谢谢!这非常有帮助。看起来我下一个挂断电话的地方是OrderCreated。有没有办法引用存在的那个,或者我是否也需要将它复制到我的自定义代码中?对于它的价值,它看起来像这样:public delegate void OrderCreatedDelegate(SOOrder document, SOOrder source); protected virtual void OrderCreated(SOOrder document, SOOrder source) { }

标签: acumatica


【解决方案1】:

大多数自定义 acumatica 函数都列在 Acumatica 实例的 App_Data\CodeRepository 文件夹中。加载任何扩展库允许您通过 Visual Studio 浏览和搜索这些。

查看 CopyOrder 函数,它调用 CopyOrderProc 函数。委托使用 PXOverride 标志和作为委托的参数副本完成。这是您的覆盖示例:

    public delegate void CopyOrderProcDelegate(SOOrder sourceOrder, CopyParamFilter copyFilter);
    [PXOverride]        
    public virtual void CopyOrderProc(SOOrder sourceOrder, CopyParamFilter copyFilter, CopyOrderProcDelegate baseMethod)
    {
        //code before the base method is called, like validation/prevention.

        baseMethod(sourceOrder, copyFilter);

        //code after the base method is called
    }

您必须覆盖被调用的最终函数,因为代码的其他部分可能会调用此函数而不是操作。我在我的一个自定义项目中重写了 InvoiceOrder,以验证它是否可以创建,以及在调用基本方法后执行操作并且效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2016-05-29
    相关资源
    最近更新 更多