...
Required header “validator“ with value: rbesb
Request Epsilon for a token (It is needed to be moved to middleware Mulesoft)
For each individual id
Get from CDP - Golden Individual - saved under “profile”
Get from CDP - Contacts - export from its contact and save under “emails”, “phones”
Map enrollments - if there are any children, gather all enrollments and save them under “enrollChildren”
Sync process:
Check Contact
Query Object: Account with several conditions (SFSC)
Code Block var boc = if (vars.profile.BrandOrgCode == 'MJNTHA') "TH_Household" else if (vars.profile.BrandOrgCode == 'MJNIDN') "ID_Household" else if (vars.profile.BrandOrgCode == 'MJNMYS') "MY_Household" else if (vars.profile.BrandOrgCode == 'MJNSGP') "MY_Household" else if (vars.profile.BrandOrgCode == 'MJNBRN') "MY_Household" else if (vars.profile.BrandOrgCode == 'MJNVNM') "VN_Household" else null
Code Block SELECT Id, OwnerId, Inactive__c FROM Account WHERE IsDeleted=false AND RecordMarket__c= ++ boc ++ AND ++ QUERIES EMAILS OR PHONES (Depending if values exists)
It is saved later in a variable: “contactQueryResponse”
If contacts do not exist = logger. If contacts exist then:
Filter contacts if Inactive__c == “false”. If false then = logger, if true then:
Load data from vars to payload
Query data for parents (SFSC):
Code Block SELECT Id, RecordMarket__c, Inactive__c FROM Contact WHERE Is_Primary_Contact__c=true AND IsDeleted=false AND AccountId='" + vars.'account_id' + "'
Data is saved into a variable: “contactQueryResponse”
If parents exist: for each parent there are transformations made. If parents do not exist it just logs proper information.
Mapping Household
Prepare new_account variable: (Variables inside DW)
Code Block fullname: profileFirstName ++ profileMiddleName ++ profileLastName Coutry_TXT mapping: { "THA": "Thailand", "VNM": "Vietnam", "SGP": "Singapore", "MYS": "Malaysia", "BRN": "Brunei", "IDN": "Indonesia", "PHL": "Philippines", "USA": "USA" }
Mapping:
Code Block First_Name__c: profileFirstName Last_Name__c: profileLastName Middle_Name__c: profileMiddleName Name: fullName Id: def_data.account_id RecordTypeId: profileBrandOrgCode Address_Line_1__c: profileAddressLine1 Address_Line_2__c: profileAddressLine2 Address_Remarks__c: profileJsonExternalData.AddressRemarks Mobile_Phone__c: profileMobilePhone Home_phone__c: profileHomePhone Home_phone__c: profileHomePhone splitBy("x"))[0] Home_Phone_Extension__c: (profileHomePhone splitBy("x"))[1])) Other_Phone_1__c: profileWorkPhone Other_Phone_1__c: profileOtherPhone Account_Email__c: profileEmailAddress Member_Country__c: COUNTRY_TXT[vars.profileCountryCode]
If values are not blank then it is appended to the payload. In another case, the whole key is deleted from the request. All data are in vars. (It can cause memory issues later if data is larger).
Prepare cityData variable:
Code Block District__c: profileAddressLine3 -> with additonal logic of splitting data Region__c: profileAddressLine3 -> with additional logic of splitting data Name: profileCity State_Province__c: profileState Zip_Code__c: profilePostalCode Country__c: COUNTRY_TXT[vars.profileCountryCode] //This element should not work there is no COUNTRY_TXT in dataweave
If Profile ID SF is equal to profile ID from CDP
For each: JsonExternalData
If payload profile id equals correctly and mom status is not empty and mom status is equal to first time then
Mom_status equals:
"1st Time"
In other case logger
if Profile ID SF is NOT equal to profile ID from CDP
If ProfileSubscriptions and JsonExternalData are not empty for each profile subscription do:
If optStatus is true and channelCode contains channelCode(??? payload.OptStatuss == true and !(payload.ChannelCode contains payload.ChannelCode) ???) prepare parse_subs which is currently empty object in other case it also empty object
Code Block %dw 2.0 output application/json var s_optstatus = payload.OptStatus var s_channel = payload.ChannelCode var upsert_channel = false --- {} // subscribes[s_channel] = subscriptions[s]; // upsert_channel = true;
Prepare subscriptions in payload
Code Block var most_recent = (vars.enrollChildren orderBy ((item, index) -> -item.enrollDate as DateTime as Number {unit: "milliseconds"}))[0]
Adding to new_account object (and saving to payload)
Code Block Mailing_Opt_Out__c: true (hardcoded) Account_Email_Opt_out__c: true (hardcoded) Do_not_SMS_Mobile__c: true (hardcoded) Do_Not_Call_Mobile__c: true (hardcoded) Do_Not_Call_Home_Phone__c: true (hardcoded) Do_Not_Call_Other_Phone_1__c: true (hardcoded) Enfa_Status__c: most_recent.'Enfa_Status__c' <- added if most_recent.'Enfa_Status__c' == "Active" Enfa_Date_Joined__c: most_recent.enrollDate <- added if most_recent.'Enfa_Status__c' == "Active" Sustagen_Status__c: most_recent.'Enfa_Status__c' Sustagen_Date_Joined__c: most_recent.enrollDate Mom_Status__c: vars.Mom_Status <- added if !isBlank(vars.Mom_Status)
The query is being prepared for the city - Long logic - Object City__c
Query City (SF)
Does city query have at least 3 query conditions? if true then
Query City
if value is not empty it is appending additional data to vars with account
In other cases it logs information
If false then
Creates/Updates a household data into SF (Object Account
Python process: