воскресенье, 16 декабря 2007 г.

Юзабилити Интранет-порталов

Недавно прослушал вэбкаст о юзабилит Интранет-сайтов. Итак, краткие выдержки из него.

Есть проблема: информационная разобщенность внутри компании между сотрудниками филиалов и даже между отделами, находящимися в соседних комнатах. Интранет-портал как и служит целям объединения работников, их командной работе.

Интранет — это прежде всего источник информации. Когда он внедряется в компании, то вынужден конкурировать с прочими источниками информации: желтыми самоклеющимися листочками, всезнающим соседом Димой, адресной книгой Outlook и прочими.
Интранет принесет пользу только в том случае, если будет эффективнее других источников информации.

Если требуется более десяти секунд, чтобы добраться до справочной информации (телефоны, адреса, должности), то ну его к черту этот Интранет.

Все, что похоже на баннер, будет восприниматься как баннер, а значит — пользователь проигнорирует это. Такой эффект получил название «баннерная слепота». Заболевание свойственно людями, работающим в Интернет больше двух месяцев, то есть всем.

Некоторые компании идут на рекламирование Интранет-портала среди сотрудников. Для этого, например, делают календарики. Ведущий вэбкаста Константин Самойлов посоветовал, чтобы на подобной рекламе находилась действительно ценная информация — горячие телефоны и клавиши, например.

Чаще всего пользователям нужен фильтр по имени, фамилии, почтовому ящику и внутреннему номеру телефона.

Лучше полностью отказаться от ввода пароля при входе в Интранет-портал.

воскресенье, 9 декабря 2007 г.

Форма: создание столбцов на гриде

[id:52]

Создание столбцов на гриде (Grid) может выполняться: по коммунистически вручную, либо переносом полей из датасорса.

Создайте проект Blog52 и форму BLG_Form52.

Создайте датасорс по имени Address и привяжите его к таблице с этим же именем. На дизайн формы нужно добавить контрол Grid.

Теперь создаем столбцы грида: щелкните правой клавишей на нем и выберите пункт «Создать Control», «ComboBox». Чтобы столбец показывал данные, его нужно привязать к полю таблицы. Для этого у контрола ComboBox в свойстве DataSource выберите источник Address (он единственный на форме), а свойство DataField в значение «type» (это название поля таблицы Address). Этим мы добились, чтобы на гриде появился столбец с типами адресов. Создание столбца на таблице вручную

Теперь создадим еще столбец, но менее трудоемким способом Drag&Drop. Удобно открыть в отдельном окне список полей датасорса Address (как это сделать, смотрите шаг «Форма: this is my first time»). Найдите там поле Name и перетащите его на грид. Появиться новый контрол типа StringEdit с именем «Address_Name», который уже привязан к полю Name датасорса Address.
Вот такая получается форма: Результат

Заметили, что в зависимости от добавляемого контрола, доступны табличные поля только совместимого типа? Выбрали выпадающий список ComboBox, и в свойстве DataField система показывает только поля типа перечисление (Enum). А если бы создавали контрол типа RealEdit (он работает с вещественными числами), то и привязаться можно было бы только к полю типа Real.

Интересная особенность: если на гриде не установлено значение датасорса, но в тоже время на его контролах (столбцах) есть привязка к источнику данных и конкретному полю в нем, то данные на гриде не отобразятся. Другими словами, если вы зайдете в свойства контрола Grid и сделаете пустым значение пункта DataSource, то форма перестанет показывать данные. И это не смотря на то, что в наших столбцах русским по белому сказано, откуда надо брать данные.

Задание в догонку: сделайте так, чтобы форма BLG_Form52 могла разворачиваться на полный экран. Для этого нужно изменить всего два свойства одного контрола (мы уже это делали).

Итог
  • контролы, которые добавляются на грид, превращаются в его столбцы;
  • проще создавать контролы на форме путем перетаскивания полей из датасорса.

Форма: this is my first time, часть 3

[id:57]

