generated from OpenFn/project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
13c8f36
commit d0e4d95
Showing
2 changed files
with
18 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -115,8 +115,8 @@ | |
"Remove-Deleted-Campaign-Members/Tags": { | ||
"id": "273e2c2a-a97d-49eb-bebb-2dad0666a716", | ||
"name": "Remove Deleted Campaign Members/Tags", | ||
"inserted_at": "2025-02-04T13:15:40.333004Z", | ||
"lock_version": 216, | ||
"inserted_at": "2025-02-06T09:54:51.723325Z", | ||
"lock_version": 230, | ||
"triggers": { | ||
"cron": { | ||
"enabled": false, | ||
|
@@ -129,7 +129,7 @@ | |
"Get-deleted-campaign-members": { | ||
"id": "de821b2b-f7f8-4cc3-ad8f-c746c8698b0f", | ||
"name": "Get deleted campaign members", | ||
"body": "// To test with manual cursor simply create a new input with lastRunTime as the manual cursor\n// cursor($.lastRunTime || '2023-08-16T15:30:00.000Z', { key: 'lastSyncTime' });\n// cursor('now', { key: 'lastRunTime', format: c => new Date(c).toISOString() });\nfn(state => {\n delete state?.members\n delete state?.references\n const manualCursor = '2023-08-16T15:30:00.000Z'; // SF timestamp\n state.lastSyncTime = state.lastRunTime || manualCursor;\n state.lastRunTime = new Date().toISOString();\n return state;\n});\n\n//Get Deleted Campaign Member Records in Salesforce since last run\nbulkQuery(\n `SELECT Contact__r.Id, Contact__r.Name, Email__c, Nome_da_Tag__c FROM Deleted_Campaign_Member__c WHERE CreatedDate > ${$.lastSyncTime}`\n).then(state => {\n const uniqueContactsMap = new Map();\n state.data.forEach(contact => {\n uniqueContactsMap.set(contact['Contact__r.Id'], contact);\n });\n\n const uniqueContacts = Array.from(uniqueContactsMap.values());\n state.deletedMembers = uniqueContacts;\n state.contactIdsList = uniqueContacts\n .map(contact => `'${contact['Contact__r.Id']}'`)\n .join(', ');\n\n console.log('Unique Contact IDs List:', uniqueContacts?.length);\n return state;\n});\n\nfnIf(!$.contactIdsList, state => {\n console.log('No contact IDs found. Skipping second bulk query.');\n return state;\n});\n\n//Get corresponding Campaign Member details for Deleted Campaign Members\nfnIf(\n $.contactIdsList,\n bulkQuery(\n `SELECT Contact.Id, Contact.Name, Contact.Email, Campaign_Tag_Name__c FROM CampaignMember WHERE Campaign.RecordType.Name = 'Grupos, RTs ou Áreas Temáticas' AND Campaign.IsActive = true AND Contact.Id IN (${$.contactIdsList})`\n ).then(state => {\n const campaginMembers = state.data;\n console.log(campaginMembers.length, 'Deleted Campaign Members');\n if (!campaginMembers.length > 0) {\n console.log(\n 'No campaing members found for contacts ids: ',\n state.contactIdsList\n );\n return state;\n }\n\n let mergeMemberTags = [];\n for (const member of campaginMembers) {\n const email = member['Contact.Email'];\n const campaignName = member.Campaign_Tag_Name__c;\n // Find the existing mapped member for this email\n const existingMember = mergeMemberTags.find(\n item => item.email_address === email\n );\n if (existingMember) {\n // If the email already exists, add the campaign name to its tags array\n existingMember.tags.push(campaignName);\n } else {\n // If the email doesn't exist, create a new mapped member\n const newMember = {\n email_address: email,\n tags: [campaignName].map(str => str.replace(/\\n/g, '')),\n email_type: 'html',\n };\n mergeMemberTags.push(newMember);\n }\n }\n console.log(mergeMemberTags.length, 'Retrieved mapped members');\n\n state.members = [...chunk(mergeMemberTags, 500)];\n return state;\n })\n);\n\nfnIf(!$.members && $.deletedMembers.length > 0, state => {\n console.log('Query 2 had 0 results mapping using query 1');\n state.members = [...chunk(state.deletedMembers.map(m => ({\n email_address: m['Email__c'],\n tags: [],\n email_type: 'html',\n })), 500)];\n return state;\n});\n", | ||
"body": "// To test with manual cursor simply create a new input with lastRunTime as the manual cursor\n// cursor($.lastRunTime || '2023-08-16T15:30:00.000Z', { key: 'lastSyncTime' });\n// cursor('now', { key: 'lastRunTime', format: c => new Date(c).toISOString() });\nfn(state => {\n delete state?.members\n delete state?.references\n const manualCursor = '2023-08-16T15:30:00.000Z'; // SF timestamp\n state.lastSyncTime = state.lastRunTime || manualCursor;\n state.lastRunTime = new Date().toISOString();\n return state;\n});\n\n//Get Deleted Campaign Member Records in Salesforce since last run\nbulkQuery(\n `SELECT Contact__r.Id, Contact__r.Name, Email__c, Nome_da_Tag__c FROM Deleted_Campaign_Member__c WHERE CreatedDate > ${$.lastSyncTime}`\n).then(state => {\n const uniqueContactsMap = new Map();\n state.data.forEach(contact => {\n uniqueContactsMap.set(contact['Contact__r.Id'], contact);\n });\n\n const uniqueContacts = Array.from(uniqueContactsMap.values());\n state.deletedMembers = uniqueContacts;\n state.contactIdsList = uniqueContacts\n .map(contact => `'${contact['Contact__r.Id']}'`)\n .join(', ');\n\n console.log('Unique Contact IDs List:', uniqueContacts?.length);\n return state;\n});\n\nfnIf(!$.contactIdsList, state => {\n console.log('No contact IDs found. Skipping second bulk query.');\n return state;\n});\n\n//Get corresponding Campaign Member details for Deleted Campaign Members\nfnIf(\n $.contactIdsList,\n bulkQuery(\n `SELECT Contact.Id, Contact.Name, Contact.Email, Campaign_Tag_Name__c FROM CampaignMember WHERE Campaign.RecordType.Name = 'Grupos, RTs ou Áreas Temáticas' AND Campaign.IsActive = true AND Contact.Id IN (${$.contactIdsList})`\n ).then(state => {\n const deletedMembers = state.deletedMembers.map(i => ({\n \"Campaign_Tag_Name__c\": \"\",\n \"Contact.Email\": i[\"Email__c\"],\n \"Contact.Id\": i[\"Contact__r.Id\"],\n \"Contact.Name\": i[\"Contact__r.Name\"]\n\n }))\n const campaginMembers = [...state.data, ...deletedMembers];\n \n\n console.log(campaginMembers.length, 'Deleted Campaign Members');\n if (!campaginMembers.length > 0) {\n console.log(\n 'No campaing members found for contacts ids: ',\n state.contactIdsList\n );\n return state;\n }\n\n let mergeMemberTags = [];\n for (const member of campaginMembers) {\n const email = member['Contact.Email'];\n const campaignName = member.Campaign_Tag_Name__c;\n // Find the existing mapped member for this email\n const existingMember = mergeMemberTags.find(\n item => item.email_address === email\n );\n if (existingMember) {\n console.log('Existing member found', { campaignName });\n // If the email already exists, add the campaign name to its tags array\n campaignName && existingMember.tags.push(campaignName);\n } else {\n // If the email doesn't exist, create a new mapped member\n const newMember = {\n email_address: email,\n tags: campaignName\n ? [campaignName].map(str => str.replace(/\\n/g, ''))\n : [],\n email_type: 'html',\n };\n mergeMemberTags.push(newMember);\n }\n }\n console.log(mergeMemberTags.length, 'Retrieved mapped members');\n\n state.members = [...chunk(mergeMemberTags, 500)];\n return state;\n })\n);\n\nfnIf(!$.members && $.deletedMembers.length > 0, state => {\n console.log('Query 2 had 0 results mapping using query 1');\n state.members = [...chunk(state.deletedMembers.map(m => ({\n email_address: m['Email__c'],\n tags: [],\n email_type: 'html',\n })), 500)];\n return state;\n});\n", | ||
"adaptor": "@openfn/[email protected]", | ||
"project_credential_id": "becd5822-0191-4800-8a19-c7e24ff3589c" | ||
}, | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters