如何基于全局变量获取Business Central Page字段的值

问题描述

在“需求预测”页99000919中,所有“标题”数据字段均由全局变量支持。我需要将“按时间段查看(PeriodType)”认设置为“月”,然后验证该值。我没有成功。

A。使用Modify(PeriodType)从OnAfterValidate触发器获取值。当我使用“修改”时,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解决方案中完成吗?欢迎任何想法或建议。

解决方法

目前似乎没有任何您可以订阅的事件,这可以帮助您解决问题。

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

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

  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”。

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

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