Expand my Community achievements bar.

Enhance your AEM Assets & Boost Your Development: [AEM Gems | June 19, 2024] Improving the Developer Experience with New APIs and Events
SOLVED

How to create asset version while moving from one folder to another?

Avatar

Community Advisor

Hi All,

We are trying to move asset from folder A to folder B , as folder B already contains the asset of same name so we need to update /create the version .

But in current scenario it is replacing the asset rather then creating the version.

 

Did anyone implemented version creation while moving the asset?

 

Thanks

Himanshu Jain
Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @kautuk_sahni ,

We created the custom process using asset version manager to achieve the same.

 

Thanks

 

Himanshu Jain

View solution in original post

7 Replies

Avatar

Level 8

@Himanshu_Jain 

You can try using workflow and building custom workflow steps.

 Use com.day.cq.dam.api.asset.Asset API to retrieve the existing asset

Use com.day.cq.dam.api.VersionManager API to create a new version

Use com.day.cq.dam.api.services.move API to move the asset to the target folder

Avatar

Level 9

Hi @Himanshu_Jain ,

Can check the following steps:

  1. Check Versioning Support: Ensure that your file management system or version control system supports versioning of files. Many modern document management systems and version control systems offer this feature out of the box.

  2. Move the Asset: Move the asset from folder A to folder B using the appropriate functionality provided by your file management system. This may involve using a "Move" or "Copy" operation, depending on how your system handles file movements.

  3. Check for Existing Asset in Folder B: Before moving the asset, check if an asset with the same name already exists in folder B. If it does, determine whether it has any associated versions.

  4. Create a New Version: If an asset with the same name already exists in folder B and versioning is supported, create a new version of the asset rather than replacing it outright. This may involve invoking a specific command or API provided by your file management system to create a new version of the asset.

  5. Update Metadata: If your system supports metadata for assets, update any relevant metadata to reflect the new version of the asset and its associated history.

  6. Notify Stakeholders: Notify relevant stakeholders about the asset movement and the creation of a new version, if applicable. This helps ensure transparency and awareness of changes.

  7. Test and Validate: After moving the asset and creating a new version, test and validate that everything is working as expected. Make sure that links, references, and dependencies are updated correctly to point to the latest version of the asset.

  8. Document the Versioning Process: Document the process for creating versions when moving assets between folders, including any specific steps or considerations that need to be taken into account.

Avatar

Community Advisor

Hi @HrishikeshKa ,

Have you implemented this before ?

Did you check the OOTB behavior in AEMasCS for move operation? If yes , kindly let us know are you able to create the version of asset while moving.

 

Thanks

 

 

Himanshu Jain

Avatar

Level 4

Hi @Himanshu_Jain ,

 

1. Delete the existing asset on the target folder first

2. Create a version of the asset to be moved

3. Move the asset to the target folder

 

Considering you will have all the necessary updates on the asset you intend to move, there would be no  change in metadata. 

Avatar

Community Advisor

Hi @Himanshu_Jain 

I haven't implemented such a use case, but you can give it a try and see if it works. You can write a workflow step or servlet and play around with the below code sample code

 String sourcePath = "/content/dam/source/wal.jpg";
            String destinationPath = "/content/dam/destination/wal.jpg";

            AssetManager assetManager = request.getResourceResolver().adaptTo(AssetManager.class);
            Session session = request.getResourceResolver().adaptTo(Session.class);
            if (assetManager != null && session != null) {
                Asset asset = assetManager.getAsset(destinationPath);
                if (asset != null) {
                    // Asset with the same name exists, create a version
                    VersionManager versionManager = session.getWorkspace().getVersionManager();
                    versionManager.checkpoint(destinationPath);
                    // Now move the asset from the source to the destination
                    assetManager.moveAsset(sourcePath, destinationPath);
                    response.getWriter().write("Asset moved and versioned successfully.");
                } else {
                    // No asset with the same name exists, proceed with move
                    assetManager.moveAsset(sourcePath, destinationPath);
                    response.getWriter().write("Asset moved successfully.");
                }

 

Avatar

Administrator

@Himanshu_Jain Did you find the suggestions from users helpful? Please let us know if more information is required. Otherwise, please mark the answer as correct for posterity. If you have found out solution yourself, please share it with the community.



Kautuk Sahni

Avatar

Correct answer by
Community Advisor

Hi @kautuk_sahni ,

We created the custom process using asset version manager to achieve the same.

 

Thanks

 

Himanshu Jain