diff --git a/packages/backend/src/apps/salesforce/actions/find-partially-matching-record/index.js b/packages/backend/src/apps/salesforce/actions/find-partially-matching-record/index.js new file mode 100644 index 00000000..6a582dcb --- /dev/null +++ b/packages/backend/src/apps/salesforce/actions/find-partially-matching-record/index.js @@ -0,0 +1,81 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Find partially matching record', + key: 'findPartiallyMatchingRecord', + description: 'Finds a record of a specified object by a field containing a value.', + arguments: [ + { + label: 'Object', + key: 'object', + type: 'dropdown', + required: true, + variables: true, + description: 'Pick which type of object you want to search for.', + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listObjects', + }, + ], + }, + }, + { + label: 'Field', + key: 'field', + type: 'dropdown', + description: 'Pick which field to search by', + required: true, + variables: true, + dependsOn: ['parameters.object'], + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listFields', + }, + { + name: 'parameters.object', + value: '{parameters.object}', + }, + ], + }, + }, + { + label: 'Search value to contain', + key: 'searchValue', + type: 'string', + required: true, + variables: true, + description: 'The value to search for in the field.', + }, + ], + + async run($) { + const query = ` + SELECT + FIELDS(ALL) + FROM + ${$.step.parameters.object} + WHERE + ${$.step.parameters.field} LIKE '%${$.step.parameters.searchValue}%' + LIMIT 1 + `; + + const options = { + params: { + q: query, + }, + }; + + const { data } = await $.http.get('/services/data/v61.0/query', options); + const record = data.records[0]; + + $.setActionItem({ raw: record }); + }, +}); diff --git a/packages/backend/src/apps/salesforce/actions/index.js b/packages/backend/src/apps/salesforce/actions/index.js index b4de1984..89e3e3d3 100644 --- a/packages/backend/src/apps/salesforce/actions/index.js +++ b/packages/backend/src/apps/salesforce/actions/index.js @@ -1,5 +1,6 @@ import createAttachment from './create-attachment/index.js'; import executeQuery from './execute-query/index.js'; import findRecord from './find-record/index.js'; +import findPartiallyMatchingRecord from './find-partially-matching-record/index.js'; -export default [findRecord, createAttachment, executeQuery]; +export default [findRecord, findPartiallyMatchingRecord, createAttachment, executeQuery]; diff --git a/packages/docs/pages/apps/salesforce/actions.md b/packages/docs/pages/apps/salesforce/actions.md index 106ca5fb..1c22193f 100644 --- a/packages/docs/pages/apps/salesforce/actions.md +++ b/packages/docs/pages/apps/salesforce/actions.md @@ -5,6 +5,8 @@ items: desc: Creates an attachment of a specified object by given parent ID. - name: Find record desc: Finds a record of a specified object by a field and value. + - name: Find partially matching record + desc: Finds a record of a specified object by a field containing a value. - name: Execute query desc: Executes a SOQL query in Salesforce. ---