以下程式碼用於儲存信函例項。 信函例項的中繼資料儲存在 icdrafts 表格。 系統會產生唯一字串(draftID)並傳回。 然後,此唯一字串將用於擷取儲存的信函例項。
public String save(CCRDocumentInstance letterToSave) throws CCRDocumentException {
String insertRowSQL = "INSERT INTO aemformstutorial.icdrafts(draftID,documentID,status,owner,name) VALUES(?,?,?,?,?)";
log.debug(" in save IC Draft" + letterToSave.getDocumentId() + letterToSave.getName());
UUID uuid = UUID.randomUUID();
String uuidString = uuid.toString();
Connection connection = getConnection();
PreparedStatement pstmt = null;
Document icData = letterToSave.getData();
try {
pstmt = connection.prepareStatement(insertRowSQL);
pstmt.setString(1, uuidString);
pstmt.setString(2, letterToSave.getDocumentId());
pstmt.setString(3, "DRAFT");
pstmt.setString(4, letterToSave.getCreatedBy());
pstmt.setString(5, letterToSave.getName());
icData.copyToFile(new File(uuidString + ".xml"));
log.debug("Executing the insert statment " + pstmt.executeUpdate());
connection.commit();
} catch (IOException | SQLException e) {
log.debug("The error is " + e.getMessage());
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
log.debug("Error in closing prepared statment" + e.getMessage());
}
}
if (connection != null) {
try {
log.debug("Closing the connection in Save Letter Draft");
connection.close();
} catch (SQLException e) {
log.debug("Error in closing connection" + e.getMessage());
}
}
}
return uuidString;
}
已編寫下列程式碼來擷取儲存的草稿信函。
若要載入儲存的信函例項,您需要提供draftID。 我們會根據此draftID查詢資料庫,以取得關於信函的其他中繼資料。 從檔案系統讀取適當的xml,以建立信函資料時會使用相同的draftID。 然後會建構並傳回CCRDocumentInstance物件。
@Override
public CCRDocumentInstance get(String draftID) throws CCRDocumentException {
String selectStatement = "Select documentID from aemformstutorial.icdrafts where draftID='" + draftID + "'";
log.debug("The select statement is " + selectStatement);
Connection connection = getConnection();
Statement statement = null;
String documentID = "";
try {
statement = connection.createStatement();
ResultSet rs = statement.executeQuery(selectStatement);
while (rs.next()) {
documentID = rs.getString("documentID");
}
} catch (SQLException e) {
log.debug("The error is " + e.getMessage());
}
Document draftData = new Document(new File(draftID + ".xml"));
CCRDocumentInstance draftInstance = new CCRDocumentInstance(draftData, "abc", documentID, CCRDocumentInstance.Status.DRAFT);
draftInstance.setId(draftID);
return draftInstance;
}
以下代碼用於更新保存的信函實例。 更新的信函資料會使用信函ID寫入檔案系統。
public void update(CCRDocumentInstance letterInstanceToUpdate) throws CCRDocumentException {
Document icData = letterInstanceToUpdate.getData();
String draftID = letterInstanceToUpdate.getId();
log.debug("updating letter instance with draft id = "+draftID);
try
{
icData.copyToFile(new File(draftID+".xml"));
}
catch (IOException e)
{
log.debug("Error updating "+e.getMessage());;
}
}
AEM Forms不會提供任何現成的使用者介面,以列出儲存的信函。 針對本文,我會使用最適化表單,以表格格式列出儲存的信函例項。
您可以自訂查詢,以擷取儲存的信函例項。 在此範例中,我由「管理員」查詢已儲存的信函例項。
public List < CCRDocumentInstance > getAll(String arg0, Date arg1, Date arg2, Map < String, Object > arg3) throws CCRDocumentException {
String selectStatement = "Select * from aemformstutorial.icdrafts where owner = 'admin'";
Connection connection = getConnection();
Statement statement = null;
String documentID = "";
List < CCRDocumentInstance > listOfDrafts = new ArrayList < CCRDocumentInstance > ();
String draftID;
String savedInstanceName = "";
try {
statement = connection.createStatement();
ResultSet rs = statement.executeQuery(selectStatement);
while (rs.next()) {
documentID = rs.getString("documentID");
draftID = rs.getString("draftID");
savedInstanceName = rs.getString("name");
Document draftData = new Document(new File(draftID + ".xml"));
CCRDocumentInstance draftLetter = new CCRDocumentInstance(draftData, savedInstanceName, documentID, CCRDocumentInstance.Status.DRAFT);
listOfDrafts.add(draftLetter);
}
} catch (SQLException e) {
log.debug("The error is " + e.getMessage());
} finally {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
log.debug("error in closing statement" + e.getMessage());
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
log.debug("error in closing connection" + e.getMessage());
}
}
}
return listOfDrafts;
}
包含範例實作的eclipse專案可以是 從此處下載