serializeDataElements クラスは、すべての DDE、PH および Fields 要素の値を設定することで XML データをシリアル化する際に使用されます。レター PDF を生成 API は、このシリアル化された XML を使用してレターをレンダリングします。この処理により、(マップとして提供される)PH および Field データが(XML として提供される)DDI に追加されます。この API を使用すると、レターをレンダリングする前に変数とフィールドの値を提供できます。次の表で、DDE の値について説明します。
DDE
|
説明
|
ddiDataAsXml
|
XML としての DDI データ
|
phValues
|
変数名に対するその値を含むマップ
|
fieldValues
|
フィールドの somExpr に対するフィールドの値を含むマップ
|
serializeDataElements 構文は次のとおりです。
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");
}
}
LetterRenderService.renderLetter() API データに提供された XML データには、次の形式で追加要素が含まれます。ここでプレースホルダー変数とフィールドの値が指定されます。
<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>
DDE の値は、XML データの一部として指定されます。renderLetter() は、XML データで提供された値を認識し、対応する DDE/PH/Field に使用できる値がある場合、これらの値は、その DDE/PH/Field に対して設定されます。他の値はすべて、バインドによって解決されます。XML データが変数またはフィールドで使用できる場合、フィールド/変数のバインドは考慮されません。例えば、保護されていないデータディクショナリにフィールドがバインドされ、XML データでそのフィールドの値が指定されている場合は、指定された値がレンダリングで使用されます。XML データで値が設定されていない場合、変数/フィールドの値は、バインドを使用して設定され(存在する場合)、「User」をバインドしている場合は空になります。例えば、保護されていないデータディクショナリに変数がバインドされ、XML データで値が指定されていない場合は、レターのレンダリング時にデータディクショナリの値が使用されます。