Skip to content

Commit

Permalink
[email protected] initiated a sync from Lightning
Browse files Browse the repository at this point in the history
  • Loading branch information
openfn[bot] authored and github-actions[bot] committed Mar 4, 2025
1 parent 6ebcef3 commit 7fb8002
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 13 deletions.
6 changes: 3 additions & 3 deletions openfn-f07240d8-8bb7-4cff-9e20-cc8d8059892f-state.json
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@
"Upsert-Members": {
"id": "c1873753-c335-40ad-8fcc-bc3a347ca0e0",
"name": "Upsert Members",
"inserted_at": "2025-03-04T18:35:06.655844Z",
"lock_version": 46,
"inserted_at": "2025-03-04T18:36:57.144194Z",
"lock_version": 47,
"triggers": {
"cron": {
"enabled": true,
Expand All @@ -133,7 +133,7 @@
"Get-members-for-upsert": {
"id": "767da658-51fe-49e6-a3a8-a90695c51dc7",
"name": "Get members for upsert",
"body": "// fn(state => {\n// //INPUT manualCursor date below if you want to \n// //... query data from a specific date e.g., 2024-08-10T15:30:00.000Z\n// const manualCursor = ''; //'2024-08-10T15:30:00.000Z'\n// return { ...state, manualCursor}; \n// }); \n\n// cursor(state?.manualCursor || '1 hour ago', {\n// format: c => dateFns.formatISO(new Date(c)),\n// });\n//==NOTE: Old cursor implementation not working as of March '25 ===\nfn(state => {\n const manualCursor = '2025-03-01T15:30:00.000Z';\n console.log(manualCursor, 'manualCursor');\n\n const cursor = state.lastRunTime || manualCursor;\n const lastRunTime = new Date().toISOString();\n console.log('time at job start:' + lastRunTime);\n\n return { ...state, cursor, lastRunTime };\n});\n\nbulkQuery(\n state => `\nSELECT Id, Name, FirstName, LastName, Email, CreatedDate,\n Contact.AccountId, Contact.LastModifiedDate, Contact.CreatedDate,\n Campaign.Name, Campaign.Nome_da_Tag__c\nFROM CampaignMember\nWHERE Campaign.RecordType.Name = 'Grupos, RTs ou Áreas Temáticas'\n AND Campaign.IsActive = true\n AND (Contact.LastModifiedDate > ${state.cursor} OR CreatedDate > ${state.cursor})\n`\n);\n\n//Seperate members for each batch\nfn(state => {\n const lastRunTime = state; \n const campaignMembers = state.data;\n const membersToCreate = [];\n const membersToUpdate = [];\n\n console.log(campaignMembers.length, 'campaignMembers');\n\n for (const member of campaignMembers) {\n const mappedMember = {\n email_address: member.Email,\n full_name: member.Name,\n merge_fields: {\n FNAME: member.FirstName,\n LNAME: member.LastName,\n MMERGE4: member['Contact.AccountId'],\n },\n tags: [member['Campaign.Nome_da_tag__c']],\n };\n if (\n member['Contact.LastModifiedDate'] > state.cursor ||\n member.CreatedDate > state.cursor\n ) {\n membersToCreate.push({ ...mappedMember, status: 'subscribed' });\n } else {\n membersToUpdate.push(mappedMember);\n }\n }\n\n console.log(membersToCreate.length, 'membersToCreate before merge tags');\n console.log(membersToUpdate.length, 'membersToUpdate before merge tags');\n\n let mergeCreateMemberTags = [];\n let mergeUpdateMemberTags = [];\n\n if (membersToCreate.length > 0) {\n mergeCreateMemberTags = membersToCreate.reduce((result, item) => {\n const existingItem = result.find(\n existing => existing.email_address === item.email_address\n );\n\n if (existingItem) {\n existingItem.tags = [...new Set([...existingItem.tags, ...item.tags])];\n } else {\n result.push(item);\n }\n\n return result;\n }, []);\n }\n\n if (membersToUpdate.length > 0) {\n mergeUpdateMemberTags = membersToUpdate.reduce((result, item) => {\n const existingItem = result.find(\n existing => existing.email_address === item.email_address\n );\n\n if (existingItem) {\n existingItem.tags = [...new Set([...existingItem.tags, ...item.tags])];\n } else {\n result.push(item);\n }\n return result;\n }, []);\n }\n\n console.log(\n mergeCreateMemberTags.length,\n 'mergeCreateMemberTags after merge tags'\n );\n\n console.log(\n mergeUpdateMemberTags.length,\n 'mergeUpdateMemberTags after merge tags'\n );\n\n return {\n ...state,\n references: [],\n members: [\n ...chunk(mergeCreateMemberTags, 500),\n ...chunk(mergeUpdateMemberTags, 500),\n ],\n chunkErrors: [],\n };\n});\n",
"body": "//==NOTE: Old cursor implementation not working as of March '25 ===\nfn(state => {\n const manualCursor = '2025-03-01T15:30:00.000Z';\n console.log(manualCursor, 'manualCursor');\n\n const cursor = state.lastRunTime || manualCursor;\n const lastRunTime = new Date().toISOString();\n console.log('time at job start:' + lastRunTime);\n\n return { ...state, cursor, lastRunTime };\n});\n\nbulkQuery(\n state => `\nSELECT Id, Name, FirstName, LastName, Email, CreatedDate,\n Contact.AccountId, Contact.LastModifiedDate, Contact.CreatedDate,\n Campaign.Name, Campaign.Nome_da_Tag__c\nFROM CampaignMember\nWHERE Campaign.RecordType.Name = 'Grupos, RTs ou Áreas Temáticas'\n AND Campaign.IsActive = true\n AND (Contact.LastModifiedDate > ${state.cursor} OR CreatedDate > ${state.cursor})\n`\n);\n\n//Seperate members for each batch\nfn(state => {\n const lastRunTime = state; \n const campaignMembers = state.data;\n const membersToCreate = [];\n const membersToUpdate = [];\n\n console.log(campaignMembers.length, 'campaignMembers');\n\n for (const member of campaignMembers) {\n const mappedMember = {\n email_address: member.Email,\n full_name: member.Name,\n merge_fields: {\n FNAME: member.FirstName,\n LNAME: member.LastName,\n MMERGE4: member['Contact.AccountId'],\n },\n tags: [member['Campaign.Nome_da_tag__c']],\n };\n if (\n member['Contact.LastModifiedDate'] > state.cursor ||\n member.CreatedDate > state.cursor\n ) {\n membersToCreate.push({ ...mappedMember, status: 'subscribed' });\n } else {\n membersToUpdate.push(mappedMember);\n }\n }\n\n console.log(membersToCreate.length, 'membersToCreate before merge tags');\n console.log(membersToUpdate.length, 'membersToUpdate before merge tags');\n\n let mergeCreateMemberTags = [];\n let mergeUpdateMemberTags = [];\n\n if (membersToCreate.length > 0) {\n mergeCreateMemberTags = membersToCreate.reduce((result, item) => {\n const existingItem = result.find(\n existing => existing.email_address === item.email_address\n );\n\n if (existingItem) {\n existingItem.tags = [...new Set([...existingItem.tags, ...item.tags])];\n } else {\n result.push(item);\n }\n\n return result;\n }, []);\n }\n\n if (membersToUpdate.length > 0) {\n mergeUpdateMemberTags = membersToUpdate.reduce((result, item) => {\n const existingItem = result.find(\n existing => existing.email_address === item.email_address\n );\n\n if (existingItem) {\n existingItem.tags = [...new Set([...existingItem.tags, ...item.tags])];\n } else {\n result.push(item);\n }\n return result;\n }, []);\n }\n\n console.log(\n mergeCreateMemberTags.length,\n 'mergeCreateMemberTags after merge tags'\n );\n\n console.log(\n mergeUpdateMemberTags.length,\n 'mergeUpdateMemberTags after merge tags'\n );\n\n return {\n ...state,\n references: [],\n members: [\n ...chunk(mergeCreateMemberTags, 500),\n ...chunk(mergeUpdateMemberTags, 500),\n ],\n chunkErrors: [],\n };\n});\n",
"adaptor": "@openfn/[email protected]",
"project_credential_id": "447cb045-646a-4b01-a7d4-182bc566363a"
},
Expand Down
10 changes: 0 additions & 10 deletions workflows/upsert-members/fetch-members.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,3 @@
// fn(state => {
// //INPUT manualCursor date below if you want to
// //... query data from a specific date e.g., 2024-08-10T15:30:00.000Z
// const manualCursor = ''; //'2024-08-10T15:30:00.000Z'
// return { ...state, manualCursor};
// });

// cursor(state?.manualCursor || '1 hour ago', {
// format: c => dateFns.formatISO(new Date(c)),
// });
//==NOTE: Old cursor implementation not working as of March '25 ===
fn(state => {
const manualCursor = '2025-03-01T15:30:00.000Z';
Expand Down

0 comments on commit 7fb8002

Please sign in to comment.