DIRECTUM 4.9. Приятные дополнения для прикладных разработчиков.

28 15

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

InputDialog. Работа как с объектом.

Традиционно работа с диалогами осуществлялось только с помощью функций InputDialog и InputDialogEx. При этом настройка такого диалога ограничивалась только параметрами этих функций. В Directum 4.9 появилась возможность работать с диалогом как с объектом IDialog. Свойства и методы объекта схожи со свойствами и методами объекта IComponent. В результате мы получаем доступ и до IForm диалога, и до значений каждого реквизита и так далее. Все это дает разработчику большие возможности на проектирование собственных форм через объектную модель.

Хотите заблокировать поля в зависимости от условий? Пожалуйста! Хочется переместить поле в правый нижний угол? И это возможно! Теперь можно отказаться от “тяжелой” обработки результата работы диалога, использовать несколько раз диалог без повторного его создания, а также многое другое.

Создать диалог как объект можно с помощью новой функции CreateInputDialog, которая своими параметрами похожа на функцию InputDialogEx. Различие в том, что CreateInputDialog возвращает IDialog, после чего можно заняться его гибкой настройкой.

Пример кода выше описанного диалога:

Dialog = CreateInputDialog(
    "||Пример строки|Пример признака";
    "Так как методы и свойства объекта IDialog соответствуют методами и свойствам IComponent, мы получаем возможность настраивать блокировку полей, их расположение на форме и многое другое."; 
    "String|String:30|String:30|Pick:Да,Нет"; "Пример работы с диалогом как работы с объектом")
  // Настроить размеры формы
  DialogForm = Dialog.Form
  DialogForm.Width = 415
  DialogForm.Height = 190
  Controls = DialogForm.Controls
  // Настроить расположение первого поля
  Control = Controls.Values(0)
  Control.Left = 5
  Control.Width = 400
  Control.Height = 80
  Control.ReadOnly = TRUE
  // Настроить расположение второго поля
  Control = Controls.Values(1)
  Control.Left = 85
  Control.Top = 55
  // Настроить расположение третьего поля
  Control = Controls.Values(2)
  Control.Left = 100
  Control.Top = 100
  //Control.Height = 30
  Control.Width = 110
  // Настроить расположение четвертого поля
  Control = Controls.Values(3)
  Control.Top = 100
  Control.Left = 335
  DialogForm.Show
  // Получить результат работы диалога
  if Dialog.RecordCount > 0
    ResultStringList = CreateStringList()
    ResultStringList.Delimiter = '|'
    I = 1
    while I < 4
      Comment = Dialog.RequisiteValues.Values(I)
      ResultStringList.Add(ifThen(Assigned(Comment); Comment; ''))
      I = I + 1
    endwhile
    Result = ResultStringList.DelimitedText
  endif

DualListDialog. Поиск по доступным элементам

Диалог с возможность выбирать элементы из одного списка и добавлять в другой обзавелся интересным дополнением: теперь можно искать элементы в списке доступных элементов. Такое нововведение упрощает работу с диалогом для пользователя, а для разработчика расширяет область применения DualList’a.

Папки поиска. События.

У папок поиска появилось собственное событие! Данный механизм отлично подходит для перенастройки критериев поиска, что позволяет настроить поиска так, как вам нужно.

Событие поиска отрабатывается в случаи открытия папки или при ее обновлении. В событии также доступны объекты Object и Sender:

  • Object – IReference, ссылающийся на справочник Поиски;
  • Sender – ISearchDescription, содержащий текущие критерии поиска.

 

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

Отредактировал Денис Исаев, 31.01.2013 в 21:46
Михаил Сергеев

Денис, очень интересно было прочитать про IDialog с примером кода.

Мне кажется, в разделе Папки поиска. События. именно этого не хватает (решаемой задачи и куска кода).

Анна Долганова

Смайлик прелесть) А можно в IDialog задать произвольные кнопки? Напр. Далее

Денис Исаев
Денис, очень интересно было прочитать про IDialog с примером кода. Мне кажется, в разделе Папки поиска. События. именно этого не хватает (решаемой задачи и куска кода).
Михаил, в ближайшее время обязательно добавлю примеры для событий папок поиска
Смайлик прелесть) А можно в IDialog задать произвольные кнопки? Напр. Далее
 
Аня, можно задавать произвольный набор кнопок (по аналогии с функцией InputDialogEx())
Анна Долганова

Денис, в параметрах функции CreateInputDialog не нашла параметра, отвечающего за кнопки, может я не там искала?

Михаил Сергеев

Анна, не CreateInputDialog, а InputDialogEx.


 
Анна Долганова

Михаил, InputDialogEx не предполагает гибкую настройку, нежели CreateInputDialog, что описано выше. Меня интересуют кнопки в CreateInputDialog - как их создать, и можно ли создать.

И, судя по запрашиваемым параметрам, мне кажется, что CreateInputDialog больше похожа на InputDialog, чем на InputDialogEx.

Александр Павлов

Добавьте, пожалуйста, пример для событий поиска.

Можно ли создавать программно папки поиска с кодом в событии?

Михаил Тарасов

Здорово!!!

А кнопка событие, надеюсь, доступна только администраторам?

Можно ли устанавливать событие программно? Например при создании папки?

Можно ли устанавливать обработчики событий на контролы формы inputDialog'a, как это делается с реквизитами справочников (Событие изменения, событие "Выбор из справочника")?

Можно ли устанавливать фильтры на поля типа "Справочник" на форме inputDialog'a?

Денис Исаев
Меня интересуют кнопки в CreateInputDialog - как их создать, и можно ли создать.
Аня, в функции CreateInputDialog нет возможности настравить кнопки. Доступны только стандартные Ok и Cancel. Тем самым CreateInputDialog является аналогом InputDialog
Арслан Абакаров

Это очень круто.

Денис Архипов

а можно как-то программно "нажать" в реквизите типа справочник кнопку выбора из справочника?

Михаил Сергеев

А многострочное поле нельзя в InputDialog показать?

Анатолий Придыбайло

А что случилось с этой функцией в версии 5.2 и выше с появлением компоненты отдельной компоненты Диалоги? пытаюсь выполнить приведенный код, а мне выходит пустая форма без полей!

Денис Исаев
А что случилось с этой функцией в версии 5.2 и выше с появлением компоненты отдельной компоненты Диалоги? пытаюсь выполнить приведенный код, а мне выходит пустая форма без полей!

Это дефект в новой версии. Его зарегистрировали.

Денис Исаев
А что случилось с этой функцией в версии 5.2 и выше с появлением компоненты отдельной компоненты Диалоги? пытаюсь выполнить приведенный код, а мне выходит пустая форма без полей!

Принцип работы функции изменился в версии 5.2, несовместимость останется, к сожалению. Информация об этом будет внесена в справку по системе. Для корректной работы в версии 5.2 обращение к контролам формы необходимо осуществлять, начиная с индекса 1, а не 0 - Dialog.Form.Controls.Values(1)

Авторизуйтесь, чтобы написать комментарий