Monday, 11 December 2017

Creating a HTL Repeating Data Set 6.3 Component that uses Sling Models

You can create an Adobe Experience Manager 6.3 HTL component that displays repeating information that can be set by an AEM author during design time. For example, consider a typical on-line section of a sports site. Each section of the HTL component can list a story includes:
  • a digital asset (located in the Experience Manager DAM)
  • a heading
  • text
The following illustration shows an Experience Manager HTL component listing various sport stories about a youth football club.



The multi-field in this article has the following fields based on Granite/Coral data types:
  • A text field based on granite/ui/components/coral/foundation/form/textfield.
  • A path field based on granite/ui/components/coral/foundation/form/pathfield.
  • A textarea picker based on granite/ui/components/coral/foundation/form/textarea.

This development article steps you through how to build an AEM 6.3 HTL component by using an AEM Maven Archetype 11 project and a Sling Model. 

To read this development article, click   https://helpx.adobe.com/experience-manager/using/aem63_htl_repeat_slingmodel.html



Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 6 December 2017

Congratulations Ratna Kumar Kotla - our 2017 AEM Community Member of the year

I want to extend my congratulations to Ratna Kumar Kotla - our 2017 AEM Community Member of the year winner. Ratna is a very involved AEM Community member and has helped countless AEM Developers. He has contributed code used for use in HELPX articles, answered many AEM Forum questions, and has tested most of our 2017 HELPX articles to make sure they work.

This year, we are very pleased to award Ratna with a laptop computer.


From all of the Adobe Experience Cloud Community team - we want to congratulate you!

Read Ratna's Journey of becoming a top  community member here


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Sunday, 3 December 2017

Creating a Granite/Coral Multi field HTL component for Adobe Experience Manager

You can create an Adobe Experience Manager (AEM) 6.3 Touch UI component that uses a Granite/Coral multi-field. That is, you can use a Granite/Coral multi-field data type to build a dialog that lets an author enter information into a multi-field control in the component's dialog, as shown in this illustration.


A Granite multi-field is based on granite/ui/components/foundation/form/multifield.  To learn how to work with a Granite multi-field, see http://scottsdigitalcommunity.blogspot.ca/2017/08/creating-aem-html-template-language-63.html

A Granite/Coral multi-field is based on  granite/ui/components/coral/foundation/form/multifield. There are several advantages to working with  Granite/Coral multi-field. For one thing, you do not need to write a JS script or use the ACS-Commons package.

However, there are also some differences too. One important difference to understand is how the data is stored in the JCR. By default, Granite/Coral multi-field data is stored as child nodes, as shown in the illustration. Notice that each multi-field is a separate node, as shown here. 


This changes the way you read the multi-field data when using Java business logic. In this example, item0 represents the first multi-field and item1 represents the second field. The properties of these nodes represents the values that the author entered into the dialog. 

You can develop Java business logic in a WCMUsePojo class to read the dialog values and then display the data in the HTL component. This is covered in this development article. 


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Tuesday, 21 November 2017

Creating an Experience Manager 6.3 HTL Component that displays data from a SOAP Web Service

You can create an Adobe Experience Manager (AEM) 6.3 HTML Template Language (HTL) component that displays data retrieved from a third-party web service. An HTL component can dynamically display a different data set based upon the return value of SOAP web service. For example, assume you want to display cities located in a Country. Using a HTL component dialog, you can specify the Country, such as the United States, and the number of cities to return. A web service call is made from the Java part of the HTL component and the result set is displayed in the HTL component, as shown in the following illustration.


The Country and the number of cities to return are specified by the HTL component dialog, as shown here. 



This article shows you how to work with Sling Models and an AEM 6.3 HTL component to invoke a third-party SOAP based web service. To read this development article - click: 


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 15 November 2017

Creating a FavIcon for an Adobe Experience Manager 6.3 Site

You can create a Favicon for an Adobe Experience Manager site. A Favicon is typically an icon associated with a specific site and appears in the web browser tab. For more information, see  Favicon.

If a site does not have a Favicon, the tab in the browser does not display an image, as shown in this illustration.


In contrast, when a site has a Favicon, it appears in the browser tab, as shown here.


To add a Favicon to an Experience Manager site, there are several steps that you must perform. This article covers these steps. 




Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 8 November 2017

November 2017 Session of Ask the AEM Community Experts

Date:

Tuesday, November 28, 2017
11:00 AM EST to 12:00 PM
https://communities.a­dobeconnect.com/aemte­ch/

Speaker:
Bertrand de Coatpont

