Начинающему разработчику в Axapta. Взаимодействие ERP системы Microsoft Axapta с внешними приложениями.

Microsoft Business Solutions Axapta (MBS Axapta) - это ERP-система с трехзвенной объектно-ориентированной архитектурой, которая имеет интегрированную среду разработки MorphX с компилятором, отладчиком, редактором исходного кода и редактором контекстной справки. Для изменения стандартной бизнес-логики, а также для создания нового функционала в системе предусмотрен объектно-ориентированный язык X++, который представляет из себя симбиоз языков Java, C++, а также средств доступа к данным SQL 

СОДЕРЖАНИЕ

    Введение
  • Конфигурации Axapta
  • Слои в Axapta
  • Метки в Axapta
  • Технология IntelliMorph
  • Взаимодействие Axapta с внешними приложениями
    Пример 1 (работа из Axapta с приложением Microsoft Word)
    Пример 2 (работа с объектной моделью Axapta из внешнего приложения)
    Заключение

    Введение

    Microsoft Business Solutions Axapta (MBS Axapta) - это ERP-система с трехзвенной объектно-ориентированной архитектурой, которая имеет интегрированную среду разработки MorphX с компилятором, отладчиком, редактором исходного кода и редактором контекстной справки. Для изменения стандартной бизнес-логики, а также для создания нового функционала в системе предусмотрен объектно-ориентированный язык X++, который представляет из себя симбиоз языков Java, C++, а также средств доступа к данным SQL. Система MBS Axapta состоит из следующих составных частей:

    • Axapta Client
    • Application
    • БД (база данных)
    • Axapta Object Server
    • Axapta Configuration Utility.

    Axapta Client - это клиентская часть, представляющая из себя графический пользовательский интерфейс к функциям и данным системы, которая состоит из набора динамически загружаемых библиотек и исполняемого модуля Ax32.exe.
    Application - это бизнес логика системы в виде набора файлов, содержащих скомпилированный код объектов приложения и реализующих бизнес - логику системы. При многопользовательской работе в локальной сети файлы библиотеки приложения целесообразно помещать на файловый сервер. В трехуровневой конфигурации приложение полностью контролируется сервером приложения, и конечные пользователи взаимодействуют непосредственно с ним.
    БД - реляционная база данных под управлением MSDE, MS SQL или Oracle, которая хранит все данные системы.
    Axapta Object Server - сервер приложения Axapta, используемый в трехуровневой конфигурации системы, который обрабатывает часть вычислительных задач и выполняет взаимодействие с базой данных.
    Axapta Configuration Utility - конфигурационная утилита Axconfig.exe. С ее помощью ведется список конфигураций - набора параметров сеансов работы пользователя (язык интерфейса, база данных и т.д.).

    Конфигурации Axapta

    Возможна двухуровневая либо трехуровневая конфигурация системы.
    При двухуровневой (Рис.1) архитектуре вся логика приложения выполняется на рабочей станции пользователя. В случае сетевой многопользовательской работы все пользователи используют общую библиотеку приложения, для этого файлы приложения помещаются на общий файловый сервер. Клиент в этом случае взаимодействует с базой данных через собственное соединение с СУБД, используя настроенный на рабочей станции источник данных ODBC.
    Трехуровневая (Рис.2) конфигурация системы Axapta представляет собой трехуровневое приложение, состоящее из интеллектуальной клиентской части системы (Intelligent Client), сервера приложения Axapta Object Server (AOS) и базы данных. Трехуровневая конфигурация системы допускает совместную работу тонких и толстых клиентов.

    Особенности тонкого и толстого клиентов в трехуровневой среде заключаются в следующем:
    в случае тонкого клиента взаимодействие с СУБД полностью осуществляется сервером приложения, причем при первом обращении клиента к приложению оно кэшируется, чтобы при следующих вызовах объекта прикладной объект брался уже из кэша;
    в случае толстого клиента соединение с БД осуществляется самим клиентом (как в двухуровневой среде), но прикладные объекты берутся из кэша AOS (а не с общего файл-сервера, как в двухуровневой среде).
    Итак, приложение может находиться на сервере приложений (в случае трехуровневой системы), либо на общем файл-сервере (в случае многопользовательской работы при двухуровневой системе).
    Что же такое приложение Axapta?
    Это порядка ста файлов, называемых строго определенно и хранящихся в одном каталоге. Приложение включает в себя:
    - скомпилированный X++ код;
    - структуру визуальных элементов (экранные формы, меню и т.д.);
    - т. н. "метки" - реестр текстовых строк для UI на разных языках;
    - встроенную систему помощи (всевозможные подсказки, документация);
    - индексы.

    Слои в Axapta

    Архитектура MBS Axapta основана на уникальной структуре слоев, которая позволяет контролировать любые изменения программного кода. Система при запуске какой-либо функциональности использует верхние слои приложения, то есть в Axapta есть возможность переопределять стандартное поведение системы созданием либо модификацией элементов в слоях более высокого уровня.

    Метки в Axapta

    Одним из признаков хорошего тона при разработке в Axapta является использование меток, то есть, согласно этим правилам, код не должен содержать текстовой информации, но должен содержать ссылки на так называемые метки, определенные в специальных меточных файлах. При выполнении каких-либо проектных модификаций рекомендуется использовать свой меточный файл. Такой подход, во-первых, позволяет контролировать единообразие в названиях элементов, а, во-вторых, решает задачу поддержки нескольких языковых интерфейсов системы.

    Технология IntelliMorph

    Технология IntelliMorph была разработана для удобного изменения внешнего вида форм и отчетов в Axapta. Поддерживаются технологии drag&drop, буфер обмена, пользователь может скрывать или показывать поля в формах, менять их порядок и группировку без каких-либо модификаций кода; поддерживается интерфейс Windows XP; пользователь легко может менять дизайн форм и отчетов.

    Взаимодействие Axapta с внешними приложениями

    Взаимодействие с внешними приложениями Axapta осуществляет с помощью технологии COM, то есть как из Axapta можно создавать com-объекты для взаимодействия с какими-либо внешними приложениями, так и внешние приложения могут получать доступ к Axapta через com-интерфейс

    Пример 1 (Работа из Axapta с приложением Microsoft Word)

    Рассмотрим пример (в виде сценария на языке X++) для первого случая, когда из Axapta открывается сессия Microsoft Word и ведется работа с документом Microsoft Word. В данном примере создается документ, затем в него пишется строка "Создание документа Microsoft Word", затем документ сохраняется на диске и делается видимым для пользователя.

    static void Job1()
    {
    
      COM wordApp;
      COM wordDocuments;
      COM wordDocument;
      COM wordRng;
    
      // Инициализация com-объекта
      wordApp = new COM("word.application");
      // Временно сделать документ невидимым
      wordApp.visible(false);
      wordDocuments = wordApp.Documents();
      wordDocument = wordDocuments.add();
      wordRng = wordDocument.range(0,0);
      // Вывод текста в документ
      wordRng.insertafter("Создание документа Microsoft Word");
      // Сохранить документ
      wordDocument.SaveAs("C:\\MyDocument.doc");
      // Сделать его видимым
      wordApp.visible(true);
    
    }
    
    

    В российской версии Axapta существуют классы ComWordDocument_RU и ComExcelDocument_RU для взаимодействия с Microsoft Word и Microsoft Excel. Рассмотрим пример взаимодействия с Microsoft Word. В данном примере открывается уже созданный нами документ, слева в него дописывается строка "Axapta: ", и документ сохраняется .
    public class ClassWord extends  ComWordDocument_RU
    {
    }
    void new(Str _documentName)
    {
       super();
       this.initApplication(true,0);
       this.OpenDocument(_documentName);
    }
    
    static void Job2()
    {
      // Создать объект
      ClassWord wordDoc = new ClassWord("C:\\MyDocument.doc");
      // Вставить строку в документ
      wordDoc.selectionInsertValue("Axapta: ");
      // Сохранить документ
      wordDoc.documentSave();
    }
    
    
    То есть сначала объявляется класс-наследник от класса ComWordDocument_RU, в конструктор которого в качестве параметра можно передать имя файла. А затем, в сценарии (Job2), мы видим пример использования нашего класса: создается экземпляр класса ClassWord, открывается документ, в него дописывается строка и документ сохраняется.

    Пример 2 (работа с объектной моделью Axapta из внешнего приложения)

    Теперь рассмотрим пример для второго случая, когда внешнее приложение посредством com-интерфейса получает данные из Axapta, используя ее объектную модель. Необходимо заметить, что данный способ доступа внешнего приложения к объектной модели Axapta лицензируется как Microsoft Axapta Business Connector, то есть для проверки такой возможности необходимо проверить наличие ключа следующим образом:
    Главное меню - Администрирование - Настройки - Система - Лицензионные условия - COM Clients (должен стоять признак наличия ключа).
    В качестве внешнего приложения возьмем, например, Delphi 7.0. Следующий пример представляет из себя код на языке Object Pascal обработчика события OnClick кнопки Button1 формы Delphi 7.0. При нажатии на эту кнопку компонент ListBox1 (список), находящийся на форме, заполняется наименованиями складов таблицы InventLocation из Axapta.

    procedure TForm1.Button1Click(Sender: TObject);
     var
          Axapta,
          AxaptaQuery,
          AxaptaDataSource,
          AxaptaQueryRun,
          Buffer: variant;
    begin
      //Создаем com-объект
      Axapta:=CreateOleObject('AxaptaCOMConnector.Axapta');
      // Вход под учетной записью "Admin" в Axapta
      Axapta.logon('Admin','','','');
      // Создание объекта типа Query
      AxaptaQuery := Axapta.CreateObject('Query');
      // Создание объекта типа DataSource, ссылающегося на таблицу, 
      // имеющую ID=158 (InventLocation - склады)
      AxaptaDataSource := AxaptaQuery.Call('AddDataSource',158);
      // Создание объекта типа QueryRun
      AxaptaQueryRun := Axapta.CreateObject('QueryRun',AxaptaQuery);
      // Цикл по записям таблицы InventLocation
      while AxaptaQueryRun.Call('Next') do begin
          // Получаем текущую запись и кладем значение поля Name текущей записи в список ListBox1
          Buffer := AxaptaQueryRun.Call('GetNo',1);
          ListBox1.Items.Add(Buffer.field['Name']);
      end;
    end;
    

    Заключение

    Данная статья не претендует на полное описание всех тонкостей взаимодействия Axapta с внешними приложениями, но поясняет общий порядок построения такого взаимодействия.

Олег Селин,
my_manner@rambler.ru



Опубликовал admin
24 Июн, Пятница 2005г.



Программирование для чайников.