<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.rws.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tridion developer articles and tutorials</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog</link><description>Useful articles and tutorials</description><dc:language>en-US</dc:language><generator>Telligent Community 12 Non-Production</generator><item><title>Write Deployer extension as add-on for Tridion sites</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/write-deployer-extension-as-add-on-for-tridion-sites</link><pubDate>Wed, 15 Jan 2025 15:38:52 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:9dec6815-ea72-4c15-9dde-5a47544adbc1</guid><dc:creator>Neetesh Narvaria</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10818</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/write-deployer-extension-as-add-on-for-tridion-sites#comments</comments><description>&lt;p&gt;To Write deployer extension for Tridion Sites with following steps&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a custom step class which implements &amp;quot;ExecutableStep&amp;quot; (com.sdl.delivery.deployer.api.processing.pipeline.ExecutableStep) interface&lt;ul&gt;
&lt;li&gt;interface is available on udp-deployer-api-x.x.x-xxxx.jar which can be found on maven repo or in the deployer service installation directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Override methods in CustomStep class&lt;ul&gt;
&lt;li&gt;configure
&lt;pre&gt; @Override&lt;br /&gt;&lt;br /&gt; public void configure(Configuration configuration) throws ConfigurationException {&lt;br /&gt;&lt;br /&gt; //this is section where we initialize step&lt;br /&gt;&lt;br /&gt; }&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;process
&lt;pre&gt; @Override&lt;br /&gt;&lt;br /&gt; public ExecutableStepResult process(ProcessingContext processingContext, StepDataProvider stepDataProvider) throws ProcessingException {&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.debug(&amp;quot;Starting ExampleExtension&amp;quot;);&lt;br /&gt;&lt;br /&gt; var location = &lt;em&gt;getPackageUnzipLocation&lt;/em&gt;(processingContext, stepDataProvider);&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.debug(&amp;quot;ExampleExtension getPackageUnzipLocation location {}&amp;quot;, location);&lt;br /&gt;&lt;br /&gt; TransportPackage transportPackage = new TransportPackage(location, stepDataProvider.getBinaryStorage());&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.debug(&amp;quot;ExampleExtension transportPackage {}&amp;quot;, transportPackage);&lt;br /&gt;&lt;br /&gt; final String action = transportPackage.getAction();&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.debug(&amp;quot;PageStateNotifier action {}&amp;quot;, action);&lt;br /&gt;&lt;br /&gt; final String transactionId = transportPackage.getTransactionId().toString();&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.debug(&amp;quot;Process Action {} for Transaction {}&amp;quot;, action, transactionId);&lt;br /&gt;&lt;br /&gt; switch (action) {&lt;br /&gt;&lt;br /&gt; case &lt;em&gt;DEPLOY_ACTION&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.info(&amp;quot;Publish action triggerred&amp;quot;);&lt;br /&gt;&lt;br /&gt; break;&lt;br /&gt;&lt;br /&gt; case &lt;em&gt;UNDEPLOY_ACTION&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.info(&amp;quot;UnPublish action triggerred&amp;quot;);&lt;br /&gt;&lt;br /&gt; break;&lt;br /&gt;&lt;br /&gt; default:&lt;br /&gt;&lt;br /&gt; &lt;em&gt;LOG&lt;/em&gt;.error(&amp;quot;Invalid action {}&amp;quot;, action);&lt;br /&gt;&lt;br /&gt; throw new ProcessingException(&amp;quot;Invalid transport package action &amp;quot; + action);&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; return null;&lt;br /&gt;&lt;br /&gt; }&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write a spring configuration&lt;ul&gt;
&lt;li&gt;configuration class should be on package &amp;quot;com.sdl.delivery.spring.configuration&amp;quot;&lt;/li&gt;
&lt;li&gt;Let&amp;#39;s name it ExampleConfiguration
&lt;pre&gt; package com.sdl.delivery.spring.configuration;&lt;/pre&gt;
&lt;pre&gt; import org.springframework.context.annotation.ComponentScan;&lt;br /&gt;&lt;br /&gt; import org.springframework.context.annotation.Configuration;&lt;/pre&gt;
&lt;pre&gt; @Configuration&lt;br /&gt;&lt;br /&gt; @ComponentScan(basePackages = {&amp;quot;org.rws.example&amp;quot;})&lt;br /&gt;&lt;br /&gt; public class ExampleConfiguration {&lt;br /&gt;&lt;br /&gt; }&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;above class allows your deployer extension to be developed on specific package for example in above ExampleConfiguration it scans package &amp;quot;org.rws.example&amp;quot; then you can implement your CustomStep on step 1 inside package &amp;quot;org.rws.example&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Please also include following minimum java libraries for development of Tridion Sites deployer extension&lt;ul&gt;
&lt;li&gt;udp-common-config-api-x.x.x-xxxx.jar&lt;/li&gt;
&lt;li&gt;udp-common-config-x.x.x-xxxx.jar&lt;/li&gt;
&lt;li&gt;udp-common-util-x.x.x-xxxx.jar&lt;/li&gt;
&lt;li&gt;udp-core-x.x.x-xxxx.jar&lt;/li&gt;
&lt;li&gt;udp-data-legacy-transport-x.x.x-xxxx.jar&lt;/li&gt;
&lt;li&gt;udp-deployer-api-x.x.x-xxxx.jar&lt;/li&gt;
&lt;li&gt;udp-deployer-web-extension-x.x.x-xxxx.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;x.x.x-xxxx denotes version of api available on installation directory of deployer service.&lt;/li&gt;
&lt;li&gt;After creating CustomStep, based on your project setup (i.e. maven or gradle) configure build steps which could generate a add-on package file in zip.&lt;/li&gt;
&lt;li&gt;zip file contains generated jar file and dependent jars those are not available on deployer service libraries, and manifest file requires for Addon service to specify type of Add-on.&lt;/li&gt;
&lt;li&gt;you can refer maven project which is having build step to generate Addon-package &lt;a href="https://github.com/neeteshnarvaria/deployer-extension/blob/master/pom.xml"&gt;https://github.com/neeteshnarvaria/deployer-extension/blob/master/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;example maven project generates example-deployer-extension.zip&lt;/li&gt;
&lt;li&gt;after all the steps we need to configure/update deployer-conf.xml&lt;br /&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="https://itsneeteshnotebook.wordpress.com/wp-content/uploads/2025/01/deployer-installation-folder.jpg" /&gt;&lt;ul&gt;
&lt;li&gt;open in notepad and add custom pipeline after following pipelines, specifically after highlighted one in screenshot below&lt;br /&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="https://itsneeteshnotebook.wordpress.com/wp-content/uploads/2025/01/deployer-conf-pipeline.jpg" /&gt;&lt;/li&gt;
&lt;li&gt;custom pipeline
&lt;pre&gt; &amp;lt;Pipeline Id=&amp;quot;Tridion-Example-Step&amp;quot; Action=&amp;quot;Deploy,Undeploy&amp;quot; Verb=&amp;quot;Process&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;Steps&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;Step Id=&amp;quot;ExampleExtension&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/Steps&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/Pipeline&amp;gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;after configuring/update deployer-conf.xml save and close the file.&lt;/li&gt;
&lt;li&gt;add the generated package on add-on using upload&lt;br /&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/deployer_2D00_add_2D00_on_2D00_upload.jpg" /&gt;&lt;/li&gt;
&lt;li&gt;select add-on&lt;br /&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/deployer_2D00_add_2D00_on_2D00_select.jpg" /&gt;&lt;/li&gt;
&lt;li&gt;after upload on add-on it will show as &amp;quot;Pending State&amp;quot;&lt;br /&gt;&lt;img style="max-height:540px;max-width:980px;" alt=" " src="/resized-image/__size/1960x1080/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/deployer_2D00_add_2D00_on_2D00_page.jpg" /&gt;&lt;/li&gt;
&lt;li&gt;We need to restart deployer service to activate the deployer extension add-on.&lt;/li&gt;
&lt;li&gt;Deployer status should show &amp;quot;Success&amp;quot;.&lt;/li&gt;
&lt;li&gt;it is ready to use and we can check functionality by adding some logs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Refer following git repo which contains sample deployer extension having custom step: https://github.com/neeteshnarvaria/deployer-extension&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10818&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><enclosure url="https://itsneeteshnarvaria.blogspot.com/2025/01/write-deployer-extension-for-tridion.html" length="-1" type="text/html; charset=UTF-8" /><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Deployer%2bExtension">Deployer Extension</category></item><item><title>Tridion Community Releases Digital Experience Accelerator (DXA) Java 2.3</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-community-releases-digital-experience-accelerator-dxa-java-2-3</link><pubDate>Thu, 21 Mar 2024 16:04:46 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:9d8bb72a-610d-4dbb-9dca-b150d43f1184</guid><dc:creator>Philip Medcraft</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10431</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-community-releases-digital-experience-accelerator-dxa-java-2-3#comments</comments><description>&lt;p&gt;Following the announcement by&amp;nbsp;&lt;a href="/members/veluarjunan"&gt;Velmurugan Arjunan&lt;/a&gt;&amp;nbsp;&amp;nbsp;regarding the&amp;nbsp;&lt;a href="/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-community-releases-digital-experience-accelerator-dxa-net-2-3-1077168869" rel="noopener noreferrer" target="_blank"&gt;DXA .NET 2.3 release&lt;/a&gt;, we are pleased to announce the launch of our Java DXA, version 2.3. This version resolves several security vulnerabilities with 3&lt;sup&gt;rd&lt;/sup&gt; party dependencies some of which could only be resolved by moving to Spring Framework 6. This was the main motivation for this new version.&lt;/p&gt;
&lt;h2 id="mcetoc_1hpgsg7v50"&gt;Platform Support&lt;/h2&gt;
&lt;p&gt;Please refer to the compatibility matrices from:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/RWS/dxa-web-application-java?tab=readme-ov-file#compatibility-matrices" rel="noopener noreferrer" target="_blank"&gt;https://github.com/RWS/dxa-web-application-java?tab=readme-ov-file#compatibility-matrices&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1hpgsofpu1"&gt;Compatibility and Considerations&lt;/h2&gt;
&lt;p&gt;The Java DXA 2.3 coexists with its predecessor, Java DXA 2.2, providing users with flexibility and choice. However, there are important compatibility considerations to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version 2.3 is compatible with &lt;u&gt;Java 17&lt;/u&gt; running with &lt;u&gt;Spring Framework 6&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;Spring Framework 6 utilizes the new Jakarta Servlet API (replacement for the old javax.servlet API). This means that the Java DXA 2.3 is no longer compatible with Tomcat 9, so would need moving to Tomcat 10.&lt;/li&gt;
&lt;li&gt;The Java JRE and Tomcat versions would only need updating for the content delivery web application. There is no need to update the DXD/microservices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1hpgsv8373"&gt;Release Information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DXA 2.3 ships with DXD 12&lt;/li&gt;
&lt;li&gt;Support for the &amp;quot;Audience Manager&amp;quot; and &amp;quot;UGC&amp;quot; modules has been removed&lt;/li&gt;
&lt;li&gt;All the Java DXA artifacts are available from Maven Central
&lt;ul&gt;
&lt;li&gt;DXA Framework:&amp;nbsp;&lt;a href="https://central.sonatype.com/search?q=com.sdl.dxa" rel="noopener noreferrer" target="_blank"&gt;https://central.sonatype.com/search?q=com.sdl.dxa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DXA Modules:&amp;nbsp;&lt;a href="https://central.sonatype.com/search?q=com.sdl.dxa.modules" rel="noopener noreferrer" target="_blank"&gt;https://central.sonatype.com/search?q=com.sdl.dxa.modules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;Please join the community and consider contributing to further evolve the DXA. Feel free to reach out to RWS Professional Services for assistance with your upgrade projects.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10431&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA">DXA</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA%2bJava">DXA Java</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Java%2b17">Java 17</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Java">Java</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Spring%2bFramework">Spring Framework</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA%2b2-3">DXA 2.3</category></item><item><title>Tridion Community Releases Digital Experience Accelerator (DXA) .NET 2.3</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-community-releases-digital-experience-accelerator-dxa-net-2-3-1077168869</link><pubDate>Thu, 07 Mar 2024 09:24:49 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:0c97531d-0149-4a6e-93c7-6fd3cd11328a</guid><dc:creator>Velmurugan Arjunan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10427</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-community-releases-digital-experience-accelerator-dxa-net-2-3-1077168869#comments</comments><description>We are excited to announce the launch of the latest version of our Digital Experience Accelerator (DXA), version 2.3. This release brings a host of enhancements and new features to streamline your development process and enhance your digital experien...(&lt;a href="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-community-releases-digital-experience-accelerator-dxa-net-2-3-1077168869"&gt;read more&lt;/a&gt;)&lt;img src="https://community.rws.com/aggbug?PostID=10427&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>How to build custom connector using Tridion Integration framework</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/how-to-build-custom-connector-using-tridion-integration-framework</link><pubDate>Wed, 21 Feb 2024 13:28:31 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:87f2fe5a-42ce-4932-8f9f-c09c7fdfb94b</guid><dc:creator>Anand Sarangapani</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10415</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/how-to-build-custom-connector-using-tridion-integration-framework#comments</comments><description>&lt;p&gt;&lt;span id="GUID-8EBDC0BD-6B9B-4E98-A1C0-6519A6A3E055" class="ph"&gt;Tridion Integration Framework&lt;/span&gt;&lt;span&gt;&amp;nbsp;helps you to write and deploy Connectors for integrating&amp;nbsp;&lt;/span&gt;&lt;span id="GUID-CC668A9C-B11B-412F-9C1B-52F34E66421B" class="ph"&gt;Tridion Sites&lt;/span&gt;&lt;span&gt;&amp;nbsp;with third-party applications. The&amp;nbsp;&lt;/span&gt;&lt;span id="GUID-3FA5A3DF-9B93-42F9-983D-5444CBC35766" class="ph"&gt;Tridion Integration Framework&lt;/span&gt;&lt;span&gt;&amp;nbsp;is provided for the various Application Clients that it supports. The method of installation the framework may differ from client to client.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;RWS Documentation Reference : &lt;a href="https://docs.rws.com/1099777/729801/tridion-sites-10-connectors/building-a-new-custom-connector"&gt;https://docs.rws.com/1099777/729801/tridion-sites-10-connectors/building-a-new-custom-connector&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;API &amp;nbsp;reference documentation reference :&amp;nbsp; &lt;a id="" href="https://docs.rws.com/1099777/918320/tridion-sites-10-connectors/api-reference-documentation-downloads"&gt;https://docs.rws.com/1099777/918320/tridion-sites-10-connectors/api-reference-documentation-downloads&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Step 1) &amp;nbsp;Installed on your machine .NET 6. Download the .NET SDK&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:420px;max-width:562px;" alt=" " height="420" src="/resized-image/__size/1124x840/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708522183827v1.png" width="562" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 2)&amp;nbsp; Install the connector Template based on the Tridion Sites Version listed below.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:250px;max-width:565px;" alt=" " height="250" src="/resized-image/__size/1130x500/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708522242368v2.png" width="565" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 3) Open a command line and run the following command to install the template:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;dotnet new install Tridion.Connector.Template&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526734960v4.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526742442v5.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The command installs the template to your .NET Core environment. You can verify that it&amp;#39;s properly installed by running only the&amp;nbsp;dotnet new&amp;nbsp;command&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 4)&amp;nbsp; Create a folder where you want to generate a new connector project.&amp;nbsp; &amp;ndash; Example C:\Connector&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Step 5) From a command line, go to the folder you created in the previous step and run the following command:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dotnet new tridionconnector --n PROJECT_NAME&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526775808v6.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Where&amp;nbsp;PROJECT_NAME&amp;nbsp;is the name you want to use for the new project. As a best practice, we suggest you use the same name as the folder containing the project.&lt;/p&gt;
&lt;p&gt;The command builds the connector project with everything you need to build your custom connector. The project includes the following resources and samples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entity types&lt;/li&gt;
&lt;li&gt;Capability implementations&lt;/li&gt;
&lt;li&gt;Test data&lt;/li&gt;
&lt;li&gt;Icons&lt;/li&gt;
&lt;li&gt;Add-on manifest&lt;/li&gt;
&lt;li&gt;Connector configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526794311v7.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 6)&amp;nbsp; Edit the&amp;nbsp;manifest.json&amp;nbsp;file, as needed.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526806948v8.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 7)&amp;nbsp; From the command line, run the following command to generate the&amp;nbsp;Add-ons&amp;nbsp;package:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dotnet build&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526824968v9.png" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;You can also build the package from within your IDE.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 8)&amp;nbsp; &amp;nbsp;Logon to&amp;nbsp; Tridion Content Management System and Create a folder called Stubs and Copy the tcm URI &amp;nbsp;example : tcm-2-167-2&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526846821v10.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 9) Navigate to the folder where the json file is created Example : DemoConnectorConnector.json edit the file change the &amp;nbsp;value from Default Value &amp;quot;stubFolders&amp;quot;: ["tcm:4-67-2"]&amp;nbsp; to tcm-2-167-2 and Save the file&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526859712v11.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 10 ) Upload the package (as a ZIP file) to the&amp;nbsp;Add-ons&amp;nbsp;feature.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Access the Add-on URL and click on the Upload Addon Package&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526922568v12.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Upload &amp;nbsp;the &amp;nbsp;json configuration file&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526935104v13.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;access the Content Manager CME and refresh the Add-on to show the connector is activated successfully&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526945291v14.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 11 ) Logon to Content Manager and you will see the Demo Connector with few Folders and Files&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526955598v15.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526960749v16.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526965914v17.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1708526972873v18.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10415&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><enclosure url="https://community.rws.com/cfs-file/__key/telligent-evolution-components-attachments/01-95-00-00-00-01-04-15/connector.png" length="18657" type="image/png" /><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bSites%2b10">Tridion Sites 10</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Connectors">Connectors</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bIntegration%2bFramewoek">Tridion Integration Framewoek</category></item><item><title>Tridion Sites Content Manager REST API</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/content-manager-rest-api---access-and-manage</link><pubDate>Tue, 05 Dec 2023 22:18:52 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:805c2722-b24e-495a-997d-29669650239f</guid><dc:creator>Anand Sarangapani</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10376</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/content-manager-rest-api---access-and-manage#comments</comments><description>&lt;h3 id="content-manager-rest-api"&gt;&lt;span style="font-size:150%;"&gt;Content Manager REST API&lt;/span&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.rws.com/TridionSitesSwaggerUi/"&gt;Core Service.Rest API Swagger UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.rws.com/TridionSitesSwaggerUi/openapi.json"&gt;Core Service.Rest API Swagger spec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;Tridion Sites Rest API Using Swagger&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;http://hostname/ui/api-docs/&amp;nbsp;&amp;nbsp; ( CMS hostname&amp;nbsp; ) redirects to Swagger URL&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/7875.pastedimage1701815050115v13.png" /&gt;&lt;/p&gt;
&lt;p&gt;Get a list of all Publications &amp;nbsp;( No Parameters )&lt;/p&gt;
&lt;p&gt;Click on Try it Out&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/1680.pastedimage1701815061253v14.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Click on Execute&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1702313710862v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Response (Response content Type &amp;ndash; application/json)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Curl GET Request&lt;/li&gt;
&lt;li&gt;Server Response &amp;ndash; 200&lt;/li&gt;
&lt;li&gt;Response Body&lt;/li&gt;
&lt;li&gt;Response Header&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Click on Download the Out put to view the JSON Response&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;How to&amp;nbsp; generate token using postman to&amp;nbsp; access&amp;nbsp; the Tridion Sites Content&amp;nbsp; Manager API.&lt;/p&gt;
&lt;p&gt;Step 1)&amp;nbsp; Open Postman create new URL Add the following Rest API URL to get Publications&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;GET http://hostname/api/v2.0/publications&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/8877.pastedimage1701814779797v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 2) &amp;nbsp;go to Authorization Tab and Select OAuth 2.0 Type from the dropdown&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/2502.pastedimage1701814797157v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;Step 3) after you select OAuth 2.0, Enter the following details&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Token Name: Core Service Rest API&lt;/li&gt;
&lt;li&gt;Grand Type: Select (Client Credentials)&lt;/li&gt;
&lt;li&gt;Access Token URL: http://hostname/access-management/connect/token&lt;/li&gt;
&lt;li&gt;Client Authentication: Send client credentials in body&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/5226.pastedimage1701814819378v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 4)&amp;nbsp; Get Client ID and Client Secret&lt;/p&gt;
&lt;p&gt;Access the Access Management URL and click on service account&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/7382.pastedimage1701814838127v4.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Double click on Tridion Sites Content Manager API Client (admin)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/5734.pastedimage1701814848256v5.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Copy the Client ID from Access Management&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/3162.pastedimage1701814864865v6.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Click on Add Client Secret to generate the value , please delete the old value if you don&amp;rsquo;t remember and generate a new client secret&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/5238.pastedimage1701814877395v7.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Enter the Client ID and Client Secret copied from access management to Postman&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/8053.pastedimage1701814907177v8.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Step 5) Click on Get New Access Token Button&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/6305.pastedimage1701814922223v9.png" /&gt;&lt;/p&gt;
&lt;p&gt;Click on Proceed&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/8461.pastedimage1701814938065v10.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Click on Use Token&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/2185.pastedimage1701814957577v11.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Click On Send to list all publications based on the URL http://hostname/api/v2.0/publications&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/5810.pastedimage1701814988264v12.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Click On Send to list all publications based on the URL http://hostname/api/v2.0/publications&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10376&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><enclosure url="https://community.rws.com/cfs-file/__key/telligent-evolution-components-attachments/01-95-00-00-00-01-03-76/dev_5F00_rws.png" length="98120" type="image/png" /><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/RestAPI">RestAPI</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/tridon%2bsites%2b10">tridon sites 10</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Content%2bManager">Content Manager</category></item><item><title>Tridion Sites 10 - UI Extensibility Rich Text Editor</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-sites-10---ui-extensibility-rich-text-editor</link><pubDate>Fri, 03 Nov 2023 12:36:56 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:a04bb8fd-0f0a-4bcb-944c-9d6db7a3afab</guid><dc:creator>Anand Sarangapani</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10342</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-sites-10---ui-extensibility-rich-text-editor#comments</comments><description>&lt;p&gt;&lt;span&gt;Using&amp;nbsp;the example that we published to GitHub, we&amp;#39;ll go through the steps of customizing the rich text area&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;Extend Rich Text Editor&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Customization of the RTF field using custom plugin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/content-editor/rtf-plugin-color-text-addon"&gt;rtf-plugin-color-text-addon&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customization of the RTF field using built-in plugin&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/content-editor/rtf-plugin-wordcount-addon"&gt;rtf-plugin-wordcount-addon&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove wrapping paragraph for single-line text in RTF content&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/content-editor/rtf-remove-single-line-wrapping-paragraph-addon"&gt;rtf-remove-single-line-wrapping-paragraph-addon&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;TinyMCE is a rich-text editor that allows users to create formatted content within a user-friendly interface. please refer to the documentation for more details&amp;nbsp;&lt;a id="" href="https://www.tiny.cloud/docs/tinymce/6/"&gt;https://www.tiny.cloud/docs/tinymce/6/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;TinyMCE is an incredibly powerful, flexible and customizable rich text editor. This section will help configure and extend the editor by using TinyMCE plugins.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Extension Name :Customization of the RTF field using custom plugin - Color Text&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Extension Source Path :&amp;nbsp;&lt;a id="" href="https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/content-editor/rtf-plugin-color-text-addon/rtf-plugin-color-text"&gt;https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/content-editor/rtf-plugin-color-text-addon/rtf-plugin-color-text&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Commands&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;quot;npm i&amp;quot; this installs the project&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run build&amp;quot; this builds the solution&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run pack&amp;quot; this creates the package&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you wan to run the extensions from you local , please run&amp;nbsp;&lt;span&gt;&amp;quot;npm run dev&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Editor can select the color option to highlight the text , example : Blue or Pink&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1699016628891v1.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1699016769557v2.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Extension Name :Customization of the RTF field using custom plugin - Word Count&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Extension Source Path :&amp;nbsp;&lt;a id="" href="https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/content-editor/rtf-plugin-wordcount-addon/rtf-plugin-wordcount"&gt;https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/content-editor/rtf-plugin-wordcount-addon/rtf-plugin-wordcount&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Commands&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;quot;npm i&amp;quot; this installs the project&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run build&amp;quot; this builds the solution&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run pack&amp;quot; this creates the package&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you wan to run the extensions from you local , please run&amp;nbsp;&lt;span&gt;&amp;quot;npm run dev&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1699264760885v1.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10342&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><enclosure url="https://community.rws.com/cfs-file/__key/telligent-evolution-components-attachments/01-95-00-00-00-01-03-42/ES_5F00_RTF.png" length="370502" type="image/png" /><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/UI">UI</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion">Tridion</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Experience%2bSpace">Experience Space</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Extensions">Extensions</category></item><item><title>Tridion Sites 10 - UI Extensibility - Getting External Data in the Content Editor</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-sites-10---experience-space-extensibility---content-editor-external-data-select</link><pubDate>Tue, 24 Oct 2023 11:41:22 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:3bf64de8-a7b0-4afd-a0bb-b316c4fc7c40</guid><dc:creator>Anand Sarangapani</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10331</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-sites-10---experience-space-extensibility---content-editor-external-data-select#comments</comments><description>&lt;p&gt;In this article we&amp;#39;ll go through and example of pulling in External Content into the content editor. We&amp;#39;ll base this walkthrough on the examples that were published to GitHub.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;External Data Select&lt;/h2&gt;
&lt;p&gt;Extension Name : external data select&lt;/p&gt;
&lt;p&gt;Extension Source Path :&amp;nbsp;https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/content-editor/external-data-select-addon/external-data-select-field&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Commands&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;quot;npm i&amp;quot; this installs the project&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run build&amp;quot; this builds the solution&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run pack&amp;quot; this creates the package&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Upload the Add-on using add-on Manager&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/6825.pastedimage1698148150849v2.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Example: Create a Schema&amp;nbsp; with a text field and add (externalDataSelect&amp;nbsp; name under CustomURL) or add a text field on one of the existing schema&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/2605.pastedimage1698147884367v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Create a Component based on the Schema Created&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/1157.pastedimage1698148181532v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You see the external data is loaded on the defined Text Field in this case&amp;nbsp;&lt;span&gt;externalData&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10331&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bSites%2b10">Tridion Sites 10</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Experience%2bSpace">Experience Space</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Extensions">Extensions</category></item><item><title>Tridion Sites 10 - UI Extensibility - Customizing the Primary Navigation</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-sites-10---experience-space-extensibility---primary-navigation</link><pubDate>Tue, 24 Oct 2023 10:36:56 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:5f89aafc-f5ed-4a79-a936-7ffbcbde6127</guid><dc:creator>Anand Sarangapani</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10330</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tridion-sites-10---experience-space-extensibility---primary-navigation#comments</comments><description>&lt;p&gt;&lt;span&gt;Using&amp;nbsp;the example that we published to GitHub, we&amp;#39;ll go through the steps of customizing the primary navigation.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;Customize Navigation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Please refer to the&amp;nbsp;&lt;a id="" href="https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/primary-navigation"&gt;https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/primary-navigation&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This repository contains examples of extensions for Tridion Sites. It covers different extension points and also demonstrates usage of a wide range of hooks, components and utility methods.&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="312"&gt;
&lt;p&gt;Operation&lt;/p&gt;
&lt;/td&gt;
&lt;td width="312"&gt;
&lt;p&gt;Example&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="312"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Navigation item with restricted access&lt;/p&gt;
&lt;/td&gt;
&lt;td width="312"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/primary-navigation/restricted-page-addon"&gt;restricted-page-addon&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="312"&gt;
&lt;p&gt;Dynamic navigation item that depends on the async request&lt;/p&gt;
&lt;/td&gt;
&lt;td width="312"&gt;
&lt;p&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/primary-navigation/async-page-addon"&gt;async-page-addon&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="312"&gt;
&lt;p&gt;Navigation items customization&lt;/p&gt;
&lt;/td&gt;
&lt;td width="312"&gt;
&lt;p&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/primary-navigation/customize-navigation-addon"&gt;customize-navigation-addon&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="312"&gt;
&lt;p&gt;Publish transactions navigation item&lt;/p&gt;
&lt;/td&gt;
&lt;td width="312"&gt;
&lt;p&gt;&lt;a href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/primary-navigation/publish-transactions-addon"&gt;publish-transactions-addon&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="312"&gt;
&lt;p&gt;Classic UI navigation item&lt;/p&gt;
&lt;/td&gt;
&lt;td width="312"&gt;
&lt;p&gt;&lt;a id="" href="https://github.com/RWS/tridion-sites-extensions-examples/blob/main/primary-navigation/classic-ui-addon"&gt;classic-ui-addon&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Extension Name : Customize Navigation&lt;/p&gt;
&lt;p&gt;Extension Source Path :&amp;nbsp;&lt;a id="" href="https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/primary-navigation/customize-navigation-addon/customize-navigation"&gt;https://github.com/RWS/tridion-sites-extensions-examples/tree/main/sites-10-ux-update/primary-navigation/customize-navigation-addon/customize-navigation&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Commands&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;quot;npm i&amp;quot; this installs the project&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run build&amp;quot; this builds the solution&lt;/li&gt;
&lt;li&gt;&amp;quot;npm run pack&amp;quot; this creates the package&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span&gt;If you wan to run the extensions from you local , please run&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;quot;npm run dev&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Upload the package using Add-on&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/4111.pastedimage1698146913616v3.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Add-on Install Success&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/5277.pastedimage1698146925010v4.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After Installed Add-on : View the customized navigation add-on&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/7343.pastedimage1698146948323v5.png" /&gt;&lt;/p&gt;
&lt;p&gt;Disable the Add-on&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/1057.pastedimage1698146958684v6.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Access the Experience Space ( new UI)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:600px;max-width:900px;" alt=" " src="/resized-image/__size/1800x1200/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/3124.pastedimage1698146968066v7.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=10330&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bSites%2b10">Tridion Sites 10</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Experience%2bSpace">Experience Space</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Extensions">Extensions</category></item><item><title>The three ways to use the Content Delivery API (GraphQL)</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/three-ways-to-use-graphql-with-the-tridion-content-delivery-api-</link><pubDate>Wed, 02 Aug 2023 17:19:17 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:ea91e88d-cc58-4937-976a-aeff2982a722</guid><dc:creator>Alvin Reyes</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=10284</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/three-ways-to-use-graphql-with-the-tridion-content-delivery-api-#comments</comments><description>This post describes the main three ways to get content from the Dynamic Experience Delivery Content API in the context of Tridion Sites and concludes with some tips for managing hyperlinks across content. Spoiler alert: it&amp;#39;s not by manual links.
You ...(&lt;a href="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/three-ways-to-use-graphql-with-the-tridion-content-delivery-api-"&gt;read more&lt;/a&gt;)&lt;img src="https://community.rws.com/aggbug?PostID=10284&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/GraphQL">GraphQL</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bSites">Tridion Sites</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Dynamic%2bExperience%2bDelivery">Dynamic Experience Delivery</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Public%2bContent%2bAPI">Public Content API</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Good%2bPractices">Good Practices</category></item><item><title>Instant Campaign v1.3</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/instant-campaign-v1-3</link><pubDate>Fri, 23 Oct 2020 14:28:00 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:639e3ea5-fc14-43f3-8043-293972aa56d5</guid><dc:creator>Niclas Cedermalm</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=9363</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/instant-campaign-v1-3#comments</comments><description>&lt;p&gt;The new version (v1.3) of Instant Campaign is now out with support for SDL Tridion Sites 9.1/9.5 and DXA 2.2.&lt;br /&gt;It is available for download on the SDL AppStore:&amp;nbsp;&lt;a title="https://appstore.sdl.com/web-content-management/app/instant-campaign/748/" href="https://appstore.sdl.com/web-content-management/app/instant-campaign/748/" rel="nofollow noopener noreferrer" target="_blank"&gt;https://appstore.sdl.com/web-content-management/app/instant-campaign/748/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/740x480/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/6433.From_2D00_Agency_2D00_To_2D00_Site.png" /&gt;&lt;/p&gt;
&lt;p&gt;Instant Campaign makes it possible for digital agencies to create engaging campaigns with a rich experience without the need of creating custom templates in Tridion. The agency delivers the campaign as a ZIP file which is uploaded into Tridion. The Tridion editor can then edit textual content, images, links etc in the campaign. The campaign content can also be localized and sent for translation. The sweet spot for Instant Campaign is primarily for short-lived campaign pages and experience-rich product detail pages. But it can be used for any rich content to shorten the time to market without the need of involvement of IT to develop new templates.&lt;/p&gt;
&lt;p&gt;Instant Campaign is free, open-source and is fully supported by SDL. You find the source code here:&amp;nbsp;&lt;a href="https://github.com/sdl/dxa-flexible-campaign-content"&gt;https://github.com/sdl/dxa-flexible-campaign-content&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=9363&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA">DXA</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bSites%2b9">Tridion Sites 9</category></item><item><title>SDL Tridion Sites 9.5 Inline Field Validation Example</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/set-schema-constraints-working-example</link><pubDate>Fri, 24 Jul 2020 15:59:00 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:4c4c1eac-957e-47cf-80a1-a1453c9a22a5</guid><dc:creator>Alvin Reyes</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=9136</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/set-schema-constraints-working-example#comments</comments><description>If you take advantage of the inline Schema (xsd) constraints in SDL Tridion Sites 9.5&amp;#39;s&amp;nbsp;Experience Space UI, you might need an example.&amp;nbsp;

