5

我试图让这个问题听起来尽可能清楚。

基本上,我已经创建了一个报告,它现在作为一个 menuitem 按钮存在,以便报告可以在表单之外运行。

我想做的是能够多选记录,然后当我点击我的按钮运行我的报告时,当前选择的记录被传递到出现的对话框表单(过滤屏幕)中。

我尝试使用与 SaleLinesEdit 表单相同的方法来执行此操作,但没有成功。

如果有人能指出我正确的方向,我将不胜感激。

4

3 回答 3

3

看看Axaptapedia 在表单之间传递值。这应该可以帮助你。您可能必须修改您的报表以使用对话框的表单,而不是使用报表的基本对话框方法这是一个很好的起点!

于 2012-04-04T18:16:56.120 回答
3

只是想添加这个

您可以使用 MuliSelectionHelper 类非常简单地执行此操作:

MultiSelectionHelper selection = MultiSelectionHelper::createFromCaller(_args.caller());
MyTable myTable = selection.getFirst();
while (myTable)
{
    //do something
    myTable = selection.getNext();
} 
于 2013-01-30T20:03:37.080 回答
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());
    }
}

希望这对将来遇到我遇到的问题的其他人有所帮助。

于 2012-04-10T12:38:43.920 回答