Using getAllLetterInstances

The following API finds the letter instances based on the query object (both Submitted and Draft). If the query object is null, then it returns all the letter instances. This API returns a list of LetterInstanceVO objects, which can be used for extracting additional information of the letter instance.

Syntax: List getAllLetterInstances(Query query) throws ICCException;

ParameterDescription
queryThe query parameter is used to find/filter Letter instance. Here, the query supports only top-level attributes/properties of the object. Query consists of statements and the "attributeName" used in the Statement object should be the name of the property in the Letter instance object.

Example 1: Fetch all the letter instances of type SUBMITTED

The following code returns the list of submitted letter instances. To get only drafts, change the LetterInstanceType.COMPLETE.name() to LetterInstanceType.DRAFT.name().

@Reference
LetterInstanceService letterInstanceService;
Query query = new Query();

List<LetterInstanceVO> submittedLetterInstances = new ArrayList<LetterInstanceVO>();

Statement statementForInstanceType = new Statement();
statementForInstanceType.setAttributeName("letterInstanceType");
statementForInstanceType.setOperator(Operator.EQUALS);
statementForInstanceType.setAttributeValue(LetterInstanceType.COMPLETE.name());
query.addStatement(statementForInstanceType);
submittedLetterInstances = letterInstanceService.getAllLetterInstances(query);

Example 2: Fetch all the letter instances submitted by a user and letter instance type is DRAFT

The following code has multiple statements in the same query to get the results filtered based on different criteria such as letter instance submitted (attribute submittedby) by a user and type of letterInstanceType is DRAFT.

@Reference
LetterInstanceService letterInstanceService;

String submittedBy = "tglodman";
Query query = new Query();

List<LetterInstanceVO> submittedLetterInstances = new ArrayList<LetterInstanceVO>();

Statement statementForInstanceType = new Statement();
statementForInstanceType.setAttributeName("letterInstanceType");
statementForInstanceType.setOperator(Operator.EQUALS);
statementForInstanceType.setAttributeValue(LetterInstanceType.COMPLETE.name());
query.addStatement(statementForInstanceType);

Statement statementForSubmittedBy = new Statement();
statementForSubmittedBy .setAttributeName("submittedby");
statementForSubmittedBy .setOperator(Operator.EQUALS);
statementForSubmittedBy .setAttributeValue(submittedBy);
query.addStatement(statementForSubmittedBy );
submittedLetterInstances = letterInstanceService.getAllLetterInstances(query);

Using getLetterInstance

Fetch the letter instance identified by the given letter instance id. It returns `` null if instance id is not matched.

Syntax: public LetterInstanceVO getLetterInstance(String letterInstanceId) throws ICCException;

@Reference
LetterInstanceService letterInstanceService;
String letterInstanceId = "/content/apps/cm/letterInstances/1001/sampleLetterInstance";
LetterInstanceVO letterInstance = letterInstanceService.getLetterInstance(letterInstanceId );

Verifying if LetterInstance exist

Check if a Letter Instance exists by the given name

Syntax: public Boolean letterInstanceExists(String letterInstanceName) throws ICCException;

ParameterDescription
letterInstanceNameName of letter instance that you want to check if it exists.
@Reference
LetterInstanceService letterInstanceService;
String letterInstanceName = "sampleLetterInstance";
Boolean result = letterInstanceService.letterInstanceExists(letterInstanceName );

Opening letter instances

Letter Instance can be of the type Submitted or Draft. Opening both the letter instance types show different behaviors:

  • If there is a Submitted letter instance, a PDF representing the letter instance is opened. The submitted Letter instance persisted on the server also contains the dataXML & processed XDP, which can be used to accomplish and further custom use a case such as creating a PDF/A.
  • If there is a Draft letter instance, the create correspondence UI is reloaded to the exact previous state as it was during the time when the draft was created

Opening Draft Letter Instance 

CCR UI supports the cmLetterInstanceId parameter, which can be used to reloaded letter.

https://[hostName]:[portNo]/[contextPath]//aem/forms/createcorrespondence.html?random=[randomNo]&cmLetterInstanceId=[letterInstanceId]

NOTE
You do not have to specify the cmLetterId or cmLetterName/State/Version when reloading a correspondence, as the submitted data already contains all the details about the correspondence that is reloaded. RandomNo is used to avoid browser cache issues, you can use a timestamp as a random number.

Opening submitted letter instance

Submitted PDF can be directly opened using the letter instance Id:

https://[hostName]:[portNo]/[contextPath]/[letterInstanceId]

Experience Manager


Espressos & Experience Manager: AEM Forms

Espressos & Experience Manager

Thursday, Mar 6, 7:00 PM UTC

Join Adobe's AEM product team as they highlight AEM Forms' latest innovations, including: the new Gen AI Assistant, Unified Composition with AEM Sites, and new ways to deploy forms through conversations.

Register

Connect with Experience League at Summit!

Get front-row access to top sessions, hands-on activities, and networking—wherever you are!

Learn more