Topic:
More enterprises are using online community experiences, to build upon their brands. They provide a venue where community members can share and learn with their peers.In this Ask the Expert session you will learn how to set up a community site in hours rather than weeks,via a wizard-driven templated approach to cover a variety of initial use cases. AEM Communities also provides the ability to further customize these new community sites via WCM Sites capability. Join us to learn how to leverage the powerful authoring interface to build a vibrant customer community and learn the tools to keep your fan base engaged long after launch.

To watch this session - click http://bit.ly/ATACENov17.

Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 1 November 2017

Exporting Adobe Experience Manager Data Using Sling Model Exporters

You can create an Experience Manager Sling Model Experter to export Experience Manager data as JSON. You can invoke a Sling Model Exporter by using a HTTP Restful call and get back data. For example, assume that you want to get details of an image component located in the We Retail site located here:

http://localhost:4502/editor.html/content/we-retail/us/en/experience.html 

The following illustration shows the image component.


You can use a Sling Model Exporter to get component details that are returned within JSON, as shown in the following illustration.  


To invoke the Sling Model Exporter, you can use this URL:

http://localhost:4502/content/we-retail/us/en/experience/jcr:content/root/responsivegrid/heroimage.model.tidy.json

The data is retrieved from the AEM JCR located here:

/content/we-retail/us/en/experience/jcr:content/root/responsivegrid/heroimage

The following illustration shows this node.


You can create a Sling Model Exporter by using Java APIs located in the org.apache.sling.models.annotations package. To read this development article, click:      https://helpx.adobe.com/experience-manager/using/aem63_sling_model_exporter.html


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Tuesday, 24 October 2017

Creating a Tab layout component for Adobe Experience Manager

You can create an Adobe Experience Manager HTL component that displays data within a tab layout style. By developing a tab layout component, you can organize your data under tabs. That is, a web site visitor can click on a tab on the web page to see different data set. Notice the following illustration displays an AEM component with four tab headings: Home Page, Career Section, Contact Us, and About US.

This development shows use of the JS USE API. To read this development article, click https://helpx.adobe.com/experience-manager/using/htl_tab_component.html.


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Tuesday, 10 October 2017

Creating a Mail List Component for the Experience Manager Toy Store Site

You can create Adobe Experience Manager custom components that function as Mail Sign Up  components. An Mail Sign Up component lets web site visitors sign up to a mailing list that typically includes emailing out newsletters. In this article, the Mail List component is added to the Experience Manager Toy Store site.


When the user fills in the fields and clicks the Submit button, the data is persisted in a relational database by using a DataSourcePool


This development article discusses how to inject a DataSourcePool service into an AEM service to which an HTL component submits data. By injecting a DataSourcePool, your service can connect to a relational database such as MySQL.  

This article shows use of the following AEM technologies: 

1. Build a HTL component that can submit data to a back-end service. 
2. Use Sling Models with an HTL component. 
3. How to inject a DataSourcePool into an AEM 6.3 service. 
4. How to use the org.osgi.service.component.annotations.Component package to write an AEM Servlet.



Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Thursday, 5 October 2017

Ask the AEM Community Experts for October

Sign up for this month's Ask the AEM Community Experts.

Here are the Details:

Date
Tuesday, October 31, 2017
11:00 AM to 12:00 AM

Topic:
The ability to create custom components is a very important use case when working with Adobe Experience Manager. The preferred language to create custom component is HTL. This session will present a Deep Dive when working with HTL and will cover such topics as working with Sling Models, the Java USE API, how to deal with collections to build rich custom components meant for Experience Manager web sites.

Presenters:
Shivani Garg, AEM Developer
Saurabh Gupta, AEM Developer




Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Thursday, 28 September 2017

Using an WCMUsePojo class to populate an Experience Manager Touch UI Select Field

You can create an Adobe Experience Manager (AEM) 6.3 Touch UI component that contains a drop-down control that can be used within the AEM Touch UI view. The data type of the drop-down field is /libs/granite/ui/components/foundation/form/select.

An AEM author selects drop-down values during design time. For example, an author can select a country from the drop-down field, as shown in this illustration.



You can populate a drop-down field by using a com.adobe.granite.ui.components.ds.DataSource object. For information, see DataSource.

Furthermore, you can create this object in a Java WCMUsePojo class and use HTL to invoke it. That is, get the values defined in the DataSource object. Finally you can bind the resource type of the HTL code to the dialog node that represents the drop-down field.

This development article steps your through how to use a DataSource object, a Java Map collection object, and HTL to populate a drop-down field in an AEM 6.3 component.

To read this development article, click https://helpx.adobe.com/experience-manager/using/aem63_datasource.html


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 27 September 2017

