如何根据全局变量获取业务中心页面字段的值

How to get the value of a Business Central Page field based on a global variable

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

一个。使用 Modify(PeriodType) 从 OnAfterValidate 触发器中获取值。当我使用修改时,PeriodType 出现在智能感知中,但是当我尝试使用它时,我收到一个编译器错误,指出 PeriodType 在当前上下文中不存在。

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

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

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

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

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

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

话虽这么说,但您的问题有一个解决方法,其中涉及几个步骤:

  1. 创建一份需求预测(第 99000919 页)。
  2. 在页面副本中对所需的更改进行编码
  3. 用您的副本替换原始页面

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

Demand Forecast打开的地方有3个:

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

1 和 2 是 运行 non-modal 这意味着在这两种情况下您都可以执行以下操作:

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

第三个有点棘手,因为页面是来自代码单元的 运行 模式,但由于我们现在已经替换了页面为 运行 non-modal 的所有位置,我们现在可以假定每次打开原始需求预测时它都应该是模态的。

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