25.03.2016, 12:43 | #1 |
Участник
|
lookup в полях диалоговой формы в ssrs отчетах.
Добрый день, уважаемые форумчане. Объясните пожалуйста, как правильно делать lookup в полях диалоговой формы в ssrs отчетах.
есть поле DialogField dlgResponsibility; при выборе нужно отобразить 2 поля из таблицы OfficialsTable. Это поля Name(тип - str, extDT - Name) и Position(тип - enum, enumType - OffPosition); и при выборе поля передать в отчет значение поля Position. Сейчас отображается только значение поля Position. С АХ работаю недавно, никак не получается это реализовать. Вот код метода main RC класса. X++: public static void main(Args _args) { CorporateIncomeTaxRC controller = new CorporateIncomeTaxRC(); Dialog dlg; DialogField dlgResponsibility; OffPosition responsibility; ; dlg = new Dialog(); dlgResponsibility = dlg.addField(enumStr(OffPosition)); controller.parmArgs(_args); if(dlg.run()) { responsibility = dlgResponsibility.value(); controller.parmResponsibility(responsibility); Controller.parmReportName(ssrsReportStr(CorporateIncomeTax, Design)); controller.parmShowDialog(false); controller.startOperation(); |
|
25.03.2016, 12:52 | #2 |
Участник
|
DialogField dlgField;
; dlgField= dlg.addField(Field);
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
25.03.2016, 13:02 | #3 |
Участник
|
Посмотрите на UIBuilder классы, они для подобных целей и были сделаны. В стандарте много готовых примеров.
Ну или вот ссылочка https://community.dynamics.com/ax/b/...namics-ax-2012 |
|
25.03.2016, 13:11 | #4 |
Участник
|
DialogField dlgField;
; dlgField= dlg.addField(Field); Или я не правильно понял, или это добавление еще одного поля. А мне нужно на одном выпадающем поле отображать значение двух полей из таблицы. |
|
25.03.2016, 13:17 | #5 |
Участник
|
Извиняюсь, это я не так понял.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу) |
|
25.03.2016, 13:21 | #6 |
Участник
|
Цитата:
А мне нужно на одном выпадающем поле отображать значение двух полей из таблицы
Посмотрите ссылку, которую я привел выше. Вам нужно сделать по аналогии. |
|
25.03.2016, 13:44 | #7 |
Участник
|
|
|
28.03.2016, 13:30 | #8 |
Участник
|
В lookuap методах через UIBuilder классы я разобрался. Спасибо.
Возник еще один вопрос. Можно формировать диалоговые окна с лукапамы благодаря RunBase классу. А как из него запустить ssrs отчет? Что то никак не получается. |
|
29.03.2016, 12:12 | #9 |
Участник
|
Цитата:
В диалоговом окне есть 4 поля, из них для 2 делается лукап. одно из них работает правильно. А вот в другом лукап не отрабатывает. Подскажите пожалуйста что я сделал не так. весь день сижу, не могу понять Вот сам код класса UIbilder CodePublicLookup отрабатывает ResponsibilityLookup нет. Ставил в нем брекпоинт, даже не заходит X++: class CustTransOpenRptUIBuilder extends SrsReportDataContractUIBuilder { DialogField dialogReportDate; DialogField dialogOrderNumber; DialogField dialogResponsibility; DialogField dialogCodePublic; } public void build() { CustTransOpenRptContract rdpContract = this.dataContractObject() as CustTransOpenRptContract; dialogReportDate = this.addDialogField(methodStr(CustTransOpenRptContract, parmReportDate), rdpContract); dialogOrderNumber = this.addDialogField(methodStr(CustTransOpenRptContract, parmOrderNumber), rdpContract); dialogResponsibility = this.addDialogField(methodStr(CustTransOpenRptContract, parmResponsibility), rdpContract); dialogCodePublic = this.addDialogField(methodStr(CustTransOpenRptContract, parmCodePublic), rdpContract); } public void CodePublicLookup(FormStringControl _ctrl) { Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildRange queryBuildRange; SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(TaxAuthorityAddress), _ctrl); sysTableLookup.addLookupField(fieldNum(TaxAuthorityAddress, GniCode_RU)); //sysTableLookup.addLookupField(fieldNum(TaxAuthorityAddress, Name)); queryBuildDataSource = query.addDataSource(tableNum(TaxAuthorityAddress)); //queryBuildRange = queryBuildDataSource.addRange(fieldNum(TaxAuthorityAddress, AccountNum)); //queryBuildRange.value("Zhed-000006"); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } public void ResponsibilityLookup(FormStringControl _ctrl) { Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildRange queryBuildRange; SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(OfficialsTable_RU), _ctrl); sysTableLookup.addLookupField(fieldNum(OfficialsTable_RU, ReportType)); //sysTableLookup.addLookupField(fieldNum(TaxAuthorityAddress, Name)); queryBuildDataSource = query.addDataSource(tableNum(OfficialsTable_RU)); queryBuildRange = queryBuildDataSource.addRange(fieldNum(OfficialsTable_RU, Position)); queryBuildRange.value(enum2str(OffPosition_RU::Responsible)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } public void postRun() { //Dialog dialogLocal = this.dialog(); DialogField dialogResponsibilityPR; DialogField dialogCodePublicPR; super(); //dialogLocal.dialogForm().formRun().controlMethodOverload(false); //dialogLocal.dialogForm().formRun().design().caption("Customer open transactions"); //Use a label dialogResponsibilityPR = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(CustTransOpenRptContract, parmResponsibility)); dialogResponsibilityPR.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(CustTransOpenRptUIBuilder, ResponsibilityLookup), this); dialogCodePublicPR = this.bindInfo().getDialogField(this.dataContractObject(), methodStr(CustTransOpenRptContract, parmCodePublic)); dialogCodePublicPR.registerOverrideMethod(methodStr(FormStringControl, lookup), methodStr(CustTransOpenRptUIBuilder, CodePublicLookup), this); } X++: [ DataContractAttribute, SysOperationContractProcessingAttribute(classStr(CustTransOpenRptUIBuilder)) ] class CustTransOpenRptContract { TransDate reportDate; OrderNum_KZ orderNumber; OffReportType_RU responsibility; GniCode_RU codePublic; } [ DataMemberAttribute('codePublic') ] public GniCode_RU parmCodePublic(GniCode_RU _value= codePublic) { codePublic = _value; return codePublic; } [ DataMemberAttribute('responsibility') ] public OffReportType_RU parmResponsibility(OffReportType_RU _value = responsibility) { responsibility = _value; return responsibility; } //функции даты и ордер нам не привожу. Они аналогичные. |
|
30.03.2016, 21:08 | #10 |
Участник
|
В ssrs есть "фича" которая кеширует диалог
Лечится так: Зайти на репорт сервер через браузер http://100.0.0.1/Reports/ (ip подставить своего), найти отчет, удалить его там и задеплоить заново из студии. Чтобы наверняка, еще можно сбросить кеш и рестартануть reporting service службу |
|
30.03.2016, 21:28 | #11 |
Участник
|
Цитата:
CodePublicLookup отрабатывает
ResponsibilityLookup нет. Ставил в нем брекпоинт, даже не заходит ResponsibilityLookup строится на типе OffReportType_RU. Конечно не будет отрабатывать. Это же base enumeration. Там сразу биндятся все значения энама и лукап даже не используется. Точно так же как и в обычных формах. И точно так же как в обычных формах вам нужно будет финтить ушами, если хотите показывать не все значения из base enumeration. Вам точно нужно показывать только определенные значения OffReportType_RU или не принципиально? |
|