Axapta 如何检查是否可以使用下一个操作员?
任何Axapta版本的问题:Axapta 如何检查是否可以使用下一个操作员?,axapta,Axapta,任何Axapta版本的问题: 如何检查“下一个”运算符是否可以与记录一起使用 如何在不可接受的“next”运算符上禁止调试器 谢谢 复制代码: static void Job13(Args _args) { CustTrans ct1; CustTrans ct2; // let's assume that method 'one' search a record select ct1; // where ct1.AccountNum == 'some
复制代码:
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中运行作业后创建的两个屏幕截图
问题在于您的
ct2.data(ct1.data())代码>并且它是错误消息的(d)
部分。看起来AX无法处理这种情况。我同意@FH Inway的评论,即您可能应该在选择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");
}
根据:
select语句只获取一条记录或一个字段。取回
其他记录,可以使用下一条语句。下一个声明
获取表中的下一条记录如果不使用
在前面的select命令中出现错误。请勿将next与
firstOnly查找选项。如果需要遍历多个记录,则
更适合使用while select语句
您在ct2中使用了next命令,而没有在前面使用select命令(您在ct1中使用了该命令)
更新:使用if(ct1.found())下一个ct1
可以帮助您避免意外错误。我不知道如何做到这一点,但您是否考虑过在选择
或集合时使用,以传递记录,然后在集合上迭代?问另一个问题,您使用next
的原因是什么?我同意-,而select
是一个很好的解决方案,而queryRun
则非常出色。原因是xRecord上的枚举数。谢谢)。问题是:如何检查“next”操作符是否可以与记录一起使用?我已经更新了我的答案,建议使用if(ct2.found())next ct2代码>仅为ax2012定义的方法found()。谢谢你,谢谢ct2.data(ct1.data())
,ct2.data(ct1)
,buf2buf()
不起作用。我是阿吉-看起来AX无法处理这种情况。