LXF98:Ананас
Belogorie (обсуждение | вклад) |
Yaleks (обсуждение | вклад) м (шаблон) |
||
(не показаны 10 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
+ | {{Цикл/Ананас}} | ||
+ | |||
==Создаем CRUD-приложение== | ==Создаем CRUD-приложение== | ||
''<font color=darkred>'''ЧАСТЬ 2'''</font> Вариации «Hello, World!» набили оскомину – и '''Андрей Паскаль''' будет стараться избежать надоевшего приветствия до последнего, а попутно создаст бизнес-приложение, не написав ни строчки кода!'' | ''<font color=darkred>'''ЧАСТЬ 2'''</font> Вариации «Hello, World!» набили оскомину – и '''Андрей Паскаль''' будет стараться избежать надоевшего приветствия до последнего, а попутно создаст бизнес-приложение, не написав ни строчки кода!'' | ||
+ | ---- | ||
+ | |||
+ | <font color=red>'''Важно! Загрузить изображения...'''</font> | ||
+ | |||
+ | ---- | ||
Из чего состоит приложение Ананаса? Как начать работу над собственной бизнес-схемой? | Из чего состоит приложение Ананаса? Как начать работу над собственной бизнес-схемой? | ||
Строка 19: | Строка 26: | ||
*Банк. | *Банк. | ||
− | Разработка бизнес-схем ведется в среде разработки Дизайнер платформы Ананас. После успешного запуска командой | + | Разработка бизнес-схем ведется в среде разработки <font color=darkblue>Дизайнер</font> платформы Ананас ('''Рис. 1'''). После успешного запуска командой |
[app@app ~]$ ananas-designer | [app@app ~]$ ananas-designer | ||
− | Дизайнер предложит выбрать бизнес-схему для работы из списка, точно так же, как предлагает выбрать бизнес-схему при запуске сам Ананас. Однако, в отличие от Ананаса, Дизайнер предоставляет доступ к настройке и созданию/модификации структур данных, алгоритмов, а также печатных и экранных форм бизнес-схемы. | + | <font color=darkblue>Дизайнер</font> предложит выбрать бизнес-схему для работы из списка, точно так же, как предлагает выбрать бизнес-схему при запуске сам Ананас. Однако, в отличие от Ананаса, <font color=darkblue>Дизайнер</font> предоставляет доступ к настройке и созданию/модификации структур данных, алгоритмов, а также печатных и экранных форм бизнес-схемы. |
Для создания новой бизнес-схемы требуется указать (или создать новую) группу в окне диалога выбора бизнес-схем и активировать пункт Новая бизнес-схема меню Действия. | Для создания новой бизнес-схемы требуется указать (или создать новую) группу в окне диалога выбора бизнес-схем и активировать пункт Новая бизнес-схема меню Действия. | ||
Строка 29: | Строка 36: | ||
Открывшийся диалог позволяет задать параметры новой бизнес-схемы. Наиболее важными из них являются параметры доступа к базе данных на SQL-сервере и положение файла бизнес-схемы в файловой системе вашего компьютера. Если вы укажете несуществующую базу данных или несуществующий файл бизнес-схемы, они будут созданы Ананасом автоматически. | Открывшийся диалог позволяет задать параметры новой бизнес-схемы. Наиболее важными из них являются параметры доступа к базе данных на SQL-сервере и положение файла бизнес-схемы в файловой системе вашего компьютера. Если вы укажете несуществующую базу данных или несуществующий файл бизнес-схемы, они будут созданы Ананасом автоматически. | ||
− | + | На '''Рис. 2''' показан пример заполнения параметров настройки бизнес-схемы для случая использования ''MySQL'' в качестве сервера баз данных. | |
− | + | *'''Имя файла''' ресурса содержит ссылку на файл, в котором хранятся значения всех остальных полей этого диалога. Имеется возможность выбора ранее созданного файла ресурса: для этого достаточно вызвать диалог выбора файла щелчком по кнопке, расположенной справа от поля с именем файла ресурса. При открытии файла ресурса значения всех полей диалога будут заменены значениями из этого файла. | |
− | + | *''Заголовок базы данных''' предназначен для пользователя и отображается в списке доступных для выбора баз данных в диалоге <font color=darkblue>Список бизнес-схем</font>, появляющемся при старте <font color=darkblue>Дизайнера</font>. | |
− | + | *'''Имя базы данных''' содержит имя базы данных, используемое системой при доступе к серверу базы данных. | |
− | + | *'''Тип сервера базы данных''' позволяет выбрать один из поддерживаемых Ананасом серверов баз данных (''MySQL'', ''PostgreSQL'' или ''SQLite''). Разумеется, следует убедиться, что соответствующий выбираемому вами типу сервер установлен и запущен, так как здесь вы указываете лишь драйвер, который не будет работать, если не установлен соответствующий сервер. | |
− | + | *'''Адрес сервера базы данных''' – это адрес компьютера, на котором установлен сервер выбранного выше типа. Разумеется, сервер баз данных может работать как на том же самом компьютере, где вы установили Ананас, так и на любом другом. Если сервер баз данных запущен локально, здесь следует указать значение <font color=darkred>localhost</font>. В остальных случаях следует узнать адрес сервера у системного администратора. Адрес может быть задан как DNS-именем (например, '''myhost.com'''), так и числовым значением (например, 127.0.0.1). | |
− | + | *'''Порт сервера базы данных''' по умолчанию не содержит никакого значения. Его следует задавать лишь в тех случаях, когда используется нестандартный порт, что случается достаточно редко. По этому вопросу следует консультироваться с системным администратором, выполнявшим установку сервера баз данных. Если вы выполняли установку сервера баз данных самостоятельно и не меняли порт сервера баз данных, то поле <font color=darkblue>Порт сервера базы данных</font> следует оставить пустым. | |
− | + | Задав таким образом значения полей, следует нажать кнопку <font color=darkblue>OK</font>, а затем выбрать только что определенную бизнес-схему и снова нажать <font color=darkblue>OK</font>. После получения подтверждения о локальном сохранении настроек (в каталоге '''~/.ananas''') откроется главное окно <font color=darkblue>Дизайнера</font>. | |
− | + | Наше CRUD-приложение предназначено для управления <font color=darkblue>Справочником контрагентов</font>, поэтому в дереве бизнес-объектов ('''Рис. 3''') нас в первую очередь будет интересовать раздел <font color=darkblue>Справочники</font>. Определение справочника начинается с присвоения ему имени, которое в дальнейшем будет использовано в программировании бизнес-логики в процедурах на языке Ананас-Скрипт. В главном окне <font color=darkblue>Дизайнера</font> щелкните правой клавишей мыши по разделу <font color=darkblue>Справочники</font> и в появившемся меню выберите пункт <font color=darkblue>Новый</font>. | |
− | + | ||
− | Как только вы закроете диалог, где было задано имя справочника, в дереве бизнес-схемы появится папка с именем Справочник контрагентов, внутри которой видны папки Элемент, Группа, Формы. Для определения первого реквизита справочника следует щелкнуть правой кнопкой мыши по папке Элемент и выбрать пункт Новый появившегося меню. В открывшимся диалоге необходимо задать такие свойства реквизита, как Имя, Тип, Ширина (Рис. 4). Прочие свойства задавать | + | В появившемся экранном диалоге закладка <font color=darkblue>Общий</font> позволяет задать имя справочника и заполнить поле <font color=darkblue>Описание</font>. На данном этапе в этом диалоге больше ничего изменять не требуется. Следует закрыть его и перейти к определению реквизитов <font color=darkblue>Справочника контрагентов</font>. Разумеется, среда разработки Ананас позволяет организовать древовидную структуру справочника. Однако, желающих изучить эту тему я адресую к «Справочному руководству по Дизайнеру» Ананаса, а для нашего простого CRUD-приложения древовидная структура в Справочнике контрагентов нам не нужна. |
+ | |||
+ | Как только вы закроете диалог, где было задано имя справочника, в дереве бизнес-схемы появится папка с именем Справочник контрагентов, внутри которой видны папки <font color=darkblue>Элемент</font>, <font color=darkblue>Группа</font>, <font color=darkblue>Формы</font>. Для определения первого реквизита справочника следует щелкнуть правой кнопкой мыши по папке <font color=darkblue>Элемент</font> и выбрать пункт <font color=darkblue>Новый</font> появившегося меню. В открывшимся диалоге необходимо задать такие свойства реквизита, как <font color=darkblue>Имя</font>, <font color=darkblue>Тип</font>, <font color=darkblue>Ширина</font> ('''Рис. 4'''). Прочие свойства задавать | ||
не обязательно, их назначение описано в «Справочном руководстве по Дизайнеру». Закрыв диалог, следует повторить действия снова для определения второго, третьего и т.д. реквизитов справочника. | не обязательно, их назначение описано в «Справочном руководстве по Дизайнеру». Закрыв диалог, следует повторить действия снова для определения второго, третьего и т.д. реквизитов справочника. | ||
===Диалог с пользователем=== | ===Диалог с пользователем=== | ||
− | Задав реквизиты Справочника контрагентов, мы спроектировали структуру данных и подготовили место для их хранения. Теперь необходимо нарисовать экранный диалог для изменения сведений. Для этого следует щелкнуть правой клавишей мыши по подпапке Формы папки Справочник контрагентов и выбрать пункт Новый появившегося меню. В открывшемся диалоге важно определить ровно одно свойство (Режим формы), присвоив ему значение «Диалог элемента». | + | Задав реквизиты <font color=darkblue>Справочника</font> контрагентов, мы спроектировали структуру данных и подготовили место для их хранения. Теперь необходимо нарисовать экранный диалог для изменения сведений. Для этого следует щелкнуть правой клавишей мыши по подпапке Формы папки Справочник контрагентов и выбрать пункт Новый появившегося меню. В открывшемся диалоге важно определить ровно одно свойство (Режим формы), присвоив ему значение «Диалог элемента». |
− | Именно это свойство отвечает за то, что форма будет использоваться в качестве редактора реквизитов элемента Справочника контрагентов всякий раз, когда пользователь будет добавлять нового контрагента или редактировать реквизиты уже имеющегося. Для собственного удобства целесообразно заполнить поле Имя каким-нибудь осмысленным текстом, например, Редактор реквизитов. | + | Именно это свойство отвечает за то, что форма будет использоваться в качестве редактора реквизитов элемента <font color=darkblue>Справочника</font> контрагентов всякий раз, когда пользователь будет добавлять нового контрагента или редактировать реквизиты уже имеющегося. Для собственного удобства целесообразно заполнить поле Имя каким-нибудь осмысленным текстом, например, <font color=darkblue>Редактор реквизитов</font>. |
− | Теперь все готово для перехода к художественной, если можно так выразиться, части создания нашего приложения – «рисованию» экранного диалога. Запустите Редактор диалогов, нажав соответствующую кнопку на вкладке Дизайн – отобразится пустое окно. Слева от него будет расположена палитра доступных диалоговых элементов (виджетов) – окно Toolbox. Справа – редактор свойств элементов – окно Property Editor. Для нашего «натюрморта» будет достаточно | + | Теперь все готово для перехода к художественной, если можно так выразиться, части создания нашего приложения – «рисованию» экранного диалога. Запустите <font color=darkblue>Редактор диалогов</font>, нажав соответствующую кнопку на вкладке <font color=darkblue>Дизайн</font> – отобразится пустое окно. Слева от него будет расположена палитра доступных диалоговых элементов (виджетов) – окно <font color=darkblue>Toolbox</font>. Справа – редактор свойств элементов – окно <font color=darkblue>Property Editor</font>. Для нашего «натюрморта» будет достаточно использовать ровно три элемента палитры: |
− | использовать ровно три элемента палитры: | + | |
− | *Text Label для подписей к полям ввода (Рис. 5). | + | *<font color=darkblue>Text Label</font> для подписей к полям ввода (Рис. 5). |
− | *DBField для полей ввода (Рис. 6) | + | *<font color=darkblue>DBField</font> для полей ввода (Рис. 6) |
− | *ActionButton для кнопок Отмена и Принять (Рис. 6) | + | *<font color=darkblue>ActionButton</font> для кнопок <font color=darkblue>Отмена</font> и <font color=darkblue>Принять</font> (Рис. 6) |
− | Для перетаскивания элементов требуется два клика: первый по элементу палитры, второй – по окну диалога. Перетащите пять раз TextLabel и DBField, разместив их по своему вкусу или как показано на Рис. 7, отредактируйте тексты надписей (двойной щелчок будет здесь незаменим) и задайте привязку для полей ввода, выбрав для каждого из них соответствующий реквизит Справочника контрагентов из списка. Список вызывается двойным щелчком по полю ввода, лежащему в окне диалога. Именно связывание данных (Data bindings), ставшее популярным благодаря таким средам разработки, как Borland Delphi и Visual Basic, и с успехом применяемое в среде разработки платформы Ананас, позволяет нам обойтись при создании CRUD-приложения без написания кода. | + | Для перетаскивания элементов требуется два клика: первый по элементу палитры, второй – по окну диалога. Перетащите пять раз <font color=darkblue>TextLabel</font> и <font color=darkblue>DBField</font>, разместив их по своему вкусу или как показано на '''Рис. 7''', отредактируйте тексты надписей (двойной щелчок будет здесь незаменим) и задайте привязку для полей ввода, выбрав для каждого из них соответствующий реквизит <font color=darkblue>Справочника контрагентов</font> из списка. Список вызывается двойным щелчком по полю ввода, лежащему в окне диалога. Именно связывание данных (Data bindings), ставшее популярным благодаря таким средам разработки, как Borland Delphi и Visual Basic, и с успехом применяемое в среде разработки платформы Ананас, позволяет нам обойтись при создании CRUD-приложения без написания кода. |
− | После проведения несложной процедуры связывания для всех пяти полей ввода,добавьте в окно диалога кнопки Отмена и Принять, использовав для этого элемент ActionButton палитры. Кнопка Отмена должна просто закрывать окно. Кнопка Принять должна дополнительно сохранять содержимое полей ввода в базе данных. | + | После проведения несложной процедуры связывания для всех пяти полей ввода,добавьте в окно диалога кнопки <font color=darkblue>Отмена</font> и <font color=darkblue>Принять</font>, использовав для этого элемент <font color=darkblue>ActionButton</font> палитры. Кнопка <font color=darkblue>Отмена</font> должна просто закрывать окно. Кнопка <font color=darkblue>Принять</font> должна дополнительно сохранять содержимое полей ввода в базе данных. |
− | Поведение кнопки задается в диалоге, вызываемым двойным щелчком по ней. Для кнопки Отмена следует поставить галочки опциям Простое действие и Закрыть диалога. Для кнопки Принять следует поставить третью галочку – Обновить. Для смены текста надписи на кнопке в контекстном меню, вызываемом правой клавишей мыши следует выбрать пункт Edit Text.... | + | Поведение кнопки задается в диалоге, вызываемым двойным щелчком по ней. Для кнопки <font color=darkblue>Отмена</font> следует поставить галочки опциям <font color=darkblue>Простое действие</font> и <font color=darkblue>Закрыть диалога</font>. Для кнопки <font color=darkblue>Принять</font> следует поставить третью галочку – <font color=darkblue>Обновить</font>. Для смены текста надписи на кнопке в контекстном меню, вызываемом правой клавишей мыши следует выбрать пункт <font color=darkblue>Edit Text</font>.... |
===Сделаем красиво=== | ===Сделаем красиво=== | ||
− | В принципе, мы уже закончили – наше приложение будет работать. Но, как всякий уважающий себя кулинар и садовник позаботится о внешнем оформлении своего творения, прежде чем показать его публике, так и программист должен позаботиться о привлекательности создаваемого им приложения. Для придания опрятности нашему диалогу воспользуемся возможностями динамического, автоматически масштабируемого размещения элементов. В этом деле нам помогут «пружинки» и типы размещения «Сетка», «Горизонтальные полоски» и «Вертикальные полоски». | + | В принципе, мы уже закончили – наше приложение будет работать. Но, как всякий уважающий себя кулинар и садовник позаботится о внешнем оформлении своего творения, прежде чем показать его публике, так и программист должен позаботиться о привлекательности создаваемого им приложения. Для придания опрятности нашему диалогу воспользуемся возможностями динамического, автоматически масштабируемого размещения элементов. В этом деле нам помогут <font color=darkblue>«пружинки»</font> и типы размещения <font color=darkblue>«Сетка»</font>, <font color=darkblue>«Горизонтальные полоски»</font> и <font color=darkblue>«Вертикальные полоски»</font>. |
− | Начнем с полей ввода и надписей к ним. Разместив вертикально две пружинки, как показано на Рис. 8, и выделив их все, последовательно щелкая мышкой и удерживая клавишу Shift на клавиатуре, применим тип размещения «Сетка». Получим первый блок сгруппированных элементов диалога. Проделайте то же самое с кнопками Отмена и Принять, только «пружинки» выберите горизонтальные, а тип размещения – «Вертикальные полоски». Последним шагом необходимо снять выделение, ткнув мышкой в пустую область окна диалога, а затем применить тип размещения «Горизонтальные полоски». | + | Начнем с полей ввода и надписей к ним. Разместив вертикально две пружинки, как показано на '''Рис. 8''', и выделив их все, последовательно щелкая мышкой и удерживая клавишу <font color=darkblue>Shift</font> на клавиатуре, применим тип размещения <font color=darkblue>«Сетка»</font>. Получим первый блок сгруппированных элементов диалога. Проделайте то же самое с кнопками <font color=darkblue>Отмена</font> и <font color=darkblue>Принять</font>, только <font color=darkblue>«пружинки»</font> выберите горизонтальные, а тип размещения – <font color=darkblue>«Вертикальные полоски»</font>. Последним шагом необходимо снять выделение, ткнув мышкой в пустую область окна диалога, а затем применить тип размещения <font color=darkblue>«Горизонтальные полоски»</font>. |
− | Не стоит печалиться, если требуемый результат не удастся получить с первого раза. Во-первых, всегда есть возможность отменить последнее действие при помощи клавиатурной комбинации Ctrl+Z, во-вторых, правила динамического масштабирования определяются, помимо прочего, свойством sizePolicy, индивидуально определяемым для каждого элемента диалога в редакторе свойств Property Editor. | + | Не стоит печалиться, если требуемый результат не удастся получить с первого раза. Во-первых, всегда есть возможность отменить последнее действие при помощи клавиатурной комбинации <font color=darkblue>Ctrl+Z</font>, во-вторых, правила динамического масштабирования определяются, помимо прочего, свойством <font color=darkred>sizePolicy</font>, индивидуально определяемым для каждого элемента диалога в редакторе свойств <font color=darkblue>Property Editor</font>. |
Такая работа требует некоторой привычки и терпения первое время. Овладев методикой задания динамического масштабирования и расположения элементов, вы будете тратить на нее минимум времени. | Такая работа требует некоторой привычки и терпения первое время. Овладев методикой задания динамического масштабирования и расположения элементов, вы будете тратить на нее минимум времени. | ||
− | Теперь нашу работу необходимо сохранить и, для проверки – запустить Ананас. Дизайнер закрывать не требуется. При успешном сохранении в соответствующем окне должны появиться сообщения об успешном обновлении структур базы данных, предназначенных для хранения бизнес-объектов. Если появились ошибки, то скорее всего Ананасу не хватило прав для записи в один из каталогов или не работает доступ к базе данных. Помощь по затруднительным ситуациям доступна на форуме проекта. | + | Теперь нашу работу необходимо сохранить и, для проверки – запустить Ананас. <font color=darkblue>Дизайнер</font> закрывать не требуется. При успешном сохранении в соответствующем окне должны появиться сообщения об успешном обновлении структур базы данных, предназначенных для хранения бизнес-объектов. Если появились ошибки, то скорее всего Ананасу не хватило прав для записи в один из каталогов или не работает доступ к базе данных. Помощь по затруднительным ситуациям доступна на форуме проекта. |
===Последний штрих=== | ===Последний штрих=== | ||
− | А теперь – сюрприз: немного кода все-таки потребуется. Дело в том, что среда исполнения приложений Ананаса не знает, какой экранный диалог нашей бизнес-схемы следует запускать сразу после старта, ведь в нашем приложении могло бы быть несколько экранных форм. Нужен какой-нибудь способ известить Ананас о том, что при старте он должен открыть наш Справочник контрагентов. Для этого предусмотрена предопределенная функция на Ананас-Скрипте с названием on_systemstart(). Если среда исполнения находит такую функцию в глобальном модуле бизнес-схемы при старте, она будет автоматически | + | А теперь – сюрприз: немного кода все-таки потребуется. Дело в том, что среда исполнения приложений Ананаса не знает, какой экранный диалог нашей бизнес-схемы следует запускать сразу после старта, ведь в нашем приложении могло бы быть несколько экранных форм. Нужен какой-нибудь способ известить Ананас о том, что при старте он должен открыть наш <font color=darkblue>Справочник контрагентов</font>. Для этого предусмотрена предопределенная функция на Ананас-Скрипте с названием <font color=darkred>on_systemstart()</font>. Если среда исполнения находит такую функцию в глобальном модуле бизнес-схемы при старте, она будет автоматически запущена на выполнение. |
− | запущена на выполнение. | + | |
− | Доступ к глобальному модулю осуществляется через двойной щелчок по корню дерева бизнес-объектов в Дизайнере и выбор вкладки Глобальный модуль появившегося диалога. | + | Доступ к глобальному модулю осуществляется через двойной щелчок по корню дерева бизнес-объектов в <font color=darkblue>Дизайнере</font> и выбор вкладки <font color=darkblue>Глобальный модуль</font> появившегося диалога. |
Вот код, который нужно туда записать: | Вот код, который нужно туда записать: | ||
− | + | <source lang="c"> | |
function on_systemstart() | function on_systemstart() | ||
{ | { | ||
− | sys.Message(0, | + | sys.Message(0,"Привет, Мир! :)"); |
− | cat = new CatalogEditor( | + | cat = new CatalogEditor("Справочник контрагентов"); |
cat.edit(); | cat.edit(); | ||
} | } | ||
+ | </source> | ||
+ | Да, да! Он все-таки напечатает «Привет, Мир!» :) в окне сообщений ('''Рис. 9'''). | ||
+ | |||
+ | ==Врезки== | ||
+ | |||
+ | ===Элемент справочника=== | ||
+ | |||
+ | Элемент справочника – одна из двух составляющих любого справочника Ананаса. Второй составляющей является Группа. Группы служат для группировки элементов и организации вложенного хранения элементов справочников в виде древовидной структуры. Каждая группа может хранить в себе другие группы или элементы | ||
+ | справочника. Элемент справочника предназначен исключительно для хранения реквизитов. Справочник, не содержащий группы, а состоящий лишь из одних | ||
+ | элементов, принято называть плоским. | ||
+ | |||
+ | ===Диалог – это просто=== | ||
+ | |||
+ | Среда разработки Ананас оснащена великолепным WYSIWYG-редактором диалогов, позволяющим в наглядной форме разместить визуальные элементы, такие как надписи, кнопки и поля ввода в окне диалога. | ||
− | + | Более того! Диалоги Ананаса являются динамически масштабируемыми, что, во-первых, совершенно необходимо для сохранения опрятного вида диалогов в гетерогенной среде, когда шрифты операционной системы Windows могут существенно отличаться в пропорциях от шрифтов среды X Window операционной системы Linux; во-вторых, создает дополнительные удобства в ситуации, когда пользователь желает растянуть окно диалога, чтобы использовать все разрешение своего экрана, улучшив тем самым отображение информации. |
Текущая версия на 13:57, 2 июля 2008
|
|
|
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Содержание |
[править] Создаем CRUD-приложение
ЧАСТЬ 2 Вариации «Hello, World!» набили оскомину – и Андрей Паскаль будет стараться избежать надоевшего приветствия до последнего, а попутно создаст бизнес-приложение, не написав ни строчки кода!
Важно! Загрузить изображения...
Из чего состоит приложение Ананаса? Как начать работу над собственной бизнес-схемой?
В стародавние времена хорошим педагогическим приемом считалось дать в начале учебника пример программы, печатающей на экране приветствие «Hello, World!».
Времена меняются, требования растут, и вот уже новая педагогическая мода диктует необходимость демонстрировать в качестве примера первого приложения не просто команду вывода на экран, а целую готовую программу по редактированию таблицы базы данных. Такая программа должна уметь Создавать, Показывать, Изменять и Удалять данные в таблице БД, поэтому ее принято называть CRUD-приложением, по первым буквам английских слов Create, Retrive, Update, Delete.
Так как Ананас – бизнес-платформа, то и наше первое CRUD-приложение будет редактировать данные о бизнес-партнерах, также называемых иногда контрагентами. Итак, сегодня мы разработаем CRUD-приложение «Справочник контрагентов». Интересно заметить, что среда разработки платформы Ананас позволяет создать CRUD-приложение без какого-либо написания кода, так что я даже не стал бы называть такую деятельность программированием. Скорее это проектирование.
Для каждого контрагента в справочнике будет храниться следующий упрощенный для нашего случая состав реквизитов:
- Наименование;
- Почтовый адрес;
- Телефон;
- E-Mail;
- Банк.
Разработка бизнес-схем ведется в среде разработки Дизайнер платформы Ананас (Рис. 1). После успешного запуска командой
[app@app ~]$ ananas-designer
Дизайнер предложит выбрать бизнес-схему для работы из списка, точно так же, как предлагает выбрать бизнес-схему при запуске сам Ананас. Однако, в отличие от Ананаса, Дизайнер предоставляет доступ к настройке и созданию/модификации структур данных, алгоритмов, а также печатных и экранных форм бизнес-схемы.
Для создания новой бизнес-схемы требуется указать (или создать новую) группу в окне диалога выбора бизнес-схем и активировать пункт Новая бизнес-схема меню Действия.
Открывшийся диалог позволяет задать параметры новой бизнес-схемы. Наиболее важными из них являются параметры доступа к базе данных на SQL-сервере и положение файла бизнес-схемы в файловой системе вашего компьютера. Если вы укажете несуществующую базу данных или несуществующий файл бизнес-схемы, они будут созданы Ананасом автоматически.
На Рис. 2 показан пример заполнения параметров настройки бизнес-схемы для случая использования MySQL в качестве сервера баз данных.
- Имя файла ресурса содержит ссылку на файл, в котором хранятся значения всех остальных полей этого диалога. Имеется возможность выбора ранее созданного файла ресурса: для этого достаточно вызвать диалог выбора файла щелчком по кнопке, расположенной справа от поля с именем файла ресурса. При открытии файла ресурса значения всех полей диалога будут заменены значениями из этого файла.
- Заголовок базы данных' предназначен для пользователя и отображается в списке доступных для выбора баз данных в диалоге Список бизнес-схем, появляющемся при старте Дизайнера.
- Имя базы данных содержит имя базы данных, используемое системой при доступе к серверу базы данных.
- Тип сервера базы данных позволяет выбрать один из поддерживаемых Ананасом серверов баз данных (MySQL, PostgreSQL или SQLite). Разумеется, следует убедиться, что соответствующий выбираемому вами типу сервер установлен и запущен, так как здесь вы указываете лишь драйвер, который не будет работать, если не установлен соответствующий сервер.
- Адрес сервера базы данных – это адрес компьютера, на котором установлен сервер выбранного выше типа. Разумеется, сервер баз данных может работать как на том же самом компьютере, где вы установили Ананас, так и на любом другом. Если сервер баз данных запущен локально, здесь следует указать значение localhost. В остальных случаях следует узнать адрес сервера у системного администратора. Адрес может быть задан как DNS-именем (например, myhost.com), так и числовым значением (например, 127.0.0.1).
- Порт сервера базы данных по умолчанию не содержит никакого значения. Его следует задавать лишь в тех случаях, когда используется нестандартный порт, что случается достаточно редко. По этому вопросу следует консультироваться с системным администратором, выполнявшим установку сервера баз данных. Если вы выполняли установку сервера баз данных самостоятельно и не меняли порт сервера баз данных, то поле Порт сервера базы данных следует оставить пустым.
Задав таким образом значения полей, следует нажать кнопку OK, а затем выбрать только что определенную бизнес-схему и снова нажать OK. После получения подтверждения о локальном сохранении настроек (в каталоге ~/.ananas) откроется главное окно Дизайнера.
Наше CRUD-приложение предназначено для управления Справочником контрагентов, поэтому в дереве бизнес-объектов (Рис. 3) нас в первую очередь будет интересовать раздел Справочники. Определение справочника начинается с присвоения ему имени, которое в дальнейшем будет использовано в программировании бизнес-логики в процедурах на языке Ананас-Скрипт. В главном окне Дизайнера щелкните правой клавишей мыши по разделу Справочники и в появившемся меню выберите пункт Новый.
В появившемся экранном диалоге закладка Общий позволяет задать имя справочника и заполнить поле Описание. На данном этапе в этом диалоге больше ничего изменять не требуется. Следует закрыть его и перейти к определению реквизитов Справочника контрагентов. Разумеется, среда разработки Ананас позволяет организовать древовидную структуру справочника. Однако, желающих изучить эту тему я адресую к «Справочному руководству по Дизайнеру» Ананаса, а для нашего простого CRUD-приложения древовидная структура в Справочнике контрагентов нам не нужна.
Как только вы закроете диалог, где было задано имя справочника, в дереве бизнес-схемы появится папка с именем Справочник контрагентов, внутри которой видны папки Элемент, Группа, Формы. Для определения первого реквизита справочника следует щелкнуть правой кнопкой мыши по папке Элемент и выбрать пункт Новый появившегося меню. В открывшимся диалоге необходимо задать такие свойства реквизита, как Имя, Тип, Ширина (Рис. 4). Прочие свойства задавать не обязательно, их назначение описано в «Справочном руководстве по Дизайнеру». Закрыв диалог, следует повторить действия снова для определения второго, третьего и т.д. реквизитов справочника.
[править] Диалог с пользователем
Задав реквизиты Справочника контрагентов, мы спроектировали структуру данных и подготовили место для их хранения. Теперь необходимо нарисовать экранный диалог для изменения сведений. Для этого следует щелкнуть правой клавишей мыши по подпапке Формы папки Справочник контрагентов и выбрать пункт Новый появившегося меню. В открывшемся диалоге важно определить ровно одно свойство (Режим формы), присвоив ему значение «Диалог элемента».
Именно это свойство отвечает за то, что форма будет использоваться в качестве редактора реквизитов элемента Справочника контрагентов всякий раз, когда пользователь будет добавлять нового контрагента или редактировать реквизиты уже имеющегося. Для собственного удобства целесообразно заполнить поле Имя каким-нибудь осмысленным текстом, например, Редактор реквизитов.
Теперь все готово для перехода к художественной, если можно так выразиться, части создания нашего приложения – «рисованию» экранного диалога. Запустите Редактор диалогов, нажав соответствующую кнопку на вкладке Дизайн – отобразится пустое окно. Слева от него будет расположена палитра доступных диалоговых элементов (виджетов) – окно Toolbox. Справа – редактор свойств элементов – окно Property Editor. Для нашего «натюрморта» будет достаточно использовать ровно три элемента палитры:
- Text Label для подписей к полям ввода (Рис. 5).
- DBField для полей ввода (Рис. 6)
- ActionButton для кнопок Отмена и Принять (Рис. 6)
Для перетаскивания элементов требуется два клика: первый по элементу палитры, второй – по окну диалога. Перетащите пять раз TextLabel и DBField, разместив их по своему вкусу или как показано на Рис. 7, отредактируйте тексты надписей (двойной щелчок будет здесь незаменим) и задайте привязку для полей ввода, выбрав для каждого из них соответствующий реквизит Справочника контрагентов из списка. Список вызывается двойным щелчком по полю ввода, лежащему в окне диалога. Именно связывание данных (Data bindings), ставшее популярным благодаря таким средам разработки, как Borland Delphi и Visual Basic, и с успехом применяемое в среде разработки платформы Ананас, позволяет нам обойтись при создании CRUD-приложения без написания кода.
После проведения несложной процедуры связывания для всех пяти полей ввода,добавьте в окно диалога кнопки Отмена и Принять, использовав для этого элемент ActionButton палитры. Кнопка Отмена должна просто закрывать окно. Кнопка Принять должна дополнительно сохранять содержимое полей ввода в базе данных.
Поведение кнопки задается в диалоге, вызываемым двойным щелчком по ней. Для кнопки Отмена следует поставить галочки опциям Простое действие и Закрыть диалога. Для кнопки Принять следует поставить третью галочку – Обновить. Для смены текста надписи на кнопке в контекстном меню, вызываемом правой клавишей мыши следует выбрать пункт Edit Text....
[править] Сделаем красиво
В принципе, мы уже закончили – наше приложение будет работать. Но, как всякий уважающий себя кулинар и садовник позаботится о внешнем оформлении своего творения, прежде чем показать его публике, так и программист должен позаботиться о привлекательности создаваемого им приложения. Для придания опрятности нашему диалогу воспользуемся возможностями динамического, автоматически масштабируемого размещения элементов. В этом деле нам помогут «пружинки» и типы размещения «Сетка», «Горизонтальные полоски» и «Вертикальные полоски».
Начнем с полей ввода и надписей к ним. Разместив вертикально две пружинки, как показано на Рис. 8, и выделив их все, последовательно щелкая мышкой и удерживая клавишу Shift на клавиатуре, применим тип размещения «Сетка». Получим первый блок сгруппированных элементов диалога. Проделайте то же самое с кнопками Отмена и Принять, только «пружинки» выберите горизонтальные, а тип размещения – «Вертикальные полоски». Последним шагом необходимо снять выделение, ткнув мышкой в пустую область окна диалога, а затем применить тип размещения «Горизонтальные полоски».
Не стоит печалиться, если требуемый результат не удастся получить с первого раза. Во-первых, всегда есть возможность отменить последнее действие при помощи клавиатурной комбинации Ctrl+Z, во-вторых, правила динамического масштабирования определяются, помимо прочего, свойством sizePolicy, индивидуально определяемым для каждого элемента диалога в редакторе свойств Property Editor.
Такая работа требует некоторой привычки и терпения первое время. Овладев методикой задания динамического масштабирования и расположения элементов, вы будете тратить на нее минимум времени.
Теперь нашу работу необходимо сохранить и, для проверки – запустить Ананас. Дизайнер закрывать не требуется. При успешном сохранении в соответствующем окне должны появиться сообщения об успешном обновлении структур базы данных, предназначенных для хранения бизнес-объектов. Если появились ошибки, то скорее всего Ананасу не хватило прав для записи в один из каталогов или не работает доступ к базе данных. Помощь по затруднительным ситуациям доступна на форуме проекта.
[править] Последний штрих
А теперь – сюрприз: немного кода все-таки потребуется. Дело в том, что среда исполнения приложений Ананаса не знает, какой экранный диалог нашей бизнес-схемы следует запускать сразу после старта, ведь в нашем приложении могло бы быть несколько экранных форм. Нужен какой-нибудь способ известить Ананас о том, что при старте он должен открыть наш Справочник контрагентов. Для этого предусмотрена предопределенная функция на Ананас-Скрипте с названием on_systemstart(). Если среда исполнения находит такую функцию в глобальном модуле бизнес-схемы при старте, она будет автоматически запущена на выполнение.
Доступ к глобальному модулю осуществляется через двойной щелчок по корню дерева бизнес-объектов в Дизайнере и выбор вкладки Глобальный модуль появившегося диалога.
Вот код, который нужно туда записать:
function on_systemstart() { sys.Message(0,"Привет, Мир! :)"); cat = new CatalogEditor("Справочник контрагентов"); cat.edit(); }
Да, да! Он все-таки напечатает «Привет, Мир!» :) в окне сообщений (Рис. 9).
[править] Врезки
[править] Элемент справочника
Элемент справочника – одна из двух составляющих любого справочника Ананаса. Второй составляющей является Группа. Группы служат для группировки элементов и организации вложенного хранения элементов справочников в виде древовидной структуры. Каждая группа может хранить в себе другие группы или элементы справочника. Элемент справочника предназначен исключительно для хранения реквизитов. Справочник, не содержащий группы, а состоящий лишь из одних элементов, принято называть плоским.
[править] Диалог – это просто
Среда разработки Ананас оснащена великолепным WYSIWYG-редактором диалогов, позволяющим в наглядной форме разместить визуальные элементы, такие как надписи, кнопки и поля ввода в окне диалога.
Более того! Диалоги Ананаса являются динамически масштабируемыми, что, во-первых, совершенно необходимо для сохранения опрятного вида диалогов в гетерогенной среде, когда шрифты операционной системы Windows могут существенно отличаться в пропорциях от шрифтов среды X Window операционной системы Linux; во-вторых, создает дополнительные удобства в ситуации, когда пользователь желает растянуть окно диалога, чтобы использовать все разрешение своего экрана, улучшив тем самым отображение информации.