【问题标题】:Code ignores validation, executed original code instead代码忽略验证,而是执行原始代码
【发布时间】:2020-02-07 17:45:27
【问题描述】:

我复制了一个事件(点击)并尝试验证交付模式,但原始代码在验证之前执行。 (即使我激活了断点!)

有人知道为什么吗?

class tt042WHSShipmentDetailsForm_Events
{

    [FormControlEventHandler(formControlStr(WHSShipmentDetails, btnOutboundShipConfirm), FormControlEventType::Clicked)]
    public static void btnOutboundShipConfirm_OnClicked(FormControl sender, FormControlEventArgs e)
    {

        Dialog dialog = new Dialog();
        WHSShipmentTable shipmentTable;
        FormDataSource dataSource = sender.formRun().dataSource(formDataSourceStr (WHSShipmentDetails, WHSShipmentTable));
        shipmentTable = dataSource.cursor() as WHSShipmentTable;
        dialog.addText("@tt_042:ScanDlvMode");
        sender.enabled(false);
        DialogField validationField= dialog.addFieldValue(extendedTypeStr (RetailDeliveryModeID), "" ,"@tt_042:DeliveryField");
        if (dialog.run())
        {
            if (dialog.closedOk())
            {
                RetailDeliveryModeID validate=validationField.value();
                if (SalesTable::find(shipmentTable.OrderNum).DlvMode!=validate)
                {
                    throw Global::error("@tt_042:ScanError");
                }
            }
        }
    }
}

【问题讨论】:

标签: validation axapta x++ eventhandler dynamics-365-operations


【解决方案1】:

事件处理程序和命令链都不会覆盖原始代码。原始代码不执行的唯一情况是它被属性[Replaceable] 修饰,这在标准Microsoft 模型中非常罕见且几乎不存在。

他们所做的是在您定位的方法之前或之后运行代码。在事件处理程序场景中,“post”处理程序方法执行(您的情况)之后运行,而“pre”处理程序在方法的代码之前运行。这两种情况都不会跳过开箱即用的代码。在您的特定场景中,OnClicked 事件在开箱即用的clicked() 方法完成执行后执行。命令链是类似的,并且可以被认为是带有强制super() 调用的继承。 next() 调用是必需的,您的代码可以在它之前或之后运行,但不会跳过它。

这意味着跳过某些代码的执行,您必须执行以下操作之一:

  1. 用全新的逻辑创建一个新按钮,

  2. 向 Microsoft 请求委托,他们将创建委托 + if(_delegateResult) { micorosft.outOfTheBoxMethod();} 语句,这样,如果您的委托运行,它可以返回 false 并跳过开箱即用的执行,

  3. 有时你会很幸运,并且有一些验证方法可以让你放置一个后处理程序并跳过开箱即用的执行,但这需要巧妙地挖掘 OOTB 代码,看看是否可行。

【讨论】:

  • 感谢您的回复@rjv!你是对的。我不得不打下一个电话。从错误消息中我看到下一个呼叫只能通过扩展。因此,我没有复制事件,而是扩展了 clicked 方法。这解决了我的问题:)
猜你喜欢
  • 2020-11-21
  • 2021-06-21
  • 1970-01-01
  • 2013-01-28
  • 2015-08-19
  • 2023-03-04
  • 2023-03-17
  • 2021-01-06
  • 2013-10-24
相关资源
最近更新 更多