在临时记录中设置枚举字段的值

Setting the value of an Enum field in a temporary record

这里是 AL 的新手;我正在 Dynamics BC 中为新部署试验自动化测试。作为一个非常基本的测试,我只想在 Cronus 测试数据库中创建一个新的 Item 记录并验证每个字段。当我尝试 select 枚举字段的值时,我 运行 遇到了麻烦。这是我正在使用的代码:

Procedure AddGoodItem()
// [Given] Good item data
var
    recItem: Record Item Temporary; 
Begin
    recItem."Description" := 'zzzz';
    recItem.validate("Description");
    recItem.Type := recItem.Type::Inventory;
    recItem.Validate(Type);
    recItem."Base Unit of Measure" := 'EA';
    recItem.Validate("Base Unit of Measure");
    recItem."Item Category Code" := 'FURNITURE';
    recItem.validate("Item Category Code");
End;

当我在 Cronus 中 运行 时,我收到错误:

You cannot change the Type field on Item  because at least one Item Journal Line exists for this item.

如果我注释掉 Type 行,则过程 运行 成功。

鉴于这是一个临时记录,它不应该有任何项目日志行,不是吗?我错过了什么?

OnValidate 触发器中的代码仍然是 运行s,即使您已将 Record 变量标记为 temporary。此外,temporary 不会继承到基础变量,这意味着 OnValidate 触发器中使用的任何 Record 变量都不是 temporary(除非如此标记)。

有两种选择:

  1. 如果 OnValidate 触发器的代码 运行 在这种情况下不相关,则省略行 recItem.Validate(Type);
  2. recItem.Validate(Type); 行替换为您自己从 OnValidate 触发器中克隆的代码,然后删除不需要的部分。