Fragmentos de código
Esta sección reúne varios fragmentos de código JavaScript útiles que puedes usar en tus jobs.
La mayoría de los fragmentos están implementados como callbacks de otras operaciones.
Puedes copiar estos callbacks y adaptarlos a tu propio código.
General
Reemplazo personalizado
field('destination__c', state => {
return dataValue('path_to_data')(state).toString().replace('cats', 'dogs');
});
Esto reemplaza todos los "cats" por "dogs" en la cadena que está en
path_to_data.
NOTA: La función
replace()de JavaScript solo reemplaza la primera aparición del argumento que indiques. Si buscas una forma de reemplazar todas las apariciones, te sugerimos usar una regex como hicimos en el ejemplo de más abajo.
arrayToString personalizado
field("target_specie_list__c", function(state) {
return Array.apply(
null, sourceValue("$.data.target_specie_list")(state)
).join(', ')
}),
Toma un array y concatena cada elemento en una cadena, con ", " como separador.
Concatenación personalizada
field('ODK_Key__c', function (state) {
return dataValue('metaId')(state).concat('(', dataValue('index')(state), ')');
});
Esto concatena dos valores.
Concatenación de valores nulos
Esto concatena muchos valores, aunque uno o más sean nulos, y los escribe en un campo llamado Main_Office_City_c.
...
field("Main_Office_City__c", function(state) {
return arrayToString([
dataValue("Main_Office_City_a")(state) === null ? "" : dataValue("Main_Office_City_a")(state).toString().replace(/-/g, " "),
dataValue("Main_Office_City_b")(state) === null ? "" : dataValue("Main_Office_City_b")(state).toString().replace(/-/g, " "),
dataValue("Main_Office_City_c")(state) === null ? "" : dataValue("Main_Office_City_c")(state).toString().replace(/-/g, " "),
dataValue("Main_Office_City_d")(state) === null ? "" : dataValue("Main_Office_City_d")(state).toString().replace(/-/g, " "),
].filter(Boolean), ',')
})
Fíjate en que esta función personalizada usa la regex
/-/gpara asegurarse de que se tengan en cuenta todas las apariciones (g = búsqueda global).
ID personalizado de la enésima referencia
Si alguna vez quieres obtener el PRIMER objeto que creaste, o el SEGUNDO, o el enésimo, una función como esta te sirve.
field('parent__c', function (state) {
return state.references[state.references.length - 1].id;
});
Fíjate en que, en lugar de tomar el id de lo "último" que se creó en Salesforce, tomas el id de lo primero, o de lo segundo si reemplazas "length-1" por "length-2".
Salesforce
Convertir una cadena de fecha al formato ISO estándar para Salesforce
field('Payment_Date__c', function (state) {
return new Date(dataValue('payment_date')(state)).toISOString();
});
NOTA: La salida de esta función siempre tiene el formato de la zona horaria GMT.
Usar campos de ID externo para las relaciones en una carga masiva en Salesforce
array.map(item => {
return {
Patient_Name__c: item.fullName,
'Account.Account_External_ID__c': item.account
'Clinic__r.Unique_Clinic_Identifier__c': item.clinicId,
'RecordType.Name': item.type,
};
});
Upsert masivo con un ID externo en Salesforce
bulk(
'Visit_new__c',
'upsert',
{
extIdField: 'commcare_case_id__c',
failOnError: true,
allowNoOp: true,
},
dataValue('patients')
);