如何在 Dynamics 365 FO 中通过扩展取消按钮单击事件的超级调用?

问题描述 投票:0回答:2

我想给按钮的点击事件添加一个勾选,当勾选失败时,我想取消super调用,怎么做?

我尝试在单击事件的事件处理程序中使用 FormControlCancelableSuperEventArgs 和 FormControlCancelEventArgs,但它们都返回 null。

下面是我的测试代码。

[FormControlEventHandler(formControlStr(LedgerJournalTable, Approve), FormControlEventType::Clicking)]
public static void Approve_OnClicking(FormControl sender, FormControlEventArgs e)
{
    FormControlCancelEventArgs  ce1 = e as FormControlCancelEventArgs;  // ce1 returns null
    FormControlCancelableSuperEventArgs ce2 = e as FormControlCancelableSuperEventArgs;  // ce2 returns null too
}

我知道我可以通过抛出异常来完成它,但我认为这不是官方的方式。

那么如何通过官方方式取消超级通话呢?

x++ dynamics-365-operations
2个回答
0
投票

我认为不可能实现你想要的。 LedgerJournalTable 表单上的 Approve 按钮中的 super() 调用在框架表单管理之外不执行任何操作,例如屏幕刷新和其他不会影响逻辑的任务(因为它是常规按钮而不是菜单项按钮) 。该按钮正在代码中创建一个新的菜单函数并显式调用它,但实际上并未在 super() 调用中调用菜单项。

我会在扩展程序中创建另一个批准按钮,隐藏开箱即用的按钮,然后在扩展程序按钮的 OnClicked 事件中复制原始按钮的逻辑,然后以您需要的任何方式修改它,例如根据您的要求指定的某些逻辑/条件跳过菜单功能调用。


0
投票
  1. 创建一个虚拟类(包含 Main 方法,但没有任何内容)

  2. 创建与类相关的菜单项

  3. 创建一个按钮的扩展类,并根据自己的情况替换表单控件上的菜单项。

     [ExtensionOf(formcontrolstr(InventJournalCount, postJournal))]
    

    最终类 InventJournalCountForm_cpostJournal_Extension { 公共无效点击() { FormFunctionButtonControl b = this; 布尔值跳过= false; FormRun fr = this.formRun(); FormDataSource fdsJournal = fr.dataSource(formDataSourceStr(InventJournalCount, InventJournalTable )); if(fds期刊) { InventJournalTable 日志 = fdsJournal.cursor(); if(journal/在这里写下你的条件/) { 跳过=真; b.menuItemName(menuItemActionStr(myDummyClass)); } } 接下来点击(); 如果(跳过) { b.menuItemName(menuItemActionStr(InventJournalPostLossProfit)); } } }

© www.soinside.com 2019 - 2024. All rights reserved.