Внутреннее API

В рамках работающего процесса, в области видимости каждого коннектора доступен объект ctx , который в свою очередь предоставляет доступ к системному API процесса. Данное API позволяет работать внутренними методами процесса, а также управлять workflow.

Свойства объекта ctx

Название

Описание

ctx.connector

Содержит схему текущего исполняемого коннектора

ctx.data

Содержит данные переданные текущему исполняемому коннектору от предыдущего коннектора.

ctx.workplace

Содержит название workplace

ctx.processID

Содержит id текущего процесса

Дополнительные свойства ctx для коннекторов c типом webservice

При выполнении коннекторов с типом webservice объект ctx содержит дополнительные свойства и методы для работы с HTTP запросами.

Название

Описание

ctx.request

Объект http.request - смотрите документацию NodeJS

ctx.response

Объект http.response - смотрите документацию NodeJS

Основные методы

ctx.getConnectorId(<id>)

Метод для получение коннектора процесса по его ID.

Connector.code
const connector = ctx.getConnectorById("5cb6277d35b3820001a8dbc6");
console.log(connector);

>>> Output >>>
{
    "id": "5cb6277d35b3820001a8dbc6",
    "name": "Expression",
    .......
}

ctx.stopProcess() - остановка процесса

Метод для остановки выполнения процесса.

Connector.code
(async () => {
    try {
        await ctx.stopProcess();
    } catch (err) {
        console.error(err);
    }
})();

ctx.setHelper(<name>, <any>)

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

Connector.installHandler
const getUserById = (id, users) => users.find(user => user.id == id);
ctx.setHelper('getUserById', getUserById);

После выполнения данного метода в коннекторах будет доступен новый обработчик.

Connector.code
const user = ctx.getUserById(1, [{id: 1, name: "John Smith"}]);
console.log(user);

ctx.setData(<object>)

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

Connector.code
const users = await axios.get("https://domain.com/users");
ctx.setData({
    users: users
});

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

ctx.reject(<requeue>) - отменить выполнение следующих коннекторов

Метод предназначен для остановки выполнения следующих коннекторов. Аргумент requeue:

  • false - только отменяет выполнение следующих коннекторов

  • true - останавливает выполнение следующих коннекторов и ставит выполнение текущего коннектора опять в очередь

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

Connector.code
if (ctx.data.userId !== 1) {
    ctx.reject(false);
}
return Promise.resolve();

Методы для работы с DataStorage

ctx.storage.get(name, params)

Метод предназначен для получения данных их DataStorage.

Название

Описание

name

Название коллекции

params

Параметры запроса. Подробнее DataStorage

Connector.code
(async () => {
    const users = await ctx.storage.get('users', {
        query: {
            _id: {
                $in: ["5cb6277d35b3820001a8dbc6","5cb6277d35b3820001a8dbc7"]
            }
        },
        limit: 30
    });
    console.log(users);
})();

ctx.storage.create(name, params)

Метод предназначен для создания записей в DataStorage

Название

Описание

name

Название коллекции

params

Параметры запроса. Подробнее DataStorage

Connector.code
(async () => {
    const result = await ctx.storage.create('users', {
        docs: [
            {name: "John Smith", age: 35},
            {name: "Teareza Mayer", age: 28}
        ]
    });
    console.log(result);
})();

ctx.storage.update(name, params)

Метод предназначен для обновления записей в DataStorage

Название

Описание

name

Название коллекции

params

Параметры запроса. Подробнее DataStorage

Connector.code
(async () => {
    const result = await ctx.storage.update('users', {
        query: {
            name: "Teareza Mayer"
        },
        doc: {
            $set: {
                age: 29
            }
        }
    });
    console.log(result);
})();

ctx.storage.remove(name, params)

Метод предназначен для удаления записей в DataStorage

Название

Описание

name

Название коллекции

params

Параметры запроса. Подробнее DataStorage

Connector.code
(async () => {
    const result = await ctx.storage.remove('users', {
        query: {
            name: "Teareza Mayer"
        }
    });
    console.log(result);
})();

ctx.storage.count(name, params)

Метод предназначен для подсчета количества записей в DataStorage

Название

Описание

name

Название коллекции

params

Параметры запроса. Подробнее DataStorage

Connector.code
(async () => {
    const result = await ctx.storage.count('users', {
        query: {
            age: 29    
        }
    });
    console.log(result);
})();

Методы для работы с шаблонами процесса

ctx.setTemplate(name, fn)

Метод позволяющий добавить шаблон в контекст процесса для последующего рендеринга его в вебхуках.

  • name - название шаблона

  • fn - функция рендеринга шаблона

Connector.code
let ejs = require('ejs')
ctx.addTemplate('index_page', ejs.compile(<h1>Hello <%- username %></h1>, {}));
return Promise.resolve();

ctx.renderTemplate(name, data)

Метод позволяющий выполнить рендеринг и получить html код предварительно созданного шаблона.

  • name - название шаблона

  • data - данные для передачи в шаблон

Connector.code
(async () => {
    const html = await ctx.renderTemplate('index_page', {
        name: "John Smith"
    });
    
    await ctx.sendMail('[email protected]', html); // as an example
})();

Методы для работы с вебхуками

ctx.response.json(data)

Метод позволяет ответить на HTTP запрос клиенту в формате json

Connector.code
(async () => {
    try {
        const userId = ctx.data.params;
        const user = await ctx.storage.get('users', {query: {_id: userId}});
        ctx.response.json(user);
    } catch (err) {
        ctx.response.json({ error: true, code: 500 });
        console.error(err);
    }
})();

ctx.response.plain(data)

Метод позволяет ответить на HTTP запрос клиенту в текстовом формате (text/plain)

Connector.code
(async () => {
    try {
        ctx.response.plain('Hello world');
    } catch (err) {
        ctx.response.plain('Internal error');
        console.error(err);
    }
})();

ctx.response.html(data)

Метод позволяет ответить на HTTP запрос клиенту в формате html (text/html)

Connector.code
(async () => {
    try {
        ctx.response.html('<h1>Hello world</h1>');
    } catch (err) {
        ctx.response.html('<h1>Internal error</h1>');
        console.error(err);
    }
})();

ctx.response.render(template, data)

Метод рендерит шаблон и отправляет данные клиенту в формате text/html

  • template - имя шаблона

  • data - данные, которые будут переданы в шаблон

Connector.code
(async () => {
    try {
        ctx.response.render('index_page', {
            name: 'John Smith'
        });
    } catch (err) {
        ctx.response.render('error_page', {
            message: err.message
        });
        console.error(err);
    }
})();

ctx.response.redirect(url, code)

Метод позволяет выполнить переадресацию поступившого запроса на другой URL адрес.

  • url - адрес, куда будет перенаправлен клиент

  • code - статус код , по умолчанию 301

Connector.code
(async () => {
    try {
        ctx.response.redirect('https://google.com', 302);
    } catch (err) {
        ctx.response.plain('Internal error');
        console.error(err);
    }
})();

Last updated

Was this helpful?