AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.03.2016, 12:43   #1  
Skolos is offline
Skolos
Участник
 
56 / 13 (1) ++
Регистрация: 06.01.2016
Post 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  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
DialogField dlgField;
;

dlgField= dlg.addField(Field);
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 25.03.2016, 13:02   #3  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Посмотрите на UIBuilder классы, они для подобных целей и были сделаны. В стандарте много готовых примеров.

Ну или вот ссылочка https://community.dynamics.com/ax/b/...namics-ax-2012
Старый 25.03.2016, 13:11   #4  
Skolos is offline
Skolos
Участник
 
56 / 13 (1) ++
Регистрация: 06.01.2016
DialogField dlgField;
;

dlgField= dlg.addField(Field);


Или я не правильно понял, или это добавление еще одного поля. А мне нужно на одном выпадающем поле отображать значение двух полей из таблицы.
Миниатюры
Нажмите на изображение для увеличения
Название: Пример.png
Просмотров: 468
Размер:	37.2 Кб
ID:	9554  
Старый 25.03.2016, 13:17   #5  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от Skolos Посмотреть сообщение
Или я не правильно понял, или это добавление еще одного поля. А мне нужно на одном выпадающем поле отображать значение двух полей из таблицы.
Извиняюсь, это я не так понял.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 25.03.2016, 13:21   #6  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Цитата:
А мне нужно на одном выпадающем поле отображать значение двух полей из таблицы
. То что у вас показывается сейчас вообще не имеет никакого отношения к таблице OfficialsTable. Вы просто показываете все значения из энама.
Посмотрите ссылку, которую я привел выше. Вам нужно сделать по аналогии.
Старый 25.03.2016, 13:44   #7  
Skolos is offline
Skolos
Участник
 
56 / 13 (1) ++
Регистрация: 06.01.2016
Цитата:
Сообщение от greench Посмотреть сообщение
. То что у вас показывается сейчас вообще не имеет никакого отношения к таблице OfficialsTable. Вы просто показываете все значения из энама.
Посмотрите ссылку, которую я привел выше. Вам нужно сделать по аналогии.
Спасибо) Уже смотрю и делаю.
Старый 28.03.2016, 13:30   #8  
Skolos is offline
Skolos
Участник
 
56 / 13 (1) ++
Регистрация: 06.01.2016
В lookuap методах через UIBuilder классы я разобрался. Спасибо.
Возник еще один вопрос. Можно формировать диалоговые окна с лукапамы благодаря RunBase классу. А как из него запустить ssrs отчет? Что то никак не получается.
Старый 29.03.2016, 12:12   #9  
Skolos is offline
Skolos
Участник
 
56 / 13 (1) ++
Регистрация: 06.01.2016
Цитата:
Сообщение от Skolos Посмотреть сообщение
Спасибо) Уже смотрю и делаю.
Цитата:
Сообщение от greench Посмотреть сообщение
. То что у вас показывается сейчас вообще не имеет никакого отношения к таблице OfficialsTable. Вы просто показываете все значения из энама.
Посмотрите ссылку, которую я привел выше. Вам нужно сделать по аналогии.
Вроде и сделал все по аналогии. Но не могу разобраться в паре вещей.
В диалоговом окне есть 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  
nnrvsn is offline
nnrvsn
Участник
 
18 / 11 (1) +
Регистрация: 16.02.2012
В ssrs есть "фича" которая кеширует диалог
Лечится так: Зайти на репорт сервер через браузер http://100.0.0.1/Reports/ (ip подставить своего), найти отчет, удалить его там и задеплоить заново из студии.
Чтобы наверняка, еще можно сбросить кеш и рестартануть reporting service службу
Старый 30.03.2016, 21:28   #11  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Цитата:
CodePublicLookup отрабатывает
ResponsibilityLookup нет. Ставил в нем брекпоинт, даже не заходит
Так, стоп.

ResponsibilityLookup строится на типе OffReportType_RU. Конечно не будет отрабатывать. Это же base enumeration. Там сразу биндятся все значения энама и лукап даже не используется. Точно так же как и в обычных формах. И точно так же как в обычных формах вам нужно будет финтить ушами, если хотите показывать не все значения из base enumeration.

Вам точно нужно показывать только определенные значения OffReportType_RU или не принципиально?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
bojensen: Filter Second lookup based on First Value – Ax 2012 SSRS | Vasanth Arivali’s Space Blog bot DAX Blogs 0 24.09.2015 18:11
vasantharivali: Filter Second lookup based on First Value – Ax 2012 SSRS Blog bot DAX Blogs 0 24.09.2014 13:11
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:07.