在 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);
}
}
}
}
在 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);
}
}
}
}