我试图让这个问题听起来尽可能清晰。
基本上,我创建了一个报告,它现在作为menuitem按钮存在,以便报告可以在表单上运行。
我想做的是,能够多选记录,然后当我点击我的按钮运行我的报告时,当前所选记录将被传递到出现的对话框表格(过滤器屏幕)。
我尝试使用与SaleLinesEdit表单相同的方法执行此操作,但没有成功。
如果有人能指出我正确的方向,我会非常感激。
答案 0 :(得分:3)
看看Axaptapedia passing values between forms。这应该对你有帮助。您可能需要修改报表以使用对话框的表单,而不是使用报表的基本对话框方法Here is a good place to start with that!
答案 1 :(得分:3)
只是想添加这个
您可以使用MuliSelectionHelper类非常简单地执行此操作:
MultiSelectionHelper selection = MultiSelectionHelper::createFromCaller(_args.caller());
MyTable myTable = selection.getFirst();
while (myTable)
{
//do something
myTable = selection.getNext();
}
答案 2 :(得分:2)
以下是我用于此问题的解决方案;
报表上的两个方法,以便在表单上多选字段时,将值传递给过滤器对话框;
private void setQueryRange(Common _common)
{
FormDataSource fds;
LogisticsControlTable logisticsTable;
QueryBuildDataSource qbdsLogisticsTable;
QueryBuildRange qbrLogisticsId;
str rangeLogId;
set logIdSet = new Set(Types::String);
str addRange(str _range, str _value, QueryBuildDataSource _qbds, int _fieldNum, Set _set = null)
{
str ret = _range;
QueryBuildRange qbr;
;
if(_set && _set.in(_Value))
{
return ret;
}
if(strLen(ret) + strLen(_value) + 1 > 255)
{
qbr = _qbds.addRange(_fieldNum);
qbr.value(ret);
ret = '';
}
if(ret)
{
ret += ',';
}
if(_set)
{
_set.add(_value);
}
ret += _value;
return ret;
}
;
switch(_common.TableId)
{
case tableNum(LogisticsControlTable):
qbdsLogisticsTable = element.query().dataSourceTable(tableNum(LogisticsControlTable));
qbrLogisticsId = qbdsLogisticsTable.addRange(fieldNum(LogisticsControlTable, LogisticsId));
fds = _common.dataSource();
for(logisticsTable = fds.getFirst(true) ? fds.getFirst(true) : _common;
logisticsTable;
logisticsTable = fds.getNext())
{
rangeLogId = addrange(rangeLogId, logisticsTable.LogisticsId, qbdsLogisticsTable, fieldNum(LogisticsControlTable, LogisticsId),logIdSet);
}
qbrLogisticsId.value(rangeLogId);
break;
}
}
//设置查询并获取将它们传递到范围的值,即“SO0001,SO0002,SO000£...
第二种方法如下;
private void setQueryEnableDS()
{
Query queryLocal = element.query();
;
}
同样在init方法中,这是必需的;
public void init()
{
;
super();
if(element.args() && element.args().dataset())
{
this.setQueryRange(element.args().record());
}
}
希望这有助于将来遇到问题的其他人。