Total newbie in AL here; I'm experimenting with automated testing in Dynamics BC for a new deployment. As a very basic test, I'd like to simply create a new Item record in the Cronus test database and validate each field. I'm running into trouble when I try to select the value for an enum field. Here's the code I'm using:
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;
When I run this in Cronus, I get the error:
You cannot change the Type field on Item because at least one Item Journal Line exists for this item.
If I comment the Type lines out, the process runs successfully.
Given that this is a temporary record, it shouldn't have any Item Journal Lines, should it? What am I missing?
The code in the
OnValidatetrigger still runs, even if you have marked theRecordvariable astemporary. In additiontemporaryis not inherited to the underlying variables meaning anyRecordvariables used in theOnValidatetrigger are nottemporary(unless marked as such).There are two options:
recItem.Validate(Type);, if the code run by the OnValidate trigger is not relevant in this case.recItem.Validate(Type);with your own clone of the code from theOnValidatetrigger and then remove the unneeded parts.