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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.03.2011, 07:43   #1  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
В чем преимущество ax-классов перед непосредственной работой с таблицами?
Вопрос скорее на понимание.

В последних версиях есть ax-классы, которые являются обертками вокруг соответствующих таблиц. (axSalesTable, axSalesLine, axCustTable, axLedgerJournalTrans и т.п.)

Я как-то привык по старинке работать непосредственно с таблицами.
X++:
SalesTable.clear();
SalesTable.initValue();
SalesTable.initFromCustTable(ct);
...
SalesTable.insert();
И по старинке считал, что ax-классы используются сугубо в web-сервисах для доступа к таблицам. Но судя по наблюдаемому коду, это не так.

==================
Вопрос: а в чем преимущество ax-классов? в чем была задумка авторов, которые придумали эти соглашения по ax-классам?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 26.03.2011, 10:04   #2  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,258 / 228 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Попробуй сделать заказ типа "Заказ" при работе с классами AxSalesTable и AxSalesLine, и напрямую, через таблицы. В первом случае, все складские проводки классы сами сделают, а во втором случае....
__________________
Михаил Андреев, www.amand.ru
Старый 26.03.2011, 10:06   #3  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
Попробуй сделать заказ типа "Заказ" при работе с классами AxSalesTable и AxSalesLine, и напрямую, через таблицы. В первом случае, все складские проводки классы сами сделают, а во втором случае....
во втором - тоже
см. метод SalesLine.insert()
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
За это сообщение автора поблагодарили: Михаил Андреев (4).
Старый 26.03.2011, 10:10   #4  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
413 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Подобные классы использовал всего несколько раз.
При написании кода в C# вызывать один класс через bc.net проще чем объявлять все необходимые объекты, а потом обрабатывать их. Если приложение стандартное - этими классами удобно создавать заказы/закупки и т.п.
На мой взгляд - классы нужны для внешних приложений, создаваемых в C# и работающих через .Net Business Connector.
Старый 26.03.2011, 10:15   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,178 / 4000 (138) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
У меня такое ощущение, что эти классы разрабатывал какой-то выходец из .net-программирования и он пытался сэммулировать привычное наследование для таблиц. Потом в рамках какой-то группы (кажется - EP), использование этих классов вместо таблиц стало стандартом разработки. Но рефакторить остальной код никто не стал, да и другие группы этими классами не пользуются. Так что, на мой взгляд, большого смысла в использовании этой функциональности - нету...
Кстати - интересно как в 2012 с использованием этих классов...
Старый 26.03.2011, 10:18   #6  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
большого смысла в использовании этой функциональности - нету...
"Этой" - какой именно? ax-классов или работой напрямую с таблицами?

Конкретизирую вопрос:
В чем преимущество ax-классов перед непосредственной работой с таблицами ВНУТРИ самой аксапты?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 26.03.2011, 10:24   #7  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
413 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от mazzy Посмотреть сообщение
"Этой" - какой именно? ax-классов или работой напрямую с таблицами?

Конкретизирую вопрос:
В чем преимущество ax-классов перед непосредственной работой с таблицами ВНУТРИ самой аксапты?
1. Есть вероятность что в таком случае на таблицах будут создавать меньше методов, и таблицы не превратятся в "могильники" методов
2. Удобнее управлять местом выполнения кода: клиент или сервер.
3. Возможность написания более "объектно-ориентированного" кода.
Старый 26.03.2011, 10:27   #8  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,178 / 4000 (138) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
"Этой" - какой именно? ax-классов или работой напрямую с таблицами?

Конкретизирую вопрос:
В чем преимущество ax-классов перед непосредственной работой с таблицами ВНУТРИ самой аксапты?
Этой - работы с классами.
Мне кажется - никакого преимущества нету. В принципе - можно для своих новых таблиц наделать аналогичных классов, и некоторую функциональность выкинуть в базовый класс axInternalBase. Но класс этот и так уже достаточно помоечный, и мне кажется что правильнее использовать паттерн с методом type() таблицы, который возвращает соответствующий класс. Можно даже табличное наследование ограниченное реализовать, если у тебя в базовой таблице есть поле типа и метод type() ищет соответствущую таблицу с данными подтипа и в ней вызывает метод type().

В общем - IMHO - за исключением узкой задачи сериализации документов, эти классы не функциональны.
За это сообщение автора поблагодарили: mazzy (2).
Старый 26.03.2011, 10:28   #9  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от kornix Посмотреть сообщение
1. Есть вероятность что в таком случае на таблицах будут создавать меньше методов, и таблицы не превратятся в "могильники" методов
В будущем? А сейчас какое преимущество?

Цитата:
Сообщение от kornix Посмотреть сообщение
2. Удобнее управлять местом выполнения кода: клиент или сервер.
Зачем? таблицы живут только на сервере.

Цитата:
Сообщение от kornix Посмотреть сообщение
3. Возможность написания более "объектно-ориентированного" кода.
э-э-э? это точно не маркетинговый булшит?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 26.03.2011, 10:35   #10  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
413 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
1. Ага, только в будущем
2. Имел ввиду ситуации, как, например, вызов табличного метода из формы. Если в методе написана какая-то логика - она будет выполняться на клиенте. А если вызывать класс - можно выполнить то же на сервере.
3. По идее, если вызывать отовсюду axSalesTable.insert() вместо salesTable.insert() - получается что вставкой записи уже управляет класс. Его удобно дорабатывать, в отличии от модификации табличных методов, которые обычно сильно раздуваются.

P.S.: Согласен с fed, лучше использовать Type классы (SalesLineType и т.п.). Если начать активно использовать ax классы изнутри - это как минимум будет резать глаз и сразу вызывать вопросы

