Описание базовых элементов интерфейса — различия между версиями
Строка 10: | Строка 10: | ||
Методы этого раздела служат для доступа к общей информации о plugin-программе, ее назначении и составе. | Методы этого раздела служат для доступа к общей информации о plugin-программе, ее назначении и составе. | ||
− | *Guid GetId ( ). Возвращает уникальный Guid-идентификатор plugin-программы. Используется при различении программ и при обновлениях. По идентификатору приложение загружает plugin в память процесса и не допускает копий. | + | *'''<span style="color:blue">Guid</span> GetId ( )'''. Возвращает уникальный Guid-идентификатор plugin-программы. Используется при различении программ и при обновлениях. По идентификатору приложение загружает plugin в память процесса и не допускает копий. |
− | *int GetInterfaceVersion ( int lastknownversion ). Возвращает версию интерфейса, на котором базируется plugin-программа. | + | *'''<span style="color:blue">int</span> GetInterfaceVersion ( <span style="color:blue">int lastknownversion )'''. Возвращает версию интерфейса, на котором базируется plugin-программа. |
В качестве параметра из Oktell передается максимально поздняя поддерживаемая версия. Изначально базовая версия 81022. Если plugin-программа при вызове метода возвращает номер версии, неизвестный для текущей версии Oktell, зарегистрировать ее не удастся. | В качестве параметра из Oktell передается максимально поздняя поддерживаемая версия. Изначально базовая версия 81022. Если plugin-программа при вызове метода возвращает номер версии, неизвестный для текущей версии Oktell, зарегистрировать ее не удастся. | ||
− | *string GetModuleVersion ( ). Возвращает версию plugin-программы в строковом виде. Например «A1.0.1». | + | *'''<span style="color:blue">string</span> GetModuleVersion ( )'''. Возвращает версию plugin-программы в строковом виде. Например «A1.0.1». |
− | *string GetModuleName ( ). Возвращает собственное название plugin-программы. При использовании в комплексе в качестве имени будет использоваться другое, назначенное администратором при регистрации имя. Однако собственное может нести какую-либо дополнительную информацию. | + | *<span style="color:blue">string</span> GetModuleName ( ). Возвращает собственное название plugin-программы. При использовании в комплексе в качестве имени будет использоваться другое, назначенное администратором при регистрации имя. Однако собственное может нести какую-либо дополнительную информацию. |
− | *string GetDBUpdate ( ). Возвращает строку с запросом в формате Transact-SQL, представляющую собой пакет обновлений для БД при регистрации plugin-программы. Возможно присутствие нескольких батчей, разделенных строчками «GO» согласно tSQL. Запрос выполняется в БД в момент первого сохранения plugin-программы на сервере. Однако возможно и повторное исполнение в случае, если предварительно удалить регистрацию и создать новую с теми же параметрами. Это необходимо иметь в виду при создании запроса-обновления и формировать проверочные условия и/или удаляющие команды. Обновление для БД может отсутствовать. Однако для plugin-программ, реализующих доступ к уникальным сведениям в БД необходимо гарантировать существование в БД соответствующих таблиц, функций и хранимых процедур. | + | *'''<span style="color:blue">string</span> GetDBUpdate ( )'''. Возвращает строку с запросом в формате Transact-SQL, представляющую собой пакет обновлений для БД при регистрации plugin-программы. Возможно присутствие нескольких батчей, разделенных строчками «GO» согласно tSQL. Запрос выполняется в БД в момент первого сохранения plugin-программы на сервере. Однако возможно и повторное исполнение в случае, если предварительно удалить регистрацию и создать новую с теми же параметрами. Это необходимо иметь в виду при создании запроса-обновления и формировать проверочные условия и/или удаляющие команды. Обновление для БД может отсутствовать. Однако для plugin-программ, реализующих доступ к уникальным сведениям в БД необходимо гарантировать существование в БД соответствующих таблиц, функций и хранимых процедур. |
При формировании проверочных условий необходимо оценивать, как должен себя вести модуль при обновлениях: просто проверять наличие таблиц, функций и процедур и создавать их в случае отсутствия и корректировать в случае несовпадений типов, или удалять и пересоздавать. | При формировании проверочных условий необходимо оценивать, как должен себя вести модуль при обновлениях: просто проверять наличие таблиц, функций и процедур и создавать их в случае отсутствия и корректировать в случае несовпадений типов, или удалять и пересоздавать. | ||
Строка 32: | Строка 32: | ||
<property_cdata key="sqltext"><![CDATA[if exists ( Select * FROM sysobjects where id = object_id ( 'dbo.T_PluginTest' ) ) | <property_cdata key="sqltext"><![CDATA[if exists ( Select * FROM sysobjects where id = object_id ( 'dbo.T_PluginTest' ) ) | ||
Drop Table dbo.T_PluginTest]]></property_cdata> | 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[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_cdata key="sqltext"><![CDATA[Insert into T_PluginTest ( Name, St ) Values ( 'A', 1 )]]></property_cdata> | ||
</property_set> | </property_set> | ||
Строка 39: | Строка 40: | ||
− | Текстовая информация из полей CDATA в каждом элементе property_cdata содержится отдельный batch-блок с запросом в формате tSQL. Все перечисленные запросы выполнятся поочередно в порядке присутствия в теле XML строки. Каждый запрос будет выполнен в отдельном batch-блоке. Если необходимо разделить текст запроса, представленного внутри одного property_cdata, необходимо стандарным способом в необходимом месте разделения вставить строку «GO». | + | Текстовая информация из полей CDATA в каждом элементе <span style="color:green">property_cdata</span> содержится отдельный batch-блок с запросом в формате tSQL. Все перечисленные запросы выполнятся поочередно в порядке присутствия в теле XML строки. Каждый запрос будет выполнен в отдельном batch-блоке. Если необходимо разделить текст запроса, представленного внутри одного <span style="color:green">property_cdata</span>, необходимо стандарным способом в необходимом месте разделения вставить строку «GO». |
Пример 2 возвращаемого значения. | Пример 2 возвращаемого значения. | ||
Строка 45: | Строка 46: | ||
Можно также возвращать строку, сразу содержащую тело запроса, в котором блоками GO разделяются batch-блоки. | Можно также возвращать строку, сразу содержащую тело запроса, в котором блоками GO разделяются batch-блоки. | ||
− | if exists ( Select * FROM sysobjects where id = object_id ( 'dbo.T_PluginTest' ) ) | + | if exists ( Select * FROM sysobjects where id = object_id ( 'dbo.T_PluginTest' ) ) |
− | + | Drop Table dbo.T_PluginTest | |
− | GO | + | 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 | ||
− | + | *'''<span style="color:blue">string</span> GetForms ( )'''. Возвращает перечень заявленных стартовых plugin-форм (и компонентов) в виде строки с XML-содержимым установленной структуры. Для описания каждой plugin-формы используются параметры <span style="color:green">id, caption (name), description, controltype (control/form/none), module (dialog/crm/scriptcomponent), helplink</span>. Именно этот метод определяет формат работы с plugin-программой. Настройка всех вариантов ее применения в комплексе зависит от состава стартовых plugin-форм и их направленности. | |
− | + | ||
− | + | Каждая форма имеет уникальный Guid-идентификатор (<span style="color:green">id</span>). Используется очевидным образом: Для настройки ссылок, а также для различения параметров (их принадлежности к конкретной форме при обмене информацией между plugin-программой и приложением Oktell). Название (<span style="color:green">caption</span>) и описание (<span style="color:green">description</span>) используются для отображения в приложении Oktell в модулях настройки на работу с plugin-программой. | |
− | + | ||
− | + | Тип контрола (<span style="color:green">controltype</span>) определяет в каком виде форма создана в теле plugin-программы, то есть экземпляром какого класса она является (в .NET это '''System.Windows.Forms.Control''' или '''System.Windows.Forms.Form''', а в Win32 - имеет ли собственную рамку или встраивается в другие окна). В зависимости от этого клиентское приложение Oktell по-разному организует их отображение в диалоговом режиме. Оконные формы отображаются в собственной рамке, а контрольные размещаются в стандартном операторском диалоговом окне Oktell. Серверные компоненты не имеют визуального содержимого. Этот параметр для них можно не указывать, или указывать равным «'''2'''» или «'''none'''». | |
− | + | ||
− | + | ||
− | + | ||
− | Тип контрола (controltype) определяет в каком виде форма создана в теле plugin-программы, то есть экземпляром какого класса она является (в .NET это System.Windows.Forms.Control или System.Windows.Forms.Form, а в Win32 - имеет ли собственную рамку или встраивается в другие окна). В зависимости от этого клиентское приложение Oktell по-разному организует их отображение в диалоговом режиме. Оконные формы отображаются в собственной рамке, а контрольные размещаются в стандартном операторском диалоговом окне Oktell. Серверные компоненты не имеют визуального содержимого. Этот параметр для них можно не указывать, или указывать равным | + | |
Первый рисунок - пример формы на базе Control, отображенной в режиме операторского диалога в стандартном для этого окне приложения Oktell. | Первый рисунок - пример формы на базе Control, отображенной в режиме операторского диалога в стандартном для этого окне приложения Oktell. | ||
Строка 73: | Строка 74: | ||
− | Вариант использования (module) указывает приложению Oktell, где описываемую форму можно применять в настройках. Очевидно, одна и та же визуальная форма может в принципе быть использована в обоих режимах (операторские диалоговые окна и доступные через меню модули интерфейса). Но в описываемом интерфейсе взаимодействия производится их четкое разделение. Поэтому в случае подобной задачи на уровне объекта управления необходимо приложению Oktell указывать о наличии двух разных форм с разными идентификаторами, а при создании возвращать экземпляры одного класса. Возвращать же одни и те же экземпляры по запросам разных форм не рекомендуется, и делать необходимо крайне осмотрительно, так как при допущении ошибок в проекте итоговые окна могут исчезать и появляться в используемых местах непрогнозируемым образом. | + | Вариант использования (<span style="color:green">module</span>) указывает приложению Oktell, где описываемую форму можно применять в настройках. Очевидно, одна и та же визуальная форма может в принципе быть использована в обоих режимах (операторские диалоговые окна и доступные через меню модули интерфейса). Но в описываемом интерфейсе взаимодействия производится их четкое разделение. Поэтому в случае подобной задачи на уровне объекта управления необходимо приложению Oktell указывать о наличии двух разных форм с разными идентификаторами, а при создании возвращать экземпляры одного класса. Возвращать же одни и те же экземпляры по запросам разных форм не рекомендуется, и делать необходимо крайне осмотрительно, так как при допущении ошибок в проекте итоговые окна могут исчезать и появляться в используемых местах непрогнозируемым образом. |
− | Адрес справки (helplink) используется для режима модулей интерфейса и определяет веб-страницу (или раздел в файле справки), которая будет отображена при щелчке мышью на пиктограмму с вопросительным знаком в поле пункта меню главного окна клиентского приложения, соответствующего описываемой plugin-форме. Если адрес не задан, пиктограмма для пункта меню не отображается. Ссылка может быть адресом веб-страницей или веб-сервиса, а также ссылкой на раздел в некотором файле справки. Поиск файла будет осуществляться в основном каталоге клиентского приложения (его обновление производится стандартным способом через каталог LiveUpdate с обновлениями), и в каталоге с plugin-программой (для использования этого способа при регистрации plugin-программы через архив или вручную файл должен быть размещен в основной каталог plugin-программы). Примеры задания ссылки на автономно доступный файл справки: «plugin1_manual.chm», «manual.chm::/topic.htm#anchor», «form1.htm». | + | Адрес справки (<span style="color:green">helplink</span>) используется для режима модулей интерфейса и определяет веб-страницу (или раздел в файле справки), которая будет отображена при щелчке мышью на пиктограмму с вопросительным знаком в поле пункта меню главного окна клиентского приложения, соответствующего описываемой 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''' (описание ниже). | На сервере могут исполняться только компоненты, имеющие невизуальное представление (формы с controltype=2 или controltype=none), и обозначенные для использования в составе сценариев (module=2 или module=scriptcomponent). При работе с такими компонентами сервером используются также интерфейсные методы '''GetInputParams''', '''GetOutputParams''' и '''PrepareShow''' (описание ниже). | ||
− | |||
− | + | <u>Пример возвращаемого значения.</u> | |
+ | В представленном примере из демонстрационной plugin-программы объявлены и реализованы пять стартовых plugin-форм: две для использования в диалоговом режиме и три для использования в режиме отображения внешних модулей. | ||
<?xml version="1.0" encoding="utf-16"?> | <?xml version="1.0" encoding="utf-16"?> | ||
Строка 133: | Строка 134: | ||
Перечисленные в этом разделе методы вызываются только для plugin-форм, заявленных как формы для диалоговых сценариев. Даже если plugin-программа вовсе не имеет форм для диалоговых сценариев, все методы должны присутствовать в классе управляющего объекта для соответствия интерфейсу. | Перечисленные в этом разделе методы вызываются только для plugin-форм, заявленных как формы для диалоговых сценариев. Даже если plugin-программа вовсе не имеет форм для диалоговых сценариев, все методы должны присутствовать в классе управляющего объекта для соответствия интерфейсу. | ||
− | *string GetInputParams ( string xml ). Возвращает перечень входных параметров для указанной формы (компонента). | + | *<span style="color:blue">string GetInputParams</span> ( <span style="color:blue">string</span> xml ). Возвращает перечень входных параметров для указанной формы (компонента). |
Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы. | Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы. | ||
Строка 141: | Строка 142: | ||
Используется при настройке компонента plugin-форма в момент создания сценария диалога. Администратор, создающий сценарий, задает описанные входные значения на основе свойств, указанных в возвращаемой структуре. Возможные типы: аргументы (строковые, числовые, дата-время, общие), запросы к БД, возвращающие значения или наборы, а также перечислимые типы с возможными вариантами, описанными в структуре. В момент выполнения сценария при передаче управления компоненту Plugin-форма, выполняются вычисления всех установленных параметров, готовится XML структура, которая затем передается в плагин на отображение модуля. | Используется при настройке компонента plugin-форма в момент создания сценария диалога. Администратор, создающий сценарий, задает описанные входные значения на основе свойств, указанных в возвращаемой структуре. Возможные типы: аргументы (строковые, числовые, дата-время, общие), запросы к БД, возвращающие значения или наборы, а также перечислимые типы с возможными вариантами, описанными в структуре. В момент выполнения сценария при передаче управления компоненту Plugin-форма, выполняются вычисления всех установленных параметров, готовится XML структура, которая затем передается в плагин на отображение модуля. | ||
− | Пример передаваемого параметра: | + | |
+ | <u>Пример передаваемого параметра:</u> | ||
<?xml version="1.0" encoding="utf-16"?> | <?xml version="1.0" encoding="utf-16"?> | ||
Строка 154: | Строка 156: | ||
− | Возвращаемое значение. | + | <u>Возвращаемое значение.</u> |
− | Каждый параметр представляет собой отдельный набор property_set в основной коллекции. Задаваемые свойства: | + | Каждый параметр представляет собой отдельный набор <span style="color:green">property_set</span> в основной коллекции. Задаваемые свойства: |
− | *paramkey - уникальное имя параметра, по которому необходимо будет производиться сопоставление, когда параметры в рабочем процессе будут переданы в форму. | + | *<span style="color:green">paramkey</span> - уникальное имя параметра, по которому необходимо будет производиться сопоставление, когда параметры в рабочем процессе будут переданы в форму. |
− | *paramtype - тип параметра. Определяет способ получения значения параметра при настройке в сценарии и тип значения. Допускается 7 вариантов (1-string, 2-int, 3-datetime, 4-argument, 5-table, 6-tablequery, 7-fixedlist). | + | *<span style="color:green">paramtype</span> - тип параметра. Определяет способ получения значения параметра при настройке в сценарии и тип значения. Допускается 7 вариантов (1-string, 2-int, 3-datetime, 4-argument, 5-table, 6-tablequery, 7-fixedlist). |
**1, 2, 3, 4 - задаются из формы аргумента, позволяющей выбрать константное значение, значение переменной, выражения или встроенной в диалоговый сценарий функции, различия лишь в ограничении на формат выходного значения (строка, число, строка с дата/время содержимым, произвольный аргумент). | **1, 2, 3, 4 - задаются из формы аргумента, позволяющей выбрать константное значение, значение переменной, выражения или встроенной в диалоговый сценарий функции, различия лишь в ограничении на формат выходного значения (строка, число, строка с дата/время содержимым, произвольный аргумент). | ||
Строка 166: | Строка 168: | ||
**5 - возвращает некоторый набор данных из БД, задается в формате SQL создателем сценария. | **5 - возвращает некоторый набор данных из БД, задается в формате SQL создателем сценария. | ||
− | **6 - аналогично возвращает из БД набор данных, однако задает «запрос по умолчанию». Указанный текст будет отображаться в поле ввода запроса у разработчика сценария в начале и каждый раз, когда он будет очищать это поле. Для указания текста запроса у соответствующего параметру элемента property_set задается коллекция, содержащая один подэлемент с именем | + | **6 - аналогично возвращает из БД набор данных, однако задает «запрос по умолчанию». Указанный текст будет отображаться в поле ввода запроса у разработчика сценария в начале и каждый раз, когда он будет очищать это поле. Для указания текста запроса у соответствующего параметру элемента <span style="color:green">property_set</span> задается коллекция, содержащая один подэлемент с именем «'''query'''». В нем должно присутствовать свойство <span style="color:green">property_cdata</span> с ключом '''sqltext'''. Также допускаются свойства '''connectiontype''', '''connectionstring''', определяющие в случае указания соответственно направление подключения (Собственная БД, ADO, OLE, Oracle, ODBC) и строку подключения к БД. Этот тип параметра может быть использован в случае, если разработчики plugin-программы закладывают жесткую структуру взаимодействия с БД, и их квалификация существенно выше, чем у возможного разработчика сценария. |
− | **7 - фиксированный список. Предлагает разработчику выбрать один из описанных в теле параметра вариантов. Для этого в соответствующем элементе property_set задается коллекция из других элементов, описывающих возможные варианты значений. Каждый описательный набор property_set имеет атрибуты name="category" и id, установленный в соответствии с идентификатором варианта. В теле описательного набора присутствуют свойства с ключами id и name. id - определяет код, который будет передан как выбранный вариант при формировании значений для передачу в форму, name - название, которое увидит разработчик сценария в списке. | + | **7 - фиксированный список. Предлагает разработчику выбрать один из описанных в теле параметра вариантов. Для этого в соответствующем элементе property_set задается коллекция из других элементов, описывающих возможные варианты значений. Каждый описательный набор <span style="color:green">property_set</span> имеет атрибуты <span style="color:green">name</span>="category" и <span style="color:green">id</span>, установленный в соответствии с идентификатором варианта. В теле описательного набора присутствуют свойства с ключами '''id''' и '''name'''. id - определяет код, который будет передан как выбранный вариант при формировании значений для передачу в форму, name - название, которое увидит разработчик сценария в списке. |
− | *paramname - название параметра, которое увидит разработчик сценанрия. | + | *<span style="color:green">paramname</span> - название параметра, которое увидит разработчик сценанрия. |
− | *paramdescription - описание параметра для разработчика сценария (подробная инструкция для получения ожидаемого значения). | + | *<span style="color:green">paramdescription</span> - описание параметра для разработчика сценария (подробная инструкция для получения ожидаемого значения). |
− | *paramextra - значение параметра, которое будет без изменений передано на вход в режиме выполнения. Может не быть задано. | + | *<span style="color:green">paramextra</span> - значение параметра, которое будет без изменений передано на вход в режиме выполнения. Может не быть задано. |
− | Пример возвращаемого значения: | + | <u>Пример возвращаемого значения:</u> |
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="input" count="6"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
− | string GetOutputParams ( string xml ). Возвращает перечень выходных параметров для указанной формы (компонента). | + | *'''<span style="color:blue">string</span> GetOutputParams ( <span style="color:blue">string</span> xml )'''. Возвращает перечень выходных параметров для указанной формы (компонента). |
Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы. | Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы. | ||
Строка 250: | Строка 252: | ||
Пример передаваемого параметра: | Пример передаваемого параметра: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="outputparams" count="1"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
− | Возвращаемое значение. | + | <u>Возвращаемое значение.</u> |
− | Каждый параметр представляет собой отдельный набор property_set в основной коллекции. Обязательными являются свойства: | + | Каждый параметр представляет собой отдельный набор <span style="color:green">property_set</span> в основной коллекции. Обязательными являются свойства: |
− | *paramkey - уникальное имя параметра, по которому необходимо будет производиться сопоставление, когда параметры в рабочем процессе будут переданы в форму. | + | *<span style="color:green">paramkey</span> - уникальное имя параметра, по которому необходимо будет производиться сопоставление, когда параметры в рабочем процессе будут переданы в форму. |
− | *paramtype - тип параметра. Определяет способ получения значения параметра при настройке в сценарии и тип значения. Допускается 4 варианта (1-string, 2-int, 3-datetime, 4-variable). Влияют на формат выбора переменной для сохранения значения. Соответственно для выбора предоставляется список только строковых переменных, только числовых, только переменных дата/время или список всех переменных. | + | *<span style="color:green">paramtype</span> - тип параметра. Определяет способ получения значения параметра при настройке в сценарии и тип значения. Допускается 4 варианта (1-string, 2-int, 3-datetime, 4-variable). Влияют на формат выбора переменной для сохранения значения. Соответственно для выбора предоставляется список только строковых переменных, только числовых, только переменных дата/время или список всех переменных. |
− | *paramname - название параметра, которое увидит разработчик сценанрия. | + | *<span style="color:green">paramname</span> - название параметра, которое увидит разработчик сценанрия. |
− | *paramdescription - описание параметра для разработчика сценария (подробная инструкция для получения ожидаемого значения). | + | *<span style="color:green">paramdescription</span> - описание параметра для разработчика сценария (подробная инструкция для получения ожидаемого значения). |
Пример возвращаемого значения: | Пример возвращаемого значения: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="output" count="3"> | + | <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> | |
− | </data> | + | </property_set> |
− | </oktellxmlmapper> | + | </data> |
+ | </oktellxmlmapper> | ||
− | *string ShowDesign ( string xml ). Вызывается для отображения диалоговой plugin-формы в «демонстрационном» режиме без передачи установленных для нее входных параметров. | + | *'''<span style="color:blue">string</span> ShowDesign ( <span style="color:blue">string</span> xml )'''. Вызывается для отображения диалоговой plugin-формы в «демонстрационном» режиме без передачи установленных для нее входных параметров. |
В строковом параметре находится XML структура с указанием Guid идентификатора интересующей формы. Если в параметре передан верный идентификатор - метод должен отобразить окно с формой в диалоговом режиме (с возвратом управления только после ее закрытия). Если указан неверный параметр - должен сразу вернуть управление. | В строковом параметре находится XML структура с указанием Guid идентификатора интересующей формы. Если в параметре передан верный идентификатор - метод должен отобразить окно с формой в диалоговом режиме (с возвратом управления только после ее закрытия). Если указан неверный параметр - должен сразу вернуть управление. | ||
Строка 308: | Строка 311: | ||
Возвращается структура с описанием кода возврата. | Возвращается структура с описанием кода возврата. | ||
− | Может быть вызвана только в момент создания сценария. Реализация метода plugin-программы для отображения диалоговых plugin-форм c CONTROLTYPE = FORM (оконные) может совпадать с реализацией метода PrepareShow. Для отображения же plugin-форм с CONTROLTYPE = CONTROL (встраиваемые контролы) реализация должна предусматривать создание и размещение такой формы на внутреннем окне и вывод его на экран командой ShowDialog(). | + | Может быть вызвана только в момент создания сценария. Реализация метода plugin-программы для отображения диалоговых plugin-форм c CONTROLTYPE = FORM (оконные) может совпадать с реализацией метода '''PrepareShow'''. Для отображения же plugin-форм с CONTROLTYPE = CONTROL (встраиваемые контролы) реализация должна предусматривать создание и размещение такой формы на внутреннем окне и вывод его на экран командой '''ShowDialog()'''. |
Пример передаваемого параметра: | Пример передаваемого параметра: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="design" count="1"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
− | В качестве возвращаемого значения после закрытия формы должно вернуться описание результата. В случае если результат (свойство property_simple с ключом resultcode) не возвращает {"0", "success"}, текст результата из свойства property_cdata c ключом resultdescription будет отображен во всплывающем уведомлении. | + | В качестве возвращаемого значения после закрытия формы должно вернуться описание результата. В случае если результат (свойство <span style="color:green">property_simple</span> с ключом '''resultcode''') не возвращает {"0", "success"}, текст результата из свойства <span style="color:green">property_cdata</span> c ключом '''resultdescription''' будет отображен во всплывающем уведомлении. |
− | *string PrepareShow ( string xml ). Вызывается для отображения операторской диалоговой plugin-формы в рабочем режиме. | + | *'''<span style="color:blue">string</span> PrepareShow ( <span style="color:blue">string</span> xml )'''. Вызывается для отображения операторской диалоговой plugin-формы в рабочем режиме. |
Метод осуществляет создание, подготовку и отображение окна с формой в диалоговом режиме (с возвратом управления только после ее закрытия). Вызывается только в режиме операторских диалогов (module = "dialog") для оконных форм (controltype = "form"). | Метод осуществляет создание, подготовку и отображение окна с формой в диалоговом режиме (с возвратом управления только после ее закрытия). Вызывается только в режиме операторских диалогов (module = "dialog") для оконных форм (controltype = "form"). | ||
Строка 333: | Строка 336: | ||
В качестве параметра - строка с XML содержимым. В нем в нескольких разделах перечислены | В качестве параметра - строка с XML содержимым. В нем в нескольких разделах перечислены | ||
− | *Блок common. Общие данные по задаче, сценарию, абоненту, оператору, текущему комментарию, Guid идентификаторы plugin-программы и plugin-формы. Имеет жесткую структуру содержимого. Свойство idshow задает уникальный код экземпляра отображения - по нему будет запрашиваться закрытие и возврат значений. | + | *Блок <span style="color:green">common</span>. Общие данные по задаче, сценарию, абоненту, оператору, текущему комментарию, Guid идентификаторы plugin-программы и plugin-формы. Имеет жесткую структуру содержимого. Свойство <span style="color:green">idshow</span> задает уникальный код экземпляра отображения - по нему будет запрашиваться закрытие и возврат значений. |
− | *Блок input. Значения для входных параметров в установленном формате. Структура содержимого состоит из наборов, описывающих входные параметры. Их количество и формат определяются на основе данных, | + | *Блок <span style="color:green">input</span>. Значения для входных параметров в установленном формате. Структура содержимого состоит из наборов, описывающих входные параметры. Их количество и формат определяются на основе данных, |
− | *Блок fillinfo. Информация о наполнении (этапе). При переводе формы от одного оператора к другому у первого окно с формой закрывается, возвращая строку (любого формата) с неким содержимым. Это содержимое будет передано в управляющий объект plugin-программы в клиентском приложении второго оператора как часть структуры в параметре данного метода PrepareShow. См. также описание метода GetCurrentFillInfo. Блок может отсутствовать. | + | *Блок <span style="color:green">fillinfo</span>. Информация о наполнении (этапе). При переводе формы от одного оператора к другому у первого окно с формой закрывается, возвращая строку (любого формата) с неким содержимым. Это содержимое будет передано в управляющий объект plugin-программы в клиентском приложении второго оператора как часть структуры в параметре данного метода <span style="color:darkred">PrepareShow</span>. См. также описание метода <span style="color:darkred">GetCurrentFillInfo</span>. Блок может отсутствовать. |
В приведенном примере передаваемого параметра отмеченные зеленым цветом комментарии разделяют описанные зоны. | В приведенном примере передаваемого параметра отмеченные зеленым цветом комментарии разделяют описанные зоны. | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="prepareparams" count="3" | + | <data name="prepareparams" count="3"> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | <!-- ###################################################### --> | + | <span style="color:green"><!-- ###################################################### --></span> |
− | <!-- Раздел INPUT с заказанными параметрами --> | + | <span style="color:green"><!-- Раздел COMMON с общими параметрами --></span> |
− | <!-- ###################################################### --> | + | <span style="color:green"><!-- ###################################################### --></span> |
− | + | <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> |
− | Табличный параметр. | + | |
− | Имеет большой достаточно объем описательного текста даже при небольшом объеме данных | + | <span style="color:green"><!-- ###################################################### --></span> |
− | Его формат будет описан отдельно в пункте OnQuery | + | <span style="color:green"><!-- Раздел INPUT с заказанными параметрами --></span> |
− | ..................................................................................... | + | <span style="color:green"><!-- ###################################################### --></span> |
− | + | <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> | |
− | + | ||
− | + | <span style="color:green">.....................................................................................</span> | |
− | + | <span style="color:green">Табличный параметр. </span> | |
− | + | <span style="color:green">Имеет большой достаточно объем описательного текста даже при небольшом объеме данных</span> | |
− | + | <span style="color:green">Его формат будет описан отдельно в пункте OnQuery</span> | |
− | + | <span style="color:green">.....................................................................................</span> | |
− | + | ||
− | + | <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> |
− | <!-- Раздел FILLINFO с информацией об этапе/заполнении --> | + | <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" /> | |
− | </data> | + | </property_set> |
− | </oktellxmlmapper> | + | </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> | ||
+ | |||
+ | <span style="color:green">.....................................................................................</span> | ||
+ | |||
+ | </property_collection> | ||
+ | </property_set> | ||
+ | |||
+ | <span style="color:green"><!-- ###################################################### --></span> | ||
+ | <span style="color:green"><!-- Раздел FILLINFO с информацией об этапе/заполнении --></span> | ||
+ | <span style="color:green"><!-- ###################################################### --></span> | ||
+ | <property_set name="fillinfo"> | ||
+ | <property_cdata key="fillinfo"><![CDATA[произвольная строка в любом формате от XML до B64]]></property_cdata> | ||
+ | </property_set> | ||
+ | </data> | ||
+ | </oktellxmlmapper> | ||
− | Возвращаемое значение. | + | <u>Возвращаемое значение.</u> |
В возвращаемой строке с XML содержимым должна присутствовать структура со значениями в двух разделах: | В возвращаемой строке с XML содержимым должна присутствовать структура со значениями в двух разделах: | ||
− | *Блок common. Новое значение комментария (передаваемого из формы в форму и от оператора к оператору), а также значение результата выполнения. По аналогии со стандартом операторского диалогового окна допускается два вида результатов: переход по кнопке Далее к следующему компоненту сценария с сохранением выходных значений в переменных сценария, а также остановка сценария кнопкой Стоп без сохранения выходных значений формы в переменных. | + | *Блок <span style="color:green">common</span>. Новое значение комментария (передаваемого из формы в форму и от оператора к оператору), а также значение результата выполнения. По аналогии со стандартом операторского диалогового окна допускается два вида результатов: переход по кнопке '''Далее''' к следующему компоненту сценария с сохранением выходных значений в переменных сценария, а также остановка сценария кнопкой '''Стоп''' без сохранения выходных значений формы в переменных. |
− | *Блок output. Набор, описывающий значения выходных параметров. Они будут применены в обработчике сценариев на сервере для сохранения в соответствующих переменных, указанных при настройке компонента «Plugin-форма». | + | *Блок <span style="color:green">output</span>. Набор, описывающий значения выходных параметров. Они будут применены в обработчике сценариев на сервере для сохранения в соответствующих переменных, указанных при настройке компонента «Plugin-форма». |
В приведенном примере возвращаемого значения отмеченные зеленым цветом комментарии разделяют описанные зоны. | В приведенном примере возвращаемого значения отмеченные зеленым цветом комментарии разделяют описанные зоны. | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="result" count="2"> | + | <data name="result" count="2"> |
− | <!-- ###################################################### --> | + | <span style="color:green"><!-- ###################################################### --></span> |
− | <!-- Раздел COMMON с общеий информацией о результате --> | + | <span style="color:green"><!-- Раздел COMMON с общеий информацией о результате --></span> |
− | <!-- ###################################################### --> | + | <span style="color:green"><!-- ###################################################### --></span> |
− | + | <property_set name="common"> | |
− | + | <property_cdata key="comment"><![CDATA[теперь вот такой комментарий]]></property_cdata> | |
− | + | <property_simple key="result" value="next" /> | |
− | + | </property_set> | |
− | <!-- ###################################################### --> | + | <span style="color:green"><!-- ###################################################### --></span> |
− | <!-- Раздел OUTPUT со значениями выходных параметров --> | + | <span style="color:green"><!-- Раздел OUTPUT со значениями выходных параметров --></span> |
− | <!-- ###################################################### --> | + | <span style="color:green"><!-- ###################################################### --></span> |
− | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
− | *string GetCurrentFillInfo ( string xml ). Вызывается для определения текущего наполнения формы (этапа) и последующего перевода формы на другого оператора в том виде, в котором она находится у текущего оператора. | + | *'''<span style="color:blue">string</span> GetCurrentFillInfo ( <span style="color:blue">string</span> xml )'''. Вызывается для определения текущего наполнения формы (этапа) и последующего перевода формы на другого оператора в том виде, в котором она находится у текущего оператора. |
Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно). | Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно). | ||
− | Возвращаемое значение может иметь любой формат и будет без разбора передано как часть структуры входного параметра (блок fillinfo) в метод PrepareShow или CreateControl на компьютере оператора, принимающего переведенный вызов. | + | Возвращаемое значение может иметь любой формат и будет без разбора передано как часть структуры входного параметра (блок <span style="color:green">fillinfo</span>) в метод <span style="color:red">PrepareShow</span> или <span style="color:red">CreateControl</span> на компьютере оператора, принимающего переведенный вызов. |
Пример передаваемого параметра: | Пример передаваемого параметра: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="close" count="1"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
Пример возвращаемого значения: | Пример возвращаемого значения: | ||
− | произвольная строка в любом формате от XML до B64 | + | <span style="color:darkviolet">произвольная строка в любом формате от XML до B64</span> |
− | *string StopShow ( string xml ). Вызывается для принудительного закрытия диалоговой формы с CONTROLTYPE = FORM (оконные). Это может происходить в случае перевода звонка и соответствено формы на другого оператора (предварительно вызывается GetCurrentFillInfo) или в случае принудительного завершения диалогового сценария (по настройкам системы). | + | *'''<span style="color:blue">string</span> StopShow ( <span style="color:blue">string</span> xml )'''. Вызывается для принудительного закрытия диалоговой формы с CONTROLTYPE = FORM (оконные). Это может происходить в случае перевода звонка и соответствено формы на другого оператора (предварительно вызывается <span style="color:darkred">GetCurrentFillInfo</span>) или в случае принудительного завершения диалогового сценария (по настройкам системы). |
Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно). | Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно). | ||
Строка 568: | Строка 571: | ||
Пример передаваемого параметра: | Пример передаваемого параметра: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="close" count="1"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
Пример возвращаемого значения: | Пример возвращаемого значения: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="result" count="1"> | + | <data name="result" count="1"> |
− | + | <property_set name="common"> | |
− | + | <property_cdata key="comment"><![CDATA[Новое значение комментария]]></property_cdata> | |
− | + | </property_set> | |
− | </data> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
− | *string GetControlResult ( string xml ). Вызывается для получения XML структуры со значениями выходных переменных для форм с CONTROLTYPE = CONTROL (контрольные). Поскольку отображение таких форм производится приложением Oktell (в отличие от оконных форм plugin-программы, для которых вызывается метод PrepareShow, осуществляющий подготовку, отображение и возврат управления вместе с описываемой структурой значений выходных параметров в контексте самой plugin-программы). | + | *'''<span style="color:blue">string</span> GetControlResult ( <span style="color:blue">string</span> xml )'''. Вызывается для получения XML структуры со значениями выходных переменных для форм с CONTROLTYPE = CONTROL (контрольные). Поскольку отображение таких форм производится приложением Oktell (в отличие от оконных форм plugin-программы, для которых вызывается метод <span style="color:darkred">PrepareShow</span>, осуществляющий подготовку, отображение и возврат управления вместе с описываемой структурой значений выходных параметров в контексте самой plugin-программы). |
Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно). | Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно). | ||
Строка 599: | Строка 602: | ||
Пример передаваемого параметра: | Пример передаваемого параметра: | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="controlresult" count="1"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
Строка 615: | Строка 618: | ||
Методы данного раздела могут вызываться как для режима диалоговых сценариев, так и для режима подключения внешних модулей. | Методы данного раздела могут вызываться как для режима диалоговых сценариев, так и для режима подключения внешних модулей. | ||
− | *System.Windows.Forms.Control CreateControl ( string xml ). Используется и в режиме диалога, и в режиме подключения внешних модулей (CRM). | + | *'''System.Windows.Forms.Control CreateControl ( <span style="color:blue">string</span> xml )'''. Используется и в режиме диалога, и в режиме подключения внешних модулей (CRM). |
В режиме диалога вызывается для создания и подготовки формы с CONTROLTYPE = CONTROL (контрольные). | В режиме диалога вызывается для создания и подготовки формы с CONTROLTYPE = CONTROL (контрольные). | ||
− | Входной параметр представляет собой строку с комплексным XML параметром, который в зависимости от режима использования имеет тот или иной формат. В режиме диалога содержимое параметра аналогично содержимому одноименного параметра метода PrepareShow, содержит однотипные разделы и служит для настройки требуемого отображения. | + | Входной параметр представляет собой строку с комплексным XML параметром, который в зависимости от режима использования имеет тот или иной формат. В режиме диалога содержимое параметра аналогично содержимому одноименного параметра метода <span style="color:darkred">PrepareShow</span>, содержит однотипные разделы и служит для настройки требуемого отображения. |
Возвращает созданный экземпляр контрола, который затем размещается в стандартном операторском диалоговом окне Oktell. | Возвращает созданный экземпляр контрола, который затем размещается в стандартном операторском диалоговом окне Oktell. | ||
Строка 627: | Строка 630: | ||
Возвращает созданный экземпляр окна (оконной формы), которое затем размещается среди других внешних модулей. | Возвращает созданный экземпляр окна (оконной формы), которое затем размещается среди других внешних модулей. | ||
− | ВНИМАНИЕ | + | <span style="color:red">ВНИМАНИЕ: Окно представляет собой .NET форму (System.Windows.Forms.Form), которая в классовой структуре FrameWork является потомком System.Windows.Forms.Control.</span> |
Значение передаваемого параметра при использовании в режиме диалога полностью совпадает с параметром функции PrepareShow. | Значение передаваемого параметра при использовании в режиме диалога полностью совпадает с параметром функции PrepareShow. | ||
Строка 633: | Строка 636: | ||
Пример параметра при создании для подключения среди внешних модулей (CRM): | Пример параметра при создании для подключения среди внешних модулей (CRM): | ||
− | <?xml version="1.0" encoding="utf-16"?> | + | <?xml version="1.0" encoding="utf-16"?> |
− | <oktellxmlmapper version="80710"> | + | <oktellxmlmapper version="80710"> |
− | <data name="info" count="3"> | + | <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> | + | </data> |
− | </oktellxmlmapper> | + | </oktellxmlmapper> |
Строка 680: | Строка 683: | ||
Методы и события данного раздела служат для осуществления плотного взаимодействия plugin-программы и клиентского приложения Oktell. XML-содержимое описывает не только параметры, но и само действие (действия в общем случае). Не изменяя интерфейса подключения plugin-программ при помощи этих методов будут расширяться возможности взаимодействия, добавляться новые сервисы в клиентское приложение Oktell для использования в plugin-программах. | Методы и события данного раздела служат для осуществления плотного взаимодействия plugin-программы и клиентского приложения Oktell. XML-содержимое описывает не только параметры, но и само действие (действия в общем случае). Не изменяя интерфейса подключения plugin-программ при помощи этих методов будут расширяться возможности взаимодействия, добавляться новые сервисы в клиентское приложение Oktell для использования в plugin-программах. | ||
− | *event PluginQueryInvoker OnQuery. Событие управляющего объекта, обрабатываемое в клиентском приложении Oktell. Служит для выполнения сервисных специальных запросов в клиентском приложении Oktell по инициативе plugin-программы или какой либо из ее plugin-форм. Результат выполнения попадает в управляющий объект как возвращаемое значение метода-обработчика. Параметр и возвращаемое значение представляют собой строки с XML-содержимым. Некоторые запросы должны обязательно содержать указание идентификатора plugin-формы и ее экземпляра, переданные через параметр метода CreateControl в момент создания. | + | *'''<span style="color:blue">event</span> PluginQueryInvoker OnQuery'''. Событие управляющего объекта, обрабатываемое в клиентском приложении Oktell. Служит для выполнения сервисных специальных запросов в клиентском приложении Oktell по инициативе plugin-программы или какой либо из ее plugin-форм. Результат выполнения попадает в управляющий объект как возвращаемое значение метода-обработчика. Параметр и возвращаемое значение представляют собой строки с XML-содержимым. Некоторые запросы должны обязательно содержать указание идентификатора plugin-формы и ее экземпляра, переданные через параметр метода <span style="color:darkred">CreateControl</span> в момент создания. |
Например могут быть осуществлены запросы в БД с возвратом некоторого набора данных, команды «Позвонить», «Переключить». В режиме модулей CRM команда на отображение специального текста в заголовке модуля, команда на отображение или смену вкладок на панели заголовка. | Например могут быть осуществлены запросы в БД с возвратом некоторого набора данных, команды «Позвонить», «Переключить». В режиме модулей CRM команда на отображение специального текста в заголовке модуля, команда на отображение или смену вкладок на панели заголовка. | ||
Строка 686: | Строка 689: | ||
Именно этот режим будет претерпевать изменения и дополняться при необходимости развития. | Именно этот режим будет претерпевать изменения и дополняться при необходимости развития. | ||
− | Описание структуры параметров обширно и приведено в отдельной статье | + | Описание структуры параметров обширно и приведено в отдельной статье «[[Сервисное взаимодействие]]». |
− | *string DoQuery ( string xml ). Событие приложения Oktell, обрабатываемое в управляющем объекте plugin-программы. Служит для выполнения сервисных специальных запросов в plugin-программе. Какие из них использовать и использовать ли вообще - дело управляющего объекта. Параметр и возвращаемое значение представляют собой строки с XML-содержимым. | + | *'''<span style="color:blue">string</span> DoQuery ( <span style="color:blue">string</span> xml )'''. Событие приложения Oktell, обрабатываемое в управляющем объекте plugin-программы. Служит для выполнения сервисных специальных запросов в plugin-программе. Какие из них использовать и использовать ли вообще - дело управляющего объекта. Параметр и возвращаемое значение представляют собой строки с XML-содержимым. |
Например в управляющий объект передаются события о смене активной вкладки в заголовке (сами вкладки появляются в приложении Oktell по событию OnQuery управляющего объекта). В управляющий объект также попадают события об отображении или скрытия той или иной формы, так как может потребоваться обновление данных, инициирование или остановка каких-либо таймеров и т.д. | Например в управляющий объект передаются события о смене активной вкладки в заголовке (сами вкладки появляются в приложении Oktell по событию OnQuery управляющего объекта). В управляющий объект также попадают события об отображении или скрытия той или иной формы, так как может потребоваться обновление данных, инициирование или остановка каких-либо таймеров и т.д. | ||
− | Описание структуры параметров обширно и приведено в отдельной статье | + | Описание структуры параметров обширно и приведено в отдельной статье «[[Сервисное взаимодействие]]». |
Версия 08:01, 31 марта 2014
Содержание
Поскольку методы выполняются управляющим объектом 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"> <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> </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.
Второй рисунок - формы на базе Form. Понятно, что она может принимать любой вид.
Вариант использования (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">
<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[1]]></property_cdata> </property_set>
</oktellxmlmapper>
Режим диалога (операторские формы)
Перечисленные в этом разделе методы вызываются только для plugin-форм, заявленных как формы для диалоговых сценариев. Даже если plugin-программа вовсе не имеет форм для диалоговых сценариев, все методы должны присутствовать в классе управляющего объекта для соответствия интерфейсу.
- string GetInputParams ( string xml ). Возвращает перечень входных параметров для указанной формы (компонента).
Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы.
Возвращаемое значение представляет собой строку в XML формате, содержащую структуру, которая описывает все необходимые форме параметры, их названия, идентификаторы, типы, возможно значения по умолчанию.
Используется при настройке компонента plugin-форма в момент создания сценария диалога. Администратор, создающий сценарий, задает описанные входные значения на основе свойств, указанных в возвращаемой структуре. Возможные типы: аргументы (строковые, числовые, дата-время, общие), запросы к БД, возвращающие значения или наборы, а также перечислимые типы с возможными вариантами, описанными в структуре. В момент выполнения сценария при передаче управления компоненту Plugin-форма, выполняются вычисления всех установленных параметров, готовится XML структура, которая затем передается в плагин на отображение модуля.
Пример передаваемого параметра:
<?xml version="1.0" encoding="utf-16"?> <oktellxmlmapper version="80710">
<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>
</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"> <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> </oktellxmlmapper>
- string GetOutputParams ( string xml ). Возвращает перечень выходных параметров для указанной формы (компонента).
Параметр представляет собой строку в XML формате, в которой присутствует Guid идентификатор plugin-формы.
Возвращаемое значение представляет собой строку в XML формате, содержащую структуру, которая описывает все получаемые на выходе из формы параметры, их названия, идентификаторы, типы.
Используется при настройке компонента plugin-форма в момент создания сценария диалога. Администратор, создающий сценарий, указывает в какие переменные будут при выполнении сохранены значения описанных выходные параметров. В момент выполнения сценария после завершения выполнения компонента Plugin-форма, в указанные переменные попадут соответствующие значения выходных параметров.
Пример передаваемого параметра:
<?xml version="1.0" encoding="utf-16"?> <oktellxmlmapper version="80710"> <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> </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"> <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> </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"> <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> </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"> <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> <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> <property_set name="fillinfo"> <property_cdata key="fillinfo"><![CDATA[произвольная строка в любом формате от XML до B64]]></property_cdata> </property_set> </oktellxmlmapper>
Возвращаемое значение.
В возвращаемой строке с XML содержимым должна присутствовать структура со значениями в двух разделах:
- Блок common. Новое значение комментария (передаваемого из формы в форму и от оператора к оператору), а также значение результата выполнения. По аналогии со стандартом операторского диалогового окна допускается два вида результатов: переход по кнопке Далее к следующему компоненту сценария с сохранением выходных значений в переменных сценария, а также остановка сценария кнопкой Стоп без сохранения выходных значений формы в переменных.
- Блок output. Набор, описывающий значения выходных параметров. Они будут применены в обработчике сценариев на сервере для сохранения в соответствующих переменных, указанных при настройке компонента «Plugin-форма».
В приведенном примере возвращаемого значения отмеченные зеленым цветом комментарии разделяют описанные зоны.
<?xml version="1.0" encoding="utf-16"?> <oktellxmlmapper version="80710"> <property_set name="common"> <property_cdata key="comment"><![CDATA[теперь вот такой комментарий]]></property_cdata> <property_simple key="result" value="next" /> </property_set> <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> </oktellxmlmapper>
- string GetCurrentFillInfo ( string xml ). Вызывается для определения текущего наполнения формы (этапа) и последующего перевода формы на другого оператора в том виде, в котором она находится у текущего оператора.
Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно).
Возвращаемое значение может иметь любой формат и будет без разбора передано как часть структуры входного параметра (блок fillinfo) в метод PrepareShow или CreateControl на компьютере оператора, принимающего переведенный вызов.
Пример передаваемого параметра:
<?xml version="1.0" encoding="utf-16"?> <oktellxmlmapper version="80710"> <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> </oktellxmlmapper>
Пример возвращаемого значения:
произвольная строка в любом формате от XML до B64
- string StopShow ( string xml ). Вызывается для принудительного закрытия диалоговой формы с CONTROLTYPE = FORM (оконные). Это может происходить в случае перевода звонка и соответствено формы на другого оператора (предварительно вызывается GetCurrentFillInfo) или в случае принудительного завершения диалогового сценария (по настройкам системы).
Строковый параметр в XML структуре определяет код интересующей формы (хотя диалоговый режим поддерживает отображение только одной операторской диалоговой формы единовременно).
Возвращается структура, содержащая значение комментария.
Пример передаваемого параметра:
<?xml version="1.0" encoding="utf-16"?> <oktellxmlmapper version="80710"> <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> </oktellxmlmapper>
Пример возвращаемого значения:
<?xml version="1.0" encoding="utf-16"?> <oktellxmlmapper version="80710"> <property_set name="common"> <property_cdata key="comment"><![CDATA[Новое значение комментария]]></property_cdata> </property_set> </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"> <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> </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"> <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> </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 управляющего объекта). В управляющий объект также попадают события об отображении или скрытия той или иной формы, так как может потребоваться обновление данных, инициирование или остановка каких-либо таймеров и т.д.
Описание структуры параметров обширно и приведено в отдельной статье «Сервисное взаимодействие».