运行库实现
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 代替。
我在学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 代替。