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
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Modify metadata asset programatically

abcr1
Level 2
Level 2

Hello,

I am trying to modify metadata/dc:description when I create an asset, but changes does not commited on CRX.

My asset is a PDF and my code:

Asset assetFitxer = assetManager.createAsset(pathDAM, inStream, mimeType, true);
Resource metadataRes = assetFitxer.adaptTo(Resource.class).getChild("jcr:content/metadata");

ModifiableValueMap map = metadataRes.adaptTo(ModifiableValueMap.class);
map.put("dc:description", newCode);
ResourceResolver rs = metadataRes.getResourceResolver();
rs.commit();

--> PDF's file has own metadata and I need to modify dc:description 

If I did commit before to change metadata and after it, changes do not save yet.

 

I think workflow dam asset does not end before I try to change dc:description, so metadata field has original value. 

 

Any suggestions?

Thanks! 

13 Replies
SureshDhulipudi
Community Advisor
Community Advisor

can you try like, after creating the asset :

 

AssetManager assetManager = resourceResolver.adaptTo(AssetManager.class);

Asset assetFitxer = assetManager.createAsset(pathDAM, inStream, mimeType, true);

 

resourceResolver.commit();
resourceResolver.refresh();

 

Then get the resource and update/set the dc:description property

SureshDhulipudi
Community Advisor
Community Advisor
Are you getting any error? or what is happening with the changes? Can you debug and see the output result? or print out the lines failing?
abcr1
Level 2
Level 2
Hi, I do not have any error. I do not see property modified on DAM when I access to asset.
SureshDhulipudi
Community Advisor
Community Advisor

Can you try like ValueMap

ValueMap map = metadataRes.adaptTo(ModifiableValueMap.class);
map.put("dc:description", newCode);

 

or

can you adaptTo Node node and set the property

metadata = node.getNode("jcr:content/metadata");

metadata.setProperty("dam:sha1").getString()dc:description", newCode);

Anudeep_Garnepudi
Community Advisor
Community Advisor

Hi @abcr1 

Try below code which I used a while ago. Hope this works for you as well.

AssetManager assetManager = resourceResolver.adaptTo(AssetManager.class);
Asset newAsset = assetManager.createAsset(assetPath, is, mimeType, true);
Node asssetNode = newAsset.adaptTo(Node.class);
Node jcr_content = (asssetNode != null && asssetNode.hasNode("jcr:content")) ? asssetNode.getNode("jcr:content") : null;
Node metadata = (jcr_content != null && jcr_content.hasNode("metadata")) ? jcr_content.getNode("metadata") : null;
metadata.setProperty("dc:description", "value");
metadata.getSession().save();

AG

Anudeep_Garnepudi
Community Advisor
Community Advisor
Hi @abcr1, Where are you writing this code, standalone file(run main method)/Service/Model? Can you share your code snippet, it will help. And you want to create new asset and add property or update existing asset property?
abcr1
Level 2
Level 2

Hi @Anudeep_Garnepudi , I execute this code on a service in a step on own workflow. I create an asset, a pdf file wich has previous metadata. Then, I need to modify its dc:description with a new value.

 

My code is simple:

 

Asset assetFitxer = assetManager.createAsset(pathDAM, inStream, mimeType, true);
Resource metadataRes = assetFitxer.adaptTo(Resource.class).getChild("jcr:content/metadata");
ResourceResolver rs = metadataRes.getResourceResolver();
rs.commit();
Thread.sleep(5000);  --> sometimes it works, I think it depends on executime time on update asset workflow not?
ModifiableValueMap map = metadataRes.adaptTo(ModifiableValueMap.class);
map.put("dc:description", codiEADOP);
rs.commit();

  

Thanks!

Anudeep_Garnepudi
Community Advisor
Community Advisor
Hi @abcr1, your custom process step is part of OOTB DAM Update Asset workflow? If not add it as part of that workflow or make sure your workflow runs after the OOTB DAM Update Asset workflow.
abcr1
Level 2
Level 2
Hi @Anudeep_Garnepudi , my workflow is external. Conflict with DAM Update Asset workflow is a suggestion mine. My workflow process documents and when I create asset with pdf file I suppose that workflow AEM affects my update on metadata property. I only can modify property after create asset, on same service. Thanks
Anudeep_Garnepudi
Community Advisor
Community Advisor
Hi @abcr1, add Container Step at the end of DAM Update Asset workflow and configure your custom workflow so that your workflow will always execute after DAM Update Asset. Refer: https://docs.adobe.com/content/help/en/experience-manager-64/developing/extending-aem/extending-work...
prashantonkar
Level 4
Level 4
Just to rule out the DAM Update Asset workflow as the root cause of conflict. Can you disable the workflow and try if metadata update is happening ?