WF-system Architecture

From RunaWFE
Jump to navigation Jump to search
Runa WFE 2.3
Архитектура системы

© 2004-2009, ЗАО “Руна ”. RUNA WFE является системой с открытым кодом и распространяется в соответствии с LGPL лицензией (http://www.gnu.org/licenses/lgpl.html).


Поддержка форм MS InfoPath 2007

Начиная с версии 2.2 система RunaWFE поддерживает создание форм задач в формате MS InfoPath 2007.

Формы MS InfoPath 2007 могут быть отображены двумя способами:

  • «Толстый клиент»Форма отображается при помощи самого приложения InfoPath или при помощи ActiveX/.NET компонентов InfoPath.
  • «Тонкий клиент»Форма отображается при помощи совместимого Web-браузера(требует поддержки со стороны сервера, например использования Office Forms Services).

В первом случае поддерживается весь спектр функциональных возможностей и элементов управления MS InfoPath 2007, но для отображения формы требуется установленное на клиентской машине приложение MS InfoPath 2007.

Во втором случае наличия MS InfoPath 2007 не требуется, необходимо лишь наличие «совместимого» браузера. Наиболее «совместимым» браузером, естественно, считается MS Internet Explorer 6.0/7.0. Однако поддерживаются и другие браузеры, в том числе и работающие на платформах, отличных от Windows. Однако в этом случае поддерживается только часть функциональных возможностей и только HTML-совместимые элементы управления MS InfoPath 2007[1].

На текущий момент в системе RunaWFE поддержка форм MS InfoPath 2007 реализована по принципу «толстого клиента». Для работы с формами используется .NET-компонент Microsoft.Office.InfoPath.FormControl[2], входящий в поставку MS InfoPath 2007.

Соответственно, поддержка форм MS InfoPath 2007 в системе RunaWFE возможна только на системе Windows при наличии .NET 2.0 и установленном MS InfoPath 2007[3].

Соответствие между типами данных MS InfoPath 2007 и RunaWFE

MS InfoPath 2007 поддерживает широкий набор различных типов данных: от простейших числовых полей до xml-документов и бинарных значений. С другой стороны, RunaWFE имеет определённый набор типов переменных, которые могут быть использованы в бизнес-процессах.

При работе с формами MS InfoPath используется следующее отображение:

  • Простые числовые поля конвертируются в соответствующие форматы.Например: xsd:double — DoubleFormat
  • Типы, представляющие дату и время конвертируются в соответствующие аналоги RunaWFE.Например: xsd:date - DateFormat При этом представление ISO 8601 конвертируется во внутреннее представление RunaWFE[4].
  • Булевский тип данных (xsd:boolean) конвертируется в BooleanFormat[5].
  • Строковые типы xsd:string и my:requiredString конвертируются в StringFormat.
  • Файловые типы xsd:base64Binary и my:requiredBase64Binary конвертируются в FileFormat.

Все прочие типы не поддерживаются и игнорируются. Для них не осуществляется привязка полей формы переменным бизнес-процесса.

Поддержка в редакторе бизнес-процессов

Для редактирования форм в редакторе GPD используется само приложение MS InfoPath 2007. В GPD имеется специальный шаблон — пустая URN-based[6] форма, - на основе которого создаются все формы в RunaWFE.

После сохранения пользователем отредактированной формы, GPD анализирует содержимое xsn-файла и определяет список переменных формы, их типы и правила валидации формы.

Список переменных формы определяется по содержимому xsd-схемы, описывающей xml-данные формы.

Типы переменных RunaWFE определяются согласно правилам, описанным в разделе Соответствие между типами данных MS InfoPath 2007 и RunaWFE.

Правила валидации определяются на основе правил

  • xsd-схемыДля my:requiredBase64Binary и my:requiredString добавляется проверка на непустоту переменной бизнес-процесса
  • xsf-манифестаПравила проверки полей, заданный в MS InfoPath

TODO: описать точно поддерживаемые правила валидации

При экспорте бизнес-процесса GPD подменяет идентификатор формы и publishUrl, чтобы избежать конфликта версий формы[7].

TODO: поддержка template parts

Формат архива бизнес-процесса

Формат архива бизнес-процесса практически не потребовал никаких изменений. Во-первых, добавился новый тип форм: type=“xsn” в файле forms.xml. Во-вторых, в архиве сохраняются сами файлы форм.

Пример (InfoPathDemo.par):

forms.xml:

<?xml version="1.0" encoding="UTF-8"?>
<forms xmlns="http://runa.ru/xml"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://runa.ru/xml forms.xsd">
    <form file="start.xsn"
        jsValidation="false"
        state="start"
        type="xsn"
        validationFile="start.validation.xml"/>
    <form file="state1.xsn"
        jsValidation="false"
        state="state1"
        type="xsn"
        validationFile="state1.validation.xml"/>
</forms>

Содержимое архива:

META-INF
forms.xml
gpd.xml
graph.gif
orgfunctions.xml
processdefinition.xml
start.validation.xml
start.xsn
state1.validation.xml
state1.xsn
variables.xml

Поддержка на стороне сервера

В текущей реализации (при поддержке отображения форм MS InfoPath 2007 в «толстом клиенте» RTN) от сервера RunaWFE требуется[8]:

  • Поддержка загрузки xsn-файла формыРеализуется через специальный Action.
  • Поддержка загрузки значений переменных бизнес-процессаРеализуется через специальный Action. В качестве входных параметров (GET-запрос) указывается список переменных бизнес-процесса, значения которых нужно получить. В качестве результата клиент получает XML-документ со значениями указанных переменных.
  • Поддержка отправки значений полей формы на серверСо стороны сервера RunaWFE не требуется специальной поддержки для обработки заполненных форм MS InfoPath, т.к. вся необходимая обработка происходит на стороне клиента.

Поддержка на стороне клиента

Архитектурно, вся функциональность по работе с формами MS InfoPath на клиентской стороне сосредоточена в проекте ipwctrl, который представляет из себя .NET-компонент, экспортирующий WinForms-компонент для использования в браузере MS Internet Explorer 6.0/7.0[9] и ActiveX-компонент для использования в «толстом» клиенте RTN.

Компонент ipwctrl осуществляет необходимое взаимодействие с сервером RunaWFE по протоколу HTTP:

  • загружает значения переменных бизнес-процесса, необходимых для отображения формы
  • отправляет заполненную форму на сервер
  • прозрачно обрабатывает параметр jsessionid в URL'ах и т.д.

С другой стороны, этот компонент взаимодействует с FormControl:

  • инициализирует и предоставляет контекст для рисования
  • отдаёт команду на загрузку формы с сервера
  • заполняет загруженную форму начальными значениями
  • отдаёт команду на валидацию формы перед отправкой на сервер[10]
  • отдаёт команду на выгрузку формы после успешной отправки на сервер

Для отправки данных на сервер используется собственная реализация метода POST, т.к. стандартные реализации, представленные в библиотеке .NET Framework, не позволяют установить все необходимые параметры запроса (cookie, приаттаченные файлы и т.п.).

При работе с отключенными в браузере cookie библиотеки ipwctrl прозначно внедняется идентификатор сессии jsessionid во все используемые URL.

На текущий момент не поддерживаются формы с несколькими отображениями (view). При обработке такой формы будет использовано отображение по умолчанию.

  1. Подробная информация приведена на странице http://office.microsoft.com/en-us/infopath/HA102105871033.aspx
  2. Хорошим источником информации по программированию для InfoPath на .NET является книга ISBN 0-321-41059-9: “Designing Forms for Microsoft Office InfoPath and Forms Services 2007” by Scott Roberts and Hagen Green Вся информация также имеется на сайте корпорации Microsoft: http://msdn.microsoft.com/en-us/office/aa905434.aspx
  3. Работоспособность системы под эмуляторами типа wine и т.п. не рассматривалась.
  4. При проектировании формы следует учитывать, что RunaWFE хранит время с точностью до минут, а InfoPath — с точностью до миллисекунд. При конвертации секунды и миллисекунды будут отброшены. Имеет смысл их скрывать при отображении в элементах управления InfoPath.
  5. MS InfoPath поддерживает различные пары значений для булевского типа: 0/1 и TRUE/FALSE. RunaWFE поддерживает только TRUE/FALSE. При проектировании формы следует использовать только эту пару значений.
  6. Описание свойств URN- и URL-based форм: http://msdn.microsoft.com/en-us/library/bb251025.aspx
  7. Описание здесь: http://blogs.msdn.com/infopath/archive/2004/05/20/136165.aspx
  8. В случае поддержки форм MS InfoPath 2007 в браузере от сервера дополнительно требуется поддерживать проверку HTTP-заголовков для выдачи корректной диагностики при невозможности воспроизвести формы рендеринг HTML-формы, содержащей тэг object и поддержка загрузки сборки ipwctrl.
  9. В данный момент поддержка форм MS InfoPath 2007 в браузере находится в состоянии экспериментальной и не документируется.
  10. Нежелательно помещать элементы типа Submit на формы, предназначенные для использования в системе RunaWFE, т.к. они будут работать некорректно — при отправке формы на сервер не используются возможности, предоставляемые MS InfoPath.