SDL Tridion Sites has long had the ability to constrain the values that&amp;nbsp;editors can enter into&amp;amp;nb...(&lt;a href="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/set-schema-constraints-working-example"&gt;read more&lt;/a&gt;)&lt;img src="https://community.rws.com/aggbug?PostID=9136&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>SDL Tridion Docs 14SP2 - Windows Authentication setup</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/sdl-tridion-docs-14sp2---windows-authentication-setup</link><pubDate>Thu, 23 Jul 2020 18:57:00 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:b483cf05-6296-4ec0-bcc5-506d270b061e</guid><dc:creator>Velmurugan Arjunan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=9134</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/sdl-tridion-docs-14sp2---windows-authentication-setup#comments</comments><description>&lt;p&gt;SDL Tridion Docs - The default system that manages user identity for Tridion Docs&amp;nbsp;is&amp;nbsp; ISHSTS (Infoshare Security Token Service), In the Post-installation SDL Tridion Docs can be enabled to authenticate uses through the customer&amp;#39;s STS system or Windows Authentication rather than Infoshare STS, In this post will explain the steps to integrate the SDL Tridion Docs with Windows Authentication, In the next article will explain about the SSO/ADFS setup for SDL Tridion Docs.&lt;/p&gt;
&lt;h3 id="SDLTridionDocs13SP3-WindowsAuthenticationsetup-TridionDocsPrerequisites"&gt;Tridion Docs Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SDL Tridion Docs System should be connected to Windows Active Directory&lt;/li&gt;
&lt;li&gt;IIS Windows Authentication feature should be enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step1:&lt;/strong&gt; Configure application server for Lightweight Windows Authentication&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;RDP to SDL Tridion Docs Installed system&lt;/li&gt;
&lt;li&gt;Take a whole Infoshare folder backup and also take the database backup&lt;/li&gt;
&lt;li class="stepexpand"&gt;Locate the PowerShell script&amp;nbsp;&lt;strong&gt;&lt;span class="filepath"&gt;SDL.ISH-ISHSTS-Configure for Windows Authentication.ps1&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;in the folder&amp;nbsp;&lt;strong&gt;&lt;span class="filepath"&gt;\InfoShare\App\Setup\STS\ISHSTS&lt;/span&gt;\Scripts&lt;/strong&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;Open PowerShell with elevated administrator privileges.&amp;nbsp;&lt;code class="msgph"&gt;Run As Administrator&lt;/code&gt;. If the PowerShell session is not running with administrator privileges, the script will launch a new session, and administrator privileges will be requested to the user.&lt;/li&gt;
&lt;li&gt;This task requires a PowerShell session with&lt;code class="ph codeph"&gt;&amp;nbsp;Execution Policy&lt;/code&gt;&amp;nbsp;set to&amp;nbsp;&lt;code class="ph codeph"&gt;Unrestricted&lt;/code&gt;.
&lt;ul&gt;
&lt;li&gt;If it is not set, you need to set it permanently by executing the following:&lt;br /&gt;
&lt;pre class="pre codeblock language-markup"&gt;&lt;code class=" language-markup"&gt;Set-ExecutionPolicy Unrestricted&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class="stepexpand"&gt;Navigate to the script folder&amp;nbsp;&lt;strong&gt;&lt;span class="filepath"&gt;\InfoShare\App\Setup\STS\ISHSTS\Scripts&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;a. &lt;strong&gt;cd \InfoShare\App\Setup\STS\ISHSTS\Scripts&lt;/strong&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;Execute script&amp;nbsp;&lt;span class="filepath"&gt;&lt;strong&gt;SDL.ISH-ISHSTS-Configure for Windows Authentication.ps1&lt;/strong&gt;&lt;/span&gt;
&lt;ul&gt;
&lt;li class="stepexpand"&gt;&lt;strong&gt;.\SDL.ISH-ISHSTS-Configure for Windows Authentication.ps1&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;pre class="codeblock language-markup"&gt;&lt;code class="language-markup"&gt;cd \InfoShare\App\Setup\STS\ISHSTS\Scripts
&amp;amp; &amp;#39;.\SDL.ISH-ISHSTS-Configure for Windows Authentication.ps1&amp;#39;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Configure the Content Manager to switch internal accounts to Windows AD accounts&lt;/p&gt;
&lt;p&gt;On Content Manager, set the following:&lt;br /&gt;User type to &amp;quot;External&amp;quot;&lt;br /&gt;External ID to AD login username (domain\velmurugan)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step3:&amp;nbsp;&lt;/strong&gt;Enable Windows Authentication&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the PowerShell with administrator mode and run this below script&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;pre&gt;#Ensure windows authentication IIS feature enabled
Enable-WindowsOptionalFeature -Online -FeatureName IIS-WindowsAuthentication

