任何Axapta版本的问题:
感谢。
重现代码:
static void Job13(Args _args)
{
CustTrans ct1;
CustTrans ct2;
// let's assume that method 'one' search a record
select ct1; // where ct1.AccountNum == 'someAccount'
ct2.data(ct1.data());
// contract postcondition
Debug::assert(ct1.RecId != 0);
Debug::assert(ct2.RecId == ct1.RecId);
//////////////////////////////////
// let's assume that method 'two' accepts a custTrans record as parameter
Debug::assert(ct2.RecId != 0);
try
{
// Questions:
// 1. How to check that 'next' can be used?
// 2. How to suppress a debugger?
next ct2;
}
catch
{
Warning('catch it!');
}
}
+在ax2009中作业运行后创建的几个屏幕截图。
答案 0 :(得分:3)
问题在于您的ct2.data(ct1.data());
,它是您错误消息的(d)
部分。看起来AX似乎无法处理这种情况。我同意@ FH-Inway的评论,您应该使用while select ct1 {}
而不是next
。
下面更清楚地说明了这一点:
static void Job5(Args _args)
{
SalesTable salesTable;
SalesTable salesTable2;
select salesTable where salesTable.SalesId == 'SO-001351';
while (salesTable)
{
info(salesTable.SalesId);
next salesTable;
}
info("Above has no issue");
select salesTable where salesTable.SalesId == 'SO-001351';
salesTable2.data(salesTable);
while (salesTable2)
{
info(salesTable2.SalesId);
next salesTable2;
}
info("Above fails");
}
答案 1 :(得分:2)
根据MSDN article:
select语句仅提取一个记录或字段。获取 附加记录,您可以使用下一个语句。下一个声明 获取表中的下一条记录。 如果您使用下一个没有 在select命令之前,发生错误。不要使用next firstOnly找到选项。如果你需要遍历一些记录,那就好了 更适合使用while select语句。
您已使用下一步命令与 ct2 ,而不使用选择命令(您与 ct1 一起使用)。
更新:使用if (ct1.found()) next ct1;
可以帮助您避免意外错误。