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
相关产品推荐
相关产品推荐

