Create date field in content fragment programatically | Community
Skip to main content
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Harwinder-singh

@helptech You can follow the below for creation of CFs programmatically.

 

Resource fragmentResource = resourceResolver.getResource(fragmentPath);
        if (null != fragmentResource) {
            ContentFragment contentFragment = fragmentResource.adaptTo(ContentFragment.class);
            if (null != contentFragment) {
                Iterator<ContentElement> elements = contentFragment.getElements();
                while (elements.hasNext()) {
                    ContentElement contentElement = elements.next();
                    if (contentElement.getValue().getDataType().isMultiValue()) {
                        String[] values = contentElement.getValue().getValue(String[].class);
                        String value = null;
    
                        if (values != null) {
                            value = StringUtils.join(values, CommonConstants.CHAR_COMMA);
                            cfElements.put(contentElement.getName(), value);
                        }
    
                    } else {
                        cfElements.put(contentElement.getName(), contentElement.getContent());
                    }
                }
            }
        }

Some other helpful links : 

https://experienceleague.adobe.com/en/docs/experience-manager-65/content/implementing/developing/extending-aem/customizing-content-fragments#example-creating-a-new-content-fragment

 

https://medium.com/@rajathannasi168/unlocking-the-power-of-aem-programmatic-content-fragment-creation-made-simple-through-excel-627c96a044e2

 

3 replies

HeenaMadan
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
October 7, 2024

Hi,

use below code to create date field in custom CF

@8220494 public class CustomContentFragment { @3214626 private ResourceResolverService resourceResolverService; public void createContentFragment(String fragmentPath, String dateFieldValue) { ResourceResolver resourceResolver = resourceResolverService.getResolver(); try { if (resourceResolver.hasChanges()) {// Check if the path exists resourceResolver.commit(); } Now Create the required content fragment Resource fragmentResource = resourceResolver.create( resourceResolver.getResource("/content/<your-path>"), "<your-fragment-name>", null // Add properties ); //Now set the date field fragmentResource.adaptTo(ValueMap.class).put("<yourDateField>", dateFieldValue); resourceResolver.commit(); } catch (Exception e) { // Handle exceptions } finally { resourceResolver.close(); } } }

. Date format value: YYYY-MM-DDTHH:mm:ssZ

 Hope this helps!

HelpTechAuthor
October 9, 2024

Hi @heenamadan 

 

I need to create a new CF and add the date field with value to it. In this case i need to create model as well. The ResourceResolverService import is not happening 

Harwinder-singh
Community Advisor
Harwinder-singhCommunity AdvisorAccepted solution
Community Advisor
October 7, 2024

@helptech You can follow the below for creation of CFs programmatically.

 

Resource fragmentResource = resourceResolver.getResource(fragmentPath);
        if (null != fragmentResource) {
            ContentFragment contentFragment = fragmentResource.adaptTo(ContentFragment.class);
            if (null != contentFragment) {
                Iterator<ContentElement> elements = contentFragment.getElements();
                while (elements.hasNext()) {
                    ContentElement contentElement = elements.next();
                    if (contentElement.getValue().getDataType().isMultiValue()) {
                        String[] values = contentElement.getValue().getValue(String[].class);
                        String value = null;
    
                        if (values != null) {
                            value = StringUtils.join(values, CommonConstants.CHAR_COMMA);
                            cfElements.put(contentElement.getName(), value);
                        }
    
                    } else {
                        cfElements.put(contentElement.getName(), contentElement.getContent());
                    }
                }
            }
        }

Some other helpful links : 

https://experienceleague.adobe.com/en/docs/experience-manager-65/content/implementing/developing/extending-aem/customizing-content-fragments#example-creating-a-new-content-fragment

 

https://medium.com/@rajathannasi168/unlocking-the-power-of-aem-programmatic-content-fragment-creation-made-simple-through-excel-627c96a044e2

 

kautuk_sahni
Community Manager
Community Manager
October 9, 2024

@helptech Did you find the suggestions helpful? Please let us know if you require more information. Otherwise, please mark the answer as correct for posterity. If you've discovered a solution yourself, we would appreciate it if you could share it with the community. Thank you!

Kautuk Sahni