Наша первая форма (см. шаг «Форма: this is my first time, часть 1») все еще не приняла товарный вид. Надо заняться ее улучшением. Два дефекта:

  1. Форма не разворачивается на полный экран;
  2. Между гридом и вкладкой, на которой он находится, образовалась унылая пустота.
Проблемные места формы

Чтобы исправить первое, зайдите в свойства дизайна формы (ветка Designs, Design) и установите значение свойства WindowResize равным "Dynamic". Теперь вы можете разворачивать окно. Вот только вкладки не будут заполнять свободное пространство снизу. Установка возможности изменять размер формы

Для исправления второй огрехи нужно поработать с контролом Grid: установите его свойства Width и Height равными «Column width» и «Column height» соответственно. Тем самым вы приказываете гриду занять все возможное пространство, которое имеется на вкладке «Обзор» (ведь он находиться на ней). Это избавило нас от второй проблемы. Но все еще вкладки не изменяют своего размера при разворачивании формы.

Жизненное пространство контрола Grid на форме VeryFirstForm ограничено рамками вкладки «Обзор». Область для набора вкладок Tab ограничено размерами формы, плюс справа отъел себе пространство контрол ButtonGroup. Чтобы сказать Tab-у «Чувствуй себя как дома» установите его свойства Width и Height равными «Column width» и «Column height».

Теперь все будет хорошо.

Итог
  1. Если установить свойство Width контрола равным «Column width», то он займет всю доступную ширину области, где находится;
  2. Если установить свойство Height контрола равным «Column height», то он займет всю доступную высоту области, где находится.

Форма: this is my first time, часть 2

[id:56]

Разберем подробнее, а что было, собственно, сделано на предыдущем шаге. Мы создали форму VeryFirstForm.

Форма в Аксапте — это класс с готовым функционалом, который умеет работать с таблицами базы данных, используя своих помощников — источники данных. Класс формы состоит из трех частей: Составляющие формы

Источник данных, или датасорс, или datasource — тоже класс, посредник между элементами пользовательского интерфейса (форма, гриды, поля ввода …) и таблицами базы данных. Датасорсов может быть много, а может не быть вовсе, но каждый всегда привязан только к одной таблице. Мы можете создать методы на источнике данных и даже на отдельных его полях. Но сейчас это не так важно.
Как вы понимаете, нет никаких «полей датасорса». Есть поля таблицы, которую он «представляет».

Методы формы ничем не отличаются от методов любого другого класса.

Дизайн (ветка Design) — внешний вид формы. Заметили, что в предыдущем шаге мы вообще не заморачивались с расположением контролов? Единственно, что было задано нами, это иерархия контролов. Однако все элементы на форме упорядочились сами по себе. Это называется «технологией IntelliMorph», она думает за вас и выравнивает контролы по своему разумению с учетом ваших подсказок.

Вы можете вручную, как обычно делается в других средах разработки, расставить все элементы интерфейса попиксельно. Но в мире Аксапты за такое крутят у виска, а иногда дают канделябром по ушам.

Можно спорить является ли недостатком Аксапты такое унылое однообразие форм, стандартизованность и унифицированность (как результат работы IntelliMorph). Скажу одно, в своей ежедневной работе только 1/10 процента всех шевелений мозговых извилин приходится на задачи проектирования пользовательского интерфейса. Я более сосредоточен на корректной автоматизации бизнес-процессов моего заказачика. А эстетство и эксперименты с юзабилити не приветствуются в условиях сжатых сроков реализации проекта.

Еще немного про элементы интерфейса. Вы помните, мы создали единственную кнопку closeForm в ветке ButtonGroup дизайна формы? Это не просто кнопка (Button), это CommandButton! А значит к ней можно привязать команду. Мы это и сделали через свойство Command. Нажимая на нее, выполняется команда закрытия текущей формы. А IntelliMorph позаботился о том, чтобы на кнопке отображался текст «Закрыть» (свойство "Text" мы не задавали).

Итог

Пользовательский интерфейс в Аксапте — забота технологии IntelliMorph, а не разработчика.