$deploymentName=&amp;quot;InfoShare&amp;quot;
Set-ISHSTSConfiguration -ISHDeployment&amp;nbsp;$deploymentName&amp;nbsp;-AuthenticationType&amp;nbsp;&amp;quot;Windows&amp;quot;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;br /&gt;Note:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the database is&amp;nbsp;&lt;span class="keyword"&gt;SQL Server&lt;/span&gt;&amp;nbsp;and the connection string utilizes&amp;nbsp;&lt;span class="keyword"&gt;integrated authentication&lt;/span&gt; then we need to grant the computer account permissions to the database.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.sdl.com/796504/784468/sdl-tridion-docs-14-sp2/configuring-the-content-manager-sql-server-database-for-windows-authentication" rel="noopener noreferrer" target="_blank"&gt;Configuring the Content Manager SQL Server database for Windows Authentication&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;References&lt;br /&gt;&lt;/strong&gt;&lt;a class="external-link" href="https://docs.sdl.com/796504/281691/sdl-tridion-docs-14-sp2/ishsts-with-windows-authentication" rel="nofollow noopener noreferrer" target="_blank"&gt;SDL Documentation&lt;/a&gt;&lt;br /&gt;&lt;a class="external-link" href="https://sdl.github.io/ISHDeploy/13.0/Articles/IntegrationSTS/ISHSTS/Implementing%20light%20weight%20Windows%20Authentication.html" rel="nofollow noopener noreferrer" target="_blank"&gt;PS Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;SDL Tridion Docs 14SP2 - Windows Authentication setup&lt;br /&gt;I hope it helps if you have any questions regarding post your question in Tridion StackExchange.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=9134&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Content%2bManager">Content Manager</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/tridion_2D00_docs">tridion-docs</category></item><item><title>TDS event presentation DXA 2.2 NET + Dynamic Documentation Module + SDL Tridion Docs 14 + DXD 11.1</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tds-event-presentation-dxa-2-2-net-dynamic-documentation-module-sdl-tridion-docs-14-dxd-11-1</link><pubDate>Mon, 27 Apr 2020 12:58:00 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:7cd83cf2-46ba-4980-ab89-2e69e398a80c</guid><dc:creator>Velmurugan Arjunan</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=8894</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/tds-event-presentation-dxa-2-2-net-dynamic-documentation-module-sdl-tridion-docs-14-dxd-11-1#comments</comments><description>&lt;p&gt;Tridion Developer Summit has been held at Meervaart Theater Nov 4th and 5th, I also had the opportunity to present and speak in the event,&amp;nbsp; about &lt;strong&gt;DXA 2.2 NET + Dynamic Documentation Module + SDL Tridion Docs 14 + DXD 11.1&lt;/strong&gt; and followed by Demo.&lt;/p&gt;
&lt;p&gt;The presentation can be &lt;a href="http://2019.tridiondevelopersummit.com/wp-content/uploads/2019/10/DXA-2.2-Dynamic-Documentation-Module-Presentation-TDS-2019.pdf"&gt;downlod&lt;/a&gt; it from here.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vimeo.com/377029520"&gt;DXA 22 NET + Dynamic Documentation Module + SDL Tridion Docs 14 + UDP 111&lt;/a&gt; from &lt;a href="https://vimeo.com/tridiontv"&gt;TDS&lt;/a&gt; on &lt;a href="https://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/663x302/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/ddwebapp_2D00_architecture.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introduction to Dynamic Documentation Module&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;DXA Dynamic Documentation module enables you to retrieve structured content (in the DITA standard) stored in an SDL Tridion Docs database and present it through your DXA web application.&lt;/p&gt;
&lt;p&gt;The Dynamic Documentation module includes a Dynamic Documentation web application, or more briefly the Dynamic Documentation, which provides users with a responsive interface for viewing, navigating, and interacting with content published from SDL Tridion Docs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Single-page web application designed as a documentation portal&lt;/li&gt;
&lt;li&gt;Modern, graphical user interface design&lt;/li&gt;
&lt;li&gt;Responsive design for mobile support&lt;/li&gt;
&lt;li&gt;Highly extensible and customizable&lt;/li&gt;
&lt;li&gt;Includes search and commenting capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;DXA Dynamic Documentation&amp;nbsp;prerequisites&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tridion Docs 14&lt;/li&gt;
&lt;li&gt;DXD 11.0 Supported&lt;/li&gt;
&lt;li&gt;DXD 11.1 Prefered
&lt;ul&gt;
&lt;li&gt;Discovery Service&lt;/li&gt;
&lt;li&gt;Deployer Service&lt;/li&gt;
&lt;li&gt;Content Service&lt;/li&gt;
&lt;li&gt;IQ Index Service&lt;/li&gt;
&lt;li&gt;IQ Query Service or IQ Combined service&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DXA .NET websites
&lt;ul&gt;
&lt;li&gt;Microsoft .NET Framework 4.6.2&lt;/li&gt;
&lt;li&gt;IIS or IIS Express with ASP .NET module&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GUI Building
&lt;ul&gt;
&lt;li&gt;NodeJs v6.x or higher (64bit)&lt;/li&gt;
&lt;li&gt;Webpack&lt;/li&gt;
&lt;li&gt;Gulp&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Front End
&lt;ul&gt;
&lt;li&gt;JavaScript (ES6)&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Redux&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;LESS&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;DXA DD Module Installation / configuration&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the following OOTB sources and modules from github: &lt;br /&gt;&lt;a href="https://github.com/sdl/dxa-web-application-dotnet/tree/release/2.2"&gt;https://github.com/sdl/dxa-web-application-dotnet/tree/release/2.2&lt;/a&gt; &lt;br /&gt;&lt;a href="https://github.com/sdl/dxa-modules/tree/release/2.2"&gt;https://github.com/sdl/dxa-modules/tree/release/2.2&lt;/a&gt; &lt;br /&gt;&lt;a href="https://github.com/sdl/dxa-modules/releases/download/DXA_2.2.2_Hotfix/SDL.DXA.DynamicDocumentation.Module.2.2.2.zip"&gt;https://github.com/sdl/dxa-modules/releases/download/DXA_2.2.2_Hotfix/SDL.DXA.DynamicDocumentation.Module.2.2.2.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Extract both sources zip and Go to &lt;strong&gt;dxa-modules-release-2.2\webapp-net&lt;/strong&gt; this folder and copy &lt;strong&gt;DynamicDocumentation&lt;/strong&gt; and &lt;strong&gt;Search&lt;/strong&gt; folder modules and also &lt;strong&gt;DxaModulesCommon.Props&lt;/strong&gt; file&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;dxa-web-application-dotnet-release-2.2&lt;/strong&gt; folder and paste those folders and &lt;strong&gt;DxaModulesCommon.Props&lt;/strong&gt; file here&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;DxaFramework.sln&lt;/strong&gt; and click ok to ignore the unsupported &lt;strong&gt;Sdl.Web.Documentation&lt;/strong&gt; project errror message&lt;/li&gt;
&lt;li&gt;Right click DxaFramework solution to add the following existing projects
&lt;ul&gt;
&lt;li&gt;DynamicDocumentation\Sdl.Web.Modules.DynamicDocumentation.csproj&lt;/li&gt;
&lt;li&gt;Search\Sdl.Web.Modules.Search.csproj&lt;/li&gt;
&lt;li&gt;Search\SI4T.Query.CloudSearch\SI4T.Query.CloudSearch.csproj&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Go to Sdl.Web.Site project references and then right click and add reference and then click left side Projects and select the following projects
&lt;ul&gt;
&lt;li&gt;Sdl.Web.Modules.DynamicDocumentation&lt;/li&gt;
&lt;li&gt;Sdl.Web.Modules.Search&lt;/li&gt;
&lt;li&gt;SI4T.Query.CloudSearch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Right click Sdl.Web.Modules.DynamicDocumentation project and build&lt;/li&gt;
&lt;li&gt;Once succesfull build - expand the &lt;strong&gt;Sdl.Web.Modules.DynamicDocumentation&lt;/strong&gt; project and copy the Areas folder and go to &lt;strong&gt;Sdl.Web.Site&lt;/strong&gt; project paste it in the root folder.&lt;/li&gt;
&lt;li&gt;Right click Sdl.Web.Modules.Search project and build&lt;/li&gt;
&lt;li&gt;Once succesfull build - expand the &lt;strong&gt;Sdl.Web.Modules.Search&lt;/strong&gt; project and copy the Areas folder and go to &lt;strong&gt;Sdl.Web.Site&lt;/strong&gt; project paste it in the root folder.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;SDL.Web.Site&lt;/strong&gt; and open web.config update the following configs sections
&lt;pre&gt;In the modelBuilderPipeline section, add the Dynamic Documentation model builder to the pipeline, placing it first in the list and before the Default model builder.
&lt;strong&gt;&amp;lt;add type=&amp;quot;Sdl.Web.Modules.DynamicDocumentation.Mapping.ModelBuilder, Sdl.Web.Modules.DynamicDocumentation&amp;quot; /&amp;gt;&lt;/strong&gt;

