运行库实现

RunBase implementation

我在学Ax2012,我用微软培训material。我正在尝试在没有对话框的情况下使用 QueryRun 来实现 RunBase class。

我有一个class声明如下:

class SalesCalcAverageSalesPriceNoDialog extends RunBase
{
    FromDate fromDate;
    ToDate toDate;
    ItemId itemId;
    QueryRun queryRun;
    #DEFINE.CurrentVersion(1)
    #LOCALMACRO.CurrentList
    #ENDMACRO
}

然后我覆盖 initParmDefault()

public void initParmDefault()
{
    Query query;
    QueryBuildDataSource qbds;
    QueryBuildRange qr;
    super();
    query = new Query();
    qbds = query.addDataSource(tableNum(CustInvoiceTrans));
    qbds.addRange(fieldNum(CustInvoiceTrans, InvoiceDate));
    qr.value("28/9/2012");
    qbds.addRange(fieldNum(CustInvoiceTrans, InvoiceDate));
    qr.value("4/8/2015");
    queryRun = new QueryRun(query);
}

然后我覆盖 pack() 方法,我 return conNull(),unpack() 方法,我 return 为简单起见。在 运行() 方法中,我有:

public void run()
{
    CustInvoiceTrans custInvoiceTrans;
    SalesPrice salePrice;
    Qty qty;
    while(queryRun.next())
    {
        custInvoiceTrans = queryRun.get(tableNum(CustInvoiceTrans));
        salesPrice += custInvoiceTrans.SalesPrice;
        qty += custInvoiceTrans.Qty;
    }
    info(strFmt("avg is %1", salesPrice/qty));
}

当我尝试 运行 class 时,我收到 queryRun 未初始化的消息。但是我确实在 initParmDefault() 中初始化了 queryRun,从训练 material 中可以看出,RunBase 框架在初始化 RunBase 的新对象时调用了 initPARmDEfault() 方法。

谁能帮我指出我做错了什么?

RunBase 框架没有 queryRun 变量(这就是为什么你必须在 class 声明中定义变量)。相反,它使用方法 queryRun 来获取 QueryRun 实例。此方法在 class RunBase 和 returns null 中实现,进而导致 "queryRun not initialized" 消息。

要解决此问题,您必须覆盖 class 中的 queryRun 方法,以便 returns 您的 class 的 queryRun 变量而不是 null。有关示例,请参阅 class Tutorial_RunbaseForm

请注意,使用 RunBase Framework is deprecated for AX 2012. Use the SysOperation Framework 代替。