Внутреннее API

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

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

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

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

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

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
});

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

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

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.

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

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

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

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

ctx.storage.count(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('user@domain.com', 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);
    }
})();

Для выполнения данного, в контексте процесса должен быть создан шаблон. Воспользуйтесь готовыми коннекторами шаблонами (EJS или PUG), либо методами для работы с шаблонами.

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