Описание базовых элементов интерфейса

Материал из Oktell
Версия от 08:23, 26 марта 2015; Oktell Support (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Наверх Формат параметров и выходных значений<<< Описание базовых элементов интерфейса >>>Сервисное взаимодействие

Поскольку методы выполняются управляющим объектом plugin-программы, очевидно, что параметры в них готовятся приложением Oktell, а возвращаемые значения - самой plugin-программой. Поэтому при описании в текущем разделе возвращаемых значений методов везде пишется «возвращает...», а понимается «должно возвращаться...». Подробно формат и состав параметров приводится в дальнеших разделах. В текущем же разделе присутствует общее описание назначения методов.


Общие модульные методы

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

  • Guid GetId ( ). Возвращает уникальный Guid-идентификатор plugin-программы. Используется при различении программ и при обновлениях. По идентификатору приложение загружает plugin в память процесса и не допускает копий.
  • int GetInterfaceVersion ( int lastknownversion ). Возвращает версию интерфейса, на котором базируется plugin-программа.

В качестве параметра из Oktell передается максимально поздняя поддерживаемая версия. Изначально базовая версия 81022. Если plugin-программа при вызове метода возвращает номер версии, неизвестный для текущей версии Oktell, зарегистрировать ее не удастся.

  • string GetModuleVersion ( ). Возвращает версию plugin-программы в строковом виде. Например «A1.0.1».
  • string GetModuleName ( ). Возвращает собственное название plugin-программы. При использовании в комплексе в качестве имени будет использоваться другое, назначенное администратором при регистрации имя. Однако собственное может нести какую-либо дополнительную информацию.
  • string GetDBUpdate ( ). Возвращает строку с запросом в формате Transact-SQL, представляющую собой пакет обновлений для БД при регистрации plugin-программы. Возможно присутствие нескольких батчей, разделенных строчками «GO» согласно tSQL. Запрос выполняется в БД в момент первого сохранения plugin-программы на сервере. Однако возможно и повторное исполнение в случае, если предварительно удалить регистрацию и создать новую с теми же параметрами. Это необходимо иметь в виду при создании запроса-обновления и формировать проверочные условия и/или удаляющие команды. Обновление для БД может отсутствовать. Однако для plugin-программ, реализующих доступ к уникальным сведениям в БД необходимо гарантировать существование в БД соответствующих таблиц, функций и хранимых процедур.

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


Пример возвращаемого значения:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="dbupdate" count="1">
   <property_set>
     <property_cdata key="sqltext"><![CDATA[if exists ( Select * FROM sysobjects where id = object_id ( 'dbo.T_PluginTest' ) )
   Drop Table dbo.T_PluginTest]]></property_cdata>
     <property_cdata key="sqltext">
     <![CDATA[Create table dbo.T_PluginTest (id int identity ( 1, 1 ) Primary Key, name nvarchar ( 50 ), st bit )]]>
 </property_cdata>
     <property_cdata key="sqltext"><![CDATA[Insert into T_PluginTest ( Name, St ) Values ( 'A', 1 )]]></property_cdata>
   </property_set>
 </data>
 </oktellxmlmapper>


Текстовая информация из полей CDATA в каждом элементе property_cdata содержится отдельный batch-блок с запросом в формате tSQL. Все перечисленные запросы выполнятся поочередно в порядке присутствия в теле XML строки. Каждый запрос будет выполнен в отдельном batch-блоке. Если необходимо разделить текст запроса, представленного внутри одного property_cdata, необходимо стандарным способом в необходимом месте разделения вставить строку «GO».


Пример 2 возвращаемого значения.

Можно также возвращать строку, сразу содержащую тело запроса, в котором блоками GO разделяются batch-блоки.

if exists ( Select * FROM sysobjects where id = object_id ( 'dbo.T_PluginTest' ) )
  Drop Table dbo.T_PluginTest
GO

Create table dbo.T_PluginTest (id int identity ( 1, 1 ) Primary Key, name nvarchar ( 50 ), st bit )
GO

Insert into T_PluginTest ( Name, St ) Values ( 'A', 1 )
GO


  • string GetForms ( ). Возвращает перечень заявленных стартовых plugin-форм (и компонентов) в виде строки с XML-содержимым установленной структуры. Для описания каждой plugin-формы используются параметры id, caption (name), description, controltype (control/form/none), module (dialog/crm/scriptcomponent), helplink. Именно этот метод определяет формат работы с plugin-программой. Настройка всех вариантов ее применения в комплексе зависит от состава стартовых plugin-форм и их направленности.

Каждая форма имеет уникальный Guid-идентификатор (id). Используется очевидным образом: Для настройки ссылок, а также для различения параметров (их принадлежности к конкретной форме при обмене информацией между plugin-программой и приложением Oktell). Название (caption) и описание (description) используются для отображения в приложении Oktell в модулях настройки на работу с plugin-программой.

Тип контрола (controltype) определяет в каком виде форма создана в теле plugin-программы, то есть экземпляром какого класса она является (в .NET это System.Windows.Forms.Control или System.Windows.Forms.Form, а в Win32 - имеет ли собственную рамку или встраивается в другие окна). В зависимости от этого клиентское приложение Oktell по-разному организует их отображение в диалоговом режиме. Оконные формы отображаются в собственной рамке, а контрольные размещаются в стандартном операторском диалоговом окне Oktell. Серверные компоненты не имеют визуального содержимого. Этот параметр для них можно не указывать, или указывать равным «2» или «none».

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


Описание интерфейса 001.png


Второй рисунок - формы на базе Form. Понятно, что она может принимать любой вид.


Описание интерфейса 002.png


Вариант использования (module) указывает приложению Oktell, где описываемую форму можно применять в настройках. Очевидно, одна и та же визуальная форма может в принципе быть использована в обоих режимах (операторские диалоговые окна и доступные через меню модули интерфейса). Но в описываемом интерфейсе взаимодействия производится их четкое разделение. Поэтому в случае подобной задачи на уровне объекта управления необходимо приложению Oktell указывать о наличии двух разных форм с разными идентификаторами, а при создании возвращать экземпляры одного класса. Возвращать же одни и те же экземпляры по запросам разных форм не рекомендуется, и делать необходимо крайне осмотрительно, так как при допущении ошибок в проекте итоговые окна могут исчезать и появляться в используемых местах непрогнозируемым образом.

Адрес справки (helplink) используется для режима модулей интерфейса и определяет веб-страницу (или раздел в файле справки), которая будет отображена при щелчке мышью на пиктограмму с вопросительным знаком в поле пункта меню главного окна клиентского приложения, соответствующего описываемой plugin-форме. Если адрес не задан, пиктограмма для пункта меню не отображается. Ссылка может быть адресом веб-страницей или веб-сервиса, а также ссылкой на раздел в некотором файле справки. Поиск файла будет осуществляться в основном каталоге клиентского приложения (его обновление производится стандартным способом через каталог LiveUpdate с обновлениями), и в каталоге с plugin-программой (для использования этого способа при регистрации plugin-программы через архив или вручную файл должен быть размещен в основной каталог plugin-программы). Примеры задания ссылки на автономно доступный файл справки: «plugin1_manual.chm», «manual.chm::/topic.htm#anchor», «form1.htm».

На сервере могут исполняться только компоненты, имеющие невизуальное представление (формы с controltype=2 или controltype=none), и обозначенные для использования в составе сценариев (module=2 или module=scriptcomponent). При работе с такими компонентами сервером используются также интерфейсные методы GetInputParams, GetOutputParams и PrepareShow.


Пример возвращаемого значения.

В представленном примере из демонстрационной plugin-программы объявлены и реализованы пять стартовых plugin-форм: две для использования в диалоговом режиме и три для использования в режиме отображения внешних модулей.

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="availableforms" count="5">
   <property_set>
     <property_simple key="id" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />
     <property_cdata key="name"><![CDATA[Операторская форма 1]]></property_cdata>
     <property_cdata key="description"><![CDATA[Демонстрационная форма для диалогового режима на базе Form]]></property_cdata>
     <property_simple key="controltype" value="0" name="form" />
     <property_simple key="module" value="0" name="dialog" />
   </property_set>
   <property_set>
     <property_simple key="id" value="87b3e68e-8e27-4e1b-b3fa-d512f5c0148f" />
     <property_cdata key="name"><![CDATA[Операторская форма 2]]></property_cdata>
     <property_cdata key="description"><![CDATA[Демонстрационная форма для диалогового режима на базе Control]]></property_cdata>
     <property_simple key="controltype" value="1" name="control" />
     <property_simple key="module" value="0" name="dialog" />
   </property_set>
   <property_set>
     <property_simple key="id" value="817d77a7-5d0e-4783-9304-e310c2ac3443" />
     <property_cdata key="name"><![CDATA[Модуль 1]]></property_cdata>
     <property_cdata key="description"><![CDATA[Демонстрационный встраиваемый модуль образца 1 на базе Control]]></property_cdata>
     <property_simple key="controltype" value="1" name="control" />
     <property_simple key="module" value="1" name="crm" />
     <property_cdata key="helplink"><![CDATA[manual.chm::/topic_pluginABC.htm#form1]]></property_cdata>
   </property_set>
   <property_set>
     <property_simple key="id" value="38a86f47-073f-4ad7-a942-6919a048ab8a" />
     <property_cdata key="name"><![CDATA[Модуль 2]]></property_cdata>
     <property_cdata key="description"><![CDATA[Демонстрационный встраиваемый модуль образца 2 на базе Control]]></property_cdata>
     <property_simple key="controltype" value="1" name="control" />
     <property_simple key="module" value="1" name="crm" />
     <property_cdata key="helplink"><![CDATA[manual.chm::/topic_pluginABC.htm#form2]]></property_cdata>
   </property_set>
   <property_set>
     <property_simple key="id" value="03e57976-b970-45ff-aec2-fa95ef274bd7" />
     <property_cdata key="name"><![CDATA[Модуль 3]]></property_cdata>
     <property_cdata key="description"><![CDATA[Демонстрационный встраиваемый модуль образца 3 на базе Form]]></property_cdata>
     <property_simple key="controltype" value="0" name="form" />
     <property_simple key="module" value="1" name="crm" />
     <property_cdata key="helplink"><![CDATA[http://www.telsystems.ru/help/plugins/demoform3.htm]]></property_cdata>
   </property_set>
  </data>
  </oktellxmlmapper>


Режим диалога (операторские формы)

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


  • string GetInputParams ( string xml ). Возвращает перечень входных параметров для указанной формы (компонента).

Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы.

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

Используется при настройке компонента plugin-форма в момент создания сценария диалога. Администратор, создающий сценарий, задает описанные входные значения на основе свойств, указанных в возвращаемой структуре. Возможные типы: аргументы (строковые, числовые, дата-время, общие), запросы к БД, возвращающие значения или наборы, а также перечислимые типы с возможными вариантами, описанными в структуре. В момент выполнения сценария при передаче управления компоненту Plugin-форма, выполняются вычисления всех установленных параметров, готовится XML структура, которая затем передается в плагин на отображение модуля.


Пример передаваемого параметра:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="inputparams" count="1">
   <property_set name="forminput">
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />     
   </property_set>   
 </data>
 </oktellxmlmapper>


Возвращаемое значение.

Каждый параметр представляет собой отдельный набор property_set в основной коллекции. Задаваемые свойства:

  • paramkey - уникальное имя параметра, по которому необходимо будет производиться сопоставление, когда параметры в рабочем процессе будут переданы в форму.
  • paramtype - тип параметра. Определяет способ получения значения параметра при настройке в сценарии и тип значения. Допускается 7 вариантов (1-string, 2-int, 3-datetime, 4-argument, 5-table, 6-tablequery, 7-fixedlist).
    • 1, 2, 3, 4 - задаются из формы аргумента, позволяющей выбрать константное значение, значение переменной, выражения или встроенной в диалоговый сценарий функции, различия лишь в ограничении на формат выходного значения (строка, число, строка с дата/время содержимым, произвольный аргумент).
    • 5 - возвращает некоторый набор данных из БД, задается в формате SQL создателем сценария.
    • 6 - аналогично возвращает из БД набор данных, однако задает «запрос по умолчанию». Указанный текст будет отображаться в поле ввода запроса у разработчика сценария в начале и каждый раз, когда он будет очищать это поле. Для указания текста запроса у соответствующего параметру элемента property_set задается коллекция, содержащая один подэлемент с именем «query». В нем должно присутствовать свойство property_cdata с ключом sqltext. Также допускаются свойства connectiontype, connectionstring, определяющие в случае указания соответственно направление подключения (Собственная БД, ADO, OLE, Oracle, ODBC) и строку подключения к БД. Этот тип параметра может быть использован в случае, если разработчики plugin-программы закладывают жесткую структуру взаимодействия с БД, и их квалификация существенно выше, чем у возможного разработчика сценария.
    • 7 - фиксированный список. Предлагает разработчику выбрать один из описанных в теле параметра вариантов. Для этого в соответствующем элементе property_set задается коллекция из других элементов, описывающих возможные варианты значений. Каждый описательный набор property_set имеет атрибуты name="category" и id, установленный в соответствии с идентификатором варианта. В теле описательного набора присутствуют свойства с ключами id и name. id - определяет код, который будет передан как выбранный вариант при формировании значений для передачу в форму, name - название, которое увидит разработчик сценария в списке.
  • paramname - название параметра, которое увидит разработчик сценанрия.
  • paramdescription - описание параметра для разработчика сценария (подробная инструкция для получения ожидаемого значения).
  • paramextra - значение параметра, которое будет без изменений передано на вход в режиме выполнения. Может не быть задано.


Пример возвращаемого значения:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="input" count="6">
   <property_set>
     <property_simple key="paramkey" value="operator" />
     <property_simple key="paramtype" value="1" name="string" />
     <property_cdata key="paramname"><![CDATA[Оператор]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Имя текущего оператора]]></property_cdata>
   </property_set>
   <property_set>
     <property_simple key="paramkey" value="clientid" />
     <property_simple key="paramtype" value="2" name="int" />
     <property_cdata key="paramname"><![CDATA[Клиент]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Код обрабатываемого клиента]]></property_cdata>
    <property_simple key="paramextra" value="500" />
   </property_set>
   <property_set>
     <property_simple key="paramkey" value="queuetime" />
     <property_simple key="paramtype" value="4" name="argument" />
     <property_cdata key="paramname"><![CDATA[Время в очереди]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Будет отображено на форме без анализа]]></property_cdata>
   </property_set>
   <property_set>
     <property_simple key="paramkey" value="products" />
     <property_simple key="paramtype" value="5" name="table" />
     <property_cdata key="paramname"><![CDATA[Текущие товары]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Набор товаров запросом из БД (Id, Name, Set)]]></property_cdata>
   </property_set>   
   <property_set>
     <property_simple key="paramkey" value="users" />
     <property_simple key="paramtype" value="6" name="tablequery" />
     <property_cdata key="paramname"><![CDATA[Пользователи]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Пользователи (Id, Name)]]></property_cdata>
     <property_collection name="query" count="1">
       <property_set name="query">
         <property_simple key="connectiontype" value="1" name="sql" />
         <property_simple key="connectionstring" value="" />
         <property_cdata key="sqltext"><![CDATA[Select Id, Name From A_Users]]></property_cdata>
       </property_set>
     </property_collection>
   </property_set>
   <property_set>
     <property_simple key="paramkey" value="categories" />
     <property_simple key="paramtype" value="7" name="fixedlist" />
     <property_cdata key="paramname"><![CDATA[Категории]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Направление работы]]></property_cdata>
     <property_collection name="categories" count="2">
       <property_set name="category" id="0">
         <property_simple key="id" value="0" />
         <property_cdata key="name"><![CDATA[Товары]]></property_cdata>
       </property_set>
       <property_set name="category" id="1">
         <property_simple key="id" value="1" />
         <property_cdata key="name"><![CDATA[Услуги]]></property_cdata>
       </property_set>
     </property_collection>
   </property_set>
 </data>
 </oktellxmlmapper>


  • string GetOutputParams ( string xml ). Возвращает перечень выходных параметров для указанной формы (компонента).

Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы.

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

Используется при настройке компонента plugin-форма в момент создания сценария диалога. Администратор, создающий сценарий, указывает в какие переменные будут при выполнении сохранены значения описанных выходные параметров. В момент выполнения сценария после завершения выполнения компонента Plugin-форма, в указанные переменные попадут соответствующие значения выходных параметров.

Пример передаваемого параметра:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="outputparams" count="1">
   <property_set name="formoutput">
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />     
   </property_set>   
 </data>
 </oktellxmlmapper>


Возвращаемое значение.

Каждый параметр представляет собой отдельный набор property_set в основной коллекции. Обязательными являются свойства:

  • paramkey - уникальное имя параметра, по которому необходимо будет производиться сопоставление, когда параметры в рабочем процессе будут переданы в форму.
  • paramtype - тип параметра. Определяет способ получения значения параметра при настройке в сценарии и тип значения. Допускается 4 варианта (1-string, 2-int, 3-datetime, 4-variable). Влияют на формат выбора переменной для сохранения значения. Соответственно для выбора предоставляется список только строковых переменных, только числовых, только переменных дата/время или список всех переменных.
  • paramname - название параметра, которое увидит разработчик сценанрия.
  • paramdescription - описание параметра для разработчика сценария (подробная инструкция для получения ожидаемого значения).


Пример возвращаемого значения:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="output" count="3">
   <property_set>
     <property_simple key="paramkey" value="selectedproduct" />
     <property_simple key="paramtype" value="2" name="int" />
     <property_cdata key="paramname"><![CDATA[Выбранный товар]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Код (id) выбранного товара]]></property_cdata>
   </property_set>
   <property_set>
     <property_simple key="paramkey" value="info" />
     <property_simple key="paramtype" value="4" name="variable" />
     <property_cdata key="paramname"><![CDATA[Текст уведомления]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Для отображения следующим компонентом в сценарии после завершения работы с формой]]>
   </property_cdata>
   </property_set>
   <property_set>
     <property_simple key="paramkey" value="dt" />
     <property_simple key="paramtype" value="3" name="datetime" />
     <property_cdata key="datetimeformat"><![CDATA[dd.MM.yyyy HH:mm:ss]]></property_cdata>
     <property_cdata key="paramname"><![CDATA[Время]]></property_cdata>
     <property_cdata key="paramdescription"><![CDATA[Время, установленное для следующей связи]]></property_cdata>
   </property_set>
 </data>
 </oktellxmlmapper>


  • string ShowDesign ( string xml ). Вызывается для отображения диалоговой plugin-формы в «демонстрационном» режиме без передачи установленных для нее входных параметров.

