DataConnection
Необходимо подключение библиотеки DataConnection.dll.
Шаблон кастомного DataConnection
<DataConnection Name="CustomGetDataConnection" Type="CustomGetDataConnection" Assembly="Template">
<!-- Элементы DataConnection -->
</DataConnection>В атрибуте Type указывается имя класса, описывающего кастомный DataConnection, а в качестве значения атрибута Assembly указывается имя сборки, в которой реализован этот класс.
Для удобства и разделения логики, исходный код DataConnection можно разбить на два класса:
CustomGetDataConnectionXmlSettings - класс загрузки данных из xml-файла;
CustomGetDataConnection - класс с логикой формирования результирующей таблицы.
Парсинг xml
Полный код шаблона:
using System.Xml;
namespace WorkflowForms.DataConnections
{
public class CustomGetDataConnectionXmlSettings : GetDataConnectionXmlSettings
{
/*
* Набор свойств для хранения данных
* public string PropertyName { get; private set; }
*/
public CustomGetDataConnectionXmlSettings(IDependable parent, IWorkflowForm form, XmlNode node, XmlSqlQueryProvider queryProvider)
: base(parent, form, node)
{
/*
* Здесь должен быть парсинг xml-кода,
* чтобы получить значения тэгов и их атрибутов.
*/
}
}
}Конструктор класса принимает параметры:
parentIDependable - ссылка на экземпляр класса CustomCommand, для которого создавался объект типа CustomCommandSettings;formIWorkflowForm - форма, на которой описана кастомная команда;nodeXmlNode - узел, который соответствует тэгу <Command>, описанному в xml-файле формы.dataBindingProviderIDataBindingProvider -
Исполняемый код
Полный код класса:
Get/Set-проперти
Кастомный GetDataConnection может иметь свои get и set-проперти, реализация которых описывается в методах GetProperty и SetProperty соответственно.
Обращение к set-проперти происходит через команду ValueSetCommand:
В классе необходимо переопределить метод SetProperty:
В параметре parameters метода SetProperty хранится словарь всех параметров, описанных в команде ValueSetCommand в тэге <Parameters>.
Аналогичным образом отработает get-проперти:
В классе необходимо переопределить метод GetProperty:
В параметре parameters метода GetProperty хранится словарь всех параметров, описанных в тэге <Parameters> при обращении к get-проперти.
Элементы DataConnection
Условие
В примере рассмотрим xml-код соединения с данными с обязательным тэгом <AnyCondition> для передачи имени условия:
Парсинг xml
В конструкторе класса CustomGetDataConnectionXmlSettings необходимо прописать код вида:
Так как имя условия указывается в качестве значения атрибута обязательного тэга, то для его получения используется статический метод GetRequiredAttributeValue класса XmlParser. В третьем параметре (string path) указываем полный путь до тэга, значение атрибута которого нужно получить. Имя атрибута указывается в четвертом параметре (string attribute). Если элемент или его атрибут отсутствует, будет возвращено исключение типа InvalidXmlException.
Имея имя условия, объект типа ICondition можно получить через переменную form типа IWorkflowForm, используя метод GetCondition.
Исполняемая часть
В методе LoadSettings из объекта settings, переданного в метод в качестве параметра, можно получить объект типа ICondition, обратившись к публичному свойству AnyCondition:
В методе ExecuteAsyncCommand можно получать значение условия, обращаясь к свойству Value:
SQL-запросы
Если соединение с данными должно отправлять на сервер запрос на выполнение SqlQuery, то всегда должно указываться имя процесса (WorkflowName), в рамках которого описан SQL-запрос. Аналогичный тэг указывается в описании PrimaryGetDataConnection.
Парсинг xml
В конструкторе класса CustomGetDataConnectionXmlSettings необходимо прописать код вида:
Так как имя процесса и запрос являются обязательными для описания в команде, то для получения их значений используется статический метод GetRequiredAttributeValue класса XmlParser. В третьем параметре (string path) указываем полный путь до тэга, значение атрибута которого нужно получить. Имя атрибута указывается в четвертом параметре (string attribute). Если элемент или его атрибут отсутствует, будет возвращено исключение типа InvalidXmlException.
Исполняемая часть
В методе LoadSettings из объекта settings, переданного в метод в качестве параметра, можно получить имя процесса и имя SQL-запроса, который нужно выполнять:
В методе ExecuteAsyncCommand для выполнения запроса к серверной части, необходимо из объекта формы получить клиента серверной части (WorkflowEngineClient). В метод ExecuteQuery клиента необходимо передать имя процесса, имя SQL-запроса (описанного в серверном xml-файле) и словарь параметров, значения которых должны подставляться в текст запроса:
Результатом выполнения метода ExecuteQuery будет таблица типа DataTable, дальнейшая работа с которой может быть с помощью LINQ, либо путем перебора всех строк:
Объекты формы
Парсинг xml
В конструкторе класса CustomGetDataConnectionXmlSettings необходимо прописать код вида:
Так как имя объекта формы указывается в качестве значения атрибута обязательного тэга, то для его получения используется статический метод GetRequiredAttributeValue класса XmlParser. В третьем параметре (string path) указываем полный путь до тэга, значение атрибута которого нужно получить. Имя атрибута указывается в четвертом параметре (string attribute). Если элемент или его атрибут отсутствует, будет возвращено исключение типа InvalidXmlException.
Имея имя объекта формы, объект типа IControl можно получить через переменную form типа IWorkflowForm, используя метод GetControl.
Исполняемая часть
В методе LoadSettings из объекта settings, переданного в метод в качестве параметра, можно получить ссылку на объект формы:
Для получения значения из объекта формы необходимо обращаться к свойству Value:
DataConnection
Парсинг xml
В конструкторе класса CustomGetDataConnectionXmlSettings необходимо прописать код вида:
Так как имя DataConnection указывается в качестве значения атрибута обязательного тэга, то для его получения используется статический метод GetRequiredAttributeValue класса XmlParser. В третьем параметре (string path) указываем полный путь до тэга, значение атрибута которого нужно получить. Имя атрибута указывается в четвертом параметре (string attribute). Если элемент или его атрибут отсутствует, будет возвращено исключение типа InvalidXmlException.
Имея имя соединения с данными, объект типа IGetDataConnection можно получить через переменную form типа IWorkflowForm, используя метод GetDataConnection.
Исполняемая часть
В методе LoadSettings из объекта settings, переданного в метод в качестве параметра, можно получить ссылку на DataConnection:
Если кастомный DataConnection использует данные другого DataConnection, то необходимо установить зависимость первого от второго, чтобы гарантировать порядок загрузки при старте формы. Для этого в метод InternalInit класса CustomGetDataConnection необходимо добавить строки:
Имея ссылку на DataConnection, можно получить его таблицу данных вызвав метод GetDataTable:
Last updated