@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
186 lines • 7.39 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserFieldResourceHandler = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ResourceHandlerBase_1 = require("./ResourceHandlerBase");
/**
* Handler for Bitrix24 CRM user field operations
*/
class UserFieldResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase {
constructor(executeFunctions, returnData, options = {}) {
super(executeFunctions, returnData, options);
}
/**
* Process all operations for user fields
*/
async process() {
const operation = this.getNodeParameter("operation", 0);
for (let i = 0; i < this.items.length; i++) {
try {
const continueOnFail = this.getNodeParameter("continueOnFail", i, false);
// Process items according to the operation
if (operation === "add") {
await this.handleAdd(i);
}
else if (operation === "delete") {
await this.handleDelete(i);
}
else if (operation === "get") {
await this.handleGet(i);
}
else if (operation === "getFields") {
await this.handleGetFields(i);
}
else if (operation === "getList") {
await this.handleGetList(i);
}
else if (operation === "update") {
await this.handleUpdate(i);
}
else {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `The operation "${operation}" is not supported for user fields!`, { itemIndex: i });
}
}
catch (error) {
if (this.continueOnFail()) {
this.addErrorToReturnData(error, i);
}
else {
throw error;
}
}
}
return this.returnData;
}
/**
* Handle the "add" operation for user fields
*/
async handleAdd(itemIndex) {
const fields = this.getNodeParameter("fields", itemIndex);
const entityId = this.getNodeParameter("entityId", itemIndex);
// Parse fields
const fieldData = this.parseJsonParameter(fields, 'The "fields" parameter must be valid JSON', itemIndex);
// API call
const responseData = await this.makeApiCall("crm.userfield.add", {
fields: {
...fieldData,
ENTITY_ID: entityId,
},
}, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle the "delete" operation for user fields
*/
async handleDelete(itemIndex) {
const id = this.getNodeParameter("id", itemIndex);
// API call
const responseData = await this.makeApiCall("crm.userfield.delete", { id }, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle the "get" operation for user fields
*/
async handleGet(itemIndex) {
const id = this.getNodeParameter("id", itemIndex);
// API call
const responseData = await this.makeApiCall("crm.userfield.get", { id }, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle the "getFields" operation for user fields
*/
async handleGetFields(itemIndex) {
const entityId = this.getNodeParameter("entityId", itemIndex);
// API call
const responseData = await this.makeApiCall("crm.userfield.fields", {
entityId,
}, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle the "getList" operation for user fields
*/
async handleGetList(itemIndex) {
const filter = this.getNodeParameter("filter", itemIndex, "{}");
const order = this.getNodeParameter("order", itemIndex, "{}");
const select = this.getNodeParameter("select", itemIndex, []);
// Parse filter and order
const filterData = this.parseJsonParameter(filter, 'The "filter" parameter must be valid JSON', itemIndex);
const orderData = this.parseJsonParameter(order, 'The "order" parameter must be valid JSON', itemIndex);
const returnAll = this.getNodeParameter("returnAll", itemIndex, false);
const maxPages = this.getNodeParameter("maxPages", itemIndex, 5);
const baseParams = {
filter: filterData,
order: orderData,
select: select.length ? select : undefined,
};
if (returnAll) {
// Return All: Load all pages until no more data
await this.handleUserFieldListWithPagination("crm.userfield.list", baseParams, itemIndex, 999);
}
else {
// Use limited pagination
await this.handleUserFieldListWithPagination("crm.userfield.list", baseParams, itemIndex, maxPages);
}
}
/**
* Handle pagination for UserField list operations
*/
async handleUserFieldListWithPagination(endpoint, baseParams, itemIndex, maxPages) {
let allResults = [];
let pageCount = 0;
let start = 0;
while (pageCount < maxPages) {
const params = { ...baseParams };
params.start = start;
params.limit = 50;
try {
const response = await this.makeApiCall(endpoint, params, {}, itemIndex);
if (response && response.result) {
// Extract data from response
let results;
if (Array.isArray(response.result)) {
results = response.result;
}
else {
results = [response.result];
}
allResults = allResults.concat(results);
pageCount++;
// Check if there's more data - if no "next" property, stop
if (!response.next) {
break;
}
start = response.next;
}
else {
break;
}
}
catch (error) {
console.error(`UserField pagination error:`, error);
break;
}
}
// Return paginated data
this.addResponseToReturnData({ result: allResults }, itemIndex);
}
/**
* Handle the "update" operation for user fields
*/
async handleUpdate(itemIndex) {
const id = this.getNodeParameter("id", itemIndex);
const fields = this.getNodeParameter("fields", itemIndex);
// Parse fields
const fieldData = this.parseJsonParameter(fields, 'The "fields" parameter must be valid JSON', itemIndex);
// API call
const responseData = await this.makeApiCall("crm.userfield.update", {
id,
fields: fieldData,
}, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
}
exports.UserFieldResourceHandler = UserFieldResourceHandler;
//# sourceMappingURL=UserFieldResourceHandler.js.map