我有一个代码单元,其中生产订单行表作为源,而运行时触发器显示这两行代码:
ProdOrderLine.GET(Status,'xxxx',10000);
ExecuteFunction(ProorderLine);
XXXX代表生产订单编号,但有人硬编码,如您所见。我如何将这个代码称为其他地方(例如在表格上),但是根据我所在的生产订单行参考?我试着直接调用SetRANGE例程或调用codeunit.run方法,到目前为止没有运气。帮助!
答案 0 :(得分:4)
在设计模式下打开代码单元或其副本进行测试,并设置表格号。 codeunit的属性。然后你可以在OnRun函数中引用传递给codeunit.run的记录作为Rec。
传入记录的方式各不相同,但一种方法是使用以下语法:
Codeunit.RUN(CodeUnitNumber, Record)
SetRange对传入的变量是不够的,因为它只过滤但不选择记录。如果我正确理解您的问题,您将不需要OnRun中的ProdOrderLine.GET。只需调用ExecuteFunction(Rec)。
您没有提及版本号或ExecuteFunction函数的功能,但请尝试一下。
您可以在以下位置找到更多信息: https://msdn.microsoft.com/en-us/library/dd301214(v=nav.90).aspx 和 https://msdn.microsoft.com/en-us/library/dd355035(v=nav.90).aspx
我为Navision开发已经有几年了,而且我再也没有办法测试了。希望这会指出你正确的方向,我没有忘记任何重要的事情。
答案 1 :(得分:0)
根据生产订单行表的主键是否实际上是[状态],[订货号],[行号],您需要使用FIND(' - ')或FINDSET,具体取决于哪个版本的NAV。
看来行号no也是硬编码的......这个过程只涉及订单的第一行吗?
您是否对订单号或文件编号感兴趣?
在任何情况下,我都会将其写为条件语句,除非您更喜欢在过滤器产生0行时将错误消息返回给UI:
IF ProdOrderLine.GET(Status,"Order No.", "Line No.") THEN
ExecuteFunction(ProdOrderLine);