In the appSettings section Update the Web.config to change the default module to DynamicDocumentation 
&lt;strong&gt;&amp;lt;add key=&amp;quot;default-module&amp;quot; value=&amp;quot;DynamicDocumentation&amp;quot; /&amp;gt;&lt;/strong&gt; 
Also update the following configs to as per your cusotomer environment.

&lt;strong&gt;&amp;lt;add key=&amp;quot;discovery-service-uri&amp;quot; value=&amp;quot;http://staging.dev.dxa.sdldev.net:8082/discovery.svc&amp;quot;/&amp;gt; &lt;/strong&gt;
&lt;strong&gt;&amp;lt;add key=&amp;quot;oauth-client-secret&amp;quot; value=&amp;quot;xxxx&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Update to Add the following Unity Declaration settings in Unity.config
&lt;pre&gt;&lt;strong&gt;&amp;lt;assembly name=&amp;quot;Sdl.Web.Modules.DynamicDocumentation&amp;quot; /&amp;gt;&lt;/strong&gt;
&lt;strong&gt;&amp;lt;namespace name=&amp;quot;Sdl.Web.Modules.DynamicDocumentation.Localization&amp;quot; /&amp;gt;&lt;/strong&gt;
&lt;strong&gt;&amp;lt;namespace name=&amp;quot;Sdl.Web.Modules.DynamicDocumentation.Providers&amp;quot; /&amp;gt;&lt;/strong&gt;
&lt;strong&gt;&amp;lt;namespace name=&amp;quot;Sdl.Web.Modules.DynamicDocumentation.Navigation&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Update the existing INavigationProvider type to Set Unity Type Mapping to DynamicNavigationProvider
&lt;pre&gt;&lt;strong&gt;&amp;lt;type type=&amp;quot;INavigationProvider&amp;quot; mapTo=&amp;quot;DynamicNavigationProvider&amp;quot;&amp;gt;&lt;/strong&gt;
&lt;strong&gt;   &amp;lt;lifetime type=&amp;quot;singleton&amp;quot; /&amp;gt;&lt;/strong&gt;
&lt;strong&gt;&amp;lt;/type&amp;gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Update Unity.config for IContextClaimsProvider to AdfContextClaimsProvider instead of ContextServiceClaimsProvider
&lt;pre&gt;&lt;strong&gt;&amp;lt;type type=&amp;quot;IContextClaimsProvider&amp;quot; mapTo=&amp;quot;AdfContextClaimsProvider&amp;quot;&amp;gt;&lt;/strong&gt;
&lt;strong&gt;   &amp;lt;lifetime type=&amp;quot;singleton&amp;quot; /&amp;gt;&lt;/strong&gt;
&lt;strong&gt;&amp;lt;/type&amp;gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Go to Site project root folder and create this folder path &lt;strong&gt;&lt;strong&gt;\system\assets\gui New-Item -Path &amp;quot;.\system\assets\gui&amp;quot; -ItemType Directory | Out-Null &lt;/strong&gt;&lt;/strong&gt;Copy the gui folder from DDMoudle\web\ to your project and go to gui root folder and run this below commands &lt;strong&gt;npm install -registry https://nexus.sdl.com/content/groups/npm/ &lt;/strong&gt; &lt;strong&gt;npm run-script build&lt;/strong&gt;&lt;strong&gt;Copy the dist\assets folder to \system\assets\gui in website&lt;/strong&gt;Copy &lt;strong&gt;cd_ambient_conf.xml&lt;/strong&gt; config to keep in the website &lt;strong&gt;bin\config&lt;/strong&gt; folder (File can be copied from SDL Tridion Sites Installation Media &lt;strong&gt;\Content Delivery\roles\api\rest\dotnet\config\cd_ambient_conf.xml&lt;/strong&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Installing the Search module in the web application&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Unity.config to update to add the following config sections&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;Add UnityDeclaration:
&lt;strong&gt;&amp;lt;assembly name=&amp;quot;Sdl.Web.Modules.Search&amp;quot; /&amp;gt; &lt;/strong&gt;
&lt;strong&gt;&amp;lt;namespace name=&amp;quot;Sdl.Web.Modules.Search.Providers&amp;quot; /&amp;gt;&lt;/strong&gt;

