Adr*_*rià 6 ax axapta dynamics-ax-2009
我修改了InventTable表单,以便用户可以根据默认订单设置设置表单中的"已停止"状态过滤项目.根据两个复选框的值,他们会获得"可购买"商品,"可销售"商品,所有商品或已阻止商品的列表,以供销售或购买.
我在代码中添加了InventItemSalesSetup和InventItemPurchSetup数据源,并在用户选中或取消选中复选框时启用或禁用它们.
除非禁用其中一个数据源,否则一切正常.然后"高级过滤/排序"选项停止工作.我收到错误:"数据源未启用".
该错误来自SysQueryForm表单的方法"saveCueEnabled".当它打电话:
if (!CueRun::canSaveQueryAsCue(this.args().caller()))
return false;
Run Code Online (Sandbox Code Playgroud)
哪个电话:
static boolean canSaveQueryAsCue(QueryRun qr)
{
int numOfDataSources, i;
QueryBuildDataSource ds;
Query q;
Common cursor;
;
if (!qr)
return false;
q = qr.query();
if (!q)
return false;
numOfDataSources = q.dataSourceCount();
for(i = 1; i <= numOfDataSources; i++)
{
ds = q.dataSourceNo(i);
if(ds.dynalinkCount() > 0)
return false;
// Check if it is temp
cursor = qr.getNo(i);
if (cursor.dataSource() && cursor.isTmp())
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
当它获取查询中的数据源数量时,"dataSourceCount"方法也会返回带有已禁用数据源的计数,当它获取循环中已禁用数据源的QueryBuildDataSource时,会得到一个空DS并且当它崩溃时崩溃它检查它是否是临时表.
我已经解决了在"saveCueEnabled"代码上添加额外if的问题,但我想知道是否有一种方法可以启用/禁用数据源而不会出现此错误.
我希望我能很好地解释自己,谢谢!
小智 4
我能想到的唯一解决方案要求您修改 canSaveQueryAsQue()。
对 for 循环的更新很简单,应该可以解决您的问题。
for(i = 1; i <= numOfDataSources; i++)
{
ds = q.dataSourceNo(i);
if(ds && ds.dynalinkCount() > 0)
return false;
// Check if it is temp
cursor = qr.getNo(i);
if (cursor.dataSource() && cursor.isTmp())
return false;
}
Run Code Online (Sandbox Code Playgroud)
我没有测试过这段代码,但我在其他情况下使用过类似的代码。希望有帮助!