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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2008, 01:12   #1  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Добавление новых строк в SalesLine
Пришлось написать коротенькую шпаргалку, у которой две цели:
1) При добавлении новых полей в SalesLine и SalesTable поддерживать стандартный механизм обновления строк из заголовка.
2) Поддерживать обновление новых полей при работе с AIF.

Не думаю, что это великие знания, но может кому-нибудь полезно будет, раз мне это было полезно.

Собрано из двух статей:
- (http://www.fotovallescrivia.it/publi...rder-lines.htm
- http://axapta.mazzy.ru/lib/salestable2line/

На английском

1. Add new fields to SalesTable and place new fields which should be updated in SalesLine to group HeaderToLineUpdate.

2. Add new fields to SalesLine.

3 How to use standard mechanism to update fields in Salesline from Salestable
3.1 SalesTable2LineField class, modify the LineUpdateDescription() method. Add the new fields from SalesTable you want to copy to SalesLines. SalesTable2LineField::lineDescription(). The text line will be used in the dialog for lines updating.
eg:

X++:
case fieldnum(salesTable, NewField)     :
            return fieldid2pName(tableNum(SalesLine), fieldnum(salesLine,  NewField));
            break;
3.2 Reinitialize table SalesTable2LineParameters. Clear this table; next create and run job which has one command: SalesTable2LineParameters::initiate();

3.3 Add instructions into method SalesLineType::initFromSalesTable() to initialize values in order lines used by default. The method will be called when you create a new line.

4. Next for AIF:

4.1 AxSalesTable class: Add a parameter set and get method

eg:

X++:
public NewField NewField (NewField  _NewField  = Value)
{
    if (!prmisdefault(_NewField ))
    {
        this.setField(fieldNum(SalesTable, NewField ), _NewField );
    }
    return SalesTable.NewField ;
}
and

X++:
protected void setNewField ()
{
    if (this.isMethodExecuted(funcName()))
    {
        return;
    }
    if (this.isFieldSetExternally(fieldNum(SalesTable, NewField )))
    {
        if (this.isSetMethodsCalledFromSave())

        {
            return;
        }
    }
    else
    {
        if (this.isFieldSet(fieldNum(SalesTable, NewField )))
        {
            return;
        }
        if (!this.NewField ())
        {
            if (this.isSetMethodsCalledFromSave())
            {
                this.NewField (Value);
            }
        }
    }
}

4.2 Do the same for class axSalesLine:

eg:

X++:
public NewField NewField(NewField _NewField= Value)
{
    if (!prmisdefault(_NewField))
    {
        this.setField(fieldNum(SalesLine, NewField), _NewField);
    }
    return salesLine.NewField;
}
And

X++:
protected void SetNewField()
{
    if (this.isMethodExecuted(funcName(), fieldNum(SalesLine, NewField)))
    {
        return;
    }
    this.setAxSalesTableFields();
    if (this.isAxSalesTableFieldsSet() || 
this.AxSalesTable().isFieldModified(fieldNum(SalesTable, NewField)))
    {
        this.NewField(this.AxSalesTable().NewField());
    }
}
4.3 Adjust the method SetTableFields() in the axSalesLine class. Add the call of the new method NewField().
За это сообщение автора поблагодарили: Logger (1), jeky (1).
Старый 29.07.2008, 09:37   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Если уж идти до конца, то пропущено добавление в метод setTableFields класса AxXXXTable вызова нового метода установки:
this.setNewField();
И, насколько я помню, метод должен называться не NewField, а parmNewField
Старый 29.07.2008, 10:12   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Вообще для генерации AIF объектов есть визард - я не уверен, что он может добавлять в существующие классы, но, по крайней мере, можно посмотреть его код или даже доработать
Старый 29.07.2008, 21:59   #4  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Цитата:
Сообщение от belugin Посмотреть сообщение
Вообще для генерации AIF объектов есть визард - я не уверен, что он может добавлять в существующие классы, но, по крайней мере, можно посмотреть его код или даже доработать
Точно может, проверено. Правда не понятно как он поступает с модифицированными методами.
Старый 29.07.2008, 22:01   #5  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Если уж идти до конца, то пропущено добавление в метод setTableFields класса AxXXXTable вызова нового метода установки:
this.setNewField();
И, насколько я помню, метод должен называться не NewField, а parmNewField
Да, действительно parmNewField, a про SetTableFields:
4.3 Adjust the method SetTableFields() in the axSalesLine class. Add the call of the new method NewField().
Старый 04.02.2009, 17:12   #6  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
вопрос:
если я хочу синхронизировать просто обновление полей в строках в зависимости от "шапки", то как будет "красивее/правильнее"?
выполнить пункт 3
или добавить метод на форме и вызвать его в modified
+ маленький подвопрос (сейчас реализовала с методом на форме) обновление поля происходит только после перехода на любое др. поле или нажатия Ctrl+S - это нормально или всё же надо где-то чего-то дописать?
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 04.02.2009, 17:23   #7  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
:(
Цитата:
Сообщение от jeky Посмотреть сообщение
вопрос:
если я хочу синхронизировать просто обновление полей в строках в зависимости от "шапки", то как будет "красивее/правильнее"?
выполнить пункт 3
или добавить метод на форме и вызвать его в modified
+ маленький подвопрос (сейчас реализовала с методом на форме) обновление поля происходит только после перехода на любое др. поле или нажатия Ctrl+S - это нормально или всё же надо где-то чего-то дописать?
не туда...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Теги
aif, документация, заказ на продажу, как правильно, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Копирование строк из InventJournalTrans в SalesLine Petruccio DAX: Программирование 11 29.09.2006 11:40
Добавление строк в "Фильтр записей" Vby DAX: Программирование 6 05.06.2006 11:31
Добавление строк при изменении значения контрола 36AC DAX: Программирование 3 11.08.2005 12:56
Добавление строк в существующую таблицу! Kolbin_Mihail DAX: Программирование 9 18.03.2005 13:48
Документация . Встроенная. Собственная. Изменение. Добавление новых объектов. Surok DAX: Программирование 0 29.10.2002 16:47

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

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

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