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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2008, 16:27   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
! метод Modified к stringControl
в методе RUN класса я генерируется форма с гридом. в родителе формы я положил источник , связанный с временной таблицей, которая запоняется в RUN класса.

Вопрос:
Как к stringControl с именем "NameCtrl" добавить метод modified и по значению поля "NameCtrl" (выпадающий список, выбор пользователя) присвоить значение полю comboBoxControl с именем "TitleCtrl" ?

вот код

X++:
void run()
{
    Form            form = new Form(formStr(InventJournalPrint_RU));
    List            reportList = List::create(inventJournalReportPackable.packReportList());
    ListIterator    it = new ListIterator(reportList);
    DictEnum        dictEnum = new DictEnum(enumNum(InventJournalReportType_RU));

    FormBuildDataSource         formBuildDataSource;
    FormDataSource              formDataSource;
    InventJournalReport_RU      report;
    FormBuildTabControl         tabControl;
    FormBuildTabPageControl     pageControl;
    FormBuildGridControl        gridControl;
    FormBuildGroupControl       groupControl;
    FormBuildStringControl      stringControl;
    FormBuildComboBoxControl    comboBoxControl;
  
    FormBuildRealControl        realControl;
  
    Args                        args;
    FormRun                     formRun;
    QueryBuildDataSource        qbds;
    Str                         dsName;

    #define.DataGroupName("NamePosition");

    if (reportList.empty())
        return;

    control2Class = new Map(Types::Integer, Types::Class);

    groupControl = form.addControl(FormControlType::Group, "");
    groupControl.widthMode(1);
    groupControl.heightMode(1);
    groupControl.frameType(1);

    tabControl   = groupControl.addControl(FormControlType::Tab, "");
    tabControl.widthMode(1);
    tabControl.heightMode(1);

    while (it.more())
    {
        report = it.value();

        if (! report)
        {
            it.next();
            continue;
        }
     
        dsName = dictEnum.index2Symbol(report.reportType());

        formBuildDataSource = form.addDataSource(dsName);
        formBuildDataSource.table(tableNum(OfficialsTrans_RU));

        pageControl = tabControl.addControl(FormControlType::TabPage, "");
        pageControl.caption(report.description());
        pageControl.dataSource(dsName);
        pageControl.widthMode(1);
        pageControl.heightMode(1);
        gridControl = pageControl.addControl(FormControlType::Grid, "");
        gridControl.widthMode(1);
        gridControl.heightMode(1);
        gridControl.dataSource(dsName);

 
        realControl     = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, LineNum));
        realControl.name("LineNum");
 
        comboBoxControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Position));
        comboBoxControl.name("PositionCtrl");

        control2Class.insert(comboBoxControl.id(), report);

        stringControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Name));
        stringControl.name("NameCtrl");
        stringControl.lookupButton(2);


        control2Class.insert(stringControl.id(), report);

        comboBoxControl = gridControl.addDataField(formBuildDataSource.id(), fieldNum(OfficialsTrans_RU, Title));
        comboBoxControl.name("TitleCtrl");

        control2Class.insert(comboBoxControl.id(), report);

        it.next();
    }

    args = new Args();
    args.object(form);
    args.caller(this);

    formRun         = classFactory.formRunClass(args);
    form            = formRun.form();

    formRun.init();

    it.begin();

    while (it.more())
    {
        report = it.value();
   
        if (! report)
        {
            it.next();
            continue;
        }
   

        dsName = dictEnum.index2Symbol(report.reportType());

        formDataSource = formRun.dataSource(dsName);

        qbds = formDataSource.query().dataSourceName(dsName);
        qbds.addRange(fieldNum(OfficialsTrans_RU, OffsessionId)).value(report.getOffSessionId());
        qbds.addRange(fieldNum(OfficialsTrans_RU, reportType)).value(sysQuery::value(InventJournalReport_RU::inventJournalReportType2OffReportType(report.reportType())));
     
        qbds.addSortField(fieldNum(OfficialsTrans_RU, LineNum));

        offSessionId    = report.getOffSessionId(); 
        it.next();
    }

    formRun.run();
    formRun.wait();

}
Старый 18.07.2008, 16:36   #2  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Суть вопроса доконца не понял, но думаю это поможет
Вопрос. как отследить modified на диалоге, который создал динамически?
Старый 18.07.2008, 16:38   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Вызовите следующие методы в run своего класса
X++:
this.controlMethodOverload(true);
this.controlMethodOverloadObject(this);
И создайте метод с именем NameCtrl_modified. Возвращаемое значение и параметры этого метода должны быть такие же как у стандартного метода modified
Старый 18.07.2008, 17:37   #4  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Lucky13

код вставляем сюда?
Цитата:

args = new Args();
args.object(form);
args.caller(this);

formRun = classFactory.formRunClass(args);
form = formRun.form();

formRun.controlMethodOverload(true);
formRun.controlMethodOverloadObject(this);

formRun.init();
в этом классе создал public void NameCtrl_modified
но что то не понимаю как полчить значение из NameCtrl и через select присвоить нове в TitleCtrl
Старый 18.07.2008, 17:52   #5  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
в классе InventJournalPrintForm_RU в методе run прописал

