fix(Salesforce Trigger Node): Update polling logic to account for Salesforce processing delay (#19377)

This commit is contained in:
Michael Kret
2025-09-16 15:52:00 +03:00
committed by GitHub
parent b9af51afbd
commit b480f495d9
3 changed files with 201 additions and 12 deletions

View File

@@ -16,6 +16,8 @@ import {
salesforceApiRequest,
salesforceApiRequestAllItems,
sortOptions,
getPollStartDate,
filterAndManageProcessedItems,
} from './GenericFunctions';
export class SalesforceTrigger implements INodeType {
@@ -185,7 +187,8 @@ export class SalesforceTrigger implements INodeType {
};
async poll(this: IPollFunctions): Promise<INodeExecutionData[][] | null> {
const workflowData = this.getWorkflowStaticData('node');
const workflowData: { processedIds?: string[]; lastTimeChecked?: string } =
this.getWorkflowStaticData('node');
let responseData;
const qs: IDataObject = {};
const triggerOn = this.getNodeParameter('triggerOn') as string;
@@ -196,11 +199,15 @@ export class SalesforceTrigger implements INodeType {
triggerResource = this.getNodeParameter('customObject') as string;
}
const now = DateTime.now().toISO();
const startDate = (workflowData.lastTimeChecked as string) || now;
const endDate = now;
const endDate = DateTime.now().toISO();
if (!workflowData.processedIds) {
workflowData.processedIds = [];
}
const processedIds = workflowData.processedIds;
try {
const pollStartDate = startDate;
const pollStartDate = getPollStartDate(workflowData.lastTimeChecked);
const pollEndDate = endDate;
const options = {
@@ -262,6 +269,20 @@ export class SalesforceTrigger implements INodeType {
workflowData.lastTimeChecked = endDate;
return null;
}
const { newItems, updatedProcessedIds } = filterAndManageProcessedItems(
responseData,
processedIds,
);
workflowData.processedIds = updatedProcessedIds;
workflowData.lastTimeChecked = endDate;
if (newItems.length > 0) {
return [this.helpers.returnJsonArray(newItems as IDataObject[])];
}
return null;
} catch (error) {
if (this.getMode() === 'manual' || !workflowData.lastTimeChecked) {
throw error;
@@ -278,12 +299,5 @@ export class SalesforceTrigger implements INodeType {
);
throw error;
}
workflowData.lastTimeChecked = endDate;
if (Array.isArray(responseData) && responseData.length) {
return [this.helpers.returnJsonArray(responseData as IDataObject[])];
}
return null;
}
}