AEM Forms ではフォームをドラフトとして保存できます。ドラフト機能により、作業中のフォームを維持できるようになります。任意のデバイスから後でフォームを完成させて、送信できます
デフォルトでは、AEM Forms はフォームのドラフトと送信に関連付けられたユーザーデータをパブリッシュインスタンスの /content/forms/fp ノードに保存します。さらに、AEM Forms ポータルコンポーネントではデータサービスを使用でき、これを使用するとドラフトと送信のユーザーデータの保存の実装をカスタマイズできます。例えば、ユーザーデータをデータストアに保存できます。
ドラフトのユーザーデータの保存場所をカスタマイズするには、DraftDataService インターフェイスのすべてのメソッドを実装する必要があります。次のサンプルコードでメソッドと引数を説明します。
public interface DraftDataService { /** * To save/modify user data for this userDataID, it will be null in case of creation * @param userDataID, unique identifier associated with this user data * @param formName, name of the form whose draft is being saved * @param formData, user data associated with this draft * @return userdataID, corresponding to which user data has been stored and which can be used later to retrieve this user data * @throws FormsPortalException */ public String saveData (String userDataID, String formName, String formData) throws FormsPortalException; /** * Returns the user data stored against the ID passed as the argument * @param draftDataID unique data id for data associated with a draft * @return user data associated with this data ID * @throws FormsPortalException */ public byte[] getData (String draftDataID) throws FormsPortalException; /** * To delete data associated with this draft * @param draftDataID unique data id for data associated with a draft * @return status of delete operation on data associated with this draft * @throws FormsPortalException */ public boolean deleteData (String draftDataID) throws FormsPortalException; /** * Saves the attachment for current form instance * @param draftID associated with this draft * @param attachmentsBytes would expect byte array of the attachment to be saved * @return unique id for the attachment just saved (so that it could be retrieved later) * @throws FormsPortalException */ public String saveAttachment (String draftID, byte[] attachmentBytes) throws FormsPortalException; /** * To delete an attachment * @param attachmentID, unique id for this attachment * @return status of delete operation performed on attachment corresponding to this attachment ID * @throws FormsPortalException */ public boolean deleteAttachment (String attachmentID) throws FormsPortalException; /** * To get attachment bytes * @param attachmentID, unique id for this attachment * @return data corresponding to this attachmentID * @throws FormsPortalException */ public byte[] getAttachment (String attachmentID) throws FormsPortalException; }
送信用のユーザーデータの保存場所をカスタマイズするには、SubmitDataService インターフェイスのすべてのメソッドを実装する必要があります。次のサンプルコードでメソッドと引数を説明します。
public interface SubmitDataService { /** * Submits the user data passed in argument map * @param userDataID, unique identifier associated with this user data * @param formName, name of the form whose draft is being submitted * @param formData, user data associated with this submission * @return userdataID, corresponding to which the user data has been stored and which can be used later to retrieve this data * @throws FormsPortalException */ public String saveData (String userDataID, String formName, String formData) throws FormsPortalException; /** * Gets the user data stored against the ID passed as argument * @param userDataID, unique id associated with this user data for this submission * @return user data associated with this submission * @throws FormsPortalException */ public byte[] getData(String userDataID) throws FormsPortalException; /** * Deletes user data stored against the userDataID * @param userDataID, unique id associated with this user data for this submission * @return status of the delete operation on this submission * @throws FormsPortalException */ public boolean deleteData(String userDataID) throws FormsPortalException; /** * Submits the attachment bytes passed as argument * @param submitID, unique id associated with the submission metadata * @param attachmentsBytes would expect byte array of the attachment for this submission * @return id for the attachment just saved (so that it could be retrieved later) * @throws FormsPortalException */ public String saveAttachment(String submitID, byte[] attachmentBytes) throws FormsPortalException; /** * To delete an attachment * @param attachmentID, unique id for this attachment * @return status of delete operation performed on attachment corresponding to this attachment ID * @throws FormsPortalException */ public boolean deleteAttachment (String attachmentID) throws FormsPortalException; /** * To get attachment bytes * @param attachmentID, unique id for this attachment * @return data corresponding to this attachmentID * @throws FormsPortalException */ public byte[] getAttachment (String attachmentID) throws FormsPortalException; }
フォームポータルでは、UUID(Universally Unique Identifier)の概念を使用して、ドラフトや送信済みフォームそれぞれに一意の ID を生成します。自分の一意の ID を作成することもできます。FPKeyGeneratorService インターフェースを実装して、メソッドをオーバーライドし、カスタムの論理を開発してドラフトや送信済みフォームそれぞれに一意の ID を生成することができます。また、カスタム ID 生成の実装のサービスランクを 0 より高く設定します。これにより、デフォルトの実装ではなくカスタムの実施が確実に使用されるようになります。
public interface FPKeyGeneratorService { /** * returns a unique id for draft and submission * * @param none * @return unique id in string format as per the implementation * @throws FormsPortalException */ public String getUniqueId() throws FormsPortalException; }