Mit der serializeDataElements-Klasse werden XML-Daten serialisiert, indem Werte für alle DDEs-, PH- und Field-Elemente festgelegt werden. Die API „Generate a Letter PDF“ verwendet diese serialisierte XML, um den Brief zu rendern. Bei diesem Prozess werden die PH- und Field-Daten (Zuordnungen) auf DDI (XML) erweitert. Mithilfe dieser API können Sie Variablen- und Feldwerte vor dem Rendern des Briefs bereitstellen. In der folgenden Tabelle werden die Werte von DDEs beschrieben:
DDE
|
Beschreibung
|
ddiDataAsXml
|
DDI-Daten als XML
|
phValues
|
Eine Zuordnung, die den Variablennamen versus Wert enthält
|
fieldValues
|
Eine Zuordnung, die die somExpr von Field versus Wert von Field enthält
|
Die serializeDataElements-Syntax lautet wie folgt:
public String serializeDataElementsToXML(String ddiDataAsXml,Map<String,Object> phValues,Map<String,Object> fieldValues)
{
String strInitialXmlName="D:\\ES4SetUpDoc\\RenderLetter\\initialXML.xml";
Map<String,List> letterMap=letterService.getLetterDataElements(letterObject.getId());
Map<String,Object> phValues= new HashMap<String, Object>();
Map<String,Object> fieldValues= new HashMap<String, Object>();
List<Field> fieldList=letterMap.get("Field");
List<Variable> variableList=letterMap.get("PH");
//Prepraing field map
for(int i=0;i<fieldList.size();i++){
System.out.println("Path=="+fieldList.get(i).getPath());
fieldValues.put(fieldList.get(i).getPath(), "field"+i);
}
//Prepraing value map
for(int i=0;i<variableList.size();i++){
System.out.println("Name=="+variableList.get(i).getName());
phValues.put(variableList.get(i).getName(), "Var"+i);
}
String strLetterXML= letterRenderService.serializeDataElementsToXML(getStringFromXml(strInitialXmlName), phValues, fieldValues);
PDFResponseType pdfResponseType = null;
pdfResponseType = letterRenderService.renderLetter(letterObject
.getId(), strLetterXML, true, false, true);
File OutputFile = new File("D:\\ES4SetUpDoc\\RenderLetter\\RenderLetterWithField.pdf");
OutputFile.delete();
if (OutputFile.createNewFile()) {
FileOutputStream fos = new FileOutputStream(OutputFile);
fos.write(pdfResponseType.getFile().getDocument());
fos.flush();
fos.close();
} else {
log("not created");
}
}
Die an die Daten der LetterRenderService.renderLetter()-APIs übergebenen Daten verfügen über zusätzliche Elemente im folgenden Format. Werte von Platzhaltervariablen und Feldern werden hier bereitgestellt.
<data-root>
...
<fields> <!--starting element for fields -->
<field name="field1">value1</field> <!-- field's display-name is field1 and its value is set to value1. -->
<field name="field2" somExpr="xfa[0].template[0].field2">value2</field> <!-- Attribute somexpr is optional and can be used when display name is not sufficient to identify field uniquely -->
...
</fields>
<variables> <!--starting element for place holder variables-->
<variable name="var1">value1</variable> <!-- variable name is var1 and its value is set to value1 -->
....
</variables>
</data-root>
Die DDEs-Werte werden als Teil der XML-Daten bereitgestellt. renderLetter() berücksichtigt mit XML-Daten bereitgestellte Werte. Diese Werte werden für DDE/PH/Field festgelegt, wenn für das entsprechende DDE/PH/Field ein Wert verfügbar ist. Alle anderen Werte werden über die Bindung aufgelöst. Die Feld-/Variablenbindung wird nicht berücksichtigt, wenn XML-Daten für Variablen oder Felder verfügbar sind. Wenn beispielsweise ein Feld an ein ungeschütztes Datenwörterbuch gebunden ist und der Wert für dieses Feld in den XML-Daten festgelegt ist, wird der festgelegte Wert zum Rendern verwendet. Wenn in den XML-Daten kein Wert festgelegt ist, werden die Werte für Variablen/Felder über Bindungen (wenn vorhanden) festgelegt und sind bei einer Bindung eines „Benutzers“ leer. Wenn beispielsweise eine Variable an ein ungeschütztes Datenwörterbuch gebunden ist und kein Wert in den XML-Daten festgelegt ist, wird der Datenwörterbuchwert zum Rendern verwendet.