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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2008, 11:00   #1  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
финансовые аналитики в диалог
Добрый день,

Подскажите, если я использую RunBaseBatch как базовой класс для создания диалога, как можно добавить в диалог поле Финансовые аналитики раздельно ? Т.е 3 поля в диалог типа Dimension/

Спасибо.
Старый 01.07.2008, 11:06   #2  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Dimensions
__________________
Best Regards,
Roman
За это сообщение автора поблагодарили: longson (1).
Старый 01.07.2008, 14:55   #3  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Интересно стало.

Вот один из способов достижения результата. Код, правда, не дописан. Но как академический пример сойдет.

X++:
#Define.underline("_")
#Define.fieldNameTemplate("\%1_\%2")
static server void glibs(Args _args)
{
    Dialog              dialog = new Dialog();
    DialogField         dialogField;
    FormStringControl   formStringControl;
    FieldName           fieldName;
    Counter             pos,
                        i;
    ;

    dialogField = dialog.addField(typeid(Dimension));
    fieldName = dialogField.name();
    pos = strfind(fieldName, #underline, 1, 9999);
    if (pos)
    {
        fieldName = substr(fieldName, 1, pos - 1);
    }
    for (i = 1; i <= 3; i++)
    {
        if (i != SysDimension::Department + 1)
        {
            formStringControl = dialogField.control(strfmt(#fieldNameTemplate, fieldName, i));
            formStringControl.visible(false);
        }
    }
    formStringControl = dialogField.control(dialogField.name());
    dialog.run();

}
Есть вариант написать альтернативный .addField() в классе Dialog.

Но это теория. Просто хотелось разобраться и узнать что-то новое. На практике лучше так не делать. Проще создать расширенный тип. Я так делаю всегда.
__________________
С уважением,
glibs®
Старый 01.07.2008, 15:20   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Т.е 3 поля в диалог типа Dimension
Цитата:
Проще создать расширенный тип. Я так делаю всегда.
Быть может лучше использовать форму для диалога, в качестве датасорса которой указать таблицу TmpDimension. Это предотвратит модификацию подобных диалогов при появлении новых аналитик в системе.
Старый 01.07.2008, 15:29   #5  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Так все три (точнее все имеющиеся сразу) аналитики можно и так добавить. В 4.0, по крайней мере.

Я думал вопрос в том, как добавить одну.
__________________
С уважением,
glibs®
Старый 01.07.2008, 15:55   #6  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
DialogField.fieldControl([...])
Цитата:
Сообщение от glibs Посмотреть сообщение
Интересно стало.

Вот один из способов достижения результата. Код, правда, не дописан. Но как академический пример сойдет.

X++:
#Define.underline("_")
#Define.fieldNameTemplate("\%1_\%2")
static server void glibs(Args _args)
{
    Dialog              dialog = new Dialog();
    DialogField         dialogField;
    FormStringControl   formStringControl;
    FieldName           fieldName;
    Counter             pos,
                        i;
    ;

    dialogField = dialog.addField(typeid(Dimension));
    fieldName = dialogField.name();
    pos = strfind(fieldName, #underline, 1, 9999);
    if (pos)
    {
        fieldName = substr(fieldName, 1, pos - 1);
    }
    for (i = 1; i <= 3; i++)
    {
        if (i != SysDimension::Department + 1)
        {
            formStringControl = dialogField.control(strfmt(#fieldNameTemplate, fieldName, i));
            formStringControl.visible(false);
        }
    }
    formStringControl = dialogField.control(dialogField.name());
    dialog.run();

}
Есть вариант написать альтернативный .addField() в классе Dialog.

Но это теория. Просто хотелось разобраться и узнать что-то новое. На практике лучше так не делать. Проще создать расширенный тип. Я так делаю всегда.
Для академичности примера лучше воспользоваться методом dialogField.fieldControl() для перебора диалоговых полей EDT Dimension, вариация приведенного job на эту тему:
X++:
static void jobDimensionFields(Args _args)
{
    Dialog              dialog              ;
    DialogField         dialogFieldDimension;
    FormStringControl   formStringControl   ;
    Counter             idx                 ;
    ;
    
    dialog = new Dialog() ;
    dialogFieldDimension = dialog.addField(typeId(Dimension));
 
    for( idx=2; idx<=Dimensions::numOfDimensions(); idx++ )
    {
        formStringControl = dialogFieldDimension.fieldControl(idx) ;
        formStringControl.visible( false ) ;
    }
 
    dialog.run() ;
}
За это сообщение автора поблагодарили: glibs (1).
Старый 02.07.2008, 03:23   #7  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Спасибо за ответы. Собственно я сделал следующим образом

В методе dialog бдут

X++:
dlgDimension = dialog.addFieldValue(typeId(Dimension), dimension);
где dimension - переменная типа Dimension объявлена глобально в классе.

ну и естественно в методе getFromDialog будет

X++:
dimension = dlgDimension.value();
Тогда в диалог будут добавлены 3 поля - для каждой финансовой аналитики одно поле.

После этого в классе, где нужно использовать значения выбранной аналитики, просто пишу

X++:
str dimension1, dimension2, dimension3;

dimension1 = dimension[1];
dimension2 = dimension[2];
dimension3 = dimension[3];
Мне больше нравится этот вариант, т.к не требуется создавать новые EDT. Хотя, это для моей задачи. Возможно в других ситуациях реально новые EDT просто необходимы.

Последний раз редактировалось longson; 02.07.2008 в 03:39.
Теги
аналитика

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Финансовые аналитики jiller DAX: Программирование 18 14.07.2011 14:33
Код новой фин. аналитики DAX 4.0 Ivanhoe DAX: Программирование 4 13.05.2008 15:23
Сравнение в разрезе складской аналитики. longson DAX: Программирование 3 14.01.2008 13:45
Учёт остатков в разрезе фин. аналитики miklenew DAX: Программирование 11 06.11.2007 20:01
Допустимо ли так использовать фин. аналитики kosenkov DAX: Функционал 5 26.02.2006 18:17

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

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

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