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

任何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 == '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无法处理这种情况。