Показать сообщение отдельно
Старый 26.03.2011, 15:16   #24  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от fed Посмотреть сообщение
IMHO - за исключением узкой задачи сериализации документов, эти классы не функциональны.
Ага... читаем "What's New - Technical in Microsoft Dynamics AX 2012 for Development" про мечту 95% пользователей Аксапты (выделение курсивом - мое):
Цитата:
Редактирование данных в Excel
За счет использования Microsoft Dynamics AX 2012 Office Add-ins редактировать можно будет любые данные, опубликованные в виде доступного сервиса. Для этого подключитесь к AOS, укажите нужный сервис, перетащите поля, которые вас интересуют, в книгу Excel, обновите данные, чтобы заполнить книгу, затем отредактируйте их и нажмите кнопку, чтобы отразить изменения в системе. Редактирование данных в Excel включает следующие возможности:
  • Интеграция с сервисами документов. Информация из любого сервиса может быть прочитана, изменена и обновлена в AX 2012 с полной поддержкой контроля доступа и сопутствующей бизнес-логики.
  • Office Add-ins используют lookup'ы и инфраструктуру запросов из AX 2012.
  • Можно определить матричные поля для агрегирования данных. При сохранении измененных значений матричных полей поля всех записей, на основе которых были получены агрегированные значения, будут пропорционально изменены.
  • etc.
Цитата:
Сообщение от mazzy Посмотреть сообщение
В чем преимущество ax-классов перед непосредственной работой с таблицами ВНУТРИ самой аксапты?
Тут можно вспомнить Программирование и конфликты 2.0 Роберта Гласса:
Цитата:
С точки зрения учебного процесса наука состоит из фундаментальных принципов, которые можно выделить и изучать и которые являются истинными. Каковы основополагающие начала программной инженерии? Некоторые говорят, что программная инженерия – это «гуманитарная наука», что не так-то просто установить ее основополагающие начала.
Я хотел бы предложить свой вариант. Моим кандидатом на роль основополагающего начала программной инженерии выступает понятие, которое мой коллега Ли Макларен (Lee MacLaren) из компании Boeing Military Aircraft называет «однототочечным управлением» (single-point control).
При такой организации вычислений задача, которая должна решаться в нескольких местах, решается только в одном, а во всех остальных местах на это одно лишь ссылаются при необходимости. В качестве самого распространенного примера такого управления можно привести программный модуль, например, библиотечную подпрограмму. Если нам требуется извлечь квадратный корень или выполнить сортировку в нескольких местах в программе, то мы не пишем всякий раз один и тот же программный код, решающий эту задачу. Этот код мы располагаем в каком-то одном месте и обращаемся к нему (вызываем его) по мере необходимости.
Почему мы это делаем? Конечно, потому, что такой код занимает меньше места. Разумеется, потому что это упрощает программную логику. И потому, что если необходимо изменить программный код, то это достаточно сделать один раз.
В Программисте-прагматике этот принцип называется DRY (don't repeat yourself). Бизнес-логика должна быть реализована в одном месте приложения, а не продублирована в куче мест, и при этом ее должно быть удобно использовать из других различных мест приложения (или даже из сторонних интегрируемых с приложением систем). При работе с теми же табличными данными через интерфейс клиента Аксапты очень просто реализовать бизнес-логику на основе вызываемых этим клиентом стандартных обработчиков modifiedField/validateField, при этом за счет интерфейса можно ограничить пользователя в том, в каком порядке и какие поля он сможет изменять. Когда же требуется проделать то же самое из кода, то с точки зрения разработчика таблицы порядок заполнения полей контролировать нельзя, равно как и нельзя обеспечить соответствующие вызовы modifiedField (в результате чего могут вызываться initFromXX). Получается, бизнес-логику нужно дублировать и поддерживать два разных "API": один - для работы через интерфейс (который не позволит выбрать договор, пока не задан тот же код клиента, и который приведет к вызову initFromCustTable() при смене кода клиента), а другой - для работы из кода, где нужно помнить, что сперва надо вызвать clear(), затем initValue(), затем - initFromCustTable(), после этого дернуть transferContractAccount_RU() и указать ему, чтобы не задавал лишних вопросов... Если напутать с порядком вызова методов, то установленные вами значения будут перезаписаны, и на выходе получится не то, что вы ожидали, если не дернуть вообще нужный обработчик, то не подтянутся значения связанных полей ("эй! мы всю жизнь просто заполняли одно это поле из кода - и все, откуда взялись связанные с ним поля?"). А так можно просто "набросать" те значения полей, которые известны, причем в любой последовательности, дернуть нужный обработчик - и он "размотает" всю логику заполнения записи и вызовет нужные обработчики в том порядке, в каком надо, а за счет пометки "тронутых" нами полей их значения гарантированно не будут перезаписаны в ходе этого процесса.
Цитата:
Сообщение от mazzy Посмотреть сообщение
я хочу ПОНЯТЬ - что побудило их написать?
Сторонние системы не заставишь дергать все специфичные для Аксапты обработчики (с учетом того, что поля не обернуты в свойства со своими get/set) и/или заполнять поля в определенном порядке, а бизнес-логика приложения Аксапты при этом должна как-то отрабатывать. По-моему, из-за этого и решили нагромоздить все эти классы.
Цитата:
Сообщение от mazzy Посмотреть сообщение
практический смысл вопроса очень простой:
= надо ли заморачиваться и делать ax-обертки для своих таблиц/полей?
= нало ли заморачиваться и требовать от локализации наличия таких ax-оберток? для многих таблиц и полей локализации ax-обертки отсутствуют.
кастомизированные таблицы/поля с огромной вероятностью не имеют оберток.
На первый вопрос, по-моему, нет однозначного ответа: реализация ax-оберток для таблиц довольно трудоемка и потому не всегда оправдана. Что же касается второго вопроса - по-моему, однозначно надо этим заморачиваться Иначе получается, что без доработки напильником достаточно мощных стандартный механизм нельзя использовать для таблиц, затронутых локализацией.

Последний раз редактировалось gl00mie; 26.03.2011 в 15:27. Причина: typo