feat(salesforce): add updated field in objects trigger

This commit is contained in:
Ali BARIN
2022-11-05 02:43:14 +01:00
parent 43b7e506a7
commit fc6822a298
4 changed files with 107 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
import defineApp from '../../helpers/define-app';
import addAuthHeader from './common/add-auth-header';
import auth from './auth';
import triggers from './triggers';
import data from './data';
export default defineApp({
@@ -14,5 +15,6 @@ export default defineApp({
primaryColor: '00A1E0',
beforeRequest: [addAuthHeader],
auth,
triggers,
data,
});

View File

@@ -0,0 +1,5 @@
import updatedFieldInObjects from "./updated-field-in-objects";
export default [
updatedFieldInObjects
];

View File

@@ -0,0 +1,55 @@
import defineTrigger from '../../../../helpers/define-trigger';
import updatedFieldInObjects from './updated-field-in-objects';
export default defineTrigger({
name: 'Updated field in objects',
key: 'updatedFieldInObjects',
pollInterval: 15,
description: 'Triggers when a field is updated in an object.',
arguments: [
{
label: 'Object',
key: 'object',
type: 'dropdown' as const,
required: false,
variables: false,
source: {
type: 'query',
name: 'getData',
arguments: [
{
name: 'key',
value: 'listObjects',
},
],
},
},
{
label: 'Field',
key: 'field',
type: 'dropdown' as const,
description: 'Track updates by this field',
required: true,
variables: false,
dependsOn: ['parameters.object'],
source: {
type: 'query',
name: 'getData',
arguments: [
{
name: 'key',
value: 'listFields',
},
{
name: 'parameters.object',
value: '{parameters.object}',
},
],
},
},
],
async run($) {
await updatedFieldInObjects($);
},
});

View File

@@ -0,0 +1,45 @@
import { IGlobalVariable } from '@automatisch/types';
function getQuery(object: string, limit: number, offset: number) {
return `
SELECT
FIELDS(ALL)
FROM
${object}
ORDER BY LastModifiedDate DESC
LIMIT ${limit}
OFFSET ${offset}
`;
}
const updatedFieldInObjects = async ($: IGlobalVariable): Promise<void> => {
const limit = 200;
const field = $.step.parameters.field as string;
const object = $.step.parameters.object as string;
let response;
let offset = 0;
do {
const options = {
params: {
q: getQuery(object, limit, offset),
}
};
response = await $.http.get('/services/data/v56.0/query', options);
const records = response.data.records;
for (const record of records) {
$.pushTriggerItem({
raw: record,
meta: {
internalId: `${record.Id}-${record[field]}`,
}
});
}
offset = offset + limit;
} while (response.data.records?.length === limit);
};
export default updatedFieldInObjects;