Средства разработки Компания Тренер E-mail 1 Section Heading План занятий • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 2 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 3 Section Heading MorphX – интегрированная среда разработки • Независимый словарь данных и объектов Единая база данных Единое приложение Единый исходный код Единый набор инструментов • Несколько интерфейсов Windows All In One Web WAP 4 Section Heading MorphX объединяет все этапы создания программного продукта Полный набор средств для создания приложений любого уровня сложности • Дизайнер форм и отчетов • Специализированный текстовый редактор • Компилятор • Отладчик • Редактор контекстной справки 5 Section Heading Основные объекты AOT • • • • • • • • • • Data Dictionary Macros Jobs Classes Queries Forms Reports Menus Menu Items Web 6 Section Heading Создание нового приложения 1. Разработка структуры данных 2. Создание типов данных и таблиц в DataDictionary 3. Cоздание классов для обработки данных 4. Создание форм для диалога с пользователем 5. Создание отчетов для извлечения и анализа данных 6. Создание меню для организации доступа к новой функциональности 7 Section Heading Средства ведения проектов • • • Вся модификация в одном окне Удобный перенос изменений на другие версии Позволяют собрать вместе все объекты, реализующие определенную функциональность 8 Section Heading Архитектура слоев USP User Patch USR User Solutions CUP Customer Patch CUS Customer Solutions VAP Var Patch VAR Var Solutions BUP Business Patch BUS Business Solutions LOP Local Patch LOS Local Solutions DIP Distributor Patch DIS Distributor Solutions Требования законодательства страны GLP Global Patch GLS Global Solutions SYP Standard Patch SYS Standard Application Стандартная функциональность Пользовательские модификации Слой клиентских модификаций Слой партнерских модификаций Вертикальные решения партнера Интегрированные решения страны Слой интегрированных решений 9 Section Heading Исполнение программного кода 1 index file: axapd.aoi 10 Section Heading Сравнение модификаций разных слоев 11 Section Heading Экспорт объектов приложения • • Позволяет сохранить прикладные объекты репозитария во внешнем файле для использования их в других приложениях или в качестве резервной копии Возможен экспорт как отдельного или нескольких выделенных объектов из AOT, так и всех объектов, входящих в проект 12 Section Heading Импорт объектов приложения • • Посредством импорта производится загрузка в систему ранее экспортированных объектов приложения Импорт объектов приложения производится в слой, установленный в конфигурационной утилите 13 Section Heading Визуальное моделирование с MorphXplorer • • • Создание моделей данных и связей между ними в стандарте UML Для построения моделей используются существующие объекты таблиц и классов репозитария Связи устанавливаются на основе данных таблиц перекрестных ссылок 14 Section Heading Меточные файлы • • • Вынесенный за приложение текстовый интерфейс Поддержка многоязыкового интерфейса Повторное использование меток Метки на английском языке, файл AXSYSen-us.ald Метки на русском языке, файл AXSYSru.ald @SYS30 Person '%1' does not exist. @SYS30 Сотрудник '%1' не @SYS31 Variance @SYS32 Group by @SYS35 Default lead time or lead time in number of days существует. @SYS31 Расхождение @SYS32 Группировать по @SYS35 Время упреждения в днях 15 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Функциональные ключи Стандарты разработки 16 Section Heading Объектно–ориентированный язык X++ • • • Принципы инкапсуляции и наследования Легкий синтаксис Встроенный язык запросов (SQL) Java Syntax C++ Syntax SQL Syntax 17 Section Heading Типы данных • • • Скалярные типы данных Составные типы данных Расширенные типы данных 18 Section Heading Скалярные типы данных • • • • • • • boolean integer real date timeOfDay str enum логический тип тип целых чисел действительные дата время строка перечисление true, false -1000, 0, 1, 123 0.0, 5.789 1\1\1901..31\12\2154 часы:мин:сек «MorphX» Enum::Literal Перечислимый тип данных Enum создается в узле Base Enums репозитария прикладных объектов 19 Section Heading Скалярные типы данных. Определение • Определение скалярной переменной: тип_переменной • имя_переменной {= значение}; Примеры: boolean bVar1, bVar2 = true; int iVar1, iVar2 = -123; real rVar1, rVar2 = 4.56; date dVar1 = 31\12\2002; timeOfDay tVar1 = 0; str sVar1 = “Declare string variable”; NoYes eVar1 = NoYes::Yes; 20 Section Heading Составные типы данных. Массивы Массивы - Список элементов одного типа • Динамические тип_массива тип_массива • Фиксированные тип_массива тип_массива • имя_массива[] имя_массива[, memory] имя_массива[length] имя_массива[length, memory] Примеры: int real iArray1[], iArray2[100], iArray3[100, 20]; rArray4[] = 0; 21 Section Heading Составные типы данных. Контейнеры Контейнеры - Динамический список элементов базисного или составного типа • Определение переменной типа контейнер container имя_контейнера = [значение1, значение2, …]; • Примеры: container c1, c2[]; container c3 = [false, 16, 3.14, “MorphX”]; 22 Section Heading Составные типы данных. Контейнеры • Функции для работы с контейнером container c; Объявление контейнера conins(c, n, value); Вставка нового элемента condel(c, n, num); Удаление элементов из контейнера conpoke(c, n, value); Замена существующего элемента conpeek(c, n); Извлечение значения элемента confind(с, value); Поиск последовательности элементов conlen(с); Число элементов контейнера с = connull(); Удаление из памяти, где n – индекс элемента, value – значение элемента, num – кол-во удаляемых позиций 23 Section Heading Составные типы данных. Классы • Определение переменной типа класс: Имя_Класса имя_переменной_класса; • Создание объекта класса: имя_переменной_класса = new Имя_Класса(); • Примеры: LedgerVoucher ledgerVoucher; ledgerVoucher = new LedgerVoucher(); 24 Section Heading Составные типы данных. Таблицы • Определение переменной типа таблица: Имя_Таблицы имя_переменной_таблицы; • Примеры: LedgerTable ledgerTable; Common common; 25 Section Heading Расширенные типы данных • • • • • • РТД создается в узле Extended Data Types репозитария прикладных элементов В основе РТД лежат скалярные типы данных и контейнер РТД имеет уникальное пользовательское наименование. Тем самым РТД реализует пользовательский тип данных MorphX РТД по умолчанию определяет формат отображения данных на формах и отчетах РТД можно наследовать. При этом потомок РТД наследует свойства родителя РТД. Объявление переменных РТД аналогично объявлению скалярных типов данных 26 Section Heading Операторы X++ по старшинству postfix unary creation multiplicative additive shift relational equality bitwise AND bitwise XOR botwise OR logical conditional assignment [] . () expr++ expr- ++expr new * + << < == & ^ | && ? = --expr -expr ~ ! / >> > != % || : += <= -= >= 27 Section Heading Синтаксис X++ • Операторы ветвления if (expression) statement [else statement] switch (expression) {case expression : statement} expression ? statement1 : statement2 • Циклы while (expression) statement do {statement} while (expression) for (initialization; expression; update) statement • Исключения try {throw exception} … catch (expression) statement 28 Section Heading Синтаксис предложения SELECT SelectStatement = select Parameters Parameters = [ [ FindOptions ] [ FieldList from ] ] TableVariable [IndexClause] [ Options ] [ Where Clause ] [ JoinClause ] FindOptions = reverse | firstfast | firstonly | forupdate | nofetch FieldList = Field { , Field } | * Field = Aggregate ( FieldIdentifier ) | FieldIdentifier Aggregate = sum | avg | minof | maxof | count Options = ( order by | group by ) FieldIdentifier [ Direction ] { , FieldIdentifier [ Direction ] } IndexCaluse = index Idx | index hint idx Direction = asc | desc WhereClause = where Expression JoinClause = [exists | not exists | outer ] join Parameters 29 Section Heading Транзакции ttsbegin - начало транзакции ttscommit - конец успешной транзакции, все изменения сохранены в БД ttsabort (throw) - отмена транзакции, все изменения в пределах транзакции отменены Допускаются вложенные транзакции 30 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Функциональные ключи Стандарты разработки 31 Section Heading Макросы #DEFINE Объявление макроконстанты #UNDEF Отмена объявления макроконстанты #MACROLIB Загрузка макробиблиотеки #GLOBALMACRO Определение глобального макроопределения #LOCALMACRO Определение локального макроопределения #ENDMACRO Идентифицирует окончание макроопределения #IF #IF.EMPTY() Условное подключение макроопределения #IFNOT.EMPTY() #ENDIF Окончание макроопределения #IF #LINENUMBER Возвращает текущий номер строки. Используется для отладки. 32 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 33 Section Heading Таблицы (Tables) • • • • • Таблицы могут быть временными и постоянными Постоянные таблицы имеют отображение на сервере БД Временные таблицы обрабатывает Axapta. Данные в этих таблицах не сохраняются после работы С точки зрения программиста работа с временными и постоянными таблицами практически не различается Все таблицы наследованы от системной таблицы Common 34 Section Heading Поля таблиц (Tables/Fields) Поля таблицы могут иметь базовый тип: • • • • • • • String Integer Real Date Time Enum Container 35 Section Heading Группы полей на таблицах • • • Поля в таблицах объединяются в группы Группы полей автоматически обрабатываются генератором форм При добавлении нового поля в группу во всех элементах системы, использующих эту группу, добавляется новое поле 36 Section Heading Индексы на таблицах • • • • Индексы определяются на некотором наборе полей таблицы – ключе Свойство AllowDuplicates показывает, может ли таблица иметь несколько записей с одинаковым ключом Индекс может быть неактивен Доступность индекса также зависит от того, доступен ли связанный с ним функциональный ключ 37 Section Heading Отношения на таблицах • • • Отношения показывают, каким образом поля данной таблицы связаны с полями других таблиц Отношения между полями могут быть заданы как на самой таблице, так и на расширенном типе данных поля Отношения на таблице могут быть трех типов: Normal Field fixed Related field fixed LedgerTable 1 * LedgerTrans 38 Section Heading Действия при удалении • • None Cascade - нет действия - каскадное удаление строк в связанных таблицах • Restricted - удаление лишь при отсутствии связанных строк • Cascade + Restricted 39 Section Heading Методы на таблицах • • При работе с табличными данными система генерирует ряд событий. Для каждого события определен собственный метод Примерами таких методов служат Update(), Insert(), Delete() Эти и другие методы на таблицах могут быть перекрыты программистом • Помимо событийных методов можно создавать собственные методы Такие методы могут быть динамическими и статическими 40 Section Heading Maps Если для нескольких таблиц предполагается однотипная обработка, то эти таблицы целесообразно объединить в Map Table 3 Table 2 Map Table 1 41 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Функциональные ключи Стандарты разработки 42 Section Heading Формы (Forms) • Формы имеют три составляющие: Методы Системные (classDeclaration, init, и пр) Пользовательские Источники данных Дизайн • Все составляющие задаются статически при построении формы. Но в процессе работы формы программным образом можно изменить как дизайн, так и источники данных 43 Section Heading Источники данных на формах • • • Источники данных предоставляют данные для формы (заполнение) Каждый источник данных является запросом, состоящим из одной таблицы. Это позволяет пользователю использовать фильтры и сортировки Источники данных можно соединять (join) 44 Section Heading Дизайн форм • • Дизайн на форме определяет ее внешний вид и поведение Дизайн является древовидной структурой, узлами и листьями которой являются control-элементы Примерами таких элементов служат закладки, кнопки, элементы ввода текстовой строки, числа, даты и прочее 45 Section Heading Методы на элементах форм • • Каждый элемент формы имеет специальный узел Methods, где содержится программный код Каждый элемент формы (источник данных, control и даже сама форма) имеет ряд предопределенных методов, соответствующих событиям внешнего мира щелчок мыши drag’n’drop … 46 Section Heading Методы на элементах форм • При работе с формой система генерирует ряд событий. Для каждого события определен собственный системный метод, который может быть перекрыт разработчиком Нажали кнопку OK CloseOK кнопку Отменить CloseCancel CanClose CanClose Close Close 47 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 48 Section Heading Запросы (Queries) • • • Запросы являются удобной альтернативой использования оператора while select языка X++ Запросы предоставляют пользователю интерфейс для определения ограничения выборки и сортировки данных Запрос не выводит данные на устройство вывода. Этим занимается тот элемент системы, который использует данный запрос (запросы в основном используются в классах и отчетах) 49 Section Heading Структура запросов Запросы состоят из: • Источников данных (таблицы). Источники данных могут быть связаны между собой • Методов. Существуют методы для стандартных событий, также можно создавать собственные методы 50 Section Heading Виды запросов Запросы могут быть: • Статические. В этом случае структура запроса хранится в AOT • Динамические. Структура запроса создается программным образом всякий раз, когда работает данный код 51 Section Heading Работа с запросами Для запуска и построения запросов существуют специальные системные классы • Классы Query и QueryRun служат для инициализации запроса и запуска его на исполнение • Классы QueryBuild* позволяют создать структуру запроса перед его исполнением 52 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Функциональные ключи Стандарты разработки 53 Section Heading Классы (Classes) • Классы в Axapta выполняют основную часть работы по обработке данных и обеспечению функций 54 Section Heading Модификаторы места выполнения • Статические методы классов в Axapta имеют специальный дескриптор, обозначающий место исполнения программного кода Server Client • Класс, как элемент AOT, имеет свойство RunOn, принимающее такие же значения (значение Called from является значением по умолчанию) 55 Section Heading Наследование классов • Для наследования классов применяется специальный дескриптор extends RRepLedgerPosting RunBaseBatch 56 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Функциональные ключи Стандарты разработки 57 Section Heading Пункты меню (Menu Items) • • Пункты меню являются листьями меню и содержат ссылку на элемент системы (форму, отчет, класс) Пункты меню делятся на три категории: Display. Ссылки на формы Output. Ссылки на отчеты Action. Ссылки на классы • Пункты меню связаны с функциональными ключами 58 Section Heading Меню (Menus) • Меню в системе является деревом, состоящим из узлов (подменю) и листьев (пункты меню, ссылки на меню) 59 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 60 Section Heading Средства разработки отчетов • • • Мастера создания отчетов Среда MorphX Внешние приложения 61 Section Heading Быстрые средства создания отчетов • Автоотчет Позволяет мгновенно получить отчет интересующих Вас справочников • Мастер создания отчетов Пользователь имеет возможность создавать отчеты не прибегая к программированию 62 Section Heading Отчеты среды MorphX • Автоматический дизайн Дизайн создаваемый во время работы приложения • Сгенерированный дизайн Дизайн сформированный средствами разработки 63 Section Heading Сгенерированный дизайн Page Header Section Group Header Prolog Body Epilog Footer Page Footer 64 Section Heading Спецификация автоматического дизайна Page header Body Page footer Page header Prolog Report template Epilog Page footer Page header Prolog Body Report Design Epilog Page footer 65 Section Heading Методы на отчетах • Основные методы на отчетах Init Run Fetch Query Print Prompt Send prompt Execute section Время 66 Section Heading Метод: Init • Инициализирует отчет Init Run Fetch Query Print Prompt Send prompt Executesection Время 67 Section Heading Метод: Run • Производит запуск отчета Init Run Fetch Query Print Prompt Send prompt Execute section Время 68 Section Heading Метод: Fetch • • • Выполняет запрос Выдает полученные записи в отчет При прерывании отчета выдает ошибку Init Run Fetch Query Print Prompt Send prompt Execute section Время 69 Section Heading Метод: Query Prompt • • Открывает диалог запроса Выполнение отчета прерывается, если Query Prompt возвращает false Init Run Fetch Query Print Prompt Send prompt Execute section Время 70 Section Heading Метод: Prompt • • Открывает диалог печати Выполнение отчета прерывается, если Prompt возвращает false Init Run Fetch Query Print Prompt Send prompt Execute section Время 71 Section Heading Метод: Send • Выдает выбранные записи в отчет Init Run Fetch Query Print Prompt Send prompt Execute section Время 72 Section Heading Метод: Execute Section • • Каждая секция имеет метод Execute Section Execute Section записывает секцию и ее содержание в отчет Init Run Fetch Query Print Prompt Send prompt Execute section Время 73 Section Heading Метод: Print • Выводит сгенерированный отчет в диалог печати Init Run Fetch Query Print Prompt Send prompt Execute section Время 74 Section Heading Отчеты внешних приложений • • Работа с COM-объектами Документы MS Word и MS Excel 75 Section Heading Работа с COM-объектами Технология COM позволяет Microsoft Axapta использовать функциональность внешних приложений: • интеграция с любыми Windowsприложениями, поддерживающими COM • повторное использование бизнеслогики • встраивание ActiveX-компонентов в формы Axapta 76 Section Heading О технологии COM и DCOM • • COM (Component Object Model) – это спецификация Microsoft на взаимозаменяемые компоненты, выросшая из стандарта связывания объектов OLE. Объект в стандарте COM можно разработать на любом языке программирования, единственное условие – реализация определенного набора неизменных интерфейсов DCOM – стандарт организации распределенных вычислений путем обращения к COM-объектам, находящимся на удаленных ПК 77 Section Heading Microsoft Axapta как COM-клиент • Набор классов для взаимодействия с COM объектами COM • COMDispFunction • COMEnum2Object • COMEnum2Variant • COMError • • Элементы управления ActiveX в формах • Мастер оболочек для COM – объектов 78 Section Heading Microsoft Axapta как COM-сервер Axapta Business Connector Инкапсулирует бизнес-логику, предоставляя внешним приложениям доступ к объектам системы • IUnknown IAxapta IAxapta2 IAxaptaObject IAxaptaRecord IAxaptaContainer IAxaptaBuffer IAxaptaParameterList Axapta Business Connector 79 Section Heading Документы MS Office Выдача отчетов через • MS Word ComWordDocument_RU • MS Excel ComExcelDocument_RU 80 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 81 Section Heading Управление безопасностью системы Конфигурационные ключи (configuration keys) • • • Объединяют группу программных элементов системы, в сумме предоставляющих некоторую функциональность Включение/выключение функциональности Контролируются лицензионными кодами Ключи контроля доступа (security keys) • Инструмент управления доступом к интерфейсу на уровне групп пользователей 82 Section Heading Конфигурационные ключи • • • Конфигурационный ключ отвечает за одну или более функциональных областей приложения Отключив конфигурационный ключ, Вы тем самым отключаете соответствующую функциональность системы Конфигурационные ключи образуют иерархическую древовидную структуру Меню Пункты меню Таблицы Расширенные типы данных Элементы форм Конфигурационный ключ Поля таблиц 83 Section Heading Ключи контроля доступа • • • Наследуют Конфигурационные ключи Управляют более детализированным конфигурированием системы Ключи управления доступом связаны с группами пользователей Axapta 84 Section Heading Управление доступом Иерархия Ключи управления доступом Пользователь Axapta Домены Axapta Права групп пользователей Группа пользователей Группа пользователей Доступ на уровне записи Проверка пароля Домен Регистрация в базе данных Доступ к таблицам Ключ упр. доступом Ключ упр. доступом Ключ упр. доступом Конфигурационный ключ Лицензионный код Конфигурационный ключ Лицензионный код 85 Section Heading Где мы сейчас • • • • • • • • • • • Среда разработки MorphX Язык X++ Макросы Таблицы Формы Запросы Классы Меню и пункты меню Отчеты Конфигурационные ключи Стандарты разработки 86 Section Heading Стандарты именования Для именования объектов в Аксапта следует придерживаться следующих правил: • • • Мнемонические (само объясняющие) наименования на английском языке Правила разделения Российской и международной разработки - любые российские расширения и дополнения к стандартной функциональности начинаются на префикс R (постфикс RU – устаревший вариант) Правила наименований клиентских версий – клиентский код префикса или постфикса 87 Section Heading Правила заглавных и строчных букв и цифр • • • • • Наименование должно начинаться с буквы, далее можно использовать цифры Все слова в названии выделяются заглавной буквой Со строчной буквы начинаются наименования методов, функций, ключевых слов и переменных С заглавной буквы начинаются наименования таблиц, полей, индексов, отношений, классов, форм, источников данных, расширенных и перечислимых типов, макросов, запросов и отчетов С символа «_» начинаются параметры методов 88 Section Heading Оформление кода • • Использование лаконичных комментариев Использование отступов и пробелов Величина отступа – 4 пробела или 1 Tab Пробелы используются • При разделении всех ключевых слов • После запятой при перечислении функций и методов 89 Section Heading Вопросы ... и ответы 90