В строковом параметре находится XML структура с указанием Guid идентификатора интересующей формы. Если в параметре передан верный идентификатор - метод должен отобразить окно с формой в диалоговом режиме (с возвратом управления только после ее закрытия). Если указан неверный параметр - должен сразу вернуть управление.

Возвращается структура с описанием кода возврата.

Может быть вызвана только в момент создания сценария. Реализация метода plugin-программы для отображения диалоговых plugin-форм c CONTROLTYPE = FORM (оконные) может совпадать с реализацией метода PrepareShow. Для отображения же plugin-форм с CONTROLTYPE = CONTROL (встраиваемые контролы) реализация должна предусматривать создание и размещение такой формы на внутреннем окне и вывод его на экран командой ShowDialog().

Пример передаваемого параметра:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="design" count="1">
   <property_set name="showformdesign">
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />     
   </property_set>   
 </data>
 </oktellxmlmapper>

В качестве возвращаемого значения после закрытия формы должно вернуться описание результата. В случае если результат (свойство property_simple с ключом resultcode) не возвращает {"0", "success"}, текст результата из свойства property_cdata c ключом resultdescription будет отображен во всплывающем уведомлении.


  • string PrepareShow ( string xml ). Вызывается для отображения операторской диалоговой plugin-формы в рабочем режиме.