Последний раз редактировалось kornix; 26.03.2011 в 10:37.
Старый 26.03.2011, 10:35   #11  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,178 / 4000 (138) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
Зачем? таблицы живут только на сервере.
Насколько я помню, таблицы живут на том уровне, на котором был выполнен первый select или первый insert. То есть - если у тебя таблица на форме, то все нестатические методы будут вызываться на клиенте.
За это сообщение автора поблагодарили: mifi (-1), kornix (1).
Старый 26.03.2011, 10:42   #12  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
Насколько я помню, таблицы живут на том уровне, на котором был выполнен первый select или первый insert. То есть - если у тебя таблица на форме, то все нестатические методы будут вызываться на клиенте.
так вроде было раньше.
в ax2009 все таблицы живут на сервере.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 26.03.2011, 10:49   #13  
mifi is offline
mifi
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
168 / 59 (2) ++++
Регистрация: 24.07.2002
Цитата:
Сообщение от fed Посмотреть сообщение
Насколько я помню, таблицы живут на том уровне, на котором был выполнен первый select или первый insert. То есть - если у тебя таблица на форме, то все нестатические методы будут вызываться на клиенте.
Первый insert - это правило относится только к временным таблицам. Второе предложение никак не связано с первым, на самом деле Интересно также понять, как на клиенте отрабатывает нестатический метод insert(), куда именно он вставляет данные, если таблица постоянная
Старый 26.03.2011, 10:50   #14  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,178 / 4000 (138) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от kornix Посмотреть сообщение
3. По идее, если вызывать отовсюду axSalesTable.insert() вместо salesTable.insert() - получается что вставкой записи уже управляет класс. Его удобно дорабатывать, в отличии от модификации табличных методов, которые обычно сильно раздуваются.
Кстати - если уж очень хочется поместить сложную логику в табличный insert(), то надо в нем вызывать this.type().insert() (не вызывая super()), а в методе insert() соответствующего класса, тупо вызывать table.doinsert(). Так, помниться, вставка в строки заказов и закупок отрабатывает...
Старый 26.03.2011, 10:56   #15  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,178 / 4000 (138) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mifi Посмотреть сообщение
Первый insert - это правило относится только к временным таблицам. Второе предложение никак не связано с первым, на самом деле
Угу - спасибо что напомнил.
Цитата:
Сообщение от mifi Посмотреть сообщение
Интересно также понять, как на клиенте отрабатывает нестатический метод insert(), куда именно он вставляет данные, если таблица постоянная
Ну вставит он конечно в таблицу БД. Но мне казалось что в этом случае, если логика метода insert() переопределена, то она будет на клиенте отрабатывать ?
Старый 26.03.2011, 11:05   #16  
DAXXX is offline
DAXXX
Banned
 
23 / 17 (0) ++
Регистрация: 25.03.2011
Цитата:
Сообщение от mazzy Посмотреть сообщение
Вопрос скорее на понимание.

В последних версиях есть ax-классы, которые являются обертками вокруг соответствующих таблиц. (axSalesTable, axSalesLine, axCustTable, axLedgerJournalTrans и т.п.)

Я как-то привык по старинке работать непосредственно с таблицами.
X++:
SalesTable.clear();
SalesTable.initValue();
SalesTable.initFromCustTable(ct);
...
SalesTable.insert();
И по старинке считал, что ax-классы используются сугубо в web-сервисах для доступа к таблицам. Но судя по наблюдаемому коду, это не так.

==================
Вопрос: а в чем преимущество ax-классов? в чем была задумка авторов, которые придумали эти соглашения по ax-классам?
Преимущество в том, что кроме самой табличной переменной, там есть инфа о toched полях. вот и всё
они в AIF вроде еще используются.
Старый 26.03.2011, 11:08   #17  
mifi is offline
mifi
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
168 / 59 (2) ++++
Регистрация: 24.07.2002
Цитата:
Сообщение от fed Посмотреть сообщение
Угу - спасибо что напомнил.

Ну вставит он конечно в таблицу БД. Но мне казалось что в этом случае, если логика метода insert() переопределена, то она будет на клиенте отрабатывать ?
Нет, метод будет исполнен на сервере.
Старый 26.03.2011, 11:11   #18  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от DAXXX Посмотреть сообщение
Преимущество в том, что кроме самой табличной переменной, там есть инфа о toched полях. вот и всё
они в AIF вроде еще используются.
да, а зачем это ВНУТРИ аксапты?

всю жизнь пользовался проверкой bufcmp(record,record.orig()) для определения, что запись изменена.

или record.field == record.orig().field для определени измененности поля.

зачем нужен этот toched?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 26.03.2011, 11:13   #19  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,759 / 3627 (178) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от DAXXX Посмотреть сообщение
есть инфа о toched полях
и вообще... этот toched, как мне кажется, придумал человек, абсолютно не знающий аксапту. но может быть я ошибаюсь?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 26.03.2011, 11:14   #20  
mifi is offline
mifi
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
168 / 59 (2) ++++
Регистрация: 24.07.2002
Цитата:
Сообщение от mazzy Посмотреть сообщение
да, а зачем это ВНУТРИ аксапты?

всю жизнь пользовался проверкой (record.data() == record.orig().data) для определения, что запись изменена.

или record.field == record.orig().field для определени измененности поля.

зачем нужен этот toched?
Mazzy - ну написали люди классы ВНУТРИ AX, теперь пользуются ими внутри AX, что здесь такого? Оба способа приемлимы, так что это дело вкуса и привычки.
Теги
ax-классы, axbc, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35
semanticax: Dynamics AX 2009 Installation - Application Blog bot DAX Blogs 0 22.12.2010 08:11
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:20.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.