25.12.2001, 12:23 | #1 |
Продавец игрушек
|
Аксапта, заметки программиста
Поскольку в последнее время ERP-система Axapta вызывает все больший интерес у специалистов по автоматизации производства, мне хотелось бы рассказать о тех возможностях, которые эта система предоставляет разработчику, осуществляющему доводку и подгонку ее к требованиям конкретного заказчика.
Материал предоставлен компанией АНД Проджект (СПб), оригинальный текст находится здесь: http://www.andproject.spb.ru/andproj...B-F82B1AB94EE8 В основе архитектуры системы Axapta находится объектно-ориентированная система разработки, изначально разработанная как базис для быстрой реализации деловых приложений. Таким образом – приобретая эту систему с включенной лицензией на разработку и доступ к исходным текстам, вы получаете возможность как угодно адаптировать ее для потребностей вашей фирмы. Фактически при подобном варианте покупки покупатель получает среду разработки и исполнения программ автоматизации производства и написанную в этой среде систему автоматизации типовых бизнес-процессов предприятия. Можно относиться к этой системе как к данности и ограничиться разработкой модулей автоматизации бизнес-процессов, специфичных для данного предприятия. Однако можно относиться к этой системе и лишь как к некоторому прототипу, в котором можно модифицировать любые модули, перекраивая ее архитектуру и подходы к автоматизации типовых производственных процессов под принятые в автоматизируемом предприятии способы ведения дел. Конечно, второй вариант подхода к внедрению Axapta на предприятии отдает некоторым программистским экстремизмом. Имеющиеся в этой системе модули автоматизации производства представляют собой реализацию лучших сложившихся управленческих практик; бездумное переписывание всего и вся в Axapta не доведет до добра. Тем не менее – гибкость этой системы столь высока, что к ней можно относиться не только как к ERP-системе, но и как к среде быстрой разработки приложений. Итак – приступим к обзору средств разработки данной системы. В Axapta вся работа программиста выполняется в среде MorphX, входящей в состав данного продукта. Morphx представляет собой визуальную среду разработки объектов, по интерфейсу и подходам к кодированию напоминающую, пожалуй, ряд систем Visual Age фирмы IBM. Следует сразу отметить, что исходные тексты объектов хранятся в двоичном файле вперемежку с разнообразной служебной информацией и p-кодом, в который они компилируются. Соответственно, разрабатывать новые объекты в режиме “командной строки” в принципе невозможно. Среда разработки предоставляет ставший уже типичным для аналогичных сред набор средств для редактирования исходных текстов, методов отладки приложений, визуального конструирования форм и отчетов. Существуют рудиментарные средства поддержки групповой разработки – допускается блокирование/разблокирование объектов с целью предотвращения их параллельной модификации несколькими разработчиками. Встроенного средства управления версиями в Axapta, к сожалению, нет, а использование внешних продуктов (таких как Microsoft Visual SourceSafe или Rational Clear Case) затруднено в связи с тем, что Axapta не хранит исходных текстов объектов в отдельных текстовых файлах. На мой взгляд, отсутствие встроенного механизма управления версиями модулей и объектов – это самой большой недостаток среды разработки MorphX. Хочется надеяться, что в будущих версиях Axapta этот пробел будет наконец заполнен. Для разработки приложений в Axapta используется язык программирования X++. Хотя его принято называть Java-подобным, на мой взгляд, он достаточно сильно отличается от Java по принятым в нем подходам к разработке. В нем нет, например, таких фундаментальных для Java понятий, как интерфейс, реализация интерфейса, пакет, абстрактный метод или класс. Поэтому, хотя синтаксис выражений и набор операторов языка X++ напоминает Java или C++, по подходу к разработке он, на мой взгляд, ближе к Object Pascal. Набор типов в языке X++ также отличается своей ориентацией на разработку деловых приложений. Например, тип real хранится не как традиционное число с плавающей точкой (IEEE Double), а как Binary Coded Decimal, что позволяет избежать типичных для формата хранения IEEE Double ошибок в точном представлении дробных чисел, так осложняющих жизнь тех разработчиков, которые пытаются реализовать денежную арифметику с помощью языка C++ или Java. Для обработки строк в языке X++ используется примитивный тип, а не класс, как в языках C++ или Java. При сравнении строк регистр букв не различается, что также типично для деловых приложений. Для разработки приложений в Axapta используются разнообразные элементы дизайна системы – классы, таблицы, формы, отчеты и некоторые другие. Базисным модулем языка X++ является класс. Поддерживается одиночное наследование, спецификаторы области видимости методов, вложенные классы. В отличие от C++ и Java доступ к переменным класса разрешен только из методов класса. Поддерживаются статические методы класса. Наконец, данный язык программирования имеет специфичные для Axapta спецификаторы метода server и client, позволяющие указать, где данный метод должен исполняться при использовании трехзвенной конфигурации. Поскольку X++ предназначен для разработки деловых приложений, он непосредственно поддерживает включение в текст программы операторов языка SQL. Axapta поддерживает свой собственный диалект языка SQL, операторы которого транслируются в диалект SQL, используемый целевой базой данных – MS SQL или Oracle. При проектировании Axapta одной из основных целей являлась необходимость добиться поддержки полной независимости деловых приложений от используемой базы данных. В связи с этим значительное количество функций, исполняемых в обычных системах клиент-сервер сервером баз данных, исполняется ядром Axapta. В связи с этим одним из базисных строительных элементов приложения в рассматриваемой системе является таблица. Разработчик в среде разработки MorphX создает набор определений таблиц. При этом таблица может иметь собственные методы, как обычные так и статические, что позволяет рассматривать таблицу как специфичный случай класса. Часть методов является предопределенным (например методы update,delete,insert), что позволяет использовать их как некоторый аналог триггеров. Кроме того, определение таблицы включает в себя определение полей, индексов, ограничений ссылочной целостности. По окончании создания или модификации определения таблицы разработчик может выполнить операцию синхронизации, при которой в целевой базе данных создается или модифицируется таблица, соответствующая данному описанию. При этом ни триггеры, ни средства поддержки ссылочной целостности целевой базы данных не используются – все эти функции выполняются в Axapta. Таким образом, разработчик полностью освобождается от необходимости вникать в тонкости работы целевой базы данных. Каждая таблица в обязательном порядке содержит поля, содержащие уникальный числовой идентификатор данной записи, присваиваемый системой, дату и автора, создавшего и модифицировавшего данную запись. Наконец, для каждой записи указывается компания, к которой она относится. (Axapta устроена таким образом, что возможно хранение данных нескольких независимых компаний в одной базе данных). Поддерживается также понятие Extended Type – некоторый аналог понятия домен реляционных баз данных. Extended Type создается на основе примитивного типа или другого Extended Type (но не класса). Все поля таблиц, принадлежащие к данному Extended Type, наследуют характеристики хранения и представления, определенные для него. Кроме того, в программах можно создавать переменные, относящиеся к данному расширенному типу. Кроме того, разработчик может создать enum-типы, которые могут использоваться и для определения типов полей. При этом для каждого элемента перечисления определяется числовое значение, идентификатор, используемый в коде X++, и, наконец, словесное описание которого будет видеть пользователь при редактировании данного поля. Для организации диалога с пользователем Axapta использует понятие формы. Подход к созданию и организации с формами аналогичен подходу, используемому в системах Visual Basic или Delphi. Каждая форма может содержать в себе один или более источников данных (таблиц), как независящих друг от друга, так и связанных (join) в запрос. Большая часть экранных элементов может быть привязана к источнику данных и отображать содержимое его поля, или значение, возвращаемое специальным методом, созданным для этого источника данных. Возможно и чисто программное управление содержимым экранных элементов. Набор разнообразных экранных элементов в Axapta достаточно типичен для систем подобного класса – он несколько беднее чем, например, в Delphi или Visual Basic и богаче, чем в PowerBuilder или Java AWT. Допускается подключение к Axapta внешних экранных элементов, написанных по стандарту ActiveX. Для обработки событий в Axapta необходимо создать метод экранного элемента, реагирующий на это событие. При этом форма или источник данных формы может помимо методов обработки событий иметь совершенно произвольный набор методов, разработанных программистом. Единственное ограничение, действующее в отношении этих методов, – они могут вызываться только из других методов данной формы. Для каждой таблицы в системе Axapta можно задать форму, которая будет по умолчанию использоваться для редактирования этой таблицы. Благодаря этому значительно упрощаются механизмы работы со справочниками – при редактировании поля, являющегося ссылкой на справочник, пользователь может легко вызвать на экран форму, которая была указана при создании таблицы справочника. Конструктор отчетов в Axapta аналогичен по набору возможностей аналогичным конструкторам в Delphi или Visal Basic. Для организации доступа пользователя к различной функциональности используется механизм MenuItem. При создании любого экранного элемента, запускающего некоторые действия – экранной кнопки, пункта меню и так далее, с ним можно ассоциировать некоторый элемент дизайна типа MenuItem. Создание и настройка MenuItem производится глобально для всего приложения и не зависит от конкретной формы или меню. При этом для данного элемента MenuItem можно указать конкретную форму, класс или отчет, которые запускаются при его активации. Таким образом, достигается дополнительный уровень настройки реакции системы на действия пользователя. Наконец – следует рассказать о таком интересном механизме разграничения полномочий, как FeatureKey. При разработке приложения можно с каждым элементом дизайна системы – формой, отчетом, MenuItem, экранным элементом связать FeatureKey, который разрешает или запрещает доступ к этому строительному блоку. Далее при установке системы у конечного пользователя можно для конкретной группы пользователей разрешить или запретить доступ к элементам дизайна, ассоциированным с данным FetaureKey. Взаимодействие системы Axapta с внешними приложениями осуществляется с помощью механизма COM/DCOM. Из программ, разработанных на языке X++, можно создавать любые COM-объекты, поддерживающие механизм ActiveX Automation. Существует и обратный механизм, позволяющий работать с внутренними объектами системы Axapta через механизм ActiveX Automation. Правда, необходимо оговорить, что хотя этот механизм и позволяет выполнять любые операции с этими объектами, но он несколько громоздок; операции, которые требуют нескольких строк кода на X++ при их вызове через COM, скажем, из C++, могут потребовать написания пары экранов кода. Поэтому я бы рекомендовал использовать этот интерфейс только для интеграции существующих систем. Попытка реализовать с его помощью систему, в которой Axapta использовалась бы лишь для реализации уровня бизнес - объектов, а для организации интерфейса использовался бы, скажем C++ или Delphi, была бы противоестественной. Организация доступа к Axapta через COM требует лицензирования дополнительного компонента Axapta COM Connector. Особо хотелось бы упомянуть о механизмах интеграции Axapta с Microsoft Internet Information Server. В первом приближении этот механизм выглядит так: в дополнение к стандартным элементам дизайна Axapta имеет их, так сказать, web-эквивалент – web-формы, web-отчеты и так далее. От обычных элементов дизайна они отличаются способностью представлять свое содержимое в виде HTML. Конечно, при разработке подобных элементов разработчик сталкивается с некоторыми ограничениями в тех выразительных средствах, которые он может использовать. Понятно, что не все стандартные экранные элементы могут быть представлены в браузере пользователя. Однако этот механизм позволяет быстро разработать более или менее прилично выглядящий Web-интерфейс к ERP-системе заказчика, не требуя при этом значительного времени на изучение всех аспектов Web-программирования. Следует упомянуть, что поддержка связи с MS IIS лицензируется отдельно. Как я уже упоминал, Axapta изначально проектировалась с целью облегчения разработки приложений, работающих в трехзвенной архитектуре. Для большей части элементов дизайна (кроме собственно элементов интерфейса пользователя) можно указать, где они должны исполняться – на рабочем месте пользователя или на промежуточном сервере приложений (Axapta Object Server). В результате при использовании трехзвенной архитектуры можно использовать более дешевые компьютеры для организации рабочих мест пользователей (поскольку основная нагрузка ложится на сервер приложений). Кроме того, при использовании Axapta Object Server возможно подключение рабочих мест пользователей по достаточно медленным каналам – например, по модемному соединению. Это позволяет сэкономить значительные деньги на организации подключения удаленных рабочих мест пользователя.
__________________
С уважением, Роман Кошелев. |
|
|
За это сообщение автора поблагодарили: aidsua (0), S.A.M. (0). |