SqlQuery

Кастомный SqlQuery полезен в тех случаях, когда необходима предварительная обработка данных, которую проще реализовать на C#, и не нужно передавать клиенту лишние данные, используемые в обработке.

Для создания кастомных SqlQuery достаточно подключения основной библиотеки WorkflowEngine.dll.

Описание запроса

Пример синтаксиса кастомного запроса

<SqlQuery Name="CustomSqlQuery" Type="CustomSqlQuery" Assembly="TemplateEngine">
  <Text>
    SELECT
      null AS "Field0",
      null AS "Field1",
      null AS "Field2"
    LIMIT 0;
  </Text>
  <MySqlQuery>
    <Text>
      SELECT
        city.city_id AS "CityId",
        city.title AS "Title",
        city.archive AS "Archive"
      FROM
        template.city
      ORDER BY city.title;
    </Text>
  </MySqlQuery>
</SqlQuery>

В тэге <Text> можно указать запрос, который будет описывать поля ответа, доступные на форме, и не будет содержать записей. Такая договоренность позволяет понять структуру ответа без необходимости открывать исходный код элемента.

Тэг <MySqlQuery> является вспомогательным для получения данных, которые необходимо предварительно обработать. Таких тэгов может быть несколько - все зависит от задачи.

Обращение к запросу

Обращение к кастомному SqlQuery на форме ничем не отличается от обращения к платформенным SqlQuery:

Так же указываем поля таблицы, которую сервер возвращает клиентской части.

Исходный код

В конструкторе CustomSqlQuery используется метод GetService объекта типа ServiceProvider для получения объекта типа ISqlQueryHelper, который помогает построить текст запроса, заменив в нем переменные в круглых скобках {} на нужные значения:

В методе Init описывается парсинг xml-кода, для получение данных из серверного xml-файла. Статический метод GetRequiredElementValue класса XmlParser используется для получения значения обязательного тэга, путь до которого указывается в параметре string path. В качестве результата метод вернет строку. Если элемент отсутствует, будет возвращено исключение типа InvalidXmlException. Если необходимо получить значение необязательного элемента, то следует использовать метод GetElementValue. Этот метод в случае отсутствия элемента будет возвращать значение по умолчанию, переданное в параметрах метода.

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

Для выполнения SQL-запросов используется метод ExecuteQueryAsync у объекта типа IDatabaseConnection, результатом которого будет объект типа DataTable.

Last updated