0

在需求预测页面 99000919 中,所有“标题”数据字段都由全局变量支持。我需要将按期间查看(PeriodType)默认为月,然后验证该值。我这样做并不成功。

A. 使用 Modify(PeriodType) 从 OnAfterValidate 触发器中获取值。当我使用 Modify 时,PeriodType 显示在智能感知中,但是当我尝试使用它时,我得到一个编译器错误,即 PeriodType 在当前上下文中不存在。

    modify(PeriodType)
    {
    trigger OnAfterValidate()
    begin
        MyPeriodType := PeriodType;
    end;
    }

B. 我也尝试使用 VS Code teventsub 代码片段订阅 PeriodType 的 OnAfterValidate 事件,但没有暴露任何内容。

    [EventSubscriber(ObjectType::Page, Page::"Demand Forecast", 'OnBeforeValidateEvent', 'PeriodType', true, true)]

这可以在带有扩展的 SaaS 解决方案中完成吗?欢迎任何想法或建议。

4

1 回答 1

1

目前似乎没有任何活动可供您订阅,这将帮助您解决问题。

然后要做的第一件事是向 Microsoft 提交请求以将所需的事件添加到产品中。请求新事件

话虽如此,您的问题有一个解决方法,其中涉及几个步骤:

  1. 创建需求预测 (页 99000919) 的副本。
  2. 在您的页面副本中编写所需的更改
  3. 用您的副本替换原始页面

最后一步是通过识别打开原始页面的所有位置然后超越代码来实现的。

需求预测打开的地方有三个:

  1. 第 99000921 页,需求预测名称,操作编辑需求预测
  2. 第 8907 页,销售和营销经理 RC,行动预测
  3. 代码单元 5530,计算。项目可用性

1 和 2 是非模态运行的,这意味着在这两种情况下您都可以执行以下操作:

[EventSubscriber(ObjectType::Page, Page::"Demand Forecast Names", 'OnBeforeActionEvent', 'Edit Demand Forecast', true, true)]
local procedure Page_DemandForecastNames_OnBeforeActionEvent_EditDemandForecast(var Rec: Record "Production Forecast Name")
var
    DemandForecastCopy: Page "Demand Forecast"; // this variable should reference your copy
begin
    DemandForecastCopy.SetProductionForecastName(Rec.Name);
    DemandForecastCopy.Run();
    Error(''); // this creates a silent error which cancels the original execution of the action.
end;

SetProductionForecastName不应称为“销售和营销经理 RC”。

第三个有点棘手,因为页面是从 codeunit 以模态方式运行的,但是由于我们现在已经替换了页面以非模态方式运行的所有情况,我们现在可以假设每次打开原始需求预测时都应该是模态的。

不幸的是,订阅需求预测OnOpenPageEvent对您没有帮助,因为没有参数可以从中获取值。因此,您必须回溯代码Calc. Item Availability以找到所有可能的入口点,然后如前所述覆盖默认实现。

于 2020-10-30T10:59:54.580 回答