You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics 365 Business Central AL获取产品Marketing Text技术问询

在Dynamics 365 Business Central中动态获取产品的Marketing Text(Entity Text表)

我为客户开发自定义扩展时,需要获取产品的Marketing Text,该数据存储在Entity Text表中。但因为这是一张带复合主键的表,我不确定如何正确获取所有主键参数并组合调用.Get方法:

  • 能轻松获取记录的Source System Id,但还需要提供Company、Source Table Id和Scenario参数
  • 当前硬编码了Source Table Id(值为27),希望能通过代码动态获取
  • 知道Scenario是枚举类型,但不清楚如何查找并正确传入该参数
  • 同时疑惑调用.Get前是否需要执行Clear(EntityText)

现有尝试代码(在OnAfterGetCurrRecord触发器中):

Clear(EntityText); //Do I need to clear before fetching?
if EntityText.Get(Rec.CurrentCompany(), 27, Rec.SystemId, 'Marketing Text') then
    MarketingText := EntityText."Preview Text";

变量声明:

var
    EntityText: Record "Entity Text";
    MarketingText: Text;

关键问题解答

1. 是否需要调用Clear(EntityText)?

不需要手动调用。.Get方法执行时会自动清除当前记录的状态,尝试加载匹配主键的新记录。当然如果之前对EntityText记录做过修改操作,提前Clear也不会有问题,但并非必须步骤。

2. 动态获取Source Table Id

不要硬编码表ID(比如27),可以通过两种方式动态获取:

  • 如果当前触发器所在对象是产品(Item)表,直接用Rec.TableNo获取当前表的ID,代码更通用
  • 也可以用Database::"Item"直接引用Item表的系统ID,效果相同

3. 正确使用Scenario枚举

Entity Text表的Scenario字段对应的枚举是**"Entity Text Scenario"**,应该直接使用枚举值而非字符串,这样能避免拼写错误,还能获得编译时类型检查。对应的Marketing Text枚举值是Enum::"Entity Text Scenario"::"Marketing Text"。


修正后的完整代码

var
    EntityText: Record "Entity Text";
    MarketingText: Text;

trigger OnAfterGetCurrRecord()
begin
    if EntityText.Get(Rec.CurrentCompany(), Rec.TableNo, Rec.SystemId, Enum::"Entity Text Scenario"::"Marketing Text") then
        MarketingText := EntityText."Preview Text"
    else
        MarketingText := ''; // 未找到时清空文本,可选
end;

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:40:04