formRun.controlMethodOverload(true);
formRun.controlMethodOverloadObject(this);

создал метод public void NameCtrl_modified
в нем нужно найти по таблице OfficialsTrans_RU значение Title
имея name и offSessionId

чет я не соображу как будет выглядеть NameCtrl_modified
Как получить значение с контрола NameCtrl ?
Старый 18.07.2008, 18:25   #6  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
посмотрите \Forms\tutorial_Form_AddControl
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 21.07.2008, 16:24   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Как дата сорсу в динамически созданной форме в поле присвоить значение?

formRun.dataSource(identifierStr(OfficialsTrans_RU)).object(fieldNum(OfficialsTrans_RU, Title))

что нибудь типа такого есть datasource.object(fieldnum(Table, Field)).value();?

Последний раз редактировалось Poleax; 21.07.2008 в 16:30.
Старый 21.07.2008, 16:29   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Может так?

X++:
formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().(fieldNum(OfficialsTrans_RU, Title)) = "My Title";
formRun.dataSource(identifierStr(OfficialsTrans_RU)).refresh();
Старый 21.07.2008, 17:00   #9  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Цитата:
formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().(fieldNum(OfficialsTrans_RU, Title)) = "My Title";
Ошибка: Поле должно быть элементом данных, допускающим использование в операторе присвоения.

Axapta 3.

Может какой другой способ присвоить значение полю из DataSource ?
Старый 21.07.2008, 17:06   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
Как дата сорсу в динамически созданной форме в поле присвоить значение?
Перестаньте маяться дурью и просто нарисуйте форму в AOT.
Давно бы уже решили задачу.
__________________
полезное на axForum, github, vk, coub.
Старый 21.07.2008, 17:10   #11  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Сергей форму рисовать не будет.
Я просто допиливаю класс InventJournalPrintForm_RU

осталось то просто присвоить значение в таблицу из DataSource. если знаешь помоги.. а то что с формой делать и так понятно.
Старый 21.07.2008, 17:26   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
осталось то просто присвоить значение в таблицу из DataSource.
Сама постановка неправильна.
Сам датасорс управляет записью таблицы. Записывать в таблицу в обход датасорса - моветон и четкая установка нарваться на deadlock.

Чтобы записать "значение в таблицу" нужно создать переменная типа таблица, найти запись по recId и обновить эту запись.

{
myTable myTable;

myTable = MyTable::findrecid(myDataSource.cursor().recid, true);
myTable.myValue = myValue;
myTable.update();
}

Переформулируйте задачу. Убедитесь, что у вас нет проблем с пониманием.
__________________
полезное на axForum, github, vk, coub.
Старый 21.07.2008, 17:43   #13  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
так то оно так только таблички OfficialsTrans_RU нет метода findrecid
и formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId ни чего не возвращает .. пусто.

данная код вызывает из метода modified одного из поля на гриде.
На гриде создается строка и при изменении одно поля друго должно заполняться автоматически.

С табличкой хорошо работать когда там есть данные а тут еще строка не сохранилась из грида..

Последний раз редактировалось Poleax; 21.07.2008 в 17:48.
Старый 21.07.2008, 17:54   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Poleax Посмотреть сообщение
так то оно так только таблички OfficialsTrans_RU нет findrecid
и formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId ни чего не возвращает .. пусто.
Боже, раз нет метода findrecid, напишите запрос
{
OfficialsTrans_RU OfficialsTrans_RU;

select forupdate OfficialsTrans_RU where OfficialsTrans_RU.recId == myDataSource.cursor().recid;
OfficialsTrans_RU.myValue = myValue;
OfficialsTrans_RU.update();
}

Насчет formRun.dataSource(identifierStr(OfficialsTrans_RU)).cursor().RecId
А с чего вы зяли, что в вашей динамической форме есть датасорс, который НАЗВАЕТСЯ также как и таблица? Вы точно уверены, что указывали название ДАТАСОРСА при создании?

Делайте formRun.dataSource(N).cursor().RecId, где N - номер датасорса в форме. Или четко задавайте название датасорса при создании вашей динамической формы.

Еще раз - перестаньте заниматься фигней (динамическим программированием), начните наконец решать задачу (нарисуйте форму с методами, просто вызовите ее в вашем методе)
__________________
полезное на axForum, github, vk, coub.
Старый 21.07.2008, 18:10   #15  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
mazzy респект за наставления и поучения. Фигней постараюсь больше не заниматься.

Все нормально, вопрос закрыт.

З.Ы. интересно было выпендрится динамическим программированием... попытка удалась.
Старый 21.07.2008, 18:39   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Я все-таки повторю
Цитата:
Сообщение от mazzy Посмотреть сообщение
Записывать в таблицу в обход датасорса - моветон и четкая установка нарваться на deadlock.
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно ли динамически созданному контролу CheckBox прикрутить метод modified? Poleax DAX: Программирование 4 31.03.2009 19:58
lookup не закрывается до завершения метода modified Morpheus DAX: Программирование 4 09.08.2006 16:43
Транзакция в modified Gad DAX: Программирование 1 29.11.2005 19:54
Передача массива VARIANTов в Automation метод Maximin DAX: Программирование 0 09.10.2002 19:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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