在 Acumatica 中,为什么我的 JournalEntry 扩展委托没有触发?

In Acumatica, why is my JournalEntry extension delegate not firing?

在 Acumatica 定制中,我想在日记条目发布后检查它们是否被发布到特定分支,以便我可以为另一个租户创建条目。

我正在使用 JournalEntry 图并在 ReleaseBatch 方法上创建委托。

我知道扩展被攻击了,因为每当我点击日记条目屏幕上的任何东西时,private bool testingExtensionIsActive = true 上的断点;被击中。 为了让代码编译,我必须将 ReleaseBatchDelegate baseMethod 放在 bool unholdBatch = false 参数之前。可选参数必须放在签名的末尾。通常 baseMethod 位于我创建的其他委托的签名末尾。

我还尝试了另一个委托,只是想看看我是否能让任何东西起作用。我代码中的第二个委托用于 PostGraph 图。它有一个简单的签名,所以我认为这可以排除我刚刚用可选参数描述的问题。

我无法命中字符串 joe = "joe" 上设置的断点;在任一代表中。

...

public class JournalEntry_Extension : PXGraphExtension<JournalEntry>
{
    private bool testingExtensionIsActive = true;

    public delegate void ReleaseBatchDelegate(IList<Batch> list, IList<Batch> externalPostList, bool unholdBatch);
    public virtual void ReleaseBatch(IList<Batch> list, IList<Batch> externalPostList, ReleaseBatchDelegate baseMethod,
        bool unholdBatch = false)
    {
        string joe = "joe";

        baseMethod(list, externalPostList, unholdBatch);
    }
}


// Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
public class PostGraph_Extension : PXGraphExtension<PostGraph>
{
    public delegate void PostBatchProcDelegate(Batch b);
    public virtual void PostBatchProc(Batch b, PostBatchProcDelegate baseMethod)
    {
        string joe = "joe";

        baseMethod(b);
    }
}

...

我确认我使用的是正确的 graphs/methods,因为我能够在我试图覆盖的两种方法中遇到断点。 这是 JournalEntry 图的 ReleaseBatch 方法中的断点:

这是 PostGraph 方法上的断点

我做错了什么?任何帮助将不胜感激。

我遗漏了 [PXOverride]。好尴尬。

这个现在可以用了。 ReleaseBatch 委托不起作用,但这是由于另一个问题。

public class PostGraph_Extension : PXGraphExtension<PostGraph>
{
    public delegate void PostBatchProcDelegate(Batch b);
    [PXOverride]
    public virtual void PostBatchProc(Batch b, PostBatchProcDelegate baseMethod)
    {

您不能重写 ReleaseBatch,因为它是一个静态方法。 我建议查看 PostGraph class 的 ReleaseBatchProc(Batch b, bool unholdBatch = false) 并尝试重写那个 public virtual 方法。

public static void ReleaseBatch(IList<Batch> list)
{
    ReleaseBatch(list, null);
}

public static void ReleaseBatch(IList<Batch> list, IList<Batch> externalPostList)
{
    ReleaseBatch(list, externalPostList, false);
}
public static void ReleaseBatch(IList<Batch> list, IList<Batch> externalPostList, bool unholdBatch)
{
    PostGraph pg = PXGraph.CreateInstance<PostGraph>();

    bool doPost = (externalPostList == null);
    Batch batch = null;
    for (int i = 0; i < list.Count; i++)
    {
        pg.Clear(PXClearOption.PreserveData);

        batch = list[i];
        pg.ReleaseBatchProc(batch, unholdBatch);

        if ((bool)batch.AutoReverse && pg.glsetup.Current.AutoRevOption == "R")
        {
            Batch copy = pg.ReverseBatchProc(batch);
            list.Add(copy);
        }

        if (pg.AutoPost)
        {
            if (doPost)
            {
                pg.PostBatchProc(batch);
            }
            else
            {
                externalPostList.Add(batch);
            }
        }
    }
}