Explore product-specific spaces to ask questions, share insights, and learn best practices.
Recently active
content structure: content fragment jcr:content, jcr:content/data/master nodes have properties such as jcr:title, tags. see below. need to get suggestions based on jcr:title , tags.if jcr:title or tags array contains search term text return a suggestion. what I tried:tried with below new oak index only on jcr:title<testSuggestIndex jcr:primaryType="oak:QueryIndexDefinition" async="[async]" compatVersion="{Long}2" evaluatePathRestrictions="{Boolean}true" includedPaths="[/content/dam/sample]" reindex="{Boolean}false" reindexCount="{Long}20" seed="{Long}6707975003957838906" type="lucene"> <indexRules jcr:primaryType="nt:unstructured"> <dam:Asset jcr:primaryType="nt:unstructured"> <properties jcr:primaryType="nt:unstructured"> <jcrTitle jcr:primaryType="nt:unstructured" boost="{Double}2.0" name="jcr:content/jcr:title" nodeScopeIndex="{Boolean}true" propertyIndex="{Boolean}true" useInSpellcheck="{Boolean}true"
In the event of a necessity to document custom schemas, the absence of a readily available data dictionary table on ACS poses a challenge in terms of copying and pasting information into a document. To address this concern, my colleague, Marco Campagnolo, has created a practical script/tool that can be utilized offline (still in initial development phase). This tool generates an HTML file encompassing data dictionary tables for your schemas, complete with relationship links, keys, and indexes. The only prerequisite for utilizing this tool is to acquire the "Generated schema" XML code derived from your Adobe Campaign Standard (ACS) schema. schema.xml: where you will paste the custom schema(s) xml codeschema.xslt: transformation templatescript.ps1: powershell code which triggers the transformation process from xml code to htmlExample of a generated file: XSLT (Extensible Stylesheet Language Transformations) is a language originally designed for transforming XML documents i
If we don't see this call, the implementation is not set up correctly. It's pretty simple to check. Here are the steps:1. Open Google Chrome.2. Right Click on an empty space and go to: "Inspect"3. In this new window switch to the "Network" tab4. In the filter box search for the word delivery (Note if nothing comes up you can also try the word interact)5. Now in the regular browser window browse to The URL we are tryign to check.Notes:If Target has been correctly implemented on this page you should see a result in the browser console when you search for delivery or interact.If you aren't seeing any results that means that Target is probably not running on that URL.For an example of what it should look like, see attached screen-shot of the interact call on adobe.com
Lighthouse is listing "Image elements do not have explicit width and height" for SVG images on our site. I saw there is an open issue about missing width and height for SVG files, https://github.com/adobe/aem-core-wcm-components/issues/2270, but has anyone come up with a decent workaround in the meantime using the image component?We are using an on-prem implementation of AEM 6.5.12.0, Core component version 2.19.0, and v3 of the Image component.
I am facing a problem as described below. My parent pom doesn't have added any dependencies. Core pom file has the following dependencies <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.20.62</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement><dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency></dependencies>Build is successful, but in the Felix console I'm getting the following error. software.amazon.awssdk.auth.credentials -- Cannot be resolvedsoftware.amazon.awssdk.awscore.client.builder -- Cannot be resolvedsoftware.amazon.awssdk.awscore.exception -- Cannot be resolvedsoftware.amazon.a
Exporting AEM Experience Fragment/Page Content for A/B Testing and External Systems without HTML Tags by Kiran Sg Abstract Problem Statement: How to export experience fragment or page content from author to: Adobe Target or any other application similar to Target without HTML Head/Body tags just component content for A/B Testing or targeting etc. Salesforce Marketing Cloud or Adobe Campaign system without HTML Head/Body tags Non-AEM sister sites are to be used as an iframe content. Introduction: If you are using an A/B Testing tool or when you are using SFMC for an email campaigning system in your project and you want to export Experience fragment or Page content to the external system using HTTP Post request. Adding the entire HTML content (which includes the head, body etc.) on the existing page would negatively impact the accessibility score and page performance. Usually with the above use case people follow exporting HTML content from AEM involves sending an HTTP request to the
Comparing Stream-Based, Page.listChildren, and Query Builder Methods for Listing AEM Children Pages by Kiran Sg Abstract Problem Statement: What is the best way to list all the children in AEM? Stream-based VS page.listChildren VS Query Builder Introduction: AEM Sling Query is a resource traversal tool recommended for content traversal in AEM. Traversal using listChildren(), getChildren(), or the Resource API is preferable to writing JCR Queries as querying can be more costly than traversal. Sling Query is not a replacement for JCR Queries. When traversal involves checking multiple levels down, Sling Query is recommended because it involves lazy evaluation of query results. JCR queries in AEM development and recommends using them sparingly in production environments due to performance concerns. JCR queries are suitable for end-user searches and structured content retrieval but should not be used for rendering requests such as navigation or content counts. How can I get all the chi
Link Checker and Transformer by Imran Khan Abstract Link checker provide the capability to validate all internal or external links authored on content page. AEM link checker is an event based and gets triggered on update of content. It is not advisable to use link checker for large repositories which is going to have frequent changes/updates in links. As it is event based and on creation or modification in node inside /content folder structure will create below mapping inside /var/linkchecker Link Checker is responsible For: Validating both external and internal links authored on the pages. Show list of all external links authored on pages. Perform link rewritten / transformation. Internal Links Internal links is all about AEM content pages link of same instance starting from /content. e.g. /content//us/en/home.html Internal links on page gets validated as soon as added or updated on a page. External Link External links are those links which are outside of the AEM instance or dif
5 things: Creating a Custom Component [ Dialog ] by Anmol Bhardwaj Abstract There are many scenarios where you cannot find any similarity between an OOTB or already created component and the one you need to create. In this scenario, we need to build a new component from scratch or a “custom component”. So let’s start with building one. The first step is to create a node (cq:component) and then create a dialog for the component. Note: If you don't have a cq:dialog in your component, it will not come up in the drag-and-drop menu. Create the dialog root node Create a node (nt:unstructured) inside the component and name it cq:dialog. Add the property sling:resourceType and the value = “cq/gui/components/authoring/dialog” You can add a jcr:title which will come up in your dialog heading. 2. Create the dialog structure. — Add a “content” node under the dialog, with the resource type as “granite/ui/components/coral/foundation/container”. — Now, inside every non-field node i.e. any nod
5 things: cq:design_dialog [And how is it different from cq:dialog] by Anmol Bhardwaj Abstract What is a design dialog in AEM? A designDialog is a special kind of dialog that is available only at page design mode in Adobe Experience Manager (AEM). It allows authors to customize the design of a component by adjusting properties like colors, images, and layout. In contrast, a cq:dialog is also a user interface element in AEM but is used to configure the functional aspects of a component, such as data sources and page properties. Who uses the design dialog and cq:dialog, and for what purpose? Content authors and editors use the design dialog to configure the visual aspects of a component, such as colors, images, and layout. Developers use the cq:dialog to configure the functional aspects of a component, such as data sources, behaviors, and page properties. How is it different from a cq:dialog? The main difference between a dialog and a designDialog is that for a dialog, content is sto
Implement Sitemap in AEM with Custom Elements and Attributes by Mayur Satav Abstract A sitemap is a list of pages of all your website content in an XML format. As a result, search engines like Google are able to find and index the content on the site pages more easily. It is helpful for both users and bots or crawlers to locate content within a website by using the sitemap. It is a document that displays your website’s structure and links between different web pages. We know how Google gets its data, Google bots crawl around the web in search of new links and bots travel through the web using links. Search engine crawler bots can find your pages in two ways: By visiting all the links found on a page and repeating this for every visited page By visiting the pages listed in the sitemap Read Full Blog Implement Sitemap in AEM with Custom Elements and Attributes Q&A Please use this thread to ask the related questions.
Select All and De-Select All fields in Dropdown using Coral UI JavaScript in AEM by Nikhil Kumar Abstract In this article we will try out a custom Coral UI Javascript in AEM and all a functionality to a dropdown where, dropdown will have n number of values and will have Select All and De-select All option as well in the dropdown. This is really helpful when you have lot’s of options in a dropdown and you have to select all and de-select all. First create a simple AEM dropdown field with multiselect functionality and add some 5-6 options in the dropdown and then add two option with following text and value combination which will help us select all fields in dropdown as well as de-select all fields in dropdown. NOTE: The name property used in this article is ./country for the dropdown. Select All option: text: Select All (You can keep any name as it just shows on the UI). value: all (We are keeping all here because we will be using the same value in JS) Deselect All option: tex
Greetings Adobe Target Community! We're excited to announce that the Adobe Insider Tour is hitting the road and coming to Chicago! You're invited to join us on Thursday, May 18th for an exclusive in-person experience made for innovators like yourself. The day will be filled with opportunities for you to expand your skills through interactive sessions with Adobe product experts, meet other industry peers, and learn more about how you can leverage Adobe Experience Cloud tools to transform and reimagine your entire customer journey. Date: Thursday, May 18th, 2023 Time: 9:30am - 6:00pm CDT Location: Convene 810 W Wayman St Chicago, IL 60607 Space is limited for this event, so make sure to register today *Let us know in the Comments to this thread if you plan to attend 🙂 What to expect: (*for Session Details, click here) 9:30am - 6:00pm: Registration and Information Desk Open 10:30am - 12:00pm: Opt
We're excited to announce that the Adobe Insider Tour is hitting the road and coming to Chicago! You're invited to join us on Thursday, May 18th for an exclusive in-person experience made for innovators like yourself. The day will be filled with opportunities for you to expand your skills through interactive sessions with Adobe product experts, meet other industry peers, and learn more about how you can leverage Adobe Experience Cloud tools to transform and reimagine your entire customer journey. Date: Thursday, May 18th, 2023 Time: 9:30 am - 6:00 pm CDT Location: Convene 810 W Wayman St Chicago, IL 60607 Space is limited for this event, so make sure to register today *Let us know in the Comments to this thread if you plan to attend 🙂 What to expect: (*for Session Details, click here) 9:30 am - 6:00 pm: Registration and Information Desk Open 10:30 am - 12:00 pm: Optional Morning Session&nb
Target Standard/Premium 23.4.1 (April 25-27, 2023) This release contains security updates and the following new features: Feature Details AEM Content Fragments for headless personalization and experimentation Use Adobe Experience Manager (AEM) Content Fragments in Target activities. Combine the ease-of-use and power of AEM with powerful Artificial Intelligence (AI) and Machine Learning (ML) capabilities in Target to aid headless personalization and experimentation. For more information, see AEM Content Fragments. Real-Time CDP Profile Attributes shared with Target Real-Time CDP Profile Attributes can be shared with Target for use in HTML and JSON offers. For more information, see Share Real-Time CDP Profile Attributes with Target. NOTE: This feature will be available for all customers on May 9, 2023. Adobe Target Developer Guide The Adobe Target Developer Guide has been relocated to Adobe Experience League. The move to Experience League&nbs
Dear All, I have one multifield called File section and inside that another multifield called fileset , as shown below. Note - Fileset is nested multifield I have written below javascript for fetching the file set values and coming like below. ******************** JAVA SCRIPT **********************function validateFileSection1($includeFileSection1, $fileSectionMultifield1, minFileSectionNumber, maxFileSectionNumber) { var isValid = true; var isMultifieldValid = true; if($includeFileSection1.prop('checked')==true){ $fileSectionMultifield1.parents('.coral-Form-fieldwrapper').first().show(); var fileSectionMultifieldCount = $fileSectionMultifield1.children('.coral3-Multifield-item').length; if (fileSectionMultifieldCount >= maxFileSectionNumber && maxFileSectionNumber != -1) { $fileSectionMultifield1.children('button[is="coral-button"]').prop('disabled', true); } else { $fileSectionMult
Hi All, I am new to replication topic. I need few guidance here, where i worte one pseudo code. I have to deactive the list of pages through replicator api in a workflow in AEM6.5, but only if the objects in replication queue will be less than 500, means we're restricting to avoid load on replication agent incase if we're having more than 500 pages in replication queue then our workflow will not trigger or execute and show error message to authorreading the replication objects from/var/eventing/jobs/assigned/212-212-212-hashcode/com.day.cq.replication.job.publish1india/var/eventing/jobs/assigned/212-212-212-hashcode/com.day.cq.replication.job.publish2china/var/eventing/jobs/assigned/212-212-212-hashcode/com.day.cq.replication.job.publish1japan @Override public void execute (WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException { String payload = workItem.getWorkflowData().getPayload().toString();
Hello Nation, As some of you know we announced the addition of certain IPs to our blocklist as part of our ongoing efforts to combat bot activity (incase you missed here is the blog). However, following customer feedback and further investigation, we have discovered important insights we have decided to revert these changes. Reasons for Reversion Upon customers feedback our team started doing more analysis on these new IPs and identified: IP quality score – confirmed IP address was recently used by Bots. A large number of click activities – about 50K per IP address per day. Same user agent across all the IPs and does not vary with lead or subscription. Click activity at the same time as the delivered activity (sometimes recorded before the delivered activity) IP addressed are confirmed to be part of Barracuda Email Gateway Defense - https://campus.barracuda.com/product/emailgatewaydefense/doc/96023036/email-gateway-defense-ip-ranges Since these IPs
One of my fave life-simplifying moves is using a global Asset Download LP, rather than infinite separate LPs that only differ by the asset URL. You pass the asset URL as a query param (URL-encoded, of course): https://pages.example.com/getasset?asset=/whitepapers/my%20asset.pdf Then JS on the page automatically updates a Download button’s target to get that resource.[1] Similarly, a single Media Player LP can grab the video ID from the query string: https://pages.example.com/player?videoId=ABC_123z Then the corresponding video is embedded using, for example, the YouTube IFRAME embed. But in both cases you must make sure that your labor-saving dynamic page can’t be used by malicious actors to serve their assets via your domain. Securing an Asset Download LP To lock down to just your assets, simply hard-code the origin so it always goes to your server:[2] let thisURL = new URL(document.
The Adobe Champion Program recognizes Adobe Analytics experts around the world. These experts are leading the industry through sharing their skills and best practices to support fellow customers, accelerating their personal and professional growth by engaging in thought leadership opportunities, and collaborating with Adobe product teams to inform future product features and enhancements. Apply Now!
org.apache.sling.scripting.sightly.render.ObjectModel Cannot access method does anyone know why i'm getting this error?i'm working on migration for on premise AEM TO AEMaaCS.
I have a requirement where i want to change the Primary Key from internal to Auto PK.. How do i do it?If i change the key and update database structure .. i get this error message;08:00:51 - PGS-220000 PostgreSQL error: ERROR: could not create unique index "schemaName_id" DETAIL: Key (ischemaid)=(0) is duplicated. 08:00:51 - WDB-200001 SQL statement 'CREATE UNIQUE INDEX XXXXXXXXXXXXX_id ON XXXXXXXXXXXXXXX could not be executed.08:00:51 - The update of the physical structure of the database has failed08:00:51 - XSV-350122 An error occurred and the process has been stopped.
Hi All, I am trying to write a junit test case and i am unable to mock the casting of jcr session to Jackrabbit session. Here is my Code :resolver = request.getResourceResolver();session = resolver.adaptTo(Session.class);jcrSession = (JackrabbitSession) session;Below is my Junit : @Mock Session session; @Mock ResourceResolver resolver; @Mock JackrabbitSession jcrSession;PowerMockito.when(request.getResourceResolver()).thenReturn(resolver);PowerMockito.when(resolver.adaptTo(Session.class)).thenReturn(session);PowerMockito.when((JackrabbitSession) session).thenReturn(jcrSession); // i am getting error at this pointwhen i am trying to do this, i am getting "java.lang.ClassCastException"Below is the error:java.lang.ClassCastException: $javax.jcr.Session$$EnhancerByMockitoWithCGLIB$$b9cd1700 cannot be cast to org.apache.jackrabbit.api.JackrabbitSessionI have mocked my session and resolver objects but still i am getting the error. Please help me in Mocking this for my ju
Hi everyone, On our project, we noticed an issue with some OOTB object - com.day.cq.tagging.Tag.find.It produces next query:select [jcr:path], [jcr:score], * from [cq:Taggable] as a where [cq:tags] in('ctt', '/content/cq:tags/default/ctt', 'default:ctt') and isdescendantnode(a, '/') Query explanation reportExecution plan:[cq:Taggable] as [a] /* lucene:cqTaggableLucene(/oak:index/cqTaggableLucene) cq:tags:ctt cq:tags:/content/cq:tags/default/ctt cq:tags:default:ctt where ([a].[cq:tags] in('ctt', '/content/cq:tags/default/ctt', 'default:ctt')) and (isdescendantnode([a], [/])) */Logs:Parsing JCR-SQL2 statement: explain select [jcr:path], [jcr:score], * from [cq:Taggable] as a where [cq:tags] in('ctt', '/content/cq:tags/default/ctt', 'default:ctt') and isdescendantnode(a, '/') cost using filter Filter(query=explain select [jcr:path], [jcr:score], * from [cq:Taggable] as a where [cq:tags] in('ctt', '/content/cq:tags/default/ctt', 'default:ctt') and isdescendantnode(a, '/'), path=/
I have workflow "torrid-pdp-top-sheet" which does not have any process steps which contains query, but I am getting below error: 04.05.2023 05:54:34.559 *INFO* [JobHandler: /var/workflow/instances/server2/2023-05-03/torrid-pdp-top-sheet_414:/content/dam/torrid/pdp-assets/197/314/19731487] org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex Change in index version detected. Query would be performed without offset04.05.2023 05:55:11.175 *WARN* [JobHandler: /var/workflow/instances/server2/2023-05-03/torrid-pdp-top-sheet_414:/content/dam/torrid/pdp-assets/197/314/19731487] org.apache.jackrabbit.oak.plugins.index.search.spi.query.FulltextIndex$FulltextPathCursor Index-Traversed 10000 nodes with filter Filter(query=select [jcr:path], [jcr:score], * from [cq:Workflow] as a where [status] = 'RUNNING' and isdescendantnode(a, '/') order by [startTime] desc /* xpath: /jcr:root//element(*,cq:Workflow)[@status='RUNNING'] order by @startTime descending */, path=//*, property=[sta
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.