X ++在报表的表单中传递当前选定的记录

wil*_*ill 5 report x++ axapta

我试图让这个问题听起来尽可能清晰.

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

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

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

如果有人能指出我正确的方向,我会非常感激.

wil*_*ill 2

这是我用于解决此问题的解决方案;

\n\n

报表上的两种方法,以便当在表单上多重选择字段时,将值传递到过滤器对话框;

\n\n
private void setQueryRange(Common _common)\n    {\n    FormDataSource              fds;\n\n    LogisticsControlTable       logisticsTable;\n\n    QueryBuildDataSource        qbdsLogisticsTable;\n    QueryBuildRange             qbrLogisticsId;\n    str                         rangeLogId;\n\n    set                         logIdSet    = new Set(Types::String);\n\n    str addRange(str _range, str _value, QueryBuildDataSource _qbds, int _fieldNum, Set _set    =       null)\n    {\n        str             ret = _range;\n        QueryBuildRange qbr;\n        ;\n\n        if(_set && _set.in(_Value))\n        {\n            return ret;\n        }\n\n        if(strLen(ret) + strLen(_value) + 1 > 255)\n        {\n            qbr = _qbds.addRange(_fieldNum);\n            qbr.value(ret);\n            ret = \'\';\n        }\n\n        if(ret)\n        {\n            ret += \',\';\n        }\n\n        if(_set)\n        {\n            _set.add(_value);\n        }\n\n        ret += _value;\n        return ret;\n    }\n    ;\n\n    switch(_common.TableId)\n    {\n        case tableNum(LogisticsControlTable):\n\n            qbdsLogisticsTable = element.query().dataSourceTable(tableNum(LogisticsControlTable));\n            qbrLogisticsId     = qbdsLogisticsTable.addRange(fieldNum(LogisticsControlTable, LogisticsId));\n\n            fds = _common.dataSource();\n\n            for(logisticsTable = fds.getFirst(true) ? fds.getFirst(true) : _common;\n                logisticsTable;\n                logisticsTable = fds.getNext())\n            {\n                rangeLogId = addrange(rangeLogId, logisticsTable.LogisticsId, qbdsLogisticsTable, fieldNum(LogisticsControlTable, LogisticsId),logIdSet);\n            }\n\n            qbrLogisticsId.value(rangeLogId);\n            break;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

// 这设置了查询并获取将它们传递到范围的值,即“SO0001、SO0002、SO000\xc2\xa3...

\n\n

第二种方法如下;

\n\n
private void setQueryEnableDS()\n{\n    Query           queryLocal = element.query();\n    ;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 init 方法中这也是必需的;

\n\n
public void init()\n{\n    ;\n    super();\n\n    if(element.args() && element.args().dataset())\n    {\n        this.setQueryRange(element.args().record());\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n