Sie befinden sich hier:
Benutzerdefinierte Eingabe und Ausgabe für OmniStudio-Datenzuordnungen in OmniStudio
Standardmäßig verarbeiten Datenzuordnungen JSON- und XML-Daten. Wenn Sie andere Datenformate verarbeiten möchten, können Sie eine Datenzuordnung so konfigurieren, dass eine benutzerdefinierte Eingabe oder Ausgabe verwendet wird, die Sie implementieren. Beispielsweise können Sie eine Datenzuordnungstransformation definieren, die CSV-formatierte Daten akzeptiert und als JSON ausgibt.
Folgende Optionen sind verfügbar:
-
Laden der Datenzuordnung: Benutzerdefinierte Eingabe (Ausgabe ist immer ein Salesforce-Objekt)
-
Datenzuordnungstransformation: Benutzerdefinierte Eingabe und Ausgabe
-
Datenzuordnungsextrakt: Benutzerdefinierte Eingabe und Ausgabe
Legen Sie zum Konfigurieren einer Datenzuordnung für die Verwendung einer benutzerdefinierten Eingabe oder Ausgabe ihren Typ auf "Benutzerdefiniert" fest. Geben Sie dann die Klasse an, die die Methoden serialize und deserialize enthält, die den Vorgang ausführen. Die folgende Tabelle zeigt die Eigenschaften für eine Datenzuordnungstransformation, die mit einer benutzerdefinierten Eingabe und Ausgabe konfiguriert ist.
| Eigenschaft | Wert |
|---|---|
| Name der Datenzuordnungsschnittstelle | Benutzerdefinierte Serialisierungstransformation |
| Schnittstellentyp | Umwandeln |
| Eingabetyp | Benutzerdefiniert |
| Benutzerdefinierte Eingabeklasse | CSVProcessor |
| Ausgabetyp | Benutzerdefiniert |
| Benutzerdefinierte Ausgabeklasse | CSVProcessor |
Zur Vereinfachung der Zuordnung können Sie Beispieleingaben in die Fenster "Erwartete Eingabe" und "Erwartete Ausgabe" einfügen.
Wenn Sie die Logik erstellen möchten, die für die benutzerdefinierte Eingabe und Ausgabe erforderlich ist, müssen Sie eine benutzerdefinierte Klasse definieren, die Callable implementiert. Implementieren Sie für die benutzerdefinierte Ausgabe die Methode serialize. Implementieren Sie für benutzerdefinierte Eingaben die Methode deserialize. Die Eingabe- und Ausgabeparameter können nicht umbenannt werden.
Das folgende Beispiel zeigt die grundlegende Struktur einer Kundenserialisierungs- und -deserialisierungsklasse.
global with sharing class PreprocessorClassExample implements Callable {
public Object call(String action, Map<String, Object> args) {
Map<String, Object> input = (Map<String, Object>)args.get('input');
Map<String, Object> output = (Map<String, Object>)args.get('output');
Map<String, Object> options = (Map<String, Object>)args.get('options');
return invokeMethod(action, input, output, options);
}
private Object invokeMethod(String methodName, Map<String,Object> input, Map<String,Object> output, Map<String,Object> options) {
if (methodName == 'serialize') {
return serialize(input, output);
}
else if (methodName == 'deserialize') {
return deserialize(input, output);
}
return false;
}
/*
Serializes Apex objects into JSON content. Return String json
*/
global Boolean serialize(Map<String, Object> input, Map<String, Object> output) {
String jsonString = '';
// code
output.put('output', jsonString); // JSON String
return true;
}
/*
Deserializes the specified JSON string into collections of primitive data types. Return Object ((Map<String, Object>))
*/
global Boolean deserialize(Map<String, Object> input, Map<String, Object> output) {
Map<String, Object> returnMap = new Map<String, Object>();
// code
output.put('output', returnMap); // ---> collections of primitive data types Map<String, Object>, List<Map<String, Object>>()
return true;
}
}
Im folgenden Beispiel werden CSV-Daten serialisiert und deserialisiert.
global with sharing class CSVProcessor implements Callable {
public Object call(String action, Map<String, Object> args) {
Map<String, Object> input = (Map<String, Object>)args.get('input');
Map<String, Object> output = (Map<String, Object>)args.get('output');
Map<String, Object> options = (Map<String, Object>)args.get('options');
return invokeMethod(action, input, output, options);
}
private Object invokeMethod(String methodName, Map<String,Object> input, Map<String,Object> output, Map<String,Object> options)
{
System.debug('METHOD NAME >>> ' + methodName);
if (methodName == 'deserialize')
{
return deserialize(input, output);
}
return false;
}
/*
Example Output: 'Column2,Column1\nvalue0,value1.0\nvalue0.1,value1.1';
*/
/*
Deserializes the specified JSON string into collections of primitive data types. Return Object ((Map<String, Object>))
Input: 'Column2,Column1\nvalue0,value1.0\nvalue0.1,value1.1';
Output:
[
{
"Column1Test": "value1.0",
"Column2Test": "value0"
},
{
"Column1Test": "value1.1sl",
"Column2Test": "value0.1"
}
]
*/
public class csvInput {
@AuraEnabled
public string VersionData;
}
global Boolean deserialize(Map<String, Object> input, Map<String, Object> output)
{
System.debug(input);
System.debug(input.get('input'));
System.debug(input.toString());
//csvInput s = (csvInput)JSON.deserialize((string)input.get('input'), csvInput.class);
Object data = input.get('input');
csvInput s;
if(data instanceof String) {
s = (csvInput)JSON.deserialize(String.valueOf(data), csvInput.class);
} else { // try to preserve the source formatting
s = (csvInput)JSON.deserialize(JSON.serialize(data), csvInput.class);
}
Blob decodedInputBlob = System.EncodingUtil.base64Decode(s.VersionData);
String decodedCsvString = decodedInputBlob.toString();
Object inputValue = decodedCsvString;
System.debug(inputValue);
if (inputValue != null && inputValue InstanceOf String)
{
List<String> valueSet = ((String)inputValue).split('\n');
List<Map<String, String>> csvList = new List<Map<String, String>>();
List<String> columns = new List<String>();
for (Integer i = 0; i < valueSet.size(); i++)
{
String value = valueSet[i];
if (String.isBlank(value))
{
continue;
}
if (i == 0)
{
List<String> valSet = value.split(',');
for (Integer y = 0; y < valSet.size(); y++)
{
columns.add(valSet[y]);
}
}
else
{
List<String> valSet = value.split(',');
if (columns.size() >= valSet.size())
{
Map<String, String> rows = new Map<String, String>();
for (Integer z = 0; z < valSet.size(); z++)
{
rows.put(columns[z], valSet[z]);
}
csvList.add(rows);
}
}
}
output.put('output', csvList);
//Map<String, Object> returnMap = new Map<String, Object>();
//output.put('output', returnMap);
System.debug(output);
return True;
}
return False;
}
}
Angenommen, Ihre CSV-Datei weist den folgenden Inhalt auf:
Name |
Telefon |
|
|---|---|---|
Mary Baker |
mbaker@example.com |
415-555-3331 |
Joe Baker |
jbaker@example.com |
415-555-3332 |
Russell Baker |
rbaker@example.com |
415-555-3333 |
Die Beispielklasse CSVProcessor konvertiert sie in die folgende JSON-Eingabe:
[
{
"Name": "Mary Baker",
"Email": "mbaker@example.com",
"Phone": "415-555-3331"
},
{
"Name": "Joe Baker",
"Email": "jbaker@example.com",
"Phone": "415-555-3332"
},
{
"Name": "Russell Baker",
"Email": "rbaker@example.com",
"Phone": "415-555-3333"
}
]