Set UnityTypeMapping:
&lt;strong&gt;&amp;lt;type type=&amp;quot;ISearchProvider&amp;quot; mapTo=&amp;quot;IQSearchProvider&amp;quot; /&amp;gt;&lt;/strong&gt;

Update web.config to add elastic index name
&lt;strong&gt;&amp;lt;add key=&amp;quot;iq-search-index&amp;quot; value=&amp;quot;udp-index&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Documentation GUI&lt;/strong&gt; &lt;b&gt;Building&lt;/b&gt; In order to build make sure you have &lt;b&gt;Node.js&lt;/b&gt; installed (v6 or higher). Installing the necessary packages&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;npm install gulp-cli -g
&lt;/strong&gt;&lt;strong&gt;npm install&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Gulp &lt;/b&gt;&lt;b&gt;tasks&lt;/b&gt;&lt;/p&gt;
&lt;pre&gt;# Build (debug)
&lt;strong&gt;gulp build&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;# Build everything and setup a server (debug)
&lt;strong&gt;gulp serve&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;# Build everything and setup a server (release)
&lt;strong&gt;gulp serve:dist&lt;/strong&gt;&lt;/pre&gt;
&lt;pre&gt;# Build (release)
&lt;strong&gt;gulp&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; For a&amp;nbsp;DXA for Dynamic Documentation&amp;nbsp;implementation, you must install at least the&amp;nbsp;Dynamic Documentation module. All other modules are optional.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I hope it helps if you have any questions regarding post your question in Tridion StackExchange.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=8894&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXD">DXD</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA%2b2-2">DXA 2.2</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA-Net">DXA.Net</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Docs">Docs</category></item><item><title>Developing connectors using the new Tridion Integration Framework</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/developing-connectors-using-the-new-tridion-integration-framework</link><pubDate>Mon, 30 Mar 2020 07:44:00 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:9e27eb5a-e449-4b2d-acd8-d167625579be</guid><dc:creator>Niclas Cedermalm</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=8863</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/developing-connectors-using-the-new-tridion-integration-framework#comments</comments><description>&lt;p&gt;This blog post will describe how you can get started to develop connectors using the Tridion Integration Framework. It will describe step-by-step on how you generate connector projects for Java and .NET and how to install &amp;amp; configure connectors.&lt;/p&gt;
&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;The Tridion Integration Framework (TIF) is a new framework for writing connectors on the SDL Tridion DX platform. It was first&amp;nbsp;made available in SDL Tridion Sites 9.1. Currently we are looking into how to make the framework available for SDL Tridion Docs as well.&lt;/p&gt;
&lt;p&gt;TIF is agnostic framework that allows deployment both&lt;span&gt;&amp;nbsp;on Content&amp;nbsp;Management and the Dynamic Experience Delivery (DXD) side. The framework is also agnostic to programming languages. Currently C# and Java is supported, but other languages might be supported in future versions.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Tridion Integration Framework" src="/resized-image/__size/960x720/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/8372.TIF_2D00_architecture.png" /&gt;&lt;/p&gt;
&lt;p&gt;In SDL Tridion Sites 9.1 you can&amp;nbsp;write connectors that can be consumed by External Content Library (ECL) and the Public Content API (PCA). More extension points will follow. Via the ECL extension point&amp;nbsp;connectors will&amp;nbsp;&lt;span&gt;appear as a mountpoint on the same level as Tridion native content in the Tridion Content Manager. This allows you to consume external content, multimedia &amp;amp; other external data in the same way you do with native content. In PCA the connector will be exposed through GraphQL allowing you to perform various CRUD, list and search requests towards the external system/service.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There are currently commercial TIF connectors available to Aprimo DAM, SAP Commerce Cloud and Salesforce CRM. More are&amp;nbsp;coming later this year.&lt;/p&gt;
&lt;h1&gt;Installing Connectors&lt;/h1&gt;
&lt;p&gt;To install connectors is very easy, thanks to the new Add-on Service introduced in SDL Tridion Sites 9.1. What you need is the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A ZIP file containing the connector DLLs/JARs + a manifest that described the connector (name, version, description, author etc)&lt;/li&gt;
&lt;li&gt;A JSON configuration that holds configuration of the connector (endpoint, credentials etc) and in which environment it should be installed (for example Content Manager, Staging DXD etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ZIP file you then upload to the Add-on service. The manifest information are used to identify the connector and display information about it. After successful upload the connector is shown in the list of installed add-ons.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/960x720/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/2526.Screenshot-2020_2D00_03_2D00_30-at-14.39.33.png" /&gt;&lt;/p&gt;
&lt;p&gt;As the connector needs configuration before it can be used by any parts of the system, a JSON configuration file needs to be uploaded as well. The JSON configuration has the following format:&lt;/p&gt;
&lt;pre&gt;{&lt;br /&gt;&amp;nbsp; &amp;quot;configuration&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;Connector name&amp;gt;&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;configuration&amp;quot;: { &lt;br /&gt;         &amp;lt;Generic configuration for all environments&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;quot;&amp;lt;Environment name, e.g. sitesCm, staging&amp;gt;&amp;quot;: { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;isEnabled&amp;quot;: &amp;lt;true/false&amp;gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;Connector name&amp;gt;&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;namespaces&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;lt;Connector namespace&amp;gt;&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Environment specific configuration that overrides generic configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;  ...&lt;br /&gt;} &lt;/pre&gt;
&lt;p&gt;Each connector can deploy one or several namespaces, where each namespace can have its own unique configuration like endpoints, different repositories etc. In ECL this maps to different mountpoints. In GraphQL you use namespaces to scope your queries.&lt;/p&gt;
&lt;p&gt;Example configuration (taken from the SAP Commerce Cloud connector configuration):&lt;/p&gt;
&lt;pre&gt;{&lt;br /&gt;&amp;nbsp; &amp;quot;configuration&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;HybrisCommerce&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;configuration&amp;quot;:&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;pageSize&amp;quot;: 100,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;quot;sitesCm&amp;quot;: { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;isEnabled&amp;quot;: true,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;HybrisCommerce&amp;quot;: {&lt;br /&gt;      &amp;quot;namespaces&amp;quot;: {&lt;br /&gt;        &amp;quot;hybris&amp;quot;: {&lt;br /&gt;          &amp;quot;displayName&amp;quot;: &amp;quot;Hybris&amp;quot;,&lt;br /&gt;          &amp;quot;stubFolders&amp;quot;: ["tcm:2-71-2"],&lt;br /&gt;          &amp;quot;privilegedUserName&amp;quot;:&amp;quot;Administrator&amp;quot;,&lt;br /&gt;          &amp;quot;configuration&amp;quot;: {&lt;br /&gt;            &amp;quot;url&amp;quot;: &lt;a href="https://stage-hybris.company.com:9002"&gt;&amp;quot;https://stage-hybris.company.com:9002&amp;quot;,&lt;/a&gt;&lt;br /&gt;            &amp;quot;clientId&amp;quot;: &amp;quot;tridionapi&amp;quot;,&lt;br /&gt;            &amp;quot;clientSecret&amp;quot;: &amp;quot;secret&amp;quot;&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;quot;dxd-staging&amp;quot;: { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;isEnabled&amp;quot;: true,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;HybrisCommerce&amp;quot;: {&lt;br /&gt;      &amp;quot;namespaces&amp;quot;: {&lt;br /&gt;        &amp;quot;hybris&amp;quot;: { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;quot;configuration&amp;quot;: {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;url&amp;quot;: &lt;a href="https://stage-hybris.company.com:9002"&gt;&amp;quot;https://stage-hybris.company.com:9002&amp;quot;,&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;clientId&amp;quot;: &amp;quot;tridionapi&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;clientSecret&amp;quot;: &amp;quot;secret&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }&lt;br /&gt;        }&lt;br /&gt;    &amp;nbsp; }&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  &amp;quot;dxd-live&amp;quot;: {&lt;br /&gt;    &amp;quot;isEnabled&amp;quot;: false&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;So each environment (Content Manager, DXD staging, DXD live etc) can have its own configuration or use a common one. In addition each namespace can have its own configuration as well, which means there can be three different levels of configurations.&lt;/p&gt;
&lt;p&gt;More information on connector manifest files &amp;amp; configuration format:&lt;br /&gt;&lt;a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-64B2DE72-6024-45D5-8727-C66C2BF841A3"&gt;https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-64B2DE72-6024-45D5-8727-C66C2BF841A3&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-699C9AC1-76DD-4D77-B535-FCC80ED9171D"&gt;https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-699C9AC1-76DD-4D77-B535-FCC80ED9171D&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-604E96A9-2F3E-4CDC-BC0D-B6AACEC7E2B7"&gt;https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-604E96A9-2F3E-4CDC-BC0D-B6AACEC7E2B7&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After the configuration has been uploaded to the Add-on Service, the connector is deployed in ECL and PCA. ECL will pickup the connector and deploy it on-the-fly, while the PCA service needs to be restarted to get the connector deployed.&lt;/p&gt;
&lt;h1&gt;Connector Templates&lt;/h1&gt;
&lt;p&gt;The next-coming sections will go through the steps to generate fully functional connector projects for .NET and Java using templates available in the NuGet/Maven public repositories. After completed the below steps you can use the connector right&amp;nbsp;&lt;span&gt;away, as it comes with some dummy data. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Writing .NET Connectors&lt;/h2&gt;
&lt;p&gt;There is .NET Core template available for TIF connectors. You need to have .NET Core SDK 2.2 or higher installed on your machine. To install the template on your machine you do the following:&lt;/p&gt;
&lt;pre class="codeblock language-markup"&gt;&lt;code class=" language-markup"&gt;dotnet new --install Tridion.Connector.Template&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;You can verify that it&amp;#39;s properly installed by running only the&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="codeph"&gt;dotnet new&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;command.&amp;nbsp;&lt;/span&gt;After this you are ready to create new connector projects using this template by using the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-33EA0237-D7BD-4EF3-9EA5-4AA352E99AFB"&gt;From a command line, go to a folder where you want the connector project generated and run the following command:&lt;/span&gt;
&lt;pre class="codeblock language-markup"&gt;&lt;code class=" language-markup"&gt;dotnet new tridionconnector --n &amp;lt;connector name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Where&amp;nbsp;&lt;i&gt;&amp;lt;connector name&amp;gt;&lt;/i&gt;&amp;nbsp;is the name you want to use for the new project. The command builds the connector project with everything you need to build your connector. The project includes the following resources and samples:&lt;/p&gt;
- Entity types (exposed data models)&lt;br /&gt;- Connector capability implementations (e.g. get data, list data, search, create new)&lt;br /&gt;- Test data&lt;br /&gt;- Icons&lt;br /&gt;- Add-on manifest&lt;br /&gt;- Connector configuration&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-8F4886B0-603E-41B3-817B-8CBE89021B03"&gt;Edit the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="filepath"&gt;manifest.json&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file, as needed.&lt;/span&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;If using .NET Core 3.1&amp;nbsp;or higher you need to modify the the &amp;lt;connector name&amp;gt;.csproj file and modify the &amp;#39;PublishWithoutBuilding&amp;#39; target. The &amp;#39;GeneratePublishRuntimeConfigurationFile&amp;#39; dependency needs to be removed from the target:&lt;br /&gt;
&lt;pre&gt;&amp;lt;Target Name=&amp;quot;PublishWithoutBuilding&amp;quot; DependsOnTargets=&amp;quot;ResolveReferences;&lt;br /&gt;ComputeAndCopyFilesToPublishDirectory;GeneratePublishDependencyFile;&lt;br /&gt;&lt;span style="text-decoration:line-through;"&gt;GeneratePublishRuntimeConfigurationFile&lt;/span&gt;&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-842C865A-7CB3-4AF7-B5D4-C4F3B78C8A78"&gt;From the command line, run the following command to generate the Add-ons package.&lt;/span&gt;
&lt;pre class="codeblock language-markup"&gt;&lt;code class=" language-markup"&gt;dotnet build&lt;/code&gt;&lt;/pre&gt;
&lt;div class="note" id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-4409D0FB-BFC2-4401-B644-D3CC405C2E5F"&gt;&lt;span class="notetitle"&gt;Note:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;You can also build the package from Visual Studio, IntelliJ Rider etc.&lt;/div&gt;
&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-26A94FAA-0318-4C9E-8C32-88A447992B59"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-26A94FAA-0318-4C9E-8C32-88A447992B59"&gt;Upload the package (as a ZIP file) to the Add-on Service (you find it in the generated &amp;#39;AddonPackage&amp;#39;-folder).&lt;/span&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-D47C7483-9EFC-476A-9394-A23D82C1D5E5"&gt;Open the&lt;span&gt;&amp;nbsp;&amp;lt;connector name&amp;gt;&lt;/span&gt;&lt;span class="filepath"&gt;.json&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;configuration file that is created from the template, and edit the configuration, as needed. For the &amp;quot;sitesCm&amp;quot;&lt;/span&gt;&amp;nbsp;part (used by ECL),&lt;span&gt;&amp;nbsp;&lt;/span&gt;set a value for&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="codeph"&gt;stubFolders&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;where the value t&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-A4E31063-4031-4BE4-9447-0E183934940C"&gt;he URI of the folder that where ECL stubs items will be stored. You must manually create this folder, note the URI, and then specify that URI in this property.&lt;br /&gt;The template only generates configuration for ECL. If you want to test the connector in PCA you need to add the following to the configuration:&lt;br /&gt;&lt;/span&gt;
&lt;pre&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-A4E31063-4031-4BE4-9447-0E183934940C"&gt;,&amp;quot;staging&amp;quot;: {&lt;br /&gt;&lt;/span&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-A4E31063-4031-4BE4-9447-0E183934940C"&gt;&amp;nbsp; &amp;nbsp;&amp;quot;isEnabled&amp;quot;: true,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;quot;&amp;lt;connector name&amp;gt;&amp;quot;: {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;namespaces&amp;quot;: {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&amp;lt;connector namespace&amp;quot;: {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-A4E31063-4031-4BE4-9447-0E183934940C"&gt; }&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-772B0BDB-0F46-4F5D-B5D7-6A4674802575"&gt;Upload the configuration file to the details view of deployed connector in the Add-on UI.&lt;/span&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-EFE99B02-369A-4F2C-9952-52901772AE94"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-EFE99B02-369A-4F2C-9952-52901772AE94"&gt;If the Connector&amp;#39;s integration uses&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-3FB38E89-C6D4-4CAB-9593-58F05971F7E7"&gt;Public Content API&lt;/span&gt;, then restart the Content Service.&lt;/span&gt;&lt;/li&gt;
&lt;li class="stepexpand"&gt;&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-82EF4D81-65EC-4D04-A25E-32F9195415DE"&gt;If the Connector&amp;#39;s integration uses&amp;nbsp;E&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-0B689D83-49E6-4686-ABB2-D25EB5A8C4D8"&gt;CL&lt;/span&gt;, then refresh the Content Manager Explorer UI or just the current publication.&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Writing Java Connectors&lt;/h2&gt;
&lt;p&gt;There is a Maven archetype available to generate a fully functional Java TIF connector. You need to have Maven 3.x and JDK installed (JDK 8 or higher).&lt;/p&gt;
&lt;p&gt;To generate a new connector project you do as following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;Go to a folder where you want to generate a new Connector project.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;From a command line, go to a folder where you want to generate the connector and run the following command:&lt;/div&gt;
&lt;pre&gt;mvn archetype:generate&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;A list of all available Maven archetypes are shown. Type &amp;rsquo;tcf&amp;rsquo; to filter the output. The Tridion Connector Framework archetype should show up:&lt;/div&gt;
&lt;pre&gt;Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : tcf&lt;br /&gt;&lt;br /&gt;Choose archetype:&lt;br /&gt;&lt;br /&gt;1: remote -&amp;gt; com.sdl.tridion.connectorframework:tcf-archetype (Archetype to create SDL Tridion connectors)&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Enter the number (&amp;rsquo;1&amp;rsquo; in the example above) to select the connector archetype.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Select version. Normally you should pick the latest one in the list&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;After that you need to specify the following as input to the generation:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;- &lt;em&gt;groupId&lt;/em&gt; &amp;ndash; the group id to use in the generated Maven file, for example &amp;lsquo;&lt;a href="http://com.company.myconnector"&gt;com.company.myconnector&lt;/a&gt;&amp;rsquo;&lt;br /&gt;- &lt;em&gt;artifactId&lt;/em&gt; &amp;ndash; the artifact id to use in the generated Maven file, for example &amp;lsquo;myconnector&amp;rsquo;&lt;/div&gt;
&lt;div&gt;- &lt;em&gt;version&lt;/em&gt; &amp;ndash; the version to use in the generated Maven file, for example &amp;lsquo;1.0.0&amp;rsquo;&lt;/div&gt;
&lt;div&gt;- &lt;em&gt;package&lt;/em&gt; &amp;ndash; the base package for the generated Java classes. Is by default the same as the group id&lt;/div&gt;
&lt;div&gt;- &lt;em&gt;connectorName&lt;/em&gt; &amp;ndash; name of the connector. Use pascal case here, for example &amp;lsquo;MyConnector&amp;rsquo;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&amp;nbsp;After that you need to confirm the entered values by typing &amp;lsquo;Y&amp;rsquo;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The command&amp;nbsp;generated the connector project with everything you need to build your connector. The project includes the following resources and samples:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;- Entity types (exposed data models)&lt;/div&gt;
&lt;div&gt;- Connector capability implementations&amp;nbsp;&lt;span&gt;(e.g. get data, list data, search, create new)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;- Test data&lt;/div&gt;
&lt;div&gt;- Icons&lt;/div&gt;
&lt;div&gt;- Add-on manifest&lt;/div&gt;
&lt;div&gt;- Connector configuration&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Edit the manifest.json file, as needed.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;From the command line (inside the generated project), run the following command to generate the Add-ons package.&lt;/div&gt;
&lt;pre&gt;mvn package&lt;/pre&gt;
&lt;div&gt;Note: You can also build the package from IntelliJ IDEA, Eclipse etc.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Upload the package (as a ZIP file) to the Add-on Service. You find the ZIP file under the &amp;#39;target&amp;#39;-folder.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Open the &amp;lt;connector name&amp;gt;.json configuration file that is created from the template, and edit the configuration, as needed.&lt;span id="GUID-8C22847D-3B11-41CB-8050-10E8FD004031__GUID-D47C7483-9EFC-476A-9394-A23D82C1D5E5"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;For the &amp;quot;sitesCm&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;part (used by ECL),&lt;/span&gt; set a value for &lt;code&gt;stubFolders&lt;/code&gt; where the value the URI of the folder that where the ECL stub items will be stored. You must manually create this folder, note the URI, and then specify that URI in this property.&lt;br /&gt;The Java template generates configuration both for ECL and PCA.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Upload the configuration file to the details view of deployed connector in the Add-on UI.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;If the Connector&amp;#39;s integration uses Public Content API, then restart the Content Service.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;If the Connector&amp;#39;s integration uses ECL, then refresh the Content Manager Explorer UI or just the current publication.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Using the New Connector&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Via Tridion Content Manager you will see the new connector as a new mountpoint which you can navigate through the demo folders and view a few test items. The metadata of the test items can be updated as well.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img alt="Browsing the new connector via ECL" src="/resized-image/__size/960x720/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/2746.Screenshot-2020_2D00_03_2D00_30-at-16.46.50.png" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The connector is also available via the PCA GraphQL interface. You can use the embedded GraphQL client in the PCA (if it is enabled) to run the queries, which is available on the following URL: &lt;code&gt;&amp;lt;content service address&amp;gt;/cd/api/graphiql&lt;/code&gt; (for example&amp;nbsp;&lt;a href="http://tridion.sdldemo.com:8081/cd/api/graphiql"&gt;http://tridion.sdldemo.com:8081/cd/api/graphiql&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Below are a few examples of GraphQL requests that interacts with the connector. To use them in your environment you might need to modify the namespace (&amp;quot;dem&amp;quot;) and the&amp;nbsp;type names (&amp;quot;DemoFile&amp;quot; and &amp;quot;DemoFolder&amp;quot;).&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Get a single item:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;{&lt;br /&gt; externalItem(&lt;br /&gt;   identity: {&lt;br /&gt;     namespace: &amp;quot;dem&amp;quot;,&lt;br /&gt;     id: &amp;quot;file1&amp;quot;,&lt;br /&gt;     type: &amp;quot;DemoFile&amp;quot;&lt;br /&gt;   }) {&lt;br /&gt;    ... on DemoFile {&lt;br /&gt;      title&lt;br /&gt;      thumbnail&lt;br /&gt;      details {&lt;br /&gt;        length&lt;br /&gt;        numberOfAccess&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Response:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;{&lt;br /&gt;  &amp;quot;data&amp;quot;: {&lt;br /&gt;    &amp;quot;externalItem&amp;quot;: {&lt;br /&gt;      &amp;quot;title&amp;quot;: &amp;quot;File 1&amp;quot;,&lt;br /&gt;      &amp;quot;thumbnail&amp;quot;: &amp;quot;http://tridion.sdldemo.com:8081/cd/api/external/binary/dem/thumbnail/DemoThumbnail.jpg&amp;quot;,&lt;br /&gt;      &amp;quot;details&amp;quot;: {&lt;br /&gt;        &amp;quot;length&amp;quot;: 100,&lt;br /&gt;        &amp;quot;numberOfAccess&amp;quot;: 5&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;List a folder:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;{&lt;br /&gt;  externalItems(namespace: &amp;quot;dem&amp;quot;&lt;br /&gt;    filter: {&lt;br /&gt;      context: {&lt;br /&gt;        id: &amp;quot;folder1&amp;quot;&lt;br /&gt;        type: &amp;quot;DemoFolder&amp;quot;&lt;br /&gt;      }&lt;br /&gt;    }) {&lt;br /&gt;    edges {&lt;br /&gt;      node {&lt;br /&gt;        ... on DemoFile {&lt;br /&gt;          identity {&lt;br /&gt;            namespace&lt;br /&gt;            id&lt;br /&gt;            type&lt;br /&gt;          }&lt;br /&gt;          title&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Response:&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;{&lt;br /&gt;  &amp;quot;data&amp;quot;: {&lt;br /&gt;    &amp;quot;externalItems&amp;quot;: {&lt;br /&gt;      &amp;quot;edges&amp;quot;: [&lt;br /&gt;      {&lt;br /&gt;        "node": {&lt;br /&gt;          "identity": {&lt;br /&gt;            "namespace": "dem",&lt;br /&gt;            "id": "file1",&lt;br /&gt;            "type": "DemoFile"&lt;br /&gt;          },&lt;br /&gt;          "title": "File 1"&lt;br /&gt;        }&lt;br /&gt;      },&lt;br /&gt;      {&lt;br /&gt;        "node": {&lt;br /&gt;          "identity": {&lt;br /&gt;            "namespace": "dem",&lt;br /&gt;            "id": "file2",&lt;br /&gt;            "type": "DemoFile"&lt;br /&gt;          },&lt;br /&gt;          "title": "File 2"&lt;br /&gt;        }&lt;br /&gt;      },&lt;br /&gt;      {&lt;br /&gt;        "node": {&lt;br /&gt;          "identity": {&lt;br /&gt;            "namespace": "dem",&lt;br /&gt;            "id": "file5",&lt;br /&gt;            "type": "DemoFile"&lt;br /&gt;          },&lt;br /&gt;          "title": "File 5"&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    ]&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;For more information about the connector GraphQL requests, see:&amp;nbsp;&lt;br /&gt;&lt;a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-C1540E2B-9C9A-4071-B4AD-3B490FBBD9B6"&gt;https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-C1540E2B-9C9A-4071-B4AD-3B490FBBD9B6&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-8A849DCF-70AB-469F-8D8C-9DBE009FB304"&gt;https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-8A849DCF-70AB-469F-8D8C-9DBE009FB304&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Summary&lt;/h1&gt;
&lt;p&gt;Using the different templates for C# and Java can kickstart your development of new Tridion connectors. In addition the add-on service makes it easy to centrally configure and deploy your connectors to various parts of your Tridion system. In the next blog post I will describe more in details the concepts of the Tridion Integration Framework and go through an example connector.&lt;/p&gt;
&lt;p&gt;In meantime here are a few additional resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implementing Connectors:&amp;nbsp;&lt;a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-20EB960E-25E8-4B5B-99F5-9136039B907A"&gt;https://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20Sites-v2/GUID-20EB960E-25E8-4B5B-99F5-9136039B907A&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Video recording from a TDS talk&amp;nbsp;on the Tridion Integration Framework:&amp;nbsp;&lt;a href="https://vimeo.com/374369509"&gt;https://vimeo.com/374369509&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=8863&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion">Tridion</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Sites%2b9-1">Sites 9.1</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Connectors">Connectors</category></item><item><title>Content Mashup as Component Link</title><link>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/content-mashup-as-component-link</link><pubDate>Mon, 15 Jul 2019 22:29:00 GMT</pubDate><guid isPermaLink="false">10acfa76-f078-475b-a7ef-fc5b3e8d2934:791ae5b2-9954-4c76-87ca-dc38647ff17c</guid><dc:creator>Sayantan Basu</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/rsscomments?WeblogPostID=8453</wfw:commentRss><comments>https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/posts/content-mashup-as-component-link#comments</comments><description>&lt;p&gt;You may already have seen the concept of doing content mashup using Tridion Sites Connector. If not you can check this &lt;a href="https://manishmehmood.wordpress.com/2019/07/01/replicating-tridion-sites-taxonomies-in-tridion-docs/?fbclid=IwAR1P62_YcH_q5JEopjlOS4o7QSvZEnxcOJmSGGOJvx7pKbDAr4hmnd9NthU" rel="noopener noreferrer" target="_blank"&gt;blog&lt;/a&gt; from Manish to get an idea. Today I am going to share another way to do that between Sites and Docs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Assume you have maintained all of your products on sites and you want to add a product specification (Topic) from Docs along with that.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Using sites connector is one of the options for that. But there is another way to achieve it using a component link.&lt;/p&gt;
&lt;p&gt;&lt;!--mce:protected %3C%21--more--%3E--&gt;&lt;/p&gt;
&lt;p&gt;Here is the approach for that &amp;ndash;&lt;/p&gt;
&lt;p&gt;I have segregated the implementation in 2 parts.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;First Part-&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I have created an MVC application (Not Mandatory, you can use ASP.Net application as well) to connect the Tridion Docs using service API and retrieve all the topics/publications from DOCS Content Manager and bind the result in a grid view.
&lt;ul&gt;
&lt;li&gt;Here is the code to get all the Topics/Publication using DOCS service API&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;To retrieve the Topics:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;public static List&amp;lt;Topic&amp;gt; ReadTopicsFromDocs(InfoShareWSHelper infoShareWsHelper)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;List&amp;lt;Topic&amp;gt; topics = new List&amp;lt;Topic&amp;gt;();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//build a object of GetDocumentObj25Channel to retrieve the topics&lt;/code&gt;&lt;br /&gt;&lt;code&gt;var object25Channel = infoShareWsHelper.GetDocumentObj25Channel();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//define metadata wants to retrieve&lt;/code&gt;&lt;br /&gt;&lt;code&gt;string ishMeta =&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfields&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;FTITLE&amp;#39; level=&amp;#39;logical&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;FAUTHOR&amp;#39; level=&amp;#39;lng&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;FSTATUS&amp;#39; level=&amp;#39;lng&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;/ishfields&amp;gt;&amp;quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//call Find() method to bring that data back from the DOCS environment&lt;/code&gt;&lt;br /&gt;&lt;code&gt;string obj = object25Channel.Find(ISHType.ISHModule.ToString(), StatusFilter.ISHNoStatusFilter, &amp;quot;&amp;quot;, ishMeta);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;topics = BindTopic(obj);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;return topics;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;To retrieve the Publications:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;public static List&amp;lt;Publication&amp;gt; ReadPublicationFromDocs(InfoShareWSHelper infoShareWsHelper)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;List&amp;lt;Publication&amp;gt; publications = new List&amp;lt;Publication&amp;gt;();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//Build a object of GetPublication25Channel to retrieve the publications&lt;/code&gt;&lt;br /&gt;&lt;code&gt;var object25Channel = infoShareWsHelper.GetPublication25Channel();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//define metadata wants to retrieve&lt;/code&gt;&lt;br /&gt;&lt;code&gt;string ishMeta =&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfields&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;FTITLE&amp;#39; level=&amp;#39;logical&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;MODIFIED-ON&amp;#39; level=&amp;#39;lng&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;FSTATUS&amp;#39; level=&amp;#39;lng&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;ishfield name=&amp;#39;FISHPUBLICATIONTYPE&amp;#39; level=&amp;#39;logical&amp;#39;/&amp;gt;&amp;quot; +&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;quot;&amp;lt;/ishfields&amp;gt;&amp;quot;;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;string obj = object25Channel.Find(StatusFilter.ISHNoStatusFilter, &amp;quot;&amp;quot;, ishMeta);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;publications = BindPublication(obj);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;return publications;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Deploy the application on the web server and run it. Here are the look and feel of the application&lt;br /&gt;&lt;br /&gt;&lt;a href="https://justsayantan.files.wordpress.com/2019/07/contentfromdocs-1.jpg"&gt;&lt;img src="/resized-image/__size/558x460/__key/communityserver-blogs-components-weblogfiles/00-00-00-00-95/pastedimage1563229910215v1.jpeg" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;As you can see in the screenshot, there is an option to choose the item and click on the button (&amp;quot;&lt;strong&gt;Add To CMS&lt;/strong&gt;&amp;quot;) to add it to Tridion CMS. In a nutshell, the functionality is once the user clicks on that button the GUID of that selected topic/publication will be added as a link. For that, you need to add below necessary javascript on the view.&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;em&gt;Here is the Javascript I am using to add that&amp;nbsp;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;/em&gt;&lt;/em&gt;
&lt;p&gt;$(document).ready(function () {&lt;br /&gt;$(&amp;#39;#topic_table&amp;#39;).DataTable();&lt;br /&gt;});&lt;/p&gt;
&lt;em&gt;&lt;em&gt;&lt;code&gt;&lt;/code&gt;&lt;/em&gt;&lt;/em&gt;
&lt;p&gt;$(&amp;#39;input:checkbox&amp;#39;).change(function () {&lt;br /&gt;$(&amp;#39;input:checkbox&amp;#39;).not(this).prop(&amp;#39;checked&amp;#39;, false);&lt;br /&gt;});&lt;/p&gt;
&lt;em&gt;&lt;em&gt;&lt;code&gt;&lt;/code&gt;&lt;/em&gt;&lt;/em&gt;
&lt;p&gt;$(&amp;#39;#btnCreateAsset&amp;#39;).click(function (event) {&lt;br /&gt;var topicId;&lt;br /&gt;$.each($(&amp;quot;input[name='selectCheckBox']:checked&amp;quot;), function () {&lt;br /&gt;topicId = $(this).attr(&amp;#39;id&amp;#39;);&lt;br /&gt;});&lt;br /&gt;if (topicId != null) {&lt;br /&gt;alert(&amp;quot;You Have Selected: &amp;quot; + topicId);&lt;br /&gt;var fields = window.dialogArguments.getFields();&lt;br /&gt;if (fields &amp;amp;&amp;amp; fields.length &amp;gt; 0) {&lt;br /&gt;fields[0].setValues([topicId]);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;alert(&amp;quot;Select a Topic First&amp;quot;)&lt;br /&gt;}&lt;/p&gt;
&lt;em&gt;&lt;em&gt;&lt;code&gt;&lt;/code&gt;&lt;/em&gt;&lt;/em&gt;
&lt;p&gt;});&lt;/p&gt;
&lt;em&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;Now bind this URL with your schema field so that you can use it as Custom URL extension. ( If you are not familiar with custom URL extension, there is a nice &lt;a href="https://itsneeteshnarvaria.blogspot.com/2019/03/custom-url-extension-with-tridion-sites.html" rel="noopener noreferrer" target="_blank"&gt;blog&lt;/a&gt; on this from &lt;em&gt;Neetesh Narvaria&lt;/em&gt;. You can follow this as a starting point.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We have finished all the required step to mashup the content from the Tridion CMS side.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Second Part-&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In this section, I will explain how to retrieve the actual content from DOCS based on that GUID using CPA on the web application end.&lt;/p&gt;
&lt;p&gt;I am using SDL DXA on the web application side so I try to utilize the existing methods to retrieve the data.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First I have added an InputItemFilter to pass that GUID as InputCustomMetaCriteria. Here is the code snippet for that -&lt;br /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;InputItemFilter finelFilterCriteria = new InputItemFilter{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CustomMeta = new InputCustomMetaCriteria&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;Key = Constants.PublicationID,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;Value = query.DocsPublicationID,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;Scope = CriteriaScope.Publication&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;&lt;code&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;Once InputItemFilter criteria are ready to use, call the Graphql client and call ExecuteItemQuery() method using the necessary parameter to get the result -&lt;br /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;var client = ApiClientFactory.Instance.CreateClient();&lt;/code&gt;&lt;br /&gt;&lt;code&gt;var results = client.ExecuteItemQuery(filter, null, new Pagination{First = pageSize,After = queryParams.Cursor}, null, ContentIncludeMode.Exclude, false, null);&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s all. Hope you like it. Happy coding. Here is the &lt;a href="https://github.com/justsayantan/TridionDocsTopicLink"&gt;source code&lt;/a&gt; of Custom Application.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="https://community.rws.com/aggbug?PostID=8453&amp;AppID=95&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tutorial">Tutorial</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/DXA">DXA</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bDocs">Tridion Docs</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Content%2bManager">Content Manager</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Content%2bMashup">Content Mashup</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Url%2bextention">Url extention</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/C_2300_">C#</category><category domain="https://community.rws.com/product-groups/tridion/tridion-sites/b/techweblog/archive/tags/Tridion%2bSites%2b9">Tridion Sites 9</category></item></channel></rss>