Метод осуществляет создание, подготовку и отображение окна с формой в диалоговом режиме (с возвратом управления только после ее закрытия). Вызывается только в режиме операторских диалогов (module = "dialog") для оконных форм (controltype = "form").


Передаваемый параметр.

В качестве параметра - строка с XML содержимым. В нем в нескольких разделах перечислены

  • Блок common. Общие данные по задаче, сценарию, абоненту, оператору, текущему комментарию, Guid идентификаторы plugin-программы и plugin-формы. Имеет жесткую структуру содержимого. Свойство idshow задает уникальный код экземпляра отображения - по нему будет запрашиваться закрытие и возврат значений.
  • Блок input. Значения для входных параметров в установленном формате. Структура содержимого состоит из наборов, описывающих входные параметры. Их количество и формат определяются на основе данных,
  • Блок fillinfo. Информация о наполнении (этапе). При переводе формы от одного оператора к другому у первого окно с формой закрывается, возвращая строку (любого формата) с неким содержимым. Это содержимое будет передано в управляющий объект plugin-программы в клиентском приложении второго оператора как часть структуры в параметре данного метода PrepareShow. См. также описание метода GetCurrentFillInfo. Блок может отсутствовать.

В приведенном примере передаваемого параметра отмеченные зеленым цветом комментарии разделяют описанные зоны.

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="prepareparams" count="3">

