OpenFn / lwala

2 stars 3 forks source link

Bulkify Salesforce job to upsert `Person` records #90

Closed jayesse closed 1 year ago

jayesse commented 1 year ago

Background

Lwala's current CommCare-to-Salesforce workflows run on a real-time basis, with jobs that have message-filter triggers. To reduce its total number of OpenFn runs and improve system performance, it now wants to change its existing workflows to run on a cron, scheduled basis and to process records in bulk (rather than individual case updates).

Request

There is an existing job Upsert-Person-Case-Update.js that is configured to process only 1 case record. It has 3 key operations:

  1. Query Salesforce Location__c table to search for existing location Ids to use in the upsert mapping (for step 2 and step 3)
  2. Upsert Person__c
  3. Upsert Household__c (Under certain conditions. See this upsert statement)

Please bulkify this job and the above three operations to (1) handle an input of an array of cases, and (2) to leverage the Salesforce bulk API.

Workflow diagram

See the workflow steps in the red box for the operations https://lucid.app/lucidchart/e3411bda-1f0e-492f-b35d-6baf2dd3972a/edit?invitationId=inv_218cd740-0c18-446b-b225-b327e581f1b8&page=BDqM4U9vOG1b#

FYI - This is a really old job originally written by the client, so no mapping spec is available.

expression

⚠️ Please start work on the bulk-testing branch, and feel free to commit changes to this branch. ⚠️

Existing job to bulkify: https://github.com/OpenFn/lwala/blob/bulk-testing/commcare-salesforce-jobs/Upsert-Person-Case-Update.js

The field-level mappings should be the same as the existing job.

state

output

There are a number of items in the array of sample state.data. This should result in the same number of Person records to upsert.

These Person records will be children to the related Household records created via issue #89.

toggl

Use the Lwala Bulk Workflows [2023] - 40 hrs toggl project.

aleksa-krolls commented 1 year ago

@mtuchi this Person issue is ready to be picked up once the bulk Household job is finished. A similar pattern will be needed here. cc @jayesse

aleksa-krolls commented 1 year ago

Tested locally, fixed any comments left regarding mapping issues, and it's now working well. Next steps will be even greater bulk testing.