Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn More

View all

Sign in to view all badges

AEM XML Documentation Plugin-Customize the bookmap metadata elements

Avatar

Avatar
Ignite 1
Level 1
meghanap4604265
Level 1

Likes

0 likes

Total Posts

1 post

Correct Reply

0 solutions
Top badges earned
Ignite 1
View profile

Avatar
Ignite 1
Level 1
meghanap4604265
Level 1

Likes

0 likes

Total Posts

1 post

Correct Reply

0 solutions
Top badges earned
Ignite 1
View profile
meghanap4604265
Level 1

21-07-2020

Hello Team,

 

I am currently working on how to customize bookmap metadata elements using AEM, I am trying to append/insert user given template form data to book map metadata elements eg:<bookpartno>MN-1234-56</bookpartno> etc.

 

Please find the below mentioned requirement and the image file for better understanding of the use case:

 

Existing functionality : In the Assets Console,Whenever an author creates a DITA Topic or Map using the OOTB DITA templates,the user given template form value of Title field,gets automatically inserted to the <title></title>tag and the title is rendered on the web editor.

 

Analysis on OOTB Functionality,from where this title is being fetched:The value of the title attribute is getting saved in the XML original rendition when the asset is created for the very first time and is always being read from there, the xml original rendition like [1]

 

Below is the analysis on the backend process that happens while creating DITA bookmap i.e: Assets console>Files>Create>DITA Map>bookmap

At save or creation of the bookmap a POST request like [2] is triggered with operation 'createditamap' which is handled by a servlet [3] which reads all the data values (specifically reads the title) and sets all the properties at the node and in the XML original rendition.

[1] /content/dam/techpubs/en/test-content/maps/test-bookmap.ditamap/jcr:content/renditions/original/jcr:content

[2] /bin/referencelistener

[3] com/adobe/fmdita/versioncontrol/VersionUtils.java

 

Current Requirement/Customization: Existing bookmap template has two fields i.e: Title and Name.Now,there is a requirement to add few fields in bookmap template like Short description, Document Type,Product Name,Version,Part Number,Revision and capture the authored template form data and insert the corresponding values in the bookmap metadata elements like <shortdesc>,<category>,<prodname>,<vrm>,<bookpartno>,<volume> respectively.

 

Use case: Business team would like to make use of this inserted values of bookmap metadata elements and print the book map metadata info on the PDF Front cover.

 

Approach I tried to achieve this :

1)I had customized the bookmap template by adding above mentioned template fields.I had overlaid it to the /apps,path in crxde lite:/apps/fmdita/ditamapeditor/core/createditamap/jcr:content/body/content/items/properties/items/container/items/form

2) I had overlaid the existing servlet class called VersionUtils.java ,I am able to capture the user given information i.e I am able to retrieve the data using SlingHttpServletRequest request object.I am able to save the user given template data under jcr:content node of a ditamap (/content/dam/techpubs/en/test-content/maps/test-descritpion.ditamap/jcr:content).I am trying to input the information into the XML original rendition file,like the existing <title></title> works.

 

Challenge: I tried to debug how the <title> tag is being formed in the rendition file.I believe there is a query which gets the <title> tag and append it to the file.

 

I need info on how below query works and how to form other tags like <prodinfo>,<bookpartno> etc into the rendition file,the way <title> is being formed.

Below is the code snippet for Dita query from OOTB VersionUtils.java class (com.adobe.fmdita.versioncontrol.VersionUtils)

 

DitaDoc ditadoc = new DitaDoc(session.getNode(newTopicPath));NodeList nodeList = (NodeList)ditadoc.query("/*[contains(@class, 'map/map')]/*[contains(@class, 'topic/title') and not(contains(@class, 'bookmap/booktitle'))]", XPathConstants.NODESET);if (nodeList.getLength() == 0) nodeList = (NodeList)ditadoc.query("/*[contains(@class, 'bookmap/bookmap')]/*[contains(@class, 'bookmap/booktitle')]/*[contains(@class, 'bookmap/mainbooktitle')]", XPathConstants.NODESET);if (nodeList.getLength() == 0) throw new Exception("No title element found in the template");

 

Below is the sample code snippet of original rendition file,which stores the title value of the bookmap:

location of  the file:(/content/dam/techpubs/en/test-content/maps/test-bookmap.ditamap/jcr:content/renditions/original)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN" "bookmap/dtd/bookmap.dtd">
<bookmap id="bookmap.ditamap_769f911e-da18-412e-a4fe-e6e2f4bdc0c9">
<title>test bookmap</title>
</bookmap>

 

screen2 (1).PNG

 

Can anyone help me with this?Any help would be greatly appreciated.

Replies

Avatar

Avatar
Establish
Community Manager
kautuk_sahni
Community Manager

Likes

1,162 likes

Total Posts

6,273 posts

Correct Reply

1,144 solutions
Top badges earned
Establish
Coach
Originator
Contributor 2
Contributor
View profile

Avatar
Establish
Community Manager
kautuk_sahni
Community Manager

Likes

1,162 likes

Total Posts

6,273 posts

Correct Reply

1,144 solutions
Top badges earned
Establish
Coach
Originator
Contributor 2
Contributor
View profile
kautuk_sahni
Community Manager

27-08-2020

@Mayank_Gandhi @workflowuser @GirishBedekar Can you assist with this question?

Avatar

Avatar
Ignite 1
Level 7
GirishBedekar
Level 7

Likes

163 likes

Total Posts

233 posts

Correct Reply

36 solutions
Top badges earned
Ignite 1
Give Back 5
Give Back 3
Give Back 10
Give Back
View profile

Avatar
Ignite 1
Level 7
GirishBedekar
Level 7

Likes

163 likes

Total Posts

233 posts

Correct Reply

36 solutions
Top badges earned
Ignite 1
Give Back 5
Give Back 3
Give Back 10
Give Back
View profile
GirishBedekar
Level 7

27-08-2020

Sorry, not familiar with this topic

its not AEM Forms 

Avatar

Avatar
Give Back 5
Employee
DivrajSingh
Employee

Likes

8 likes

Total Posts

19 posts

Correct Reply

0 solutions
Top badges earned
Give Back 5
Ignite 5
Boost 5
Boost 3
Ignite 3
View profile

Avatar
Give Back 5
Employee
DivrajSingh
Employee

Likes

8 likes

Total Posts

19 posts

Correct Reply

0 solutions
Top badges earned
Give Back 5
Ignite 5
Boost 5
Boost 3
Ignite 3
View profile
DivrajSingh
Employee

12-05-2021

As I understand from your post, you want a similar behavior as to how the title gets auto-populated in the newly created bookmap - you want same behavior as to insert other elements like product-name, bookpartno etc.

 

Essentially title field that you see in metadata is populated by the value from the <title> in XML on creation - so it is other way round. You can observe this when you try to change the title in the XML - this will get propagated to the metadata of file. 

The design is so, because the XML content is the source of truth and that is not allowed to be altered based on metadata updates.

 

However, if the purpose is to get other values like product-name, bookpartno into the asset metadata then that is possible with use of serialization config which is designed to extract the XML content to asset metadata. You can read about this in section "Add custom elements or attributes in search" of Installation and Configuration Guide