<!-- ###################################################### -->
<!--        Раздел COMMON с общими параметрами              -->
<!-- ###################################################### -->
  <property_set name="сommon">
     <property_cdata key="idplugin"><![CDATA[b3daa197-f539-22f1-bc5a-8442fa9334ec]]></property_cdata>
     <property_cdata key="idform"><![CDATA[a69f5237-77ef-47fd-97d7-64e0da1c0457]]></property_cdata>
     <property_cdata key="iduser"><![CDATA[da803f01-ea77-40fa-bc9d-e2efb36fd5a8]]></property_cdata>
     <property_simple key="allowstop" value="1" />
     <property_simple key="showontop" value="1" />
     <property_cdata key="comment"><![CDATA[Тело комментария]]></property_cdata>
     <property_cdata key="taskname"><![CDATA[Обработка входящих]]></property_cdata>
     <property_simple key="idshow" value="8bc38a2a-5faa-4c75-864e-2f4e6723f1fd" />
     <property_collection count="2">
       <property_set name="clientinfo">
         <property_collection name="fields" count="3">
           <property_set id="0" name="field">
             <property_cdata key="fieldname"><![CDATA[Название]]></property_cdata>
             <property_cdata key="fieldvalue"><![CDATA[ООО "Гульчатай"]]></property_cdata>
           </property_set>
           <property_set id="1" name="field">
             <property_cdata key="fieldname"><![CDATA[Телефон]]></property_cdata>
             <property_simple key="fieldvalue" value="3214567" />
           </property_set>
           <property_set id="3" name="field">
             <property_cdata key="fieldname"><![CDATA[Контактное лицо]]></property_cdata>
             <property_cdata key="fieldvalue"><![CDATA[Веселовский Пал Виталич]]></property_cdata>
           </property_set>
         </property_collection>
       </property_set>
     </property_collection>
   </property_set>
 
