serializeDataElementsToXML

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 データで値が指定されていない場合は、レターのレンダリング時にデータディクショナリの値が使用されます。