Fermer

juin 27, 2024

Analyser CSV dans Salesforce | AU NOUVEAU BLOG

Analyser CSV dans Salesforce |  AU NOUVEAU BLOG


Introduction

Dans cet article, vous verrez un extrait pour analyser les fichiers CSV à l’aide du code apex. Avec ce code, vous pouvez facilement lire les données des fichiers CSV et vider les données dans la base de données Salesforce

Lire le fichier CSV à l’aide d’apex

Vous pouvez utiliser le fichier CSV suivant pour analyser à l’aide d’apex.

Corps

public List<List<String>> parseCSV(String contents,Boolean skipHeaders)
{
List<List<String>> allFields = new List<List<String>>();
// replace instances where a double quote begins a field containing a comma
// in this case you get a double quote followed by a doubled double quote
// do this for beginning and end of a field

contents = contents.replaceAll(‘,”””‘,’,”DBLQT’).replaceall(‘”””,’,’DBLQT”,’);

// now replace all remaining double quotes – we do this so that we can reconstruct
// fields with commas inside assuming they begin and end with a double quote

contents = contents.replaceAll(‘””‘,’DBLQT’);

// we are not attempting to handle fields with a newline inside of them
// so, split on newline to get the spreadsheet rows

List<String> lines = new List<String>();

try
{
lines = contents.split(‘\n’);
}
catch (System.ListException e)
{
System.debug(‘Limits exceeded?’ + e.getMessage());
}

Integer num = 0;

for(String line : lines)
{

// check for blank CSV lines (only commas)

if (line.replaceAll(‘,’,”).trim().length() == 0) break;
List<String> fields = line.split(‘,’);

List<String> cleanFields = new List<String>();

String compositeField;

Boolean makeCompositeField = false;

for(String field : fields)
{

if (field.startsWith(‘”‘) && field.endsWith(‘”‘))
{
cleanFields.add(field.replaceAll(‘DBLQT’,'”‘));
} else if (field.startsWith(‘”‘))
{
makeCompositeField = true;
compositeField = field;
}
else if (field.endsWith(‘”‘))
{
compositeField += ‘,’ + field;
cleanFields.add(compositeField.replaceAll(‘DBLQT’,'”‘));
makeCompositeField = false;

}
else if (makeCompositeField)
{
compositeField +=  ‘,’ + field;
}
else
{
cleanFields.add(field.replaceAll(‘DBLQT’,'”‘));
}
}
allFields.add(cleanFields);

}

if (skipHeaders) allFields.remove(0);

return allFields;
}
/* Method to parse List<List<String>> to sObject */
public list<sObject> csvTosObject(List<List<String>> parsedCSV, string objectType)
{
Schema.sObjectType objectDef = Schema.getGlobalDescribe().get(objectType).getDescribe().getSObjectType();
System.debug(‘Object Definition –> ‘ + objectDef);

list<sObject> objects = new list<sObject>();
list<string> headers = new list<string>();

for(list<string> row : parsedCSV)
{
for(string col : row)
{
headers.add(col);
}
break;
}
System.debug(‘Headers –> ‘ + headers);
integer rowNumber = 0;
for(list<string> row : parsedCSV)
{
if(rowNumber == 0)
{
rowNumber++;
continue;
}
else
{
sObject thisObj = objectDef.newSobject();
integer colIndex = 0;
for(string col : row)
{
string headerName = headers[colIndex].trim();
system.debug(‘========================= Column Name ‘ + headerName);
if(headerName.length() > 0)
{
try
{
 if(col.contains(‘/’))
 {
 Date tempDate;
 String[] tempStr = col.split(‘/’);
 Integer d = Integer.valueOf(tempStr[0]);
 Integer m = Integer.valueOf(tempStr[1]);
 Integer y = Integer.valueOf(tempStr[2]);
 tempDate = Date.newInstance(y,m,d);
 thisObj.put(headerName,tempDate);
 }
 else
 {
 thisObj.put(headerName,col.trim());
 }
}
catch(exception e)
{
system.debug(‘============== Invalid field specified in header ‘ + headerName);
}
colIndex++;
}
}
objects.add(thisObj);
rowNumber++;
}
}
System.debug(‘Object Data –> ‘ + objects);
return objects;
}
}

Conclusion

Cette approche résout le problème de lecture de fichiers à partir de n’importe quelle intégration, comme à partir de n’importe quel serveur FTP, ou pour toute intégration entrante en exposant le point final de Salesforce pour capturer le CSV et transmettre les données à Salesforce.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link