<!-- ###################################################### -->
<!--        Раздел INPUT с заказанными параметрами          -->
<!-- ###################################################### -->
  <property_set name="input">
     <property_collection count="6">
       <property_set name="parameter" id="clientid">
         <property_simple key="paramkey" value="clientid" />
         <property_simple key="paramtype" value="1" />
         <property_simple key="paramextra" value="500" />
         <property_simple key="paramvalue" value="822" />
       </property_set>
       <property_set name="parameter" id="operator">
         <property_simple key="paramkey" value="operator" />
         <property_simple key="paramtype" value="1" />
         <property_simple key="paramextra" value="" />
         <property_cdata key="paramvalue"><![CDATA[Иванов Анатолий]]></property_cdata>
       </property_set>
       <property_set name="parameter" id="categories">
         <property_simple key="paramkey" value="categories" />
         <property_simple key="paramtype" value="7" />
         <property_simple key="paramextra" value="" />
         <property_simple key="paramvalue" value="0" />
       </property_set>
       <property_set name="parameter" id="queuetime">
         <property_simple key="paramkey" value="queuetime" />
         <property_simple key="paramtype" value="4" />
         <property_simple key="paramextra" value="" />
         <property_simple key="paramvalue" value="1,4142135623731" />
       </property_set>
 