Setting Maximum items in an Experience Manager 6.3 Multifield

You can create an Adobe Experience Manager (AEM) 6.3 Touch UI component that can be used within the AEM Touch UI view. Furthermore, you can use the AEM HTML Template Language (HTL - formally known as Sightly) to develop the AEM component. For example, consider an author whom enters information into a multi-field control in the component's dialog, as shown in this illustration.


In the previous illustration, notice that the Page Name and Path controls are used within a multifield control. When an author clicks the Add Field button, a new area that contains a Page Name, Path and Flag control appears. This lets an author dynamically enter as many values as required into the dialog.

Sometimes you may have a requirement to set a limit of the number of multifield items that an author can set. When the author attempts to go over the limit, a message appears, as shown in this illustration. 


This development article discusses how to use script to set the maximum number of multifield items an AEM author can set in a Touch UI component dialog. To read this development article, click https://helpx.adobe.com/experience-manager/using/multifield_aem63_setlimit.html.


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 20 September 2017

Creating Personal Experiences using Experience Manager and Target

When working with Adobe Experience Manager and Adobe Target to create personalization use cases, you can use Experience fragments to change the content that is displayed. Experience Fragments are a new feature introduced in AEM 6.3. They allow content authors to reuse content across channels including Sites pages and 3rd party systems. For more information, see Using AEM Experience Fragments.

Using Experience Fragments, you can display content based on the audience. For example, some users may see this content.


While others see this content. 


Using Adobe Target, you can setup personalization use cases. This article steps you through how to setup personalization use cases using Experience Fragments, Experience Manager, and Adobe Target. 



Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Wednesday, 13 September 2017

Ask the AEM Community Experts for Sept 2017

September 2017 – Ask the AEM Community Expert Session


Topic: Best practices for working with ContextHub in Adobe Experience Manager

Speaker: Varun Mitra, Training Instructor/Developer, Worldwide Field Enablement Adobe

ContextHub is a framework for storing, manipulating, and presenting context data. The client-side JavaScript API enables you to access the data for personalizing content. Join Varun Mitra, on Tuesday September 26th at 8:00 AM PDT for an in depth look at best practices for working with ContextHub , and how to use a data layer in an AEM Sites.

To watch this session -- click:


http://bit.ly/917AtACE


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Monday, 11 September 2017

Creating a custom Touch UI Grid Component for Adobe Experience Manager

You can develop a custom Adobe Experience Manager (AEM) Touch UI grid component to address your business requirements. An AEM grid control component lets an AEM author split the content in the main panel of the web-page into multiple columns. Using a component dialog, an author defines the number of columns required and then create, delete, or move content within each of the columns.


Using a custom Grid control, an AEM author can specify different width options by using a dialog.


This grid component uses Bootstrap.  To read this development article, click https://helpx.adobe.com/experience-manager/using/bootstrap_grid.html

NOTE: This development article shows an example of using a HTL component with Sling Models. 

Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel. 

Friday, 8 September 2017

Creating an Adobe Experience Manager 6.3 Project using Adobe Maven Archetype 11

You can create AEM 63 projects by using Adobe Maven Archetype 11.  This development article walks you through creating an AEM 6.3 project by using Archetype 11 and explains the default AEM files and services that are created.

The following illustration represents a default page that is created.



Under the Service Component section in the above illustration, notice the values that are displayed.

HelloWorldModel says:
 Hello World!
 This is instance: fe95f477-e525-432b-9fed-9d65dba3f5d2
 Resource type is: aem10/components/content/helloworld


These values are returned by a default AEM service. Once you understand all of the files and services that are created by Maven, you can use this project as starting point for your AEM 6.3 projects.

To read this development article, click https://helpx.adobe.com/experience-manager/using/maven_arch11.html.


Join the Experience League

To become an Experience Business, you need more than just great tools and online help. You need a partner. Experience League is a new enablement program with guided learning to help you get the most out of Adobe Experience Cloud. With training materials, one-to-one expert support, and a thriving community of fellow professionals, Experience League is a comprehensive program designed to help you become your best.

Join the Adobe Experience League by clicking this banner.




I (Scott Macdonald) am a Senior Experience League Community Manager at Adobe Systems with 20 years in the high tech industry. I am also a programmer with knowledge in Java, JavaScript, C#,C++, HTML, XML and ActionScript. If  you would like to see more AEM or other end to end articles like this, then leave a comment and let me know what content you would like to see.

Linked In: http://www.linkedin.com/in/scottmacdonald2010

YouTube: Subscribe to the AEM Community Channel.