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

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

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

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

==================
Вопрос: а в чем преимущество ax-классов? в чем была задумка авторов, которые придумали эти соглашения по ax-классам?
Старый 26.03.2011, 10:04   #2  
Михаил Андреев is offline
Михаил Андреев
Участник
Лучший по профессии 2009
Компания АМАНД
 
1,259 / 227 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Попробуй сделать заказ типа "Заказ" при работе с классами AxSalesTable и AxSalesLine, и напрямую, через таблицы. В первом случае, все складские проводки классы сами сделают, а во втором случае....
__________________
Михаил Андреев, www.amand.ru
Старый 26.03.2011, 10:06   #3  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
19,985 / 2920 (137) +++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
Попробуй сделать заказ типа "Заказ" при работе с классами AxSalesTable и AxSalesLine, и напрямую, через таблицы. В первом случае, все складские проводки классы сами сделают, а во втором случае....
во втором - тоже
см. метод SalesLine.insert()
За это сообщение автора поблагодарили: Михаил Андреев (4).
Старый 26.03.2011, 10:10   #4  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
412 / 145 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Подобные классы использовал всего несколько раз.
При написании кода в C# вызывать один класс через bc.net проще чем объявлять все необходимые объекты, а потом обрабатывать их. Если приложение стандартное - этими классами удобно создавать заказы/закупки и т.п.
На мой взгляд - классы нужны для внешних приложений, создаваемых в C# и работающих через .Net Business Connector.
Старый 26.03.2011, 10:15   #5  
fed is offline
fed
Участник
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Ex AND Project
Соотечественники
 
1,900 / 3493 (120) ++++++++++
Регистрация: 13.03.2002
Адрес: İstanbul
У меня такое ощущение, что эти классы разрабатывал какой-то выходец из .net-программирования и он пытался сэммулировать привычное наследование для таблиц. Потом в рамках какой-то группы (кажется - EP), использование этих классов вместо таблиц стало стандартом разработки. Но рефакторить остальной код никто не стал, да и другие группы этими классами не пользуются. Так что, на мой взгляд, большого смысла в использовании этой функциональности - нету...
Кстати - интересно как в 2012 с использованием этих классов...
Старый 26.03.2011, 10:18   #6  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
19,985 / 2920 (137) +++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
большого смысла в использовании этой функциональности - нету...
"Этой" - какой именно? ax-классов или работой напрямую с таблицами?

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

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

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

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

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

Цитата:
Сообщение от kornix Посмотреть сообщение
3. Возможность написания более "объектно-ориентированного" кода.
э-э-э? это точно не маркетинговый булшит?
Старый 26.03.2011, 10:35   #10  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
412 / 145 (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
Участник
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Ex AND Project
Соотечественники
 
1,900 / 3493 (120) ++++++++++
Регистрация: 13.03.2002
Адрес: İstanbul
Цитата:
Сообщение от mazzy Посмотреть сообщение
Зачем? таблицы живут только на сервере.
Насколько я помню, таблицы живут на том уровне, на котором был выполнен первый select или первый insert. То есть - если у тебя таблица на форме, то все нестатические методы будут вызываться на клиенте.
За это сообщение автора поблагодарили: mifi (-1), kornix (1).
Старый 26.03.2011, 10:42   #12  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
19,985 / 2920 (137) +++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
Насколько я помню, таблицы живут на том уровне, на котором был выполнен первый select или первый insert. То есть - если у тебя таблица на форме, то все нестатические методы будут вызываться на клиенте.
так вроде было раньше.
в ax2009 все таблицы живут на сервере.
Старый 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
Участник
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Ex AND Project
Соотечественники
 
1,900 / 3493 (120) ++++++++++
Регистрация: 13.03.2002
Адрес: İstanbul
Цитата:
Сообщение от kornix Посмотреть сообщение
3. По идее, если вызывать отовсюду axSalesTable.insert() вместо salesTable.insert() - получается что вставкой записи уже управляет класс. Его удобно дорабатывать, в отличии от модификации табличных методов, которые обычно сильно раздуваются.
Кстати - если уж очень хочется поместить сложную логику в табличный insert(), то надо в нем вызывать this.type().insert() (не вызывая super()), а в методе insert() соответствующего класса, тупо вызывать table.doinsert(). Так, помниться, вставка в строки заказов и закупок отрабатывает...
Старый 26.03.2011, 10:56   #15  
fed is offline
fed
Участник
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Ex AND Project
Соотечественники
 
1,900 / 3493 (120) ++++++++++
Регистрация: 13.03.2002
Адрес: İstanbul
Цитата:
Сообщение от 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
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
19,985 / 2920 (137) +++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от DAXXX Посмотреть сообщение
Преимущество в том, что кроме самой табличной переменной, там есть инфа о toched полях. вот и всё
они в AIF вроде еще используются.
да, а зачем это ВНУТРИ аксапты?

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

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

зачем нужен этот toched?
Старый 26.03.2011, 11:13   #19  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
Most Valuable Professional
 
19,985 / 2920 (137) +++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от DAXXX Посмотреть сообщение
есть инфа о toched полях
и вообще... этот toched, как мне кажется, придумал человек, абсолютно не знающий аксапту. но может быть я ошибаюсь?
Старый 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, время: 20:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.