.....................................................................................
Табличный параметр. 
Имеет большой достаточно объем описательного текста даже при небольшом объеме данных
Его формат будет описан отдельно в пункте OnQuery
.....................................................................................
 
      <property_set name="parameter" id="products">
         <property_simple key="paramkey" value="products" />
         <property_simple key="paramtype" value="5" />
         <property_simple key="paramextra" value="" />
         <property_collection name="table" count="2">
           <property_set name="tableheader">
             <property_collection name="columns" count="3">
               <property_set name="columninfo" id="0">
                 <property_simple key="index" value="0" />
                 <property_simple key="name" value="id" />
                 <property_simple key="typename" value="Int32" />
                 <property_cdata key="typefullname"><![CDATA[System.Int32]]></property_cdata>
               </property_set>
               <property_set name="columninfo" id="1">
                 <property_simple key="index" value="1" />
                 <property_simple key="name" value="name" />
                 <property_simple key="typename" value="String" />
                 <property_cdata key="typefullname"><![CDATA[System.String]]></property_cdata>
               </property_set>
               <property_set name="columninfo" id="2">
                 <property_simple key="index" value="2" />
                 <property_simple key="name" value="st" />
                 <property_simple key="typename" value="Boolean" />
                 <property_cdata key="typefullname"><![CDATA[System.Boolean]]></property_cdata>
               </property_set>
             </property_collection>
           </property_set>
           <property_set name="tabledata">
             <property_collection name="rows" count="2">
               <property_set name="row" id="0">
                 <property_collection name="cells" count="3">
                   <property_set name="cell" id="0">
                     <property_simple key="cellvalue" value="1" />
                   </property_set>
                   <property_set name="cell" id="1">
                     <property_simple key="cellvalue" value="qwer" />
                   </property_set>
                   <property_set name="cell" id="2">
                     <property_simple key="cellvalue" value="1" />
                   </property_set>
                 </property_collection>
               </property_set>
               <property_set name="row" id="1">
                 <property_collection name="cells" count="3">
                   <property_set name="cell" id="0">
                     <property_simple key="cellvalue" value="2" />
                   </property_set>
                   <property_set name="cell" id="1">
                     <property_simple key="cellvalue" value="wert" />
                   </property_set>
                   <property_set name="cell" id="2">
                     <property_simple key="cellvalue" value="1" />
                   </property_set>
                 </property_collection>
               </property_set>
             </property_collection>
           </property_set>
         </property_collection>
       </property_set>
 
.....................................................................................
 
    </property_collection>
  </property_set>
 
<!-- ###################################################### -->
<!--   Раздел FILLINFO с информацией об этапе/заполнении    -->
<!-- ###################################################### -->
  <property_set name="fillinfo">
    <property_cdata key="fillinfo"><![CDATA[произвольная строка в любом формате от XML до B64]]></property_cdata>
  </property_set>
</data>
</oktellxmlmapper>


Возвращаемое значение.

В возвращаемой строке с XML содержимым должна присутствовать структура со значениями в двух разделах:

  • Блок common. Новое значение комментария (передаваемого из формы в форму и от оператора к оператору), а также значение результата выполнения. По аналогии со стандартом операторского диалогового окна допускается два вида результатов: переход по кнопке Далее к следующему компоненту сценария с сохранением выходных значений в переменных сценария, а также остановка сценария кнопкой Стоп без сохранения выходных значений формы в переменных.
  • Блок output. Набор, описывающий значения выходных параметров. Они будут применены в обработчике сценариев на сервере для сохранения в соответствующих переменных, указанных при настройке компонента «Plugin-форма».


В приведенном примере возвращаемого значения отмеченные зеленым цветом комментарии разделяют описанные зоны.

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="result" count="2">
<!-- ###################################################### -->
<!--   Раздел COMMON с общеий информацией о результате      -->
<!-- ###################################################### -->
  <property_set name="common">
    <property_cdata key="comment"><![CDATA[теперь вот такой комментарий]]></property_cdata>
    <property_simple key="result" value="next" />
  </property_set>
