Перейти к основному содержимому

Генерация GraphQL-запросов

При настройке действий, применимых к экранной форме, вы можете генерировать типовые GraphQL-запросы для выполнения CRUD-операций (create, read, update, delete) с данными. В дальнейшем вы можете изменять сгенерированные GraphQL-запросы, чтобы они соответствовали требованиям к разрабатываемому приложению.

Вы можете генерировать запросы типа query и типа mutation. Если вы генерируете запрос типа query, вы можете указать имя класса для запроса, а также установить признак того, будет ли запрос содержать условие и нужно ли получать результат запроса постранично. Если вы генерируете запрос типа mutation, вы можете указать только имя класса для запроса.

Сгенерированным запросам типа mutation автоматически присваиваются имена в зависимости от выполняемой функции согласно следующим шаблонам:

  • добавление данных: add+<псевдоним класса>, например, addProject.
  • изменение данных: update+<псевдоним класса>, например, updateProject.
  • удаление данных: delete+<псевдоним класса>, например, deleteProject.

Вы можете изменять автоматически присвоенные имена запросов.

Чтобы сгенерировать GraphQL-запрос:

  1. В проекте выберите файл с расширением mdcontainer, соответствующий экранной форме, для которой вы хотите настроить действие типа GraphQL.

  2. На боковой панели нажмите значок UG_settings_icon.png и в разделе Действия выберите или создайте действие типа GraphQL.

  3. В окне настройки действия нажмите Конструктор GraphQL.

  4. В окне Конструктор GraphQL в блоке Генерация укажите следующие параметры:

    • Из раскрывающегося списка выберите класс, запрос к которому вы хотите сгенерировать.

    • С помощью кнопки выбора укажите тип генерируемого GraphQL-запроса:

      • Запрос: выберите, если вы хотите сгенерировать запрос типа query;
      • Мутация: выберите, если вы хотите сгенерировать запрос типа mutation.
    • Укажите дополнительные параметры для выбранного типа запроса:

      • Для запроса типа query:

        • Установите флажок Условие, если вы хотите сформулировать условие выборки данных. В текст запроса будет добавлен оператор where: {Id: {eq:$targetId}}) и описание переменной $targetId: Int, где Id — идентификатор запрашиваемой сущности.
        • Установите флажок Пагинация, если вы хотите получать результат запроса постранично с определенным количеством элементов на странице, например, для отображения в области компонента DataGrid. В текст запроса будет добавлен оператор totalCount, а также переменные skip и take.

        Следующий пример демонстрирует сгенерированный запрос getProjectById с условием:

        query {
        projectsanddocs_project(where: {Id: {eq:$targetId}})
        {items{name, manager, customer, phase, status} }
        }

        Следующий пример демонстрирует сгенерированный запрос getProject с постраничным получением результата и без условий:

        query getProject($skip: Int, $take: Int) {
        projectsanddocs_project(skip: $skip, take: $take)
        {items{Id, name, manager, customer, phase, status}
        totalCount}}

        Следующий пример демонстрирует сгенерированный запрос getProjectById с постраничным получением результата и c условием:

        query getProjectById($skip: Int, $take: Int, $targetId: Int) {
        projectsanddocs_project(where: {Id: {eq:$targetId}})
        {items{name, manager, customer, phase, status} totalCount }
        }
      • Для запроса типа mutation с помощью кнопки выбора укажите тип действия, которое вы хотите выполнить с помощью генерируемого запроса:

        • Добавление записи: выберите, если вы хотите добавить экземпляр класса. В переменные и в тело запроса будут добавлены все атрибута класса, кроме автоинкрементного идентификатора Id сущности. Типы атрибутов будут соответствовать типам, описанным в модели данных проекта.

        Следующий пример демонстрирует запрос addProjects, сгенерированный в проекте projectsanddocs для класса project, имеющего атрибуты Phase и Status типа enum.

          mutation addProjects($name: String, $customer: String, 
        $phase: ProjectsAndDocs_Phase, $manager: String,
        $status: ProjectsAndDocs_Statuses) {
        add_projectsanddocs_project(
        projectsanddocs_project: {
        name: $name,
        customer: $customer,
        phase: $phase,
        manager: $manager,
        status: $status
        }
        ) {
        insertedId
        }
        }
        • Изменение записи: выберите, если вы хотите изменить данные экземпляра класса. В переменные и в тело запроса будут добавлены все атрибута класса, кроме автоинкрементного идентификатора Id сущности. Типы атрибутов будут соответствовать типам, описанным в модели данных проекта. Условие для запроса будет указано по умолчанию и соответствовать идентификатору Id изменяемой сущности, например: where: {Id: {eq:$targetId}}. Количество измененных экземпляров класса будет добавлено в тело запроса автоматически, например, countObjectsModified.

        Следующий пример демонстрирует запрос updateProjectById, сгенерированный в проекте projectsanddocs для класса project, имеющего атрибуты Phase и Status типа enum.

          mutation updateProjectById($targetId: Int, $newName:String, 
        $newManager: String, $newCustomer: String,
        $newPhase: ProjectsAndDocs_Phase, $newStatus: ProjectsAndDocs_Statuses) {
        update_projectsanddocs_project(
        where: {Id: {eq:$targetId}},
        projectsanddocs_project: {
        name: $newName,
        manager: $newManager,
        customer: $newCustomer,
        phase: $newPhase,
        status: $newStatus
        }
        )
        {
        countObjectsModified
        }
        }
        • Удаление записи: выберите, если вы хотите удалить экземпляр класса. Идентификатор Id сущности, которую вы хотите удалить, будет добавлен в список переменных автоматически, например, where: {Id: {eq:$targetId}}.

        Следующий пример демонстрирует запрос deleteProjects, сгенерированный в проекте myproject для класса project.

          mutation deleteProjects($targetID: Int) {
        delete_myproject_project(where: {Id:{eq: $targetID}})
        {
        countObjectsModified
        }
        }

  5. В левой части окна нажмите Сгенерировать.

    Тело запроса будет отображаться в блоке Запрос окна Конструктор GraphQL.

Теперь вы можете изменить сгенерированный запрос, ввести значения переменных для запроса и выполнить запрос.