<!-- ###################################################### -->
<!--   Раздел OUTPUT со значениями выходных параметров      -->
<!-- ###################################################### -->
  <property_set name="output">
    <property_collection count="3">
      <property_set name="parameter" id="selectedproduct">
        <property_simple key="paramkey" value="selectedproduct" />
        <property_simple key="paramtype" value="2" name="int" />
        <property_simple key="paramvalue" value="12345555" />
      </property_set>
      <property_set name="parameter" id="info">
        <property_simple key="paramkey" value="info" />
        <property_simple key="paramtype" value="4" name="variable" />
        <property_cdata key="paramvalue"><![CDATA[выходное значение!!!]]></property_cdata>
      </property_set>
      <property_set name="parameter" id="dt">
        <property_simple key="paramkey" value="dt" />
        <property_simple key="paramtype" value="3" name="datetime" />
        <property_cdata key="datetimeformat"><![CDATA[dd.MM.yyyy HH:mm:ss]]></property_cdata>
        <property_cdata key="paramvalue"><![CDATA[01.12.2008 7:43:10]]></property_cdata>
      </property_set>
    </property_collection>
  </property_set>
</data>
</oktellxmlmapper>


  • string GetCurrentFillInfo ( string xml ). Вызывается для определения текущего наполнения формы (этапа) и последующего перевода формы на другого оператора в том виде, в котором она находится у текущего оператора.

Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно).

Возвращаемое значение может иметь любой формат и будет без разбора передано как часть структуры входного параметра (блок fillinfo) в метод PrepareShow или CreateControl на компьютере оператора, принимающего переведенный вызов.

Пример передаваемого параметра:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="close" count="1">
   <property_set name="forminfo">
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />     
     <property_simple key="idshow" value="e161da32-c52a-5515-e692-34bb1236a62d" />     
   </property_set>   
 </data>
 </oktellxmlmapper>


Пример возвращаемого значения:

произвольная строка в любом формате от XML до B64


  • string StopShow ( string xml ). Вызывается для принудительного закрытия диалоговой формы с CONTROLTYPE = FORM (оконные). Это может происходить в случае перевода звонка и соответствено формы на другого оператора (предварительно вызывается GetCurrentFillInfo) или в случае принудительного завершения диалогового сценария (по настройкам системы).

Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно).

Возвращается структура, содержащая значение комментария.


Пример передаваемого параметра:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="close" count="1">
   <property_set name="forminfo">
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />     
     <property_simple key="idshow" value="e161da32-c52a-5515-e692-34bb1236a62d" />     
   </property_set>   
 </data>
 </oktellxmlmapper>


Пример возвращаемого значения:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="result" count="1">
   <property_set name="common">
     <property_cdata key="comment"><![CDATA[Новое значение комментария]]></property_cdata>
   </property_set>   
 </data>
 </oktellxmlmapper>


  • string GetControlResult ( string xml ). Вызывается для получения XML структуры со значениями выходных переменных для форм с CONTROLTYPE = CONTROL (контрольные). Поскольку отображение таких форм производится приложением Oktell (в отличие от оконных форм plugin-программы, для которых вызывается метод PrepareShow, осуществляющий подготовку, отображение и возврат управления вместе с описываемой структурой значений выходных параметров в контексте самой plugin-программы).

Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно).

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


Пример передаваемого параметра:

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="controlresult" count="1">
   <property_set name="getresult">
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="a69f5237-77ef-47fd-97d7-64e0da1c0457" />
     <property_simple key="idshow" value="a26a4540-6bee-4986-8098-adf340d3faa1" />
   </property_set>   
 </data>
 </oktellxmlmapper>


Общие методы для визуальных режимов использования

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

  • System.Windows.Forms.Control CreateControl ( string xml ). Используется и в режиме диалога, и в режиме подключения внешних модулей (CRM).

В режиме диалога вызывается для создания и подготовки формы с CONTROLTYPE = CONTROL (контрольные).

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

Возвращает созданный экземпляр контрола, который затем размещается в стандартном операторском диалоговом окне Oktell.

В режиме модулей CRM параметр имеет один и тот же вид: в содержимом XML структуры передаются идентификаторы plugin-программы, plugin-формы, экземпляра plugin-формы, а также информация о пользователе, рабочем месте, и т.д. Какие из переданных параметров использовать - дело управляющего объекта.

Возвращает созданный экземпляр окна (оконной формы), которое затем размещается среди других внешних модулей.

ВНИМАНИЕ: Окно представляет собой .NET форму (System.Windows.Forms.Form), которая в классовой структуре FrameWork является потомком System.Windows.Forms.Control.

Значение передаваемого параметра при использовании в режиме диалога полностью совпадает с параметром функции PrepareShow.

Пример параметра при создании для подключения среди внешних модулей (CRM):

<?xml version="1.0" encoding="utf-16"?>
 <oktellxmlmapper version="80710">
 <data name="info" count="3">
   <property_set name="user">
     <property_simple key="id" value="da803f01-ea77-40fa-bc9d-e2efb36fd5a8" />
     <property_cdata key="name"><![CDATA[Иванов Анатолий]]></property_cdata>
     <property_simple key="login" value="Ivanov" />
     <property_simple key="password" value="si4255" />
     <property_simple key="isoperator" value="1" />
     <property_simple key="issupervisor" value="1" />
     <property_simple key="isadmin" value="0" />
     <property_simple key="departmentid" value="c4e3b424-3048-4cce-a2e4-033c532a7d99" />
     <property_cdata key="departmentname"><![CDATA[Маркетинг]]></property_cdata>
   </property_set>
   <property_set name="workplace">
     <property_simple key="id" value="de609bc7-6d3b-4daf-a418-a1d0648d7784" />
     <property_cdata key="name"><![CDATA[Marketing1]]></property_cdata>
     <property_simple key="hasphone" value="1" />
   </property_set>
   <property_set name="link">
     <property_simple key="idshow" value="2e2d8ff0-de47-415f-ab68-9bddcd09952b" />
     <property_simple key="idplugin" value="b3daa197-f539-22f1-bc5a-8442fa9334ec" />
     <property_simple key="idform" value="03e57976-b970-45ff-aec2-fa95ef274bd7" />
     <property_cdata key="linktext"><![CDATA[Форма 3 экз 1]]></property_cdata>
     <property_cdata key="headertext"><![CDATA[Демка, Форма 3 экз 1]]></property_cdata>
     <property_cdata key="description"><![CDATA[Описание пункта меню, задаваемое администратором]]></property_cdata>
     <property_cdata key="address"><![CDATA[Демонстрационный плагин / Модуль 3]]></property_cdata>
   </property_set>
 </data>
 </oktellxmlmapper>


Использование в сценариях сервера

Возможно использование плагина в составе с серверной службой. Исполнение протекает посредством передачи управления сценариями внешним модулям через компонент «Плагин», доступный во всех типах сценариев системы. Передача управления происходит путем вызова метода PrepareShow, с передачей XML-параметра и ожиданием возврата XML-ответа. В составе параметра передается вся контекстная информация из сценария (зависит от типа исполняемого сценария), а также перечень значений для всех требуемых входных параметров, указанных в возвращаемом значении метода GetInputParams. Значения входных параметров вычисляются в ходе реализации сценария. Соответствующие аргументы назначаются в редакторе сценариев при модификации компонента «Плагин». Там же происходит назначение переменных сценария для приема возвращаемых значений. Список возвращаемых значений, их кодов и типов определяется методом GetOutputParams.

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

Структура возвращаемого значения метода PrepareShow также идентична при работе в режиме диалога и в режиме сценариев. Передаваемый параметр в отличие от режима диалога имеет отличия в разделе common (контекстная информация сценария) и лишен блока fillinfo.

Подробно о параметрах в описании соответствующих методов.


Сервисное взаимодействие

Методы и события данного раздела служат для осуществления плотного взаимодействия plugin-программы и клиентского приложения Oktell. XML-содержимое описывает не только параметры, но и само действие (действия в общем случае). Не изменяя интерфейса подключения plugin-программ при помощи этих методов будут расширяться возможности взаимодействия, добавляться новые сервисы в клиентское приложение Oktell для использования в plugin-программах.


  • event PluginQueryInvoker OnQuery. Событие управляющего объекта, обрабатываемое в клиентском приложении Oktell. Служит для выполнения сервисных специальных запросов в клиентском приложении Oktell по инициативе plugin-программы или какой либо из ее plugin-форм. Результат выполнения попадает в управляющий объект как возвращаемое значение метода-обработчика. Параметр и возвращаемое значение представляют собой строки с XML-содержимым. Некоторые запросы должны обязательно содержать указание идентификатора plugin-формы и ее экземпляра, переданные через параметр метода CreateControl в момент создания.

Например могут быть осуществлены запросы в БД с возвратом некоторого набора данных, команды «Позвонить», «Переключить». В режиме модулей CRM команда на отображение специального текста в заголовке модуля, команда на отображение или смену вкладок на панели заголовка.

Именно этот режим будет претерпевать изменения и дополняться при необходимости развития.

Описание структуры параметров обширно и приведено в отдельной статье «Сервисное взаимодействие».


  • string DoQuery ( string xml ). Событие приложения Oktell, обрабатываемое в управляющем объекте plugin-программы. Служит для выполнения сервисных специальных запросов в plugin-программе. Какие из них использовать и использовать ли вообще - дело управляющего объекта. Параметр и возвращаемое значение представляют собой строки с XML-содержимым.

Например в управляющий объект передаются события о смене активной вкладки в заголовке (сами вкладки появляются в приложении Oktell по событию OnQuery управляющего объекта). В управляющий объект также попадают события об отображении или скрытия той или иной формы, так как может потребоваться обновление данных, инициирование или остановка каких-либо таймеров и т.д.

Описание структуры параметров обширно и приведено в отдельной статье «Сервисное взаимодействие».

Наверх Формат параметров и выходных значений<<< Описание базовых элементов интерфейса >>>Сервисное взаимодействие