tag:blogger.com,1999:blog-77393049949712940452024-03-05T04:48:55.305-08:00Tridion BitesThis blog is moved to:
https://tridionbits.wordpress.com
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-7739304994971294045.post-61569655927350722722017-12-29T12:09:00.003-08:002017-12-29T12:16:08.319-08:00 What's New in SDL WorldServer 11<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
Local Language Content is growing in demand day by day and
it is one of the primary focus areas of Marketers today. Various surveys show,
how the local language content helped companies to get more customers and contributed
to the growth of the business eventually. One shouldn’t be surprised why Translation
Management System is a really important tool of CXM strategy of an Enterprise
today.<o:p></o:p></div>
<div class="MsoNormal">
<br />
<h3 style="text-align: left;">
SDL WorldServer:</h3>
<div>
<br /></div>
<div style="text-align: left;">
SDL WorldServer is the leading translation management system
in the industry. Over one hundred of the top global companies depend on SDL WorldServer
to optimize their translation programs.</div>
<div style="text-align: left;">
<br /></div>
</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
WorldServer is an advanced tool that enables you to
transform manual, disparate translation processes into a centralized, fully
administered program. With WorldServer, you can adopt a flexible
enterprise-class translation management system that automates translation tasks
and greatly reduces the costs of supporting large volumes of local language
content. <o:p></o:p><br />
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
Core to SDL WorldServer is a workflow based process
automation engine that drives all translation project activities. You can
easily configure the workflow so that, for example, the process for translating
marketing material is different from that for translating very technical
documentation.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<h3 style="text-align: left;">
New features & benefits in Version 11:</h3>
<div>
<br /></div>
<div class="MsoNormal">
<o:p></o:p></div>
<div style="text-align: left;">
Recently in November 2017, the latest version 11.3 of the SDL
WorldServer is released. Other than supporting technology upgrades, below are
the key new features introduced in the version 11, adding value over V10.4: </div>
<div style="text-align: left;">
<br /></div>
<h1>
<o:p></o:p></h1>
<h4 style="text-align: left;">
UI enhancements:</h4>
<div>
<div class="MsoNormal">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSEqz9sN0pFhqAzhNebFzlrhnaBxsyiHXybog9ledIp63zax8Aivx6FMr8Ng_Yreae3fwLnVD0-lwQjfIEILF1q2Dssvyki9X11YWHwLyQfswIA7qVSwtZqhBBa20aRgrmvZgV_sMMKAA/s1600/Picture1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="511" data-original-width="584" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSEqz9sN0pFhqAzhNebFzlrhnaBxsyiHXybog9ledIp63zax8Aivx6FMr8Ng_Yreae3fwLnVD0-lwQjfIEILF1q2Dssvyki9X11YWHwLyQfswIA7qVSwtZqhBBa20aRgrmvZgV_sMMKAA/s320/Picture1.jpg" width="320" /></a>The new version has significant rewrite of the User
Interface layer to provide modern & efficient User Experience for all users.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Below are the main features of the new UI:</div>
<div class="MsoNormal">
</div>
<ul style="text-align: left;">
<li><u>New UI paradigm</u> aligned with SDL’s Convergence strategy.</li>
<li>Initial Focus on Project Management UX and Efficiency.</li>
<li>Platform for delivering usability improvements.</li>
<li>Modern, supportable UI components.</li>
<li>New <u>REST-based API </u>is used under the hood.</li>
</ul>
<h4 style="text-align: left;">
<br />Performance & Scalability:</h4>
<div style="text-align: left;">
1. System Improvements for Scalability &
Agility:</div>
<div style="text-align: left;">
</div>
<ul style="text-align: left;">
<li><u>Database Transactions optimizations</u> to eliminate deadlocks and enhance efficiency and scalability. The version Supports SQL Server 2016 as well.</li>
<li><u>Monitoring & Troubleshooting</u> by the new diagnostic tools to identify and address deadlocking database transactions.</li>
<li><u>Automated Task Handling</u> by sequencing and distributing automated tasks to prevent time consuming tasks from slowing down the system as a whole.</li>
<li><u>Translatable Content Handling</u> is improved by:</li>
</ul>
<div>
o<span style="white-space: pre;"> </span>Updated file filters for MS Office file types.</div>
<div>
o<span style="white-space: pre;"> </span>New server-friendly file types for RTF and Excel</div>
<br />
<div style="text-align: left;">
2. Cloud Improvements:<br />
<div style="text-align: left;">
</div>
<ul>
<li>Value add <u>Security </u>packages like encryption, IDS/IPS, compliance, vulnerability scanning, etc.</li>
<li><u>Next Generation Database Platform</u> with increased availability, scalability, manageability and security.</li>
<li>Further <u>automation of deployment/upgrades</u> and other maintenance tasks.</li>
<li><u>Modernization of Cloud Delivery Platforms</u> including new hosting providers, new data centres, more modern services and infrastructure.</li>
</ul>
<br />
<h4 style="text-align: left;">
SDL Language Cloud integration:</h4>
<h2>
<o:p></o:p></h2>
<h4 style="text-align: left;">
<div class="MsoNormal">
<span style="font-weight: normal;">Starting with this release, machine translation in
WorldServer can also be performed by SDL Language Cloud, via the new Language
Cloud machine translation (MT) adapter. Once the adapter is configured, the
translation can be done automatically in Worldserver using SDL Language cloud.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-weight: normal;">The process of setting the adapter is quite straight forward
as demonstrated <a href="https://sdl.dist.sdlmedia.com/distributions/?o=C7972D2A-B2B5-49B0-83D3-B0B53C977942">here</a>.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Applet replacement:</div>
</h4>
<h2>
<o:p></o:p></h2>
<h4 style="text-align: left;">
<div class="MsoNormal">
<span style="font-weight: normal;">Because browsers are reducing or eliminating support for the
Java Plug-in, it is wise to consider migrating existing Java applets to something
like Java Web Start, which uses the Java Network Launching Protocol (JNLP) to
download and run an application locally.<o:p></o:p></span><br />
<span style="font-weight: normal;"><br /></span></div>
<div class="MsoNormal">
<span style="font-weight: normal;">From the release 11.1, SDL have started the procedure of
migrating the WorldServer features that use Java applets to JNLP. As a result, user
can now access the Explorer page from all supported browsers. User can modify
the use of Java applet or JNLP by configuring the parameter applet.display.option=<available
values are applet, jnlp, and browser>, in general.properties. SDL recommend
using the browser option, which will make the browser choose whether the Java
applet or JNLP is used to open the Explorer page.</span></div>
<div class="MsoNormal">
<br /></div>
</h4>
<h4 style="text-align: left;">
Next Gen Online Editor:</h4>
<h2>
<o:p></o:p></h2>
<h4>
<div class="MsoListParagraphCxSpFirst" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-weight: normal;">Online
editor is one of the most important feature introduced in the V11. It is an
Add-On Components to the GUI and can be configured to be used in workflows by
Translators and/or Reviewers. <o:p></o:p></span></div>
<div class="MsoNormal">
</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 0cm; mso-add-space: auto;">
<span style="font-weight: normal;">With
this, Translators and Reviewers can perform many tasks including translation
& review from anywhere online in browser without having to install Studio.
Though Trados Studio and WS Browser Workbench remain alternate options.</span><o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
REST APIs:</div>
</h4>
<h2>
<o:p></o:p></h2>
<div>
<div class="MsoNormal">
A rich REST API is available now to interact with the WorldServer.
The SDL WorldServer 11 API is based on modern standards (REST & JSON) and
has been designed to be:<o:p></o:p></div>
<div class="MsoNormal" style="text-align: left;">
</div>
<ul>
<li><u>Highly secure</u>: the entire WorldServer 11 UI is built on top of the new, radically improved API.</li>
<li><u>Standardized and easy to use</u>: it uses the standard HTTP Verbs (POST/PUT/GET/DELETE).</li>
<li><u>More easily integrated.</u></li>
<li><u>Highly functional</u>, with:</li>
</ul>
<div>
o Batching — do more with less</div>
<div>
<div>
o Filtering & Search — find the right data</div>
<div>
o Partial record retrieval — retrieve only the fields you need, avoiding over-verbosity.</div>
</div>
</div>
<div style="text-align: left;">
<br /></div>
The API Documentation can be found on the server by visiting <root_server>/<ws-api>/docs/ws-api-doc-v1.html (for example, http://<server_name>:<port_number>/<ws-api>/docs/ws-api-doc-v1.html).</div>
<br />
<h3 style="margin-left: 36.0pt;">
<o:p></o:p></h3>
<h3 style="margin-left: 36.0pt;">
<o:p></o:p></h3>
<div>
<br /></div>
<h2>
<o:p></o:p></h2>
</div>
<h2>
<o:p></o:p></h2>
<div class="MsoNormal">
<br /></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com1tag:blogger.com,1999:blog-7739304994971294045.post-8008159896312385682017-12-28T04:53:00.003-08:002017-12-28T08:14:17.545-08:00Alchemy | What do you want to extend ?<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0uo3l_LCxmfxddndZiKFHReStDwTcs2j9SPM1cXRgQprAT_W1O9M5QCfaZWvX0clvvCZnBfHOVN7f0qK5HaV4_Geg5RSaLNOZ2MFwA6caCzv1C2G3OQ53i3f5lvGb-8gygVP0g6fajY/s1600/alchemy.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="220" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0uo3l_LCxmfxddndZiKFHReStDwTcs2j9SPM1cXRgQprAT_W1O9M5QCfaZWvX0clvvCZnBfHOVN7f0qK5HaV4_Geg5RSaLNOZ2MFwA6caCzv1C2G3OQ53i3f5lvGb-8gygVP0g6fajY/s200/alchemy.png" width="175" /></a>In one of my previous blogs, I talked about the <a href="http://tridionbites.blogspot.in/2017/10/five-basic-things-you-should-know.html" target="_blank">Five Basic Things you should know before developing a Alchemy Plugin</a>. One of the most important thing listed there is, "What do you want to extend?" in Tridion GUI. The answer to this question would lead you to the Classes in Alchemy Framework, <br />
you would have to extend in the plugin code. You can term them as Extension Points as well.<br />
<br />
Tridion provides some extension points/areas out of the box. In Alchemy Framework you would get all those extension points as Base Classes, you simply need to extend those classes according to your plugin need. Let's talk about the Extension Points one by one.<br />
<br />
<h4 style="text-align: left;">
1. Context Menu Extension:</h4>
<div>
A Context Menu appears once a user right clicks on a Item in Tridion GUI. So if you want to add an entry in the Context Menu, you would have to extend "ContextMenuExtension" class in your plugin code.</div>
<div>
<a href="http://www.alchemywebstore.com/plugins/Title-Translator" target="_blank">Title Translator</a> plugin is a really good example of Context Menu Extension, The code for the plugin can be found <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.TitleTranslator" target="_blank">here</a>.<br />
<br /></div>
<h4 style="text-align: left;">
2. Command Extension:</h4>
<div>
Tridion's Anguilla Framework exposes many commands like Open, Save, Localize etc. Which are executed on respective events in the GUI. If you want to override the behavior of a command, all you need is to extend "CommandExtension" class in your plugin's code.</div>
<div>
For example, if you want to perform some action when user saves an item, you would need to create a Alchemy Plugin by extending the class "CommandExtension".<br />
<br />
We have a Plugin named <a href="http://www.alchemywebstore.com/plugins/Localize-Commenter" target="_blank">Localize Commenter</a> which extends this extension point, where a custom popup appears when a "Localize" command is executed. The code for the plugin could be found <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.LocalizeCommenter" target="_blank">here </a>for reference.<br />
<br /></div>
<div>
<h4 style="text-align: left;">
3. Extended Area Extension:</h4>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO2TZIG1xC5ehkDwptStJy9jnEPjX6JzLojTljSPf0wILrybDdZjwIb4DWUbV04_M6Xc-cjyDTnU8m7zV-5qU5-6eySQeQmwXFDrS3G5Scf7gaOvfAUJWLcDA0N8PFvN8cfzGcThoRils/s1600/ExtendedAreaExtension1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Extended Area Extension" border="0" data-original-height="220" data-original-width="312" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO2TZIG1xC5ehkDwptStJy9jnEPjX6JzLojTljSPf0wILrybDdZjwIb4DWUbV04_M6Xc-cjyDTnU8m7zV-5qU5-6eySQeQmwXFDrS3G5Scf7gaOvfAUJWLcDA0N8PFvN8cfzGcThoRils/s200/ExtendedAreaExtension1.png" title="Extended Area Extension" width="200" /></a></div>
<div>
If your requirement is to extend a existing view, you might want to have a look at the extended areas extensibility. For example, if someone wants to add a additional check in fields details in schema design, you might need to create a plugin extending "ExtendedAreaExtension" class. I don't have any real plugin for reference, so attaching the image to give you an idea.</div>
<div style="text-align: left;">
<h4>
</h4>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<h4>
4. Extension Group:</h4>
</div>
<div style="text-align: left;">
So, if you don't find a suitable extension point for your plugin idea or requirement. The Extension Group extension could be your best bet. Basically this extension allows you to add your custom resources (JS, CSS, Images etc) to the different views in the GUI. These resources can then interact with the HTML and Tridion UI Core (using Anguilla framework) to produce desired results.<br />
<br />
One good example of this type of plugin is <a href="http://www.alchemywebstore.com/plugins/Publication-Panel-Search" target="_blank">Publication Panel Search</a>. It places a search box above the Publication List in the left-hand panel. Users can simply start typing into the text box and Publications with the title containing the entered text will be filtered. The full code for the plugin can be referenced from <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.PublicationPanelSearch" target="_blank">here</a>.<br />
<br /></div>
<div>
<div>
<h4 style="text-align: left;">
5. Ribbon Toolbar Extension:</h4>
</div>
<div>
As it's name suggests, this extension point is to extend the Ribbon Toolbar at the top. With this one can add buttons and manage groups in the toolbar. To achieve this all you need to extend the "RibbonToolbarExtension" class and use it's members accordingly, while coding the plugin.<br />
<br />
There are many plugins of this type available on the Alchemy Web Store, one easy pick could be <a href="http://www.alchemywebstore.com/plugins/Go-To-Location" target="_blank">Go To Location</a>. This plugin adds a Ribbon Tool Bar Button 'Go To Location' to the Repository Local Item views, on clicking the button user is redirected to the location of the item. The code for this plugin can be found <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.GoToLocation" target="_blank">here</a>.<br />
<br /></div>
<div>
<h4 style="text-align: left;">
6. Tab Page Extension:</h4>
</div>
</div>
<div>
If a Tridion item is opened in explorer, there would be tabs like General, Source, Info etc. To add a custom tab to the view, in the plugin's code one has to extend the class "TabPageExtension" and use it's members accordingly.</div>
<div>
<br /></div>
<div>
There is again this plugin <a href="http://www.alchemywebstore.com/plugins/Localize-Commenter" target="_blank">Localize Commenter</a> which extends this extension point. The plugin adds a tab "Localize Comments" in the item's view, where localize comments can be viewed and edited. The code for the plugin can be found <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.LocalizeCommenter" target="_blank">here</a> for reference.</div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-36916898053294461442017-12-16T11:25:00.002-08:002017-12-16T11:27:47.105-08:00Localize Commenter | Yet Another Alchemy Plugin<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0uo3l_LCxmfxddndZiKFHReStDwTcs2j9SPM1cXRgQprAT_W1O9M5QCfaZWvX0clvvCZnBfHOVN7f0qK5HaV4_Geg5RSaLNOZ2MFwA6caCzv1C2G3OQ53i3f5lvGb-8gygVP0g6fajY/s1600/alchemy.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="220" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0uo3l_LCxmfxddndZiKFHReStDwTcs2j9SPM1cXRgQprAT_W1O9M5QCfaZWvX0clvvCZnBfHOVN7f0qK5HaV4_Geg5RSaLNOZ2MFwA6caCzv1C2G3OQ53i3f5lvGb-8gygVP0g6fajY/s200/alchemy.png" width="175" /></a>Localization of content is one of the most important feature of a Content Management System. Over the years CMS vendors put a lot of emphasis on making content localization easy and user friendly. If we talk about SDL Tridion, its simply a click and user can localize an item and update it with local content. It is really easy and user friendly, But there is no way one can record the "Reason" to localize the item. So with the passing time no body remembers why the item was localized?</div>
<br />
To address this issue, This plugin named "Localize Commenter" is developed. This available on Alchemy Web Store and can be downloaded from <a href="http://www.alchemywebstore.com/plugins/Localize-Commenter" target="_blank">here</a>.<br />
<br />
The Plugin forces user to add Comments while localizing an Item in Tridion GUI. These Comments could be be viewed and Edited in a Tab inside Item View. Technically, The plugin stores the Comments inside App Data of the Item and doesn't maintain the history of the comments, so once comments are updated the last comments will be deleted forever.<br />
<br />
The code for the plugin is available on <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.LocalizeCommenter" target="_blank">Github</a>. So if you look at the code, the plugin consists of three extension points as below:<br />
<br />
<b>1. Command Extension:</b><br />
<b><br /></b>
The first requirement was "when user clicks "Localize" from the context menu of an item, the plugin would open a dialog to enter the localize comments" as below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWimW6tmkyMh1mWtakDRrI7EXgiKkcJpd0N2ArjSvvL8egHkQVfrWOpzPc-byt2YaHvMM2CyGQOBJ1E6hwHXcxzZ6Qw1HHlwDTPgtIe-wwajihywwdFg_S0uMFLL4ME12nbvpkwqucAVU/s1600/LocalizeCommenter1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="895" height="329" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWimW6tmkyMh1mWtakDRrI7EXgiKkcJpd0N2ArjSvvL8egHkQVfrWOpzPc-byt2YaHvMM2CyGQOBJ1E6hwHXcxzZ6Qw1HHlwDTPgtIe-wwajihywwdFg_S0uMFLL4ME12nbvpkwqucAVU/s640/LocalizeCommenter1.png" width="640" /></a></div>
<br />
To achieve this, a Command Extension is implemented which simply extends the Localize command using Anguilla Framework (Code reference "LocalizeCommenterCommandExtension.cs"). This extension simply open a popup "LocalizeCommenterPopUp.aspx" , and cancels the original Localize command.<br />
<br />
"LocalizeCommenterPopUp.aspx" page is simple .aspx page, which has a text area, localize button and a cancel button. After entering the comments in the text area when user hit the localize button, item gets localized and comments gets saved to application data of the item.<br />
<br />
<b>2. Extension Group:</b><br />
<b><br /></b>
The second requirement was "when a user opens a shared item by choosing the option 'Localize this item and open it in edit mode', the plugin would open a popup to enter the comments" as below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-LH-8jHzN003PmAiw3mPAlEwmuNcIVJRAj3OUGOiqcQFbnOYGxUAP2wVMh08nIhWaSSM-Op7cMlVKeDpUIGM3fT78MmVRJ-MNXo8QnyPJDLex7FmNiXPmDfo52GW_t9cL2S4-Z4DEToQ/s1600/LocalizeCommenter3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="322" data-original-width="1108" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-LH-8jHzN003PmAiw3mPAlEwmuNcIVJRAj3OUGOiqcQFbnOYGxUAP2wVMh08nIhWaSSM-Op7cMlVKeDpUIGM3fT78MmVRJ-MNXo8QnyPJDLex7FmNiXPmDfo52GW_t9cL2S4-Z4DEToQ/s640/LocalizeCommenter3.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
For this, a "ExtensionGroup" extension is implemented which simply extends this "Choose an Option" popup by extending "Tridion.Web.UI.Editors.CME.Views.Popups.SharedItemOptions" resource using Anguilla Framework (Code Reference "SharedItemOptionsPopUpExtension.cs"). This simply overrides the "_onOkButtonClicked" event of "Choose an Option" popup and open another popup "LocalizeCommenterPopUp.aspx" to enter the comments, when the "OK" button is clicked.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>3. Tab Page Extension:</b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The third requirement was "Once the item is localized after adding the comments, There should be a way to check and update the saved comments". The plugin shows the saved comments in a "Localize Comments" tab when the item is opened.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqcahoC6o9AyN-EplM1ZGqeC-N0wBM1AbFTSuzQGatMJjIIDtwEjlFtb00oCns8x4p8zxA3xwxTasT1TXXO1inf5ejgq_ByTID03LnzN2uoGpfC5AGn_ftpzR_tllcaXNYIrAv8wn88JE/s1600/LocalizeCommenter2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="1348" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqcahoC6o9AyN-EplM1ZGqeC-N0wBM1AbFTSuzQGatMJjIIDtwEjlFtb00oCns8x4p8zxA3xwxTasT1TXXO1inf5ejgq_ByTID03LnzN2uoGpfC5AGn_ftpzR_tllcaXNYIrAv8wn88JE/s640/LocalizeCommenter2.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
To achieve this, a "TabPageExtenstion" extension is implemented (Code Reference "LocalizeCommenterTabPage.cs"). The extension creates a tab named "Localize Comments" in item's view and shows a user control "LocalizeCommenterTab.ascx" inside this. Inside the control, functionality to view/update the comments is implemented. </div>
<br />
<br />
Please check the <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.LocalizeCommenter" target="_blank">code </a>for more details, This plugin is pretty good example of having multiple extensions in a single plugin. If you have any questions, please ask on the post.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-18318890831185017732017-10-26T10:21:00.000-07:002017-10-27T02:28:39.820-07:00Forcing Workflow on Templates (Design Items) in Tridion<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1sPwLv0buenKX_4gIALEa53EpBfrSPh6L39ehqbZ-qFYrXqXduuOvzxkPY5GEx_QM1gFEIqq_WOiV68WHvJjYYDLBIRwqybtVF_YQicvmwnJFrOZ-SMuPgN9_3II9D2RWBd7Qxan7-78/s1600/Workflow-mono.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="345" data-original-width="360" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1sPwLv0buenKX_4gIALEa53EpBfrSPh6L39ehqbZ-qFYrXqXduuOvzxkPY5GEx_QM1gFEIqq_WOiV68WHvJjYYDLBIRwqybtVF_YQicvmwnJFrOZ-SMuPgN9_3II9D2RWBd7Qxan7-78/s200/Workflow-mono.JPG" width="200" /></a></div>
The main purpose of Tridion Workflow is to audit content before it is published to a particular environment, but it is also important to audit the design changes before making those available for a end user on a particular environment. Without proper auditing wrong version of the layouts (and possibly JS functionality) could make all the way to Live application and can have all sorts of user experience issues.<br />
<br />
<br />
<h3 style="text-align: left;">
<br /></h3>
<h3 style="text-align: left;">
<br /></h3>
<h3 style="text-align: left;">
<br /></h3>
<h3 style="text-align: left;">
Importance of Workflow Enforcement on Tridion Items:</h3>
<h3 style="text-align: left;">
</h3>
When a tridion item is updated outside of the workflow or a new item created, item was set to approval status 'undefined'. With this 'undefined' approval status there was no restriction on publishing those items at all, means the item (content/template) which was yet to be approved by workflow process could be published.<br />
<br />
To make sure any unaudited item (content/template) doesn't get published. Tridion provides OOB functionality to Enforce Workflow on Components and Templates.<br />
<br />
In one of my previous blogs, I explained <a href="http://tridionbites.blogspot.in/2016/10/forcing-workflow-on-tridion-items.html" target="_blank">how to force workflow on Components</a>. Here I am going to explain how you can force workflow on Templates (TBBs, CTs and PTs).<br />
<br />
<br />
<h3 style="text-align: left;">
Forcing Workflow on Templates:</h3>
<div>
<br /></div>
1. Enable workflow on the publication:<br />
Before forcing workflow on the items, you should always enable the workflow on that particular publication otherwise new and updated items would be waiting forever for a workflow to be enforced, as user would not be able to trigger a workflow process on the templates.<br />
<br />
To do so, open publication properties and inside workflow tab check the checkbox "Enable Workflow Process Associations in Shared Schemas and Structure Groups" and save the publication properties.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSJLxbR_RK2QmH54L93POBM_CHrO5s4m4JRG0Kg49wHH_0apXFfuhuppDQaBWzgNcL4VoDmRym1vA0UKX-ezixzkHY-FP61InXfb12Tol8rLfGPXkWMZqTbma1yAy4x-Lt6yUir82Pefg/s1600/WorkflowEnable.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="180" data-original-width="704" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSJLxbR_RK2QmH54L93POBM_CHrO5s4m4JRG0Kg49wHH_0apXFfuhuppDQaBWzgNcL4VoDmRym1vA0UKX-ezixzkHY-FP61InXfb12Tol8rLfGPXkWMZqTbma1yAy4x-Lt6yUir82Pefg/s400/WorkflowEnable.JPG" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<b><br /></b>
2. Force the workflow on design items:<br />
To force workflow, open publication properties and inside workflow tab check the checkbox "Any changes made to a Template in this Publication require approval by a Bundle Workflow Process" and save the publication properties.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja3ShdT7I-6xKI3Fe2eA49NX62qSKOhROkBs7VQDwvJ2NCFY5oG-pNmAhWlOGVQeVgcEoGhDYq15OCKbNvlhQ35WodarypEoOO7SVLTKuWbN-wY1pqmbIUYq8fhPJxr-hoVvIMyWa0jic/s1600/ForceWorkflowTemplates.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="697" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja3ShdT7I-6xKI3Fe2eA49NX62qSKOhROkBs7VQDwvJ2NCFY5oG-pNmAhWlOGVQeVgcEoGhDYq15OCKbNvlhQ35WodarypEoOO7SVLTKuWbN-wY1pqmbIUYq8fhPJxr-hoVvIMyWa0jic/s400/ForceWorkflowTemplates.JPG" width="400" /></a></div>
<div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Once the workflow enforcement on templates is set on the publication, Now if you updates/creates template (or TBB) outside of workflow, Instead of being checked-in and available for use, a minor version of the template will be created in "Waiting for Workflow" state. To use this version, you must add it to a bundle and start the workflow on it. Once the workflow is finished, the minor version is converted to a major version and is ready for use.<br />
<br /></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-31577352556631532952017-10-12T02:34:00.001-07:002017-10-12T03:21:53.902-07:00Five Basic Things you should know before developing a Alchemy Plugin<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7gk-kKRE0LcnGZLsmSwapv4Z4LyS5noqe8GCY524Zisb0cAU4pFMliod5RFZIqdKhRiD2cgVGuDgfMFL73Aog35V-m5bdLQgc4YZu3Qww74us1TrZuHZj8BNvf8yG5JD_J5gQazDnGBM/s1600/alchemy.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: "verdana" , sans-serif;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7gk-kKRE0LcnGZLsmSwapv4Z4LyS5noqe8GCY524Zisb0cAU4pFMliod5RFZIqdKhRiD2cgVGuDgfMFL73Aog35V-m5bdLQgc4YZu3Qww74us1TrZuHZj8BNvf8yG5JD_J5gQazDnGBM/s200/alchemy.png" width="176" /></span></a><span style="color: #444444; font-family: "verdana" , sans-serif;">Alchemy for Tridion is getting popularity by every day passing. More and more plugins are being submitted to <a href="https://www.alchemywebstore.com/" target="_blank">Alchemy Web Store</a>. I have developed few and it's really a fun. So if you want to give it a try go ahead, all you need to do is:</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;">1. <a href="http://www.alchemywebstore.com/help/for-users/category/installation" target="_blank">Install the Alchemy</a> on your DEV CMS Machine.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;">2. Get the Alchemy development framework to visual studio using <a href="http://www.alchemywebstore.com/help/article/using-nuget-package" target="_blank">Nuget Package</a> or <a href="https://www.alchemywebstore.com/help/article/using-vs-pack" target="_blank">VS Pack</a>.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span><span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;">Now when you are all set to develop a Alchemy Plugin from your idea. Ask the below questions to yourself and note the answers:</span><br />
<ol style="text-align: left;"><span style="color: #444444; font-family: "verdana" , sans-serif;">
<li>What does it do?</li>
<li>What do you want to extend?</li>
<li>Where to show your extension?</li>
<li>When to show your extension?</li>
<li>What resources you need to have in your extension?</li>
</span></ol>
<h4 style="text-align: left;">
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span></h4>
<h4 style="text-align: left;">
<span style="color: #444444; font-family: "verdana" , sans-serif;">What does it do?</span></h4>
<div>
<span style="color: #444444; font-family: "verdana" , sans-serif;">The answer to this question will help you with</span></div>
<div>
<span style="color: #444444; font-family: "verdana" , sans-serif;">1. You can copy and paste the answer to the description element value of the "a4t.xml</span><span style="color: #444444; font-family: "verdana" , sans-serif;">" file in your visual studio solution.</span></div>
<div>
<span style="color: #444444; font-family: "verdana" , sans-serif;">2. This will help you identify the possible conflicts with existing OOB GUI/Functionality. Which is quite important consideration before developing a plugin.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<br />
<h4 style="text-align: left;">
<span style="color: #444444; font-family: "verdana" , sans-serif;">What do you want to extend?</span></h4>
<div>
<span style="color: #444444; font-family: "verdana" , sans-serif;">So Tridion provides some extension points/areas OOB. In Alchemy Framework you would have all those extension points as Base Classes as below: </span></div>
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<br />
<ul style="text-align: left;">
<li><span style="color: #444444; font-family: "verdana" , sans-serif;">CommandExtension</span></li>
<li><span style="color: #444444; font-family: "verdana" , sans-serif;">ContextMenuExtension</span></li>
<li><span style="color: #444444; font-family: "verdana" , sans-serif;">ExtendedAreaExtension</span></li>
<li><span style="color: #444444; font-family: "verdana" , sans-serif;">ExtensionGroup</span></li>
<li><span style="color: #444444; font-family: "verdana" , sans-serif;">RibbonToolbarExtension</span></li>
<li><span style="color: #444444; font-family: "verdana" , sans-serif;">TabPageExtension</span></li>
</ul>
<div>
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span></div>
<span style="color: #444444; font-family: "verdana" , sans-serif;">You have to answer which extension point(or points), you want to extend. And based on this answer, you would create your Extension class by extending one of the above listed classes.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><b><br /></b></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;"><b>Where to show your extension?</b></span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"></span><span style="color: #444444; font-family: "verdana" , sans-serif;">So other than command extension, you need to tell Alchemy where you want to show the extension. This is really a important question as you need to make sure your extension doesn't break the existing GUI and not in conflict with another Plugin/Extension.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;"><b>When to show your extension?</b></span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;">So there could be conditions when to show (or execute in case of command extension) the Extension. For example, a particular Extension could be available for any particular</span><span style="color: #444444; font-family: "verdana" , sans-serif;"> User Group. So if you have any condition like it, you would have to take care of this during the development. There are different ways to control it for different type of Extensions.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><b><br /></b></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;"><b>What resources you need to have in your extension?</b></span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"></span><span style="color: #444444; font-family: "verdana" , sans-serif;">You could have additional resources to support your extension like JS, CSS, ASPX ans ASCX files. You need to identify the resources and the place to put those. Alchemy Framework has a very specific structured way to organize those files.</span><br />
<span style="color: #444444; font-family: "verdana" , sans-serif;"><br /></span>
<span style="color: #444444; font-family: "verdana" , sans-serif;">I will cover all above points in detail in my coming blogs. I hope this high level information helps. </span></div>
<ol style="text-align: left;"><span style="color: #444444; font-family: "verdana" , sans-serif;">
</span></ol>
<span style="color: #444444; font-family: "verdana" , sans-serif;">
</span>
<br />
<ol style="text-align: left;">
</ol>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-41416647290883304362017-09-27T06:57:00.004-07:002017-10-27T02:30:29.212-07:00Workflow, Core Service and Tridion Crashing Blues<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3TzRjL0q_achONW03m58nIngKm2AQ0DYoSqAm0kqxktnapZA8uqbd5utL-krQocyWqoENxBfFsI4VHbKGufALMDk9t1TCoIUKiCwksCB1LphKxv4d9H1f6ay236a7UVnav8qQzQGgg3I/s1600/Workflow-mono.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="345" data-original-width="360" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3TzRjL0q_achONW03m58nIngKm2AQ0DYoSqAm0kqxktnapZA8uqbd5utL-krQocyWqoENxBfFsI4VHbKGufALMDk9t1TCoIUKiCwksCB1LphKxv4d9H1f6ay236a7UVnav8qQzQGgg3I/s200/Workflow-mono.JPG" width="200" /></a></div>
<br />
The Tridion <a href="https://docs.sdl.com/LiveContent/content/en-US/SDL%20Web-v5/GUID-2F17886A-08C8-472C-B31E-C5ED53D973F7" target="_blank">Workflow</a> is basically used to audit the content before publishing out to specific environment. It is really a good module of Tridion CMS, little bit underestimated in my opinion though.<br />
<br />
Recently, I come across a issue where Tridion was going unresponsive, when we had some 30+ workflow process ruining simultaneously. It took us some good time to figure out the root cause of the issue. My intention of writing this blog to save your investigation time in case you face the same issue.<br />
<br />
<b><br /></b>
<b>The issue:</b><br />
The Tridion gets unresponsive when there is load on the CMS server in the form of Workflow Processes.<br />
<b><br /></b>
<b>The Root Cause:</b><br />
While setting a Tridion CMS, one has to configure the Maximum Concurrent Core Service Instances allowed before Core Service Host gets throttled. If the number of Core Service Instances goes beyond that limit, the Core Service Host Service gets throttled and become unresponsive. In our case Workflow Processes were creating those Core Service Instances.<br />
<br />
In our configuration settings, we had the value set at the default minimum value (which was 100); not the recommended value (100 x {No. of Cores}). So this minimum value 100 was getting crossed easily by the Core service Instances when the load was high and so Tridion was getting unresponsive.<br />
<br />
These configuration settings are listed below and can be found in the files as under:<br />
<br />
<serviceThrottling maxConcurrentSessions="100" maxConcurrentCalls="16" /><br />
<br />
*The default value for the Maximum Concurrent Instances is { maxConcurrentSessions + maxConcurrentCalls}<br />
<br />
1.<span style="white-space: pre;"> </span>{TridionDir}\webservices\web.config<br />
2.<span style="white-space: pre;"> </span>{TridionDir}\bin\TcmServiceHost.exe.config<br />
<br />
As per recommendation the default values should multiplied by no. of cores on the server.<br />
<br />
<b>Workflow Connection to the Issue:</b><br />
<div class="MsoNormal">
When an auto External Activity in a workflow process starts, it
automatically gets an instance of a “Ready Made” Core Service Client and it
does not closed/disposed once the activity is finished (Proved) rather it is
cleaned/closed when garbage collection happens later by the system (Yet to confirm with SDL). The more
Workflow Processes result in more auto External Activities and so more concurrent Core Service Clients. Once the max allowed limit for Core Service instances is
crossed, the CMS goes throttled and become unresponsive.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>The Fix:</b></div>
<div class="MsoNormal">
We had to increase the maximum allowed limit for load in configuration files on CMS. To do so, we increased the throttling attributes for Core Service to allow more concurrent Core Service instances as below (The configuration could be found in the files listed above already):</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
<serviceThrottling maxConcurrentSessions="100*{No. of Cores}" maxConcurrentCalls="16*{No. of Cores}" /></div>
<br />
*Where {No. of Cores} is the number of cores available on the CMS Server.<br />
<br />
<br />
<br />
<br />
I hope, this helps someone someday :)<br />
<br />
<br /></div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-45245611531078239412017-06-02T13:43:00.001-07:002017-06-02T13:46:05.371-07:00Go To Location | Alchemy Plugin for SDL Web<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0xnLF9DX1hMDeSwmEDkgD2ZVWjJWjlYtvKXdvzS2T6mDMay6FjUeMliEkzx4T-ERq74y8VUPFlb9Qxg7xS1gzXxOYTdCnOLERLZeMLOzMhngdKoxMblDNru9hW9-ei2zZ7k759rgWGkQ/s1600/GoTolocationIcon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0xnLF9DX1hMDeSwmEDkgD2ZVWjJWjlYtvKXdvzS2T6mDMay6FjUeMliEkzx4T-ERq74y8VUPFlb9Qxg7xS1gzXxOYTdCnOLERLZeMLOzMhngdKoxMblDNru9hW9-ei2zZ7k759rgWGkQ/s200/GoTolocationIcon.png" width="200" /></a>At <a href="https://community.sdl.com/solutions/content-management/tridion/tridion-developer/c/e/407" target="_blank">SDL Web Dev Summit 2017</a> in India, I got this opportunity to show & tell on "how to create a Alchemy Plugin in 30 mins". And I choose to build this simple "<a href="http://www.alchemywebstore.com/plugins/Go-To-Location" target="_blank">GoToLocation" Alchemy Plugin </a>there.</div>
<div style="text-align: left;">
<br /></div>
This plugin adds a Ribbon Tool Bar Button 'Go To Location' to the Repository Local Items Views including Page, Component, Schema, Component Templates, Page Templates and Template Building Blocks. On clicking the button SDL Web redirects the user to the location of the item.<br />
<br />
This plugin is useful in the situations when a user wants to navigate to the Item's location form the Item's View.<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In case you missed the event, lets revisit the plugin again. So before we begin, get the plugin's code from <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.GoToLocation" target="_blank">here</a> so that we both are on the same page.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Facts about the plugin:</div>
<div style="text-align: left;">
</div>
<ol style="text-align: left;">
<li>It is a Ribbon Toolbar Extension, which places a "Go To Location" button in the ribbon.</li>
<li>It will be applicable to following views:</li>
<ul>
<li>Component</li>
<li>Page</li>
<li>Schema</li>
<li>Page Templates</li>
<li>Component Templates</li>
<li>Template Building Blocks</li>
</ul>
<li>On clicking the button, a Command fires to take the control to the item's location.</li>
<li>It needs to have following resources (Resource Group) available in Tridion</li>
<ul>
<li>Image - to be applied on the button</li>
<li>CSS File - to define styling on the extension button</li>
<li>Command JS File - to define the command to be fired on button click</li>
</ul>
</ol>
<br />
<div style="text-align: left;">
Lets visit the code against the above points:</div>
<div style="text-align: left;">
</div>
<ol style="text-align: left;">
<li>Open the file "Config\GoToLocationExtension.cs". you would notice that the class is extended with the base class "RibbonToolbarExtension". Doing this you instruct Alchemy Framework that your extension is a Ribbon Toolbar Extension.</li>
<li>In the same file you would see the lines like <i>Apply.ToView(Constants.Views.{ViewName})</i>. The code is to apply the extension on different views.</li>
<li>We always define the Tridion Commands in JS files and place it inside a fixed folder structure "Static/Commands". You can see we have "GotoLocationCommands.js" in there to define our command. In execute method of the command, we simply get the "GoTo" command defined in Anguilla Framework and execute it on selected item.</li>
<li>Resources are generally supportive files needed in Tridion for your extension. These files are organized in a fixed structure in the project inside the "Static" folder.</li>
<ul>
<li>Image: To apply an image, we need to add the image in the project inside the folder "Static/Images" so that it is available to use.</li>
<li>CSS File: This file contains all the styling we need to add to our extension and sits in "Static/Styles" folder. In this case we just want a background image for the ribbon bar button as styling. If you notice in the css file, we are applying the image on a element with the id "RibbonToolbarGoToLocationButton". The id is nothing but the <i>Assign Id </i>of the extension (defined in "GoToLocationExtension.cs" file), which ends up as a HTML element id for the extension. </li>
<li>Command JS File: The file is located at "Static/Commands" and contains the command as we mentioned in point 3.</li>
</ul>
</ol>
Now when we created different pieces we need for the functioning of our extension, We need to instruct Alchemy Framework; what is what and how these are inter connected?<br />
<div style="text-align: left;">
</div>
<ol style="text-align: left;">
<li>Alchemy Framework needs to know about the commands your extension have and to define it, we create a class derived from "CommandSet" base class. The class "GoToLocationExtension.cs" could be spotted under "Config" folder, having the command added (defined in the Command JS File, the name must match)</li>
<li>We must tell Alchemy, which resources are going to use for the extension and to define it, we create another class derived from "ResourceGroup" base class. This class adds all the Resource Files, Command Sets and other dependencies needed for the extension. The class can be found at "Config/GoToLocationResouceGroup.cs".</li>
<li>Lastly tell Alchemy that the extension is dependent on the Resource Group we just created. To do so, add the line <i>Dependencies.Add<GoToLocationResouceGroup>() </i>to the extension class "Config\GoToLocationExtension.cs".</li>
</ol>
<div>
And that's it. All other properties in the code files are quite self explanatory. </div>
<div>
Now build the project, you get your .A4T alchemy file for the extension. yay!</div>
<div>
<br /></div>
<div>
</div>
<br />
<div style="text-align: left;">
<br /></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com1tag:blogger.com,1999:blog-7739304994971294045.post-62273896225295904262016-12-26T11:09:00.000-08:002016-12-26T11:09:27.458-08:00Edit Templates From Page | Alchemy Plugin<div dir="ltr" style="text-align: left;" trbidi="on">
SDL Developers India Community organized a professionals meet this year in New Delhi and I was fortunate to join the event. I met some really nice guys from the community there and had a good time. I also spoke on Alchemy along with <a href="https://www.linkedin.com/in/robertcurlette" target="_blank">Robert Curtelle</a> and after finishing the session, this guy <a href="https://www.linkedin.com/in/accesstejas" target="_blank">Tejas </a>came to me with this idea of the plugin.<br />
<br />
He said, as a Tridion developer when he found a rendering bug on a webpage (published from SDL WEB), he used to do the following:<br />
1. Navigate to the page in Tridion.<br />
2. See which templates were used.<br />
3. Memorize the Name or TcmId of the template.<br />
4. Navigate to the template to open it.<br />
5. Check the TBBs used in the template to identify/fix the issue.<br />
<br />
He asked me it would be really helpful, if we could build a plugin which gives links/buttons to Edit the templates directly from the page. With this we could eliminate the steps 2, 3, 4 from the process above. I really liked the Idea and almost after a year I manged to build the plugin (Yeah, I know I am lazy :) )<br />
<br />
<h3 style="text-align: left;">
What it does?:</h3>
Well, it is one of the simplest plugins you would have. It simply places edit buttons in form of the templates used on the page. User can simply click the buttons to Open/Edit the template.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht91wt3jDYonvZ9tq5WSLxmt3FDxX1QdDWszylUcpB5-JFw6R7gXN09Kbv9mFJdgxb_RbOqpojjFzz3Jql40qXB7vGO7v0rICTlvSpVwbHjVfd7y3U-MSqAGi24VT_wN3AY5C_Z7qmKvo/s1600/AlchemyPluginEditTempFromPageEditSC2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Page Template Edit Button" border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht91wt3jDYonvZ9tq5WSLxmt3FDxX1QdDWszylUcpB5-JFw6R7gXN09Kbv9mFJdgxb_RbOqpojjFzz3Jql40qXB7vGO7v0rICTlvSpVwbHjVfd7y3U-MSqAGi24VT_wN3AY5C_Z7qmKvo/s400/AlchemyPluginEditTempFromPageEditSC2.png" title="Page Template Edit Button" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFssbtJTWk18VSD8Wmk8red8-NFQNbXxRGyxBmz6dXSd7J82i-Yy0vKgOphSs6hXIMs4afZdpGiBZArbHDEiNt0fQkLWmnU1RigrJfj0ZduJlzKHpvyRx8vo6i5P07P3sVg124Af-RO98/s1600/AlchemyPluginEditTempFromPageEditSC1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFssbtJTWk18VSD8Wmk8red8-NFQNbXxRGyxBmz6dXSd7J82i-Yy0vKgOphSs6hXIMs4afZdpGiBZArbHDEiNt0fQkLWmnU1RigrJfj0ZduJlzKHpvyRx8vo6i5P07P3sVg124Af-RO98/s400/AlchemyPluginEditTempFromPageEditSC1.png" width="400" /></a></div>
<br />
<br />
<br />
<span id="goog_145935349"></span><span id="goog_145935350"></span><br />
<br />
<br />
<br />
<br />
<br />
<u><br /></u>
<br />
<h3 style="text-align: left;">
Let's build it once again:</h3>
<br />
I've already shared the <a href="https://github.com/saurabhgangwar/Alchemy.Plugins.EditTemplatesFromPage" target="_blank">code for the plugin</a> on GitHub. You can have a look at the code in detail after downloading it but let's discuss it briefly here.<br />
In technical terms, we want to build a "ExtensionGroup" GUI Extension using Alchemy, which has group of resource files, to be targeted to the Page View ("Tridion.Web.UI.Editors.CME.Views.Page").<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHFtmJAtYRxUPIsfRduSZooaSE2zBNUquYgBxrHvgRljI71ybFzr9LLHZCVdlE-T858KDmpbZZGmt-aYt6OxNnLMMgMJ2Yb4W-6EUnorgor3I2o8wsaHrOzzZxuJLxGn61IJTXaWCt-fU/s1600/A4TTemplate.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHFtmJAtYRxUPIsfRduSZooaSE2zBNUquYgBxrHvgRljI71ybFzr9LLHZCVdlE-T858KDmpbZZGmt-aYt6OxNnLMMgMJ2Yb4W-6EUnorgor3I2o8wsaHrOzzZxuJLxGn61IJTXaWCt-fU/s320/A4TTemplate.JPG" width="320" /></a></div>
So after creating a project using the A4T template in Visual Studio, I created two classes:<br />
<br />
1. EditTemplatesFromPageResourceGroup (Extending from ResourceGroup base class)<br />
<br />
2. EditTemplatesFromPageExtensionGroup (Extending from ExtensionGroup base class)<br />
<br />
<br />
<br />
<h4 style="text-align: left;">
EditTemplatesFromPageResourceGroup</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3cTqnh0sgBCOucBRWGWFUZA3wT9-K9rWW1pR5okln59RALfTfukzBAj40iJxKdZFvtstwb0HRLC35iEhtQGreQPVp-jhKbF2NaH4_eO03vsog2Wndy7Gn3gPCJUyRmDNKof456B3lr4Y/s1600/EditTemplatesFromPageExtensionGroup.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3cTqnh0sgBCOucBRWGWFUZA3wT9-K9rWW1pR5okln59RALfTfukzBAj40iJxKdZFvtstwb0HRLC35iEhtQGreQPVp-jhKbF2NaH4_eO03vsog2Wndy7Gn3gPCJUyRmDNKof456B3lr4Y/s640/EditTemplatesFromPageExtensionGroup.JPG" width="640" /></a></div>
<br />
As the comment inside the code says, this code simply adds "EditTemplatesFromPageResourceGroup" Resource Group as an Extension to extend the resource "Tridion.Web.UI.Editors.CME.Views.Page". That means all the resource files referenced in the class "EditTemplatesFromPageResourceGroup" will be available on the Page.<br />
<br />
<h4 style="text-align: left;">
EditTemplatesFromPageResourceGroup</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBCy2chc9kwua_qMGVkWdN2TSR0cm5VsAZx3N5fOqxtlo0r0yTbl9QtX-mUYIHXz5o7jXdSfqn6XQHdHs7Sa0fcwfMCmCF-hccVIOh7fExRsWLXlfalmUc8Ep6ZUwP5lK6CeR6o90WqRg/s1600/EditTemplatesFromResourceGroup.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBCy2chc9kwua_qMGVkWdN2TSR0cm5VsAZx3N5fOqxtlo0r0yTbl9QtX-mUYIHXz5o7jXdSfqn6XQHdHs7Sa0fcwfMCmCF-hccVIOh7fExRsWLXlfalmUc8Ep6ZUwP5lK6CeR6o90WqRg/s640/EditTemplatesFromResourceGroup.JPG" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
This class represents a Resource Group, we want to add for the extension.<br />
From line 17 to 19 we are adding JS and CSS files needed.<br />
Line 21 adds a <a href="http://www.alchemywebstore.com/api-docs/html/ac68b3d0-f4af-49b5-8a3e-32b4d4472b86.htm#JavaScriptProxy" target="_blank">Web API Proxy</a> in case we want to interact with CMS using <a href="http://www.alchemywebstore.com/api-docs/html/ac68b3d0-f4af-49b5-8a3e-32b4d4472b86.htm" target="_blank">Web API Controller</a>, Though we are not using it in this version but added it for future versions.<br />
Line 23 adds JQuery as a dependency. With this we can have JQuery available in our JS files. If you look at the JS code, you will see we are creating JQuery object something like<br />
<br />
<div class="code">
$JQ = Alchemy.library("jQuery");
</div>
<br />
Okay, lets talk about the resource files used in the Resource Group . It has the following resource files:<br />
<br />
<b>1. PageTemplateEditLink.js</b><br /> This JS file is responsible to render the Page Template Edit Button. If you look at the code, it simply<br />
<div>
<ol style="text-align: left;">
<li>Create a HTML Element for the button</li>
<li>Insert it beside the Page Template dropdown</li>
<li>Add a "click" event handler function to the button, which runs the following JS code</li>
</ol>
<div class="code">
var pageTemplateId = page.getPageTemplateId();<br />
var s = new Tridion.Cme.Selection();<br />
s.addItem(pageTemplateId);<br />
$commands.executeCommand("Open", s);</div>
<div>
<br /></div>
<div>
The code gets the current Page Template from the Page object and fires a "Open" command on it using Anguilla framework.<br />
<br /></div>
<div>
<b>2. ComponentTemplateEditLink.js</b><br /><ul style="text-align: left;">
</ul>
<div>
This JS file is responsible to render the Component Template Edit Button/s. What is does:</div>
<div>
<ol style="text-align: left;">
<li>Create a HTML Element for the button</li>
<li>Insert it beside the Component Template dropdown in Component Presentations Tab</li>
<li>Add a "click" event handler method to the button as below</li>
</ol>
<div class="code">
// Get the selected Component template from the dropdown anguilla object<br />
var ctId = ddl.getValue();<br />
// Execute the open command<br />
var s = new Tridion.Cme.Selection();<br />
s.addItem(ctId);<br />
$commands.executeCommand("Open", s);</div>
<div>
<br /></div>
<div>
The code gets the current Component Template from the dropdown object and fires a "Open" command on it using Anguilla framework.</div>
<div>
<br /></div>
<b>3. EditTemplatesFromPage.css</b><br /><div>
This file contains all the css styles used for the Edit Buttons.</div>
<div>
<br />
<br />
After updating<a href="http://www.alchemywebstore.com/api-docs/html/c1dded74-cd52-4494-bad8-e2b895bc9cf5.htm#Configuration" target="_blank"> a4t.xml</a> file with the name and description, now we are all set to build our plugin and after a successful build we will get the magic A4T file, which can be installed to <strike>Tridion</strike> SDL Web.<br />
<br />
Again, I have shared the plugin code on GitHub you can <a href="https://github.com/saurabhgangwar/Alchemy.Plugins.EditTemplatesFromPage" target="_blank">download</a> it if you want. In case you have any questions, feel free to contact or write comments. </div>
<br />
<br />
<u><br /></u></div>
</div>
</div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com1tag:blogger.com,1999:blog-7739304994971294045.post-74184935798619419012016-10-21T04:02:00.002-07:002017-10-27T01:45:58.780-07:00Forcing Workflow on the Components | Things you should know<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWhdsZ_zvsGMOsmSWw94ZGHKMZtXYinuOgFTz00rdu2n7tvovHc64q0Yro0bFnv7YgmMkU0LBzksyN-zBhRnfVfprhlnwA3GgG0PXuxCtdd6iy5NJ3feg2RiHv9zkfsfeBvgInZY1zWJY/s1600/Workflow.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="379" data-original-width="407" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWhdsZ_zvsGMOsmSWw94ZGHKMZtXYinuOgFTz00rdu2n7tvovHc64q0Yro0bFnv7YgmMkU0LBzksyN-zBhRnfVfprhlnwA3GgG0PXuxCtdd6iy5NJ3feg2RiHv9zkfsfeBvgInZY1zWJY/s200/Workflow.JPG" width="200" /></a></div>
We implemented workflow using bundles with Tridion version 2013 SP1 HR1. Customer really liked the overall functionality but when a component updated outside of the workflow or a new component created, component was set to approval status 'undefined'. With this 'undefined' approval status there was no restriction on publishing those components at all, means the content which was yet to be approved by workflow process could be published. Certainly we didn't want this as this takes away one of the main purposes 'Content Auditing' of having the workflow.<br />
<br />
So we needed some way to mitigate this risk and force the workflow on the items before they are set to publish.<br />
<br />
Tridion provides a OOB option to force workflow on items, for this use the checkbox “Any changes made to a Component based on this Schema require approval by a Bundle Workflow Process” in the Component Schema as shown below:<br />
<br />
<div style="background-color: white; border: 0px; clear: both; color: #242729; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; margin-bottom: 1em; padding: 0px;">
<a href="https://i.stack.imgur.com/uQmZW.png" rel="nofollow" style="border: 0px; color: #18529a; cursor: pointer; margin: 0px; padding: 0px; text-decoration: none;"><img alt="enter image description here" src="https://i.stack.imgur.com/uQmZW.png" style="border: 0px; margin: 0px; max-width: 100%; padding: 0px;" /></a></div>
<br />
<b>How does it work in concept </b><br />
<br />
If the check box is checked in the schema, components based on the Schema cannot be checked-in except by workflow. The process would be, you add the items to a Bundle and when you are ready for all of the items inside to go through workflow then Start Workflow on that Bundle.<br />
If someone updates/creates components outside of workflow, Instead of being checked-in, the components will be "Waiting for Workflow" before you add it to a Bundle and start the workflow on it. Components could be unlocked, so other people can continue editing it, with the condition that they need to take over all previous changes too (so if they Undo Checkout, they throw away all changes, not just their own). The CME and Experience Manager will prompt you to "take ownership" when you attempt to edit such a component, The workflow doesn’t give that prompt and assign the previous changes to the current user of the activity.<br />
<b><br /></b>
<b>Porting content using Content Porter tool:</b><br />
<b><br /></b>
The content porting remains the same in principal with this workflow enforcement, below are few points worth highlighting:<br />
a.<span class="Apple-tab-span" style="white-space: pre;"> </span>Components could be updated/created outside of workflow for the first time, a minor version will be created with the updates and then components will be locked and waiting for workflow. (Further updates to the components are possible manually but not with the content porter. In manual case user will have to “Take Ownership” of the previous updates).<br />
<br />
b.<span class="Apple-tab-span" style="white-space: pre;"> </span>Subsequent updates could only be made If the components are in workflow, the workflow activity is assigned to the user doing the porting. OR once the items have gone through the workflow (components have latest major versions).<br />
<b><br /></b>
<b>Translation:</b><br />
<br />
We are supporting translation inside workflow and we faced a issue related to translation after enabling the workflow enforcement as asked <a href="http://tridion.stackexchange.com/questions/15738/forcing-bundle-workflow-process-on-components-workflow-process-hastranslation" target="_blank">here</a>.<br />
<br />
So we had a “Send For Translation” workflow activity to send the content for translation. This activity creates a translation job of type “Push” and sends components for translation. when the translation job is sent, the component is localized and checked-out in target publications. When the translation is retrieved by the translation management system it's checked back in. (This works like this when we don't force the workflow in the components).<br />
But after forcing Bundle Workflow Process on Components using the checkbox in the schema, Once translation is complete, the components are NOT localized with the local content in the target publication.<br />
<br />
I guess, this could be because when TMS tries to localize and update the component, it can’t because Tridion expects the component to be locked by a “Bundle Workflow Process”. And so the component is not localized and remains untranslated.<br />
<br />
Solution:<br />
This issue is with 2013 sp1 and as it mentioned in one of the answers, there is a a hotfix for this issue "TT88491".<br />
But there are workaround for this issue without this hotfix.<br />
<ol style="text-align: left;">
<li>Localize the schema at local publication level and uncheck the checkbox.</li>
<li>Disable workflow for local Publication.</li>
</ol>
<div>
I've not tested it but expert says that this issue is fixed in web 8.</div>
<div>
<br /></div>
<div>
<br /></div>
<br />
That's it chaps, it's really a cool feature do try it.<br />
<br /></div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-34652310372144526932016-09-23T07:42:00.000-07:002016-09-25T23:26:37.660-07:00Items Panel Search Alchemy Plugin<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
Here is another Alchemy plugin called <a href="http://www.alchemywebstore.com/plugins/Items-Panel-Search" target="_blank">Items Panel Search</a>, which is now available on <a href="http://www.alchemywebstore.com/" target="_blank">Alchemy Web Store</a>. It
is inspired by another plugin called Publication Panel Search, publication panel search plugin operates on publications list but this plugin on items list in the right panel. It places a search box over items list to search or filter items. User types some text and the items list gets filtered on every key press and shows the items containing the string.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Also, the plugin preserves the search value and the search results if user open an item from the list or does the sorting. User can reset the search by clicking the refresh button at the top of the list.</div>
<div class="MsoNormal">
<br />
Other than search for a particular item in a long item list,
this plugin could be useful in situations when someone wants to operate on a
set of items having a common string in title of the items. As shown in below
image, all the items having “Articles” in titles are filtered.</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgll5rcZs79VmBco4D52z5N9qfEZ8EKEreFn0Vs4gKxGtuRq-5dQwqc_AUN8-r4-f76ueod-tMjBoX9e6Z2FMkj-cAOg_ScEoVJZDseffbAZwY8uWx5cXutO-qidr3Nj2pslhCXbz8nwD8/s1600/ItemsPanelSearch1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgll5rcZs79VmBco4D52z5N9qfEZ8EKEreFn0Vs4gKxGtuRq-5dQwqc_AUN8-r4-f76ueod-tMjBoX9e6Z2FMkj-cAOg_ScEoVJZDseffbAZwY8uWx5cXutO-qidr3Nj2pslhCXbz8nwD8/s640/ItemsPanelSearch1.jpg" width="640" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoIH25C0v0Bgr1ZEvqUjXVo_nNt4ojoZWwtZoogUcfIAt92TW5-sao8FlVQLZfGwk9kzmuf2ZQskxhhDVmaQmEvKLgIVirmEjHq-gQqb_m31kG7IFrDep5kmrBtdaPlxKj84DV7Uegf9Q/s1600/ItemsPanelSearch2.jpg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoIH25C0v0Bgr1ZEvqUjXVo_nNt4ojoZWwtZoogUcfIAt92TW5-sao8FlVQLZfGwk9kzmuf2ZQskxhhDVmaQmEvKLgIVirmEjHq-gQqb_m31kG7IFrDep5kmrBtdaPlxKj84DV7Uegf9Q/s320/ItemsPanelSearch2.jpg.png" width="320" /></a></div>
<div class="MsoNormal">
This plugin gives users two search options, <i>titles
only</i> and <i>all information</i> presented in the list. By default it searches on the titles of the items, if user want to search for all information shown, he can enable it going to plugin configuration and set the value for “SearchAllInformation” to true.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
In technical term it is a GUI extension of type <i>Resource
Extension Group</i> added to the <i>Dashboard View</i>. It simply contains a JS file as
a resource, that is responsible to put the search box on the top of <i>FilteredListControl</i> and all the functionality included.</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
To see the plugin code please visit this <a href="https://github.com/saurabhgangwar/Alchemy.Plugins/tree/master/Alchemy.Plugins.ItemPanelSearch" target="_blank">Github link</a>.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
Feel free to contact if you have any questions or
suggestions regarding this plugin.<o:p></o:p></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-7842090151752259872016-05-29T14:06:00.000-07:002016-05-29T14:13:42.109-07:00Title Translator | Alchemy Plugin for Tridion<div dir="ltr" style="text-align: left;" trbidi="on">
I worked on a Tridion implementation for a client managing huge local content for their websites. One could imagine that local content is hardly anything to do with a developer, but he could be wrong. So at that client, with the content inside the localized components, the title of the items were also in local languages (at many places), specifically they had tons of local taxonomies with the local language titles. Now if any issues reported for a localized website, it was a nightmare for the developers to dig in to the content while investigating that issue because we developers knew only English language.<br />
<br />
Few weeks ago, while looking at some of old work for that client that I remembered those days and that issue. So I decided to create a Alchemy Plugin called called <a href="http://www.alchemywebstore.com/plugins/Title-Translator" target="_blank"><b>Title Translator</b></a> to address that issue, you can follow the link to Alchemy Web Store and <a href="http://www.alchemywebstore.com/plugins/Title-Translator" target="_blank"><b>download</b></a> it from there.<br />
This is really a simple plugin which uses SDL Translation API in background, all you need to do is get a <a href="https://languagecloud.sdl.com/translation-toolkit/api-documentation" target="_blank">SDL Translation API key</a>, set the key in Plugin Configuration and you are ready to go. In the coming versions, I will try to include the support for Microsoft and Google translation as well.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ggmD9uYZPnDX-VsGxqJqeiYX927dsEHuEOFnGPTk2uq3XAqg08uLEOOY9ySeeisb52pYcgcIRbNqUvv597sLVYY9d8ibgA_oKdFRnJYtPOSGc5DZI0FTHLzxE0gfDHsY2G_uJkvTudo/s1600/SC2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ggmD9uYZPnDX-VsGxqJqeiYX927dsEHuEOFnGPTk2uq3XAqg08uLEOOY9ySeeisb52pYcgcIRbNqUvv597sLVYY9d8ibgA_oKdFRnJYtPOSGc5DZI0FTHLzxE0gfDHsY2G_uJkvTudo/s400/SC2.png" width="400" /></a></div>
To use the plugin, simply right click on a title in your CMS Filtered Item list or left-hand navigation panel and select 'Translate Title'. The updated title will show in the notification bar.<br />
<div>
<br /></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
On the Technical side, This plugin is created using Alchemy Framework. The idea was pretty simple, create a context menu extension and on clicking it fire a command to show the translated title in notification bar.<br />
<br />
The <b>Code </b>for the Plugin can be found <a href="https://github.com/saurabhgangwar/Alchemy.Plugins.TitleTranslator" target="_blank">here</a> on Github. This basically have following building blocks:<br />
<br />
<ul style="text-align: left;">
<li>TranslatorContextMenuExtension: This class holds information about your context menu extension. Other than specifying name and id, below are the important pieces of info it has: </li>
<ul>
<li>The order of your extension in the context menu.</li>
<li>Associated command to the context menu extension.</li>
<li>Dependent resource groups.</li>
<li>Which view, the extension applies to, In this extesnsion it applies to "DashboardView".</li>
</ul>
<li>TranslatorCommandSet: The class is all about creating a command set from the commands specified in the JS files. We have only one command called "translate" and it is add to the commandset.</li>
<li>TranslatorResourceGroup: This class is used to tell alchemy, which resources (files/CommandSets) are you using in your extension. We have just one JS file named "TranslatorCommand.js" and one command set, so adding those in there.</li>
<li>TranslatorCommand.js file: This file holds the command code, which fires once "Translate Title" in context menu is clicked. The code basically sends the request to the SDL Machine Translation Service and gets back the translated title as an response and shows it in notification bar.</li>
</ul>
<div>
That's it chaps, go use it. And yeah, feel free to leave comments, questions, report bugs, improvements, pretty much anything related to it.</div>
<br />
<br />
Thanks.<br />
<br /></div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-64719591105228907132016-01-06T02:03:00.003-08:002016-01-17T12:23:22.447-08:00Tridion Custom Tools Example Projects – Event Handler<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">In the blogpost series of Tridion Custom Tools Example Projects, this blog covers the <a href="http://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20full%20documentation-v1/GUID-87B291DD-99C5-4124-BDAE-B49182072ABA" target="_blank"><b>Event Handler</b></a> Extension. The <b>Example Code Project</b> could be found <a href="https://github.com/saurabhgangwar/ExampleTridionEventHandler" target="_blank"><b>here </b></a>on GIT. I've also shared the<b> Visual Studio Extension <a href="https://github.com/saurabhgangwar/ExampleTridionEventHandler/blob/master/VisualStudioProjectTemplate/TridionEventHandlerExtension.vsix" target="_blank">here</a></b>, If you want to install the project template in visual studio for event handler.</span><br />
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;"><br /></span>
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">An Event Handler is a piece of functionality
that is triggered when a certain type of event happens to a certain Content
Manager item, </span><span style="background-color: white; font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">for example when a Component being saved.</span><br />
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;"><br /></span>
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">In Technical terms, </span><span style="background-color: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">It is a .NET assembly that uses the Event
System to hook into events occurring in the Content Manager.The Event System is part of the TOM.NET (.NET Tridion Object Model) API.</span><span style="background-color: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;"> </span><br />
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;"><br /></span>
<br />
<div class="MsoNormal">
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">To create an Event Handler, create a class that extends<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="background: white; font-family: 'Courier New'; font-size: 10.5pt; line-height: 107%;">Tridion.ContentManager.Extensibility.TcmExtension</span></b></span><span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">. You then need to compile your Event Handler into
an assembly (DLL) and register it.</span></div>
<div class="MsoNormal">
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;"><br /></span></div>
<h3 style="background: white; line-height: 15.75pt; margin-top: 12pt; text-align: left;">
<span style="font-family: Arial, sans-serif; font-size: 12pt;">Procedure (Copied From SDL Documentation)</span></h3>
<ol data-id="STEPS_499BF74C9F9044F88772F1E8E7C8D9BF" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEPS_499BF74C9F9044F88772F1E8E7C8D9BF" start="1" style="margin-top: 0in;" type="1">
<li class="MsoNormal" data-id="STEP_2B90065626F54AE2A688384DD22B2083" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_2B90065626F54AE2A688384DD22B2083" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">In Visual Studio,
create a class that extends<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="font-family: "Courier New"; font-size: 10.5pt;">Tridion.ContentManager.Extensibility.TcmExtension</span></b></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">. This class must
have a unique class attribute, say,</span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">[TcmExtension("MyUniqueEventHandlerExtension")]</span></code><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">.<o:p></o:p></span></li>
<li class="MsoNormal" data-id="STEP_2E4937F52C8449C494F3924AEDD90A3B" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_2E4937F52C8449C494F3924AEDD90A3B" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">In the constructor
of this class, execute code that subscribes to one or more events using
the following methods:<o:p></o:p></span></li>
</ol>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<code><b><span style="font-size: 10pt;">SubscribeAsync</span></b></code><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">Subscribe
asynchronously to an event. Select this method if your Event Handler code does
not affect the data being handled in the Content Manager. For example, if your
Event Handler saves data to a backup system or a log file, you can select this
method.<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<code><b><span style="font-size: 10pt;">Subscribe</span></b></code><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">Subscribe
synchronously to an event. Select this method if your Event Handler code
changes the data being handled. For example, if your Event Handler analyzes a
Component and then adds metadata to it, ensure that you select this method.<o:p></o:p></span></div>
<div style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">Both
methods have the following signatures:<o:p></o:p></span></div>
<pre style="background: #F5F2F0; margin-bottom: 6.0pt; margin-left: .5in; margin-right: 0in; margin-top: 6.0pt; overflow: auto; tab-size: 4; text-shadow: 0px 1px; word-spacing: normal; word-wrap: break-word;"><code style="tab-size: 4; text-shadow: 0px 1px; word-spacing: normal;"><span style="font-family: Consolas;">Subscribe<TSubject, TEvent>(TcmEventHandler<TSubject, TEvent> eventHandler, EventPhases phases, EventSubscriptionOrder order)<o:p></o:p></span></code></pre>
<pre style="background: #F5F2F0; margin-bottom: 6.0pt; margin-left: .5in; margin-right: 0in; margin-top: 6.0pt;"><code><span style="font-family: Consolas;">SubscribeAsync<TSubject, TEvent>(TcmEventHandler<TSubject, TEvent> eventHandler, EventPhases phases, EventSubscriptionOrder order)</span></code><span style="font-family: Consolas;"><o:p></o:p></span></pre>
<div style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">where the
parameters mean the following:<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<code><b><span style="font-size: 10pt;">TSubject</span></b></code><span class="apple-converted-space"><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></b></span><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">(type parameter)<o:p></o:p></span></b></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">This is the
type(s) of the object you are checking events for. This can be any item of
class<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="font-family: 'Courier New'; font-size: 10.5pt;">Tridion.ContentManager.IdentifiableObject</span></b></span><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">or any of its subclasses, which includes any
kind of content item (such as Component, Schema or Target Group), organizational
item (such as Folder or Structure Group) or system-wide object (such as User or
Group).<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<code><b><span style="font-size: 10pt;">TEvent</span></b></code><span class="apple-converted-space"><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></b></span><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">(type parameter)<o:p></o:p></span></b></div>
<div style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">This
indicates the type(s) of event that trigger this code if applied to an item of
the object type specified in<span class="apple-converted-space"> </span></span><code><span style="font-size: 10pt;">TSubject</span></code><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">. This can
be any event of class</span><span class="filepath"><b><span style="font-family: 'Courier New'; font-size: 10.5pt;">Tridion.ContentManager.Extensibility.TcmEventArgs</span></b></span><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">or any of its subclasses.<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<code><b><span style="font-size: 10pt;">TcmEventHandler<TSubject, TEvent></span></b></code><span class="apple-converted-space"><b><span style="font-family: 'Courier New'; font-size: 10pt;"> </span></b></span><em><b><span style="font-family: 'Courier New'; font-size: 10pt;">eventHandler</span></b></em><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">The name of
the method that contains the code you want to be triggered when the event
occurs. This method should be contained in the same class and should have
parameters that are the same as the type parameters of this<span class="apple-converted-space"> </span></span><code><span style="font-size: 10pt;">Subscribe</span></code><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">or<span class="apple-converted-space"> </span></span><code><span style="font-size: 10pt;">SubscribeAsync</span></code><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">method.<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<code><b><span style="font-size: 10pt;">EventPhases</span></b></code><span class="apple-converted-space"><b><span style="font-family: 'Courier New'; font-size: 10pt;"> </span></b></span><em><b><span style="font-family: 'Courier New'; font-size: 10pt;">phases</span></b></em><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"><o:p></o:p></span></b></div>
<div style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">The exact
moment during the event at which the event code should be triggered. Note that
this parameter is an<span class="apple-converted-space"> </span></span><code><span style="font-size: 10pt;">enum</span></code><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">with<span class="apple-converted-space"> </span></span><code><span style="font-size: 10pt;">FlagsAttribute</span></code><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">, meaning
that you can select multiple moments, which in turn means that a single event
could trigger the same code multiple times.<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<code><b><span style="font-size: 10pt;">EventSubscriptionOrder</span></b></code><span class="apple-converted-space"><b><span style="font-family: 'Courier New'; font-size: 10pt;"> </span></b></span><em><b><span style="font-family: 'Courier New'; font-size: 10pt;">order</span></b></em><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">This
optional parameter specifies when the event code should be executed if the same
event triggers multiple Event Handlers.<o:p></o:p></span></div>
<ol start="3" style="margin-top: 0in;" type="1">
<li class="MsoNormal" data-id="STEP_40778A3037994B05A44ADF460B885305" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_40778A3037994B05A44ADF460B885305" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Now, in the same
class, implement your event code in a method with the name specified in
the<span class="apple-converted-space"> </span></span><em><span style="font-family: "Courier New"; font-size: 10.0pt;">eventHandler</span></em><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">parameter of the<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">Subscribe</span></code><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">or<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">SubscribeAsync</span></code><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">method. In this method, you can perform
any action you wish, including any type of querying, modification or other
manipulation of items in the Content Manager. Include any namespace you
need to access these items.<o:p></o:p></span></li>
</ol>
<div style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">When you
write this code, note the following:<o:p></o:p></span></div>
<ol start="3" type="1">
<ul data-id="UL_61FED7A4589949ADA8474EE2B23F4C8A" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__UL_61FED7A4589949ADA8474EE2B23F4C8A" type="circle">
<li class="MsoNormal" data-id="LI_F4398BE32DF247C3998F6BE7927DBC0F" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__LI_F4398BE32DF247C3998F6BE7927DBC0F" style="background: white; line-height: 15.75pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">You can make
changes to the members of the<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">TEvent</span></code><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">parameter (the
members are different depending on the event type) by exchanging
information between Event Handlers.<o:p></o:p></span></li>
<li class="MsoNormal" data-id="LI_6DA9815BC58C45638CC5A8DADA8E0597" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__LI_6DA9815BC58C45638CC5A8DADA8E0597" style="background: white; line-height: 15.75pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">When executed,
the code you write may result in other event code being triggered.<o:p></o:p></span></li>
<li class="MsoNormal" data-id="LI_1D44D2B2ECA9470B86F6235670914F8F" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__LI_1D44D2B2ECA9470B86F6235670914F8F" style="background: white; line-height: 15.75pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">From your event
handling method, you can identify the specific user who triggered the
event through the<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">Session</span></code><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">property of your
first parameter of type<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"><TSubject></span></code><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">. For example, if your method has a
signature<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">HandlerForSave(Component subject, SaveEventArgs args,
EventPhases phase)</span></code><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">, get the name of the user by checking<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">subject.Session.User.Title</span></code><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">.<o:p></o:p></span></li>
</ul>
<li class="MsoNormal" data-id="STEP_F6F3BE08AC12447389DD7E65CE24C19F" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_F6F3BE08AC12447389DD7E65CE24C19F" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Once you are
satisfied with your code, shut down the following services on your Content
Manager server:<o:p></o:p></span></li>
<ul type="circle">
<li class="MsoNormal" data-id="LI_47B1C63830634C98A53979A7E877D1FF" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__LI_47B1C63830634C98A53979A7E877D1FF" style="background: white; line-height: 15.75pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">IIS<o:p></o:p></span></li>
<li class="MsoNormal" data-id="LI_9AF6BC03CF9B4E5DAD90A9D61F3730F6" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__LI_9AF6BC03CF9B4E5DAD90A9D61F3730F6" style="background: white; line-height: 15.75pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Any
Tridion-related COM+ services<o:p></o:p></span></li>
<li class="MsoNormal" data-id="LI_BBF4B62BE2664FDEA5C3B05C8F8A7486" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__LI_BBF4B62BE2664FDEA5C3B05C8F8A7486" style="background: white; line-height: 15.75pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">If your code is
related to publishing, the Publisher service of SDL Tridion<o:p></o:p></span></li>
</ul>
<li class="MsoNormal" data-id="STEP_08BC80F088A2405BA1D19FE167002D64" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_08BC80F088A2405BA1D19FE167002D64" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Compile your class
to a .NET assembly.<o:p></o:p></span></li>
</ol>
<div class="MsoNormal" style="background: white; line-height: 15.75pt; margin-bottom: 12.0pt; margin-left: .5in; margin-right: 0in; margin-top: 12.0pt;">
<span class="notetitle"><b><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">Note:</span></b></span><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">If your
event code contains a bug that raises an exception, it can cause the event that
triggered it to hang. Especially if your event code is likely to be triggered
very often, this can easily cause the system to freeze. Always test your event
code before deploying it.<o:p></o:p></span></div>
<ol start="6" style="margin-top: 0in;" type="1">
<li class="MsoNormal" data-id="STEP_4AFA506730CE4D3CA81BA47DA3885FAD" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_4AFA506730CE4D3CA81BA47DA3885FAD" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Open the
configuration file called<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="font-family: "Courier New"; font-size: 10.5pt;">Tridion.ContentManager.config</span></b></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">, located in the<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="font-family: "Courier New"; font-size: 10.5pt;">config/</span></b></span><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">subfolder of<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">%TRIDION_HOME%</span></code><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">(defaults to<span class="apple-converted-space"> <span data-id="CMROOTDIR" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__CMROOTDIR"></span></span><span class="filepath"><b><span style="font-family: "Courier New"; font-size: 10.5pt;">C:\Program
Files (x86)\Tridion\</span></b></span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">), in a plain-text or XML editor. Find the<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;">extensions</span></code><span class="apple-converted-space"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">element in this
file. If the element is empty (that is, if it reads<span class="apple-converted-space"> </span></span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"><extensions/></span></code><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">), replace it with</span><code><span style="font-size: 10.0pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin;"><extensions></extensions></span></code><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">. Then add a line
of the following format:<o:p></o:p></span></li>
</ol>
<pre style="background: #F5F2F0; margin-bottom: 6.0pt; margin-left: .5in; margin-right: 0in; margin-top: 6.0pt;"><span class="token"><span style="color: #999999; font-family: Consolas;"><</span></span><span class="token"><span style="color: #990055; font-family: Consolas;">add </span></span><span class="token"><span style="color: #669900; font-family: Consolas;">assemblyFileName</span></span><span class="token"><span style="color: #999999; font-family: Consolas;">="</span></span><span class="token"><span style="color: #0077aa; font-family: Consolas;">C:\Projects\Events\MyCustomEventHandlerExample\bin\Debug\MyCustomEventHandler.dll</span></span><span class="token"><span style="color: #999999; font-family: Consolas;">"</span></span><span class="token"><span style="color: #990055; font-family: Consolas;"> </span></span><span class="token"><span style="color: #999999; font-family: Consolas;">/></span></span><span style="font-family: Consolas;"><o:p></o:p></span></pre>
<div style="background: white; line-height: 15.75pt; margin-left: .5in;">
<span style="font-family: Arial, sans-serif; font-size: 10.5pt;">where<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="font-family: 'Courier New'; font-size: 10.5pt;">MyCustomEventHandler.dll</span></b></span><span class="apple-converted-space"><span style="font-family: Arial, sans-serif; font-size: 10.5pt;"> </span></span><span style="font-family: Arial, sans-serif; font-size: 10.5pt;">is the full path and name of your compiled
class. If the element was empty, the fragment should now read:<o:p></o:p></span></div>
<pre style="background: #F5F2F0; margin-bottom: 6.0pt; margin-left: .5in; margin-right: 0in; margin-top: 6.0pt; overflow: auto; tab-size: 4; text-shadow: 0px 1px; word-spacing: normal; word-wrap: break-word;"><span class="token"><span style="color: #999999; font-family: Consolas;"><</span></span><span class="token"><span style="color: #990055; font-family: Consolas;">extensions</span></span><span class="token"><span style="color: #999999; font-family: Consolas;">></span></span><code><span style="font-family: Consolas;"><o:p></o:p></span></code></pre>
<pre style="background: #F5F2F0; margin-bottom: 6.0pt; margin-left: .5in; margin-right: 0in; margin-top: 6.0pt;"><code><span style="font-family: Consolas;"> </span></code><span class="token"><span style="color: #999999; font-family: Consolas;"><</span></span><span class="token"><span style="color: #990055; font-family: Consolas;">add </span></span><span class="token"><span style="color: #669900; font-family: Consolas;">assemblyFileName</span></span><span class="token"><span style="color: #999999; font-family: Consolas;">="</span></span><span class="token"><span style="color: #0077aa; font-family: Consolas;">C:\Projects\Events\MyCustomEventHandlerExample\bin\Debug\MyCustomEventHandler.dll</span></span><span class="token"><span style="color: #999999; font-family: Consolas;">"</span></span><span class="token"><span style="color: #990055; font-family: Consolas;"> </span></span><span class="token"><span style="color: #999999; font-family: Consolas;">/></span></span><code><span style="font-family: Consolas;"><o:p></o:p></span></code></pre>
<pre style="background: #F5F2F0; margin-bottom: 6.0pt; margin-left: .5in; margin-right: 0in; margin-top: 6.0pt;"><span class="token"><span style="color: #999999; font-family: Consolas;"></</span></span><span class="token"><span style="color: #990055; font-family: Consolas;">extensions</span></span><span class="token"><span style="color: #999999; font-family: Consolas;">></span></span><span style="font-family: Consolas;"><o:p></o:p></span></pre>
<div class="MsoNormal">
<span style="background: white; font-family: Arial, sans-serif; font-size: 10.5pt; line-height: 107%;">
</span></div>
<ol start="7" style="margin-top: 0in;" type="1">
<li class="MsoNormal" data-id="STEP_3025DF68030C4D3DA2DAFB51B7B127E1" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_3025DF68030C4D3DA2DAFB51B7B127E1" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Save and close<span class="apple-converted-space"> </span></span><span class="filepath"><b><span style="font-family: "Courier New"; font-size: 10.5pt;">Tridion.ContentManager.config</span></b></span><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">.<o:p></o:p></span></li>
<li class="MsoNormal" data-id="STEP_807D13A558B8492F91C484FFEB7F28DC" id="GUID-87B291DD-99C5-4124-BDAE-B49182072ABA__STEP_807D13A558B8492F91C484FFEB7F28DC" style="background: white; line-height: 15.75pt; margin-bottom: 12pt; margin-top: 12pt;"><a href="https://www.blogger.com/null" name="GUID-87B291DD-99C5-4124-BDAE-B49182072AB"></a><span style="font-family: "Arial",sans-serif; font-size: 10.5pt;">Restart the services you stopped.<o:p></o:p></span></li>
</ol>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com1tag:blogger.com,1999:blog-7739304994971294045.post-40205991138853989462016-01-05T01:49:00.000-08:002016-01-17T12:21:54.902-08:00Tridion Custom Tools Example Projects – Core Service (.NET)<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
In the series of
blog posts for Tridion Custom Tools Example Projects, in this blog I am explaining to set up a simple core service project and sharing
the <a href="https://github.com/saurabhgangwar/ExampleCoreServiceProject" target="_blank"><b>Example Code</b></a>. Also you can install a <b>visual studio project template</b> for the same, the VSIX file can be found <b><a href="https://github.com/saurabhgangwar/ExampleCoreServiceProject/blob/master/Visual%20Studio%20Template/TridionCoreServiceConsoleExtension.vsix" target="_blank">here</a></b></div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
The Core Service is a Web service that allows applications
to interact with the Content Manager. For example, Content Manager clients such
as Experience Manager and Content Manager Explorer interact with the Content
Manager through the Core Service, and you can use the Core Service to integrate
external systems with SDL Tridion.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<h4 style="text-align: left;">
Setting up the project (Using the built-in .NET client)</h4>
<div class="MsoNormal">
1. Open Visual Studio and create a project (Console or Web according to your need)<span class="Apple-tab-span" style="white-space: pre;"> </span>.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
2. Copy the Tridion.ContentManager.CoreService.Client assembly from bin\client subdirectory of %TRIDION_HOME% (defaults to C:\Program Files (x86)\Tridion\) to a location.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
3. Add a reference to the Tridion.ContentManager.CoreService.Client assembly in the project from the copy location.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
4. Add references to System.ServiceModel and System.Runtime.Serialization assemblies.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
5. In the same folder, find the file Tridion.ContentManager.CoreService.Client.config and copy the WCF endpoint configuration you find in that file into your application's configuration file.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
6. Use Tridion.ContentManager.CoreService.Client namespace to create CoreServiceClient object.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Alternatively, one can also create a proxy client creating a service reference in to the project.</div>
<div class="MsoNormal">
<br /></div>
<h4 style="text-align: left;">
Creating the core service client object:</h4>
<div class="MsoNormal">
To interact with CM, we need a core service client object and to create it, <a href="https://msdn.microsoft.com/en-us/library/ms733107(v=vs.110).aspx" target="_blank">Endpoints</a> (defined in applications config file) are used. In WCF terms, an Endpoint is simple collection of Address, Binding and Contract.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
There are three default bindings: BasicHttpBinding (SOAP), WSHttpBinding (WCF) and NetTcpBinding (network). These are used to connect to the Core Service from your SOAP, WCF or network client. You can find more about the default bindings <a href="http://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20full%20documentation-v1/GUID-58B7A994-053D-45A3-B875-3BC79A294765" target="_blank">here</a>.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Different types of core service clients are listed <a href="http://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20full%20documentation-v1/GUID-5CC5E3CF-E840-4E6E-9F90-1DB0C1CB3FCC" target="_blank">here</a>, which are used for different purposes. In this code example I am using SessionAwareCoreServiceClient to interect with Tridion Content Manager. </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
Once the core service client object is created, it can be used to interact with Tridion CM. Have a look at the example code <a href="https://github.com/saurabhgangwar/ExampleCoreServiceProject" target="_blank">here</a>.</div>
<div class="MsoNormal">
<br /></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-71452705574190813632016-01-04T04:02:00.000-08:002016-01-17T12:22:55.394-08:00Tridion Custom Tools Example Projects – Custom Resolver<div dir="ltr" style="text-align: left;" trbidi="on">
I noticed many questions on Tridion SE, where new developers face issues with setting up projects for Tridion Custom Tools. So in this series of blog posts I am sharing some code examples and extensions for the same.<br />
<br />
To start with, I am explaining to set <span style="background-color: white; font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">up the Custom Resolver. I've set up a simple <b>Example Code Project </b>and could be found <b><a href="https://github.com/saurabhgangwar/ExampleTridionCustomResolver" target="_blank">here</a> , </b></span>I've also shared the the <b>Visual Studio Extension </b>for it, if anyone wants to install a project template for custom resolver it could be found <b><a href="https://github.com/saurabhgangwar/ExampleTridionCustomResolver/blob/master/VisualStudioProjectTemplate/TridionCustomResolverExtension.vsix" target="_blank">here</a></b>.<br />
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;"><br /></span>
<br />
<h4 style="text-align: left;">
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Setting up the project:</span></h4>
<div>
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;"><br /></span></div>
<span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">1.</span><span class="Apple-tab-span" style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px; white-space: pre;"> </span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Create a library project in Visual studio.</span><br />
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">2.</span><span class="Apple-tab-span" style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px; white-space: pre;"> </span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Add the following dlls as reference:</span><br />
<span style="font-family: Arial, sans-serif;"></span><br />
<ul style="text-align: left;"><span style="font-family: Arial, sans-serif;">
<li>Tridion.Common</li>
<li>Tridion.ContentManager</li>
<li>Tridion.ContentManager.Common</li>
<li>Tridion.ContentManager.Publishing</li>
</span></ul>
<span style="font-family: Arial, sans-serif;">
</span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">3.</span><span class="Apple-tab-span" style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px; white-space: pre;"> </span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Create a class say “MyCustomResolver” by extending from interface “IResolver”, which is found in “Tridion.ContentManager.Publishing.Resolving” namespace.</span><br />
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">4.</span><span class="Apple-tab-span" style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px; white-space: pre;"> </span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Implement the method <span style="background-color: #eeeeee;">public void Resolve(IdentifiableObject item, ResolveInstruction instruction, PublishContext context, Tridion.Collections.ISet<ResolvedItem> resolvedItems)</span></span><br />
<span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;"><br /></span></div>
<div>
<span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">5.</span><span class="Apple-tab-span" style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px; white-space: pre;"> </span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Sign the Assembly with a Strong Name.</span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">6.</span><span class="Apple-tab-span" style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px; white-space: pre;"> </span><span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">Build and add the assembly to GAC on CMS and Publisher Servers, In case you have a separate publisher server.</span><br />
<span style="font-size: 14px; line-height: 14.98px;"><span style="background-color: white; font-family: Arial, sans-serif;"></span></span></div>
</div>
<div>
<span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;"><br /></span></div>
<div>
<span style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;"><br /></span></div>
<div>
<h4 style="text-align: left;">
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">Installation Process (<a href="http://tridionbites.blogspot.in/2015/11/custom-resolver-its-important-to-deploy.html" target="_blank">To be done on CMS and Publisher Boxes</a>):</span></span></h4>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Copy the assembly “ExampleTridionCustomResolver.dll” in to the server.</span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Add the assembly to the GAC.</span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Open “Tridion.ContentManager.config” file from the path “%TridionInstall% \config”.</span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Locate xml element <span style="background-color: #eeeeee;"><add itemType="Tridion.ContentManager.ContentManagement.Component"></span> inside element <resolving> ---> <mappings>. Since we only want to override resolving behavior for components in this example.</span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Inside the child element <resolvers>, add element<span style="background-color: #eeeeee;"> <add type=" ExampleTridionCustomResolver.MyCustomResolver" assembly=" ExampleTridionCustomResolver, Version=1.0.0.0, Culture=neutral, PublicKeyToken={<a href="http://stackoverflow.com/questions/1710935/how-do-i-find-the-publickeytoken-for-a-particular-dll" target="_blank">PublicKeyToken</a>}" /></span> as a LAST child.</span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="font-size: 14px; line-height: 14.98px;">6.<span class="Apple-tab-span" style="white-space: pre;"> </span>Finally, save and close the Tridion.ContentManager.config file and from your list of Windows Services, restart all Windows services that start with Tridion Content Manager. Also restart IIS and the SDL Tridion Content Manager COM+ application. This applies your changes.</span></span></div>
<div style="font-family: Arial, sans-serif; font-size: 14px; line-height: 14.98px;">
<br /></div>
</div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-49236265524239488582015-11-29T03:47:00.000-08:002015-12-07T02:01:47.069-08:00Custom Resolver – Why it's important to deploy it on both CMS and Publisher Servers ?<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
Recently, We developed a <a href="https://github.com/saurabhgangwar/CustomResolver-FilteringDependancies" target="_blank">Custom Resolver</a> which deletes the
dependent pages from the package, while publishing a component dynamically. </div>
<div class="MsoNormal">
The Custom Resolver actually overrides the default OOB resolver, more details could be found <a href="http://docs.sdl.com/LiveContent/content/en-US/SDL%20Tridion%20full%20documentation-v1/GUID-F792AB1A-060A-4757-802D-3A2DB18F022D" target="_blank">here</a>.</div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
Basically resolving is a process in which publisher identifies the dependent items, which are supposed to publish with the published item. It is a part of overall publishing process and happens before rendering sub-process. </div>
<div class="MsoNormal">
Since we are overriding the resolving process, it's obvious to deploy the Custom Resolver on the server where publisher runs. </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<o:p></o:p>In our case, we had a separate publishing server, so we deployed the custom resolver to the publisher server. And it started working as
expected by not including the dependent pages while publishing the components.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
But then we noticed one issue, On publishing a component, in
the publishing dialog on clicking “Show Items to Publish” button the dependent pages were still showing. </div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Pp31Vw58hVvxs38uI9zyAHU3EIwluUqJPyzFtPkyIg0ZJWO6QdO0vNRkBq7a6vti65BnhwK0OxJsWCxJUmUqyMyv-DlcVkCs0UIoR2aaHb08mCgpjp1wqYyIbRxITwKHwsE1T5b41Hk/s1600/CR_Blog.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Pp31Vw58hVvxs38uI9zyAHU3EIwluUqJPyzFtPkyIg0ZJWO6QdO0vNRkBq7a6vti65BnhwK0OxJsWCxJUmUqyMyv-DlcVkCs0UIoR2aaHb08mCgpjp1wqYyIbRxITwKHwsE1T5b41Hk/s400/CR_Blog.JPG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="MsoNormal">
And it was confusing content editors that dependent pages
are being published and resolver is not working. Though it was working actually and it's just the dependent pages were listed in the publish dialog.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
The issue occurred because the “Show Items to Publish” button uses resolver on CMS server not on Publisher server. And since we didn't deploy our custom resolver to CMS server the default resolver was running there.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
So to fix the issue, we needed to deploy our custom resolver on CMS server as well so that
it overrides the default behavior of the resolver. </div>
<div class="MsoNormal">
And once we deployed the custom resolver to CMS server, the
issue was resolved.</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-71865322504137616582015-09-11T04:22:00.001-07:002015-11-29T04:05:22.920-08:00My First Alchemy Plugin - Publication Panel Search <div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_J49AqH4VqBcnDaSOIGU1vp4qNmav_k3a4OV6gtAfKSQTVoe3JFUhF3icxR39dxqWVPWPWuqIg38PuNkhHxJ-jkRqOkmAesWeUGpAUZVn6Fy71amJAl4Hoj33WHTJ0Ab5u4AdQ_VmkU/s1600/alchemy.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_J49AqH4VqBcnDaSOIGU1vp4qNmav_k3a4OV6gtAfKSQTVoe3JFUhF3icxR39dxqWVPWPWuqIg38PuNkhHxJ-jkRqOkmAesWeUGpAUZVn6Fy71amJAl4Hoj33WHTJ0Ab5u4AdQ_VmkU/s200/alchemy.png" width="175" /></a>Over the past few weeks, I have been noticing these four words "My First Alchemy Plugin" many places in the SDL community. So in my free time, I started my first Alchemy plugin as well and believe me it is a kind of addiction. Once you start it, you get involved with it more and more, so many plugin ideas starts hitting your mind, you don't mind waking up at 3 am to finish up your plugin. hmmm.. it's like Coke-en my friends :)<br />
<br />
To start to build an Alchemy plugin, I reached out to the quick start guide at <a href="http://a4t-api.alchemywebstore.com/">http://a4t-api.alchemywebstore.com</a>, and after setting the project and test deployment to my local Tridion environment, it was just coding in Javascript (using Anguilla) all the way until my plugin was finished.<br />
<br />
Coming to my plugin, what is this all about?<br />
<br />
So I was working for a client, who has 300+ publications to manage in Tridion and it is always a pain to navigate to the different publications in a "230 x 275" GUI box, using mouse. You always need be alert to spot your publication while scrolling, because it does pass in a split second. This goes even worse when you operate on a remote system and there is some lagging involved.<br />
Imagine about a customer having some 1000+ publications, now who wants to be Tridion content editor ? :)<br />
<br />
So to address this issue, I developed an alchemy plugin named "Publication Panel Search". The plugin introduces a Search Box in the publication panel as shown below in the image. On typing in the search box, the publication panel gets updated and publications are filtered based on the search string. So no more scrolling to find a publication :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBSP1_UvjJh6xYaaqvprhrS-vfvQXScOtuvYFyi3J4pu6V2gXlaghvuTqRNA3rTdXmZ6HLSQEkPWMcsiC_-65j9ogXKoJz2jWntshlYKxgtDKv8XCH81FUAHPe9K1s2NXxCwl8jxCXggs/s1600/PubSearch5.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBSP1_UvjJh6xYaaqvprhrS-vfvQXScOtuvYFyi3J4pu6V2gXlaghvuTqRNA3rTdXmZ6HLSQEkPWMcsiC_-65j9ogXKoJz2jWntshlYKxgtDKv8XCH81FUAHPe9K1s2NXxCwl8jxCXggs/s640/PubSearch5.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
To summarize it in technical terms:<br />
<br />
<ol style="text-align: left;">
<li>Extend the dashboard resource</li>
<li>On dashboard load event, get the tree control by var treeControl = $display.getView().getTreeControl();</li>
<li>Add event handler function "AddSearchBox" on "Draw" event of the tree control. like: $evt.addEventHandler(treeControl, "draw", addSearchBox); where addSearchBox function is responsible to add the search box.</li>
</ol>
<br />
The plugin can be <a href="http://www.alchemywebstore.com/plugins/55e47004e4de020d749a9e53" target="_blank"><b>downloaded</b></a> from <a href="http://www.alchemywebstore.com/" target="_blank">Alchemy Web Store</a> and after installing on CMS, it's ready to use. It requires <a href="http://tridionbites.blogspot.in/2015/07/installing-alchemy-for-tridion.html" target="_blank">Alchemy</a> as a prerequisite on your CMS server.<br />
<br />
If you want to have a look at the plugin code, I've put it on Github here at <a href="https://github.com/saurabhgangwar/Alchemy-PublicationPanelSearch">https://github.com/saurabhgangwar/Alchemy-PublicationPanelSearch</a> .<br />
<br />
Thanks</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-47733335856327123722015-08-19T11:27:00.000-07:002015-08-19T12:47:43.845-07:00DXA Installation - A Tip<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
This blog post is to fix the Error <span style="background-color: white;"><i><b>"No valid localizations are active for this site. Check the site log, and that you have the right localization IDs configured in cd_dynamic_conf.xml"</b></i>, While Browsing a DXA website for the first time.</span></div>
<div>
<br /></div>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3f3UX3NqWK4W7E64iK_pzp1XWdqmzfza0onz7vD5e-AkAv_IJOcpvELx7RUvBim7YCNHnJ8SGDIkz0V4uFRD0s7hmAALY2QTXHrCg4FZ23z8GcYtwSYeNWrgmGnXDuu2EQMwkCe0a7ek/s1600/DXA+Error.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3f3UX3NqWK4W7E64iK_pzp1XWdqmzfza0onz7vD5e-AkAv_IJOcpvELx7RUvBim7YCNHnJ8SGDIkz0V4uFRD0s7hmAALY2QTXHrCg4FZ23z8GcYtwSYeNWrgmGnXDuu2EQMwkCe0a7ek/s640/DXA+Error.png" width="640" /></a></div>
<span style="background-color: white;"><br /></span><span style="background-color: white;">By looking at the error, it's looks like a configuration issue in "cd_dynamic_conf.xml", but it's more than that.</span><span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">To fix the issue:</span><br />
<br />
<h4 style="text-align: left;">
<span style="background-color: white;">Check the “cd_dynamic_conf.xml” and make sure that right localization ids for publications configured</span></h4>
<span style="background-color: white;">Browse the "</span><span style="background-color: white;">cd_dynamic_conf.xml</span><span style="background-color: white;">" from location "{WebsiteRootDirectory\bin\config}", make sure you have your website entry in there as below:</span><br />
<div class="code">
<br />
<div class="MsoNormal">
<Publications><o:p></o:p></div>
<div class="MsoNormal">
<Publication Id="123"><o:p></o:p></div>
<div class="MsoNormal">
<Host
Domain="{domain}" Port="{port}" Protocol="http"
Path="" /><o:p></o:p></div>
<div class="MsoNormal">
</Publication><o:p></o:p></div>
<br />
<div class="MsoNormal">
</Publications><o:p></o:p></div>
<br /></div>
<div class="MsoNormal">
"123" is the publication id (in tridion) of your website <o:p></o:p></div>
<div class="MsoNormal">
"{domain}" is the domain for your website<o:p></o:p></div>
<div class="MsoNormal">
"{port}" is the port<o:p></o:p></div>
<span style="background-color: white;">
</span>
<span style="background-color: white;"><br /></span>
<br />
<h4 style="text-align: left;">
<span style="background-color: white;">Binaries are set to publish to broker database</span></h4>
<span style="background-color: white;">Make sure the binaries (multimedia files) are set to publish to the "Broker" database, In the storage config file.</span>
<span style="background-color: white;"><br /></span>
<br />
<h4 style="text-align: left;">
<span style="background-color: white;">The DXA website’s Application Pool Identity must have “write” permissions on the root directory of the website.</span></h4>
<div>
<span style="background-color: white;">So when a page of a DXA website is requested for the </span><span style="background-color: white;">very first</span><span style="background-color: white;"> time</span><span style="background-color: white;">. DXA tries to creates a directory “BinaryData” in the root directory of the website. This directory is used to hold the binary data used in the website. So when a page is requested, DXA copies the binary data (used on the page) from boker database to this folder. And use the binaries for subsequent requests of the page. </span></div>
<div>
<span style="background-color: white;">So to create a directory inside the website root and to copy a binary files to the </span><span style="background-color: white;">directory from broker DB</span><span style="background-color: white;">, The website’s Application Pool Identity must have “write” permissions on the folder.</span></div>
<div>
<span style="background-color: white;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<span style="background-color: white;"><br /></span></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-36776221107410731372015-08-11T10:38:00.000-07:002015-08-19T11:33:19.291-07:00First SDL Professional Meet in India<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: large;">On August 1st 2015, I attended the first ever SDL Professional Meet in India. It was really great to see SDL professionals from all over India there. We gathered at the <a href="http://www.sdl.com/officelocation/sdl-mumbai/60830/" target="_blank">SDL Mumbai Office</a> using some wonderful facilities there. The conference area especially w</span><span style="font-size: large;">as exceptional. A big thanks to SDL Mumbai for that</span>.<br />
<br />
<div style="text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEfmt5BDzGsO_WZZPNmmp5nE7TEcia_sRhNmFEEdK-CB4Fn1QoZpFectHNK8Kew-uWVlUqS7pm6pveMSfm8b-zibBtxxATXh3Do9rHwjP3xRyovN8_DvR5D9DKcoe-CWmPCQKX1guPCP4/s1600/20225609235_e35563ca30_m.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEfmt5BDzGsO_WZZPNmmp5nE7TEcia_sRhNmFEEdK-CB4Fn1QoZpFectHNK8Kew-uWVlUqS7pm6pveMSfm8b-zibBtxxATXh3Do9rHwjP3xRyovN8_DvR5D9DKcoe-CWmPCQKX1guPCP4/s1600/20225609235_e35563ca30_m.jpg" /></a></div>
<h3 style="text-align: left;">
Introduction</h3>
<span style="font-size: large;">The event started with a welcome note from Tejas & Vikas followed by the individual introductions. It was really nice to get to know everyone. Alvin, Raj, </span><span style="font-size: large;">Mark,</span><span style="font-size: large;"> Tejas, Venu, Jatinder Sodhi and many more... </span><br />
<span style="font-size: large;"><br /></span>
<br />
<h3>
</h3>
<h3>
</h3>
<h3 style="text-align: left;">
SDL Evolution and SDL WEB 8.1</h3>
<span style="font-size: large;">Yep, presentations time... Starting with a session from Alvin, which was all about SDL's history, evolution and road map. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVRtxdKGelWcg9QWHXOMgL-EAy2Ovo1pHaLOiUe1w7MWUND1ucoY0F5IHCHv-eNbWjvU1s7dbb86sf6ANbl_l4aIg-KZMiWaHOroXYKWmmEJDi8sbIRBn2xUyWNjixiboUtIru6zNb0vw/s1600/20038547949_c3e1936ef1_z.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVRtxdKGelWcg9QWHXOMgL-EAy2Ovo1pHaLOiUe1w7MWUND1ucoY0F5IHCHv-eNbWjvU1s7dbb86sf6ANbl_l4aIg-KZMiWaHOroXYKWmmEJDi8sbIRBn2xUyWNjixiboUtIru6zNb0vw/s320/20038547949_c3e1936ef1_z.jpg" width="320" /></a></span></div>
<span style="font-size: large;">He also described what's coming in the new version of Tridion, which will no longer be known as Tridion but SDL Web (version 8.1). </span><span style="font-size: large;">It was really nice to discuss, where we are and what more we will have moving forward.</span><span style="font-size: large;"></span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-size: large;">
</span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"></span></div>
<br />
<h3>
DXA Basics from Raj</h3>
<div>
<span style="font-size: large;">Following the session from Alvin, Raj went through the basics of DXA. He discussed the structure and the usability of DXA and also went through the out of the box modules that come with it. </span></div>
<div>
<span style="font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNiZGprcGXpUKME3H0Ga1FEHNvuJRj4Y_ciuHQxANPUTaPxh1kwPC3qYJzKo6ulDjJg6lZ-smIG9mGbv_Yew1eN2Ukwe9KLWj7uPGHWCE56uqNiWejNgy7zsUSXsY-AjUhwtYIRoZNImg/s1600/19604383993_562764799f_k.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="409" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNiZGprcGXpUKME3H0Ga1FEHNvuJRj4Y_ciuHQxANPUTaPxh1kwPC3qYJzKo6ulDjJg6lZ-smIG9mGbv_Yew1eN2Ukwe9KLWj7uPGHWCE56uqNiWejNgy7zsUSXsY-AjUhwtYIRoZNImg/s640/19604383993_562764799f_k.jpg" width="640" /></a></div>
<div>
<span style="font-size: large;"><br /></span></div>
<h4 style="text-align: left;">
<span style="font-size: large;">Alchemy!!! Alchemy!!!</span></h4>
<div>
<span style="font-size: large;">I was really excited to present Alchemy4Tridion, the game changer from Alex Klock. We discussed many things from installing Alchemy to creating an Alchemy plugin in visual studio, including framework basics and core Alchemy functionality.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEQuLogNbwzLxgDPSl-V5LEi9VwiQUQ0nx4ZgaWeLrBsN8Z4-xTRb80E4Rsvs2R6dwnWZRATaU-X2xsRmEn06zrdwf46xW5w3djr18GKXzAckuar3URh09VOC5w1s5eJsnQ-Uiw0y2thc/s1600/20198791406_7d05d55b4b_m.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEQuLogNbwzLxgDPSl-V5LEi9VwiQUQ0nx4ZgaWeLrBsN8Z4-xTRb80E4Rsvs2R6dwnWZRATaU-X2xsRmEn06zrdwf46xW5w3djr18GKXzAckuar3URh09VOC5w1s5eJsnQ-Uiw0y2thc/s1600/20198791406_7d05d55b4b_m.jpg" /></a></span></div>
<span style="font-size: large;"> </span><span style="font-size: large;">I also introduced the <a href="http://www.alchemywebstore.com/" target="_blank">Alchemy webstore</a>, where the Alchemy plugins can be uploaded and managed.</span><span style="font-size: large;">It felt really good to see the response from the people out there. Thanks guys and girls.</span><br />
<span style="font-size: large;">
</span>
<br />
<div>
<br /></div>
<h4 style="text-align: left;">
<span style="font-size: large;"><br /></span></h4>
<h4 style="text-align: left;">
<span style="font-size: large;"><br /></span></h4>
<h4 style="text-align: left;">
<span style="font-size: large;">
Vikas with DD4T</span></h4>
<span style="font-size: large;">
</span>
<div>
<span style="font-size: large;">Vikas turned out with a great DD4T presentation and covered the basics with what's in store for DD4T 2.0. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG-h8yj5wbB6-oAJtu7dRUhkG9CrkIR_DIiKYeSBmvG7ISRYQRgaDIV1ELftUQk5awmApT7Msd-iKDIRaK_GNUEvp-TeUvSwayMT5bZyoxBl0zvIKAu1LUcbjszrg3eFdmmKBUhr1N0IQ/s1600/20225028135_21bc5e9444_z.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG-h8yj5wbB6-oAJtu7dRUhkG9CrkIR_DIiKYeSBmvG7ISRYQRgaDIV1ELftUQk5awmApT7Msd-iKDIRaK_GNUEvp-TeUvSwayMT5bZyoxBl0zvIKAu1LUcbjszrg3eFdmmKBUhr1N0IQ/s320/20225028135_21bc5e9444_z.jpg" width="320" /></a></span></div>
<span style="font-size: large;">It was a really nice to learn about DD4T with java. He also covered "DD4T Vs DXA", showing how both are related and different as the same time. </span></div>
<span style="font-size: large;">
<div>
<br /></div>
<h4 style="text-align: left;">
Piyush Jain Steels the Show</h4>
<div>
Hey! Who are you man?? Nowhere in the agenda :) So here arrives Piyush Jain with some really good points on where SDL is losing the race with it's competitors. He compared SDL Tridion with other leading CMS with regards to out of the box functionality and summarized it very well how customers are paying additional money in customizing Tridion.</div>
<div>
<br /></div>
<h4 style="text-align: left;">
Targeting Smart in Venu's way</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihzhit1Jj_sp-aVy35ZSUPeOvHwrQzaR4W6WBJyesuo7QNKVMgkQpCXPLOPB8HQuSMmFWWVrLUDQZOPqPoynKZHPMpaUn4pToD9dxaSCJrDhPaV8GjRP02Ebn3hXTmwajXpXcrEorOSjY/s1600/20036988608_d70914d4d4_m.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihzhit1Jj_sp-aVy35ZSUPeOvHwrQzaR4W6WBJyesuo7QNKVMgkQpCXPLOPB8HQuSMmFWWVrLUDQZOPqPoynKZHPMpaUn4pToD9dxaSCJrDhPaV8GjRP02Ebn3hXTmwajXpXcrEorOSjY/s1600/20036988608_d70914d4d4_m.jpg" /></a></div>
<div>
Venu touched on Smart Target and explained how the product could be used to personalized websites. He summarized Fredhopper pretty well and presented how Smart Target connects it to Tridion. Good to learn.</div>
<div>
<br /></div>
<div>
<br />
<br /></div>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
That's it chaps</h4>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Other then some general free time discussions in between, Alvin concluded the presentations presenting SDL Translation Manager. We had a lucky draw for two free Tridion Certifications and Mukesh Kumar and Sumit Sabberwal emerged luckiest among all of us. I still feel Mark did some trick picking those tickets from the bowl. hahaha..<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwc3eCz2ydjxAJznG_IG2ZmJiLNCi6GZwrvlvB4tcyv1yg0ZDirlgzWquAWwhIZA1Hv7XRM2253W1jOis4TaNyIT3ARvgsoSKC35wcv-yQQAtqwH32VPcnZwdqPZnqj3gbC5Tudgit83Y/s1600/20038334759_9b57c9eec4_z.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwc3eCz2ydjxAJznG_IG2ZmJiLNCi6GZwrvlvB4tcyv1yg0ZDirlgzWquAWwhIZA1Hv7XRM2253W1jOis4TaNyIT3ARvgsoSKC35wcv-yQQAtqwH32VPcnZwdqPZnqj3gbC5Tudgit83Y/s320/20038334759_9b57c9eec4_z.jpg" width="320" /></a></div>
</div>
<div>
And of course, we collected around INR 40,000 in the form of registration fees. SDL Foundation will be using for some charity work. Awesome!!!</div>
<div>
<br /></div>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
Lets get drunk!!! Not really :)</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim3APTRPSNTR20UeGCVFMprig5gkkH3eJ920pMej9b5ELfhEV07cqz-HJY0lAeon4LEfLCTZ4sQqXB2hec2Z3gmfn2ro_KKLCB2Bq3pm-E8YeyF6wetVIfKRF8qeOHKsbBGiZzRyPCstE/s1600/IMG-20150802-WA0017.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim3APTRPSNTR20UeGCVFMprig5gkkH3eJ920pMej9b5ELfhEV07cqz-HJY0lAeon4LEfLCTZ4sQqXB2hec2Z3gmfn2ro_KKLCB2Bq3pm-E8YeyF6wetVIfKRF8qeOHKsbBGiZzRyPCstE/s320/IMG-20150802-WA0017.jpg" width="320" /></a></div>
<div>
Wait a minute, did I hear it right?? Nobody goes with alcohol here ??? Awww alright, lets concentrate on some food then. </div>
<div>
<br /></div>
<div>
<br /></div>
<h4 style="text-align: left;">
A day after...</h4>
<div>
At Kharghar hills<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjoMs5364os874bE8o-jAsK0i4mLivSY7t6kOSJC0oJehuEPLpxxECWCSkaevtvog0zkiUwd9cj_7I-I4WQ4TaHq7nV-s2QXfIJkg9ImZSMgk-4bNReB0SXAGVlrRSP0bnQQDB4inAWkE/s1600/11782410_10153542071514165_7493500627768211928_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjoMs5364os874bE8o-jAsK0i4mLivSY7t6kOSJC0oJehuEPLpxxECWCSkaevtvog0zkiUwd9cj_7I-I4WQ4TaHq7nV-s2QXfIJkg9ImZSMgk-4bNReB0SXAGVlrRSP0bnQQDB4inAWkE/s640/11782410_10153542071514165_7493500627768211928_o.jpg" width="640" /></a></div>
</div>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
</h4>
<h4 style="text-align: left;">
In Summary</h4>
<div>
Other than learning through the presentations, the event provided a platform to the SDL professionals from India to get to know each other. It was also a launch pad to have other events like this in India down the road. A big thanks to all the guys and girls, who turned up and made it a successful event. Really enjoyed being with you, see you later ...</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</span></div>
<div>
<span style="font-size: large;"><br /></span></div>
<div>
<span style="font-size: large;"> </span></div>
<div>
<span style="font-size: large;"><br /></span></div>
<div>
<span style="font-size: large;"><br /></span></div>
<div>
<span style="font-size: large;"><br /></span></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com3tag:blogger.com,1999:blog-7739304994971294045.post-3544265099183071922015-07-13T05:16:00.002-07:002015-07-13T05:29:16.083-07:00Installing Alchemy Plugins for Tridion<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;">Before installing an Alchemy Plugin, you must <a href="http://tridionbites.blogspot.in/2015/07/installing-alchemy-for-tridion.html" target="_blank">install Alchemy</a> on your CMS server. Once finished, an Alchemy Plugin could be installed in two ways:</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif;">1. First one is to access the web store inside your Tridion GUI and install it clicking on install button. </span><br />
<div>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif;"> Go to the Web Store by clicking the tab "web store" on Alchemy landing page, Search for the plugin you want to install.</span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRNnPJWSJqmbvynTF0mVRlPCZcqVcs587WXPzZGUD1OBEksgMpQft_WSZ3K1gNyMd1pe57eXA5hL4eQOsVuGTN7_ytsO99o5SBTxAn3BKCUzwtLtp8yCjabijLCzCzDA9rrT0YvWviQQc/s1600/TridionCmsAlechemyWebStore.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRNnPJWSJqmbvynTF0mVRlPCZcqVcs587WXPzZGUD1OBEksgMpQft_WSZ3K1gNyMd1pe57eXA5hL4eQOsVuGTN7_ytsO99o5SBTxAn3BKCUzwtLtp8yCjabijLCzCzDA9rrT0YvWviQQc/s640/TridionCmsAlechemyWebStore.JPG" width="640" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif;"> On the search result page, click the plugin you want to install</span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZYctWypVFOmzBUZwsG-LkIWC06pJRspVfPRKTbjhJetfQ6ERz5_CmaO-qDKNc5-epbRzJHWLk13Eh5dXzJo4O-_6dBdJ3IsD0wsXMJ6W_Q8lqMhqJnEsn0RjRniXSFFSwPgM7ZtV5kg0/s1600/TridionCmsAlechemyWebStoreSearchResults.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZYctWypVFOmzBUZwsG-LkIWC06pJRspVfPRKTbjhJetfQ6ERz5_CmaO-qDKNc5-epbRzJHWLk13Eh5dXzJo4O-_6dBdJ3IsD0wsXMJ6W_Q8lqMhqJnEsn0RjRniXSFFSwPgM7ZtV5kg0/s640/TridionCmsAlechemyWebStoreSearchResults.JPG" width="640" /></span></a></div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
</div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif;">It will redirect you to the Plugin page, Locate to the "Install Plugin" button and click it</span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsrw179hG4RHAT_VmoAg84Egy4Vk8xc3gbkQ8Mr-y16E3q9acbFt4ExMorRvokoxtj0A9yCEKPMnmqElylHGnzotkMrkmkjQXXgpokY0H0hdZBbDgLqtmSOFL4O-HqLkdfX5sea2JsD1E/s1600/TridionCmsAlechemyInstallButton.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Verdana, sans-serif;"><img border="0" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsrw179hG4RHAT_VmoAg84Egy4Vk8xc3gbkQ8Mr-y16E3q9acbFt4ExMorRvokoxtj0A9yCEKPMnmqElylHGnzotkMrkmkjQXXgpokY0H0hdZBbDgLqtmSOFL4O-HqLkdfX5sea2JsD1E/s640/TridionCmsAlechemyInstallButton.png" width="640" /></span></a></div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif;">Watch the Tridion notifications about the progress</span></li>
</ul>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; font-family: Verdana, sans-serif; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnXtEDltuApwzRZxxX1b_SkybbS4K8gcMVi8N1mHRKRW6nhBLeclZACouL1tqcazxgZPOb1qRl-GqSYLfM9SDfWIgHc-Enb8-PCN0lpLPvAJjWmRcBE4lKK846sGb6KoFYCNqCW1Rvhhw/s1600/TridionCmsAlechemyWebPluginInstalled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnXtEDltuApwzRZxxX1b_SkybbS4K8gcMVi8N1mHRKRW6nhBLeclZACouL1tqcazxgZPOb1qRl-GqSYLfM9SDfWIgHc-Enb8-PCN0lpLPvAJjWmRcBE4lKK846sGb6KoFYCNqCW1Rvhhw/s640/TridionCmsAlechemyWebPluginInstalled.JPG" width="640" /></a></div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif;">Great, your Plugin is installed and ready to use</span><span style="font-family: Verdana, sans-serif;"> </span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMHIIsHlnTKxHVkd7-0_EqkVHLoYpjQ8_I4KlSsXNDxqeJhDU-E8Y_3EkwQpMAVSYuMQuAGht4B9zIEFV7mw8ZSwZrSPnft7vWkastyxYqyOO0XNAdfkxfwu46nMBOhyBQaJSBtCY5_Wg/s1600/TridionCmsAlechemyWebPluginShow.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMHIIsHlnTKxHVkd7-0_EqkVHLoYpjQ8_I4KlSsXNDxqeJhDU-E8Y_3EkwQpMAVSYuMQuAGht4B9zIEFV7mw8ZSwZrSPnft7vWkastyxYqyOO0XNAdfkxfwu46nMBOhyBQaJSBtCY5_Wg/s640/TridionCmsAlechemyWebPluginShow.JPG" width="640" /></a></div>
</div>
<span style="font-family: Verdana, sans-serif;"></span><br />
<div>
<span style="font-family: Verdana, sans-serif;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<span style="font-family: Verdana, sans-serif;">
</span>
<div>
<span style="font-family: Verdana, sans-serif;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<span style="font-family: Verdana, sans-serif;">
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
2. The other way to install a Plugin is to go to </span><a href="http://www.alchemywebstore.com/" style="font-family: Verdana, sans-serif; line-height: 24.37px;">www.alchemywebstore.com</a><span style="font-family: Verdana, sans-serif;"> and download the plugin (a4t file) and drag and drop it on the Alchemy landing page inside the Tridion GUI.</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEQNpGPS7xy7CoeEKuhWkQownKijwIAdqUAj3EGwxByH3hNgGPOd-YmZMkrJVWxjiVmBLsNYqEtI32n3a-lL3iNWYJDNNe8rdM-vTmhsdb8HwZOtIIQ3miTkUZkFKwKKIRQu_C3u6Rpoc/s1600/TridionCmsAlechemyDragDropPluginSuccess.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEQNpGPS7xy7CoeEKuhWkQownKijwIAdqUAj3EGwxByH3hNgGPOd-YmZMkrJVWxjiVmBLsNYqEtI32n3a-lL3iNWYJDNNe8rdM-vTmhsdb8HwZOtIIQ3miTkUZkFKwKKIRQu_C3u6Rpoc/s640/TridionCmsAlechemyDragDropPluginSuccess.png" width="640" /></a></div>
<br /></div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-56337595409851177402015-07-13T04:09:00.000-07:002015-07-14T15:30:31.065-07:00Installing Alchemy for Tridion (A4T)<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
</h2>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">As a Tridion developers we all know, Developing a Tridion GUI Extension is not a piece of cake. Form developing the code to the configuration, It's a complex process that requires some good technical skills and time.</span></span><br />
<span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;"><br /></span>
</span><br />
<span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">So here comes </span><a href="http://codedweapon.com/" style="background-color: white; line-height: 24.375px;" target="_blank">Alex Klock</a><span style="background-color: white; line-height: 24.375px;"> and his team to rescue. They developed a system called </span><span style="line-height: 24.375px;">Alchemy at </span><a href="http://www.contentbloom.com/" style="background-color: white; line-height: 24.375px;" target="_blank">Content Bloom</a>, <span style="line-height: 24.375px;">and the Beta version is <a href="http://www.tridiondeveloper.com/announcing-the-alchemy-webstore" target="_blank">announced </a>recently.</span></span><br />
<br />
<span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;"><br /></span>
</span></div>
<div style="text-align: left;">
<span style="background-color: white;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">Alchemy is basically a system set to revolutionize the way Tridion Extensions are built and installed. </span></span></span><span style="background-color: white;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">The system comprises of a open source <a href="https://github.com/Alchemy4Tridion/Alchemy4Tridion" target="_blank">extension framework</a> to develop the extension plugins and a <a href="http://www.alchemywebstore.com/" target="_blank">web store</a> to upload/download and manage plugins.</span></span></span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="background-color: white;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">So to use the Alchemy Plugins, First We need to install this awesome thing named Alchemy.</span></span></span></div>
<div style="text-align: left;">
<span style="background-color: white;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;"><br /></span></span></span></div>
<div style="text-align: left;">
<br />
<ul>
<li><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">Go to <a href="http://www.alchemywebstore.com/">www.alchemywebstore.com</a>, register yourself and download the installer.</span></span></li>
</ul>
<ul style="text-align: left;">
</ul>
<br />
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7-NkNpUmnnCArFcK9U2NNytT5-wof3p3mtNx0zEc5FAa2M6U_klTSIKoIf8oZGrcK2kHSf-bQ_knKdB3kl5BEoonhCBAPAefFH_fiv-Ne7rv8PucHDvtavwA_iRYj2B6rMhiBth643n0/s1600/WebStoreHomePageDownload.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7-NkNpUmnnCArFcK9U2NNytT5-wof3p3mtNx0zEc5FAa2M6U_klTSIKoIf8oZGrcK2kHSf-bQ_knKdB3kl5BEoonhCBAPAefFH_fiv-Ne7rv8PucHDvtavwA_iRYj2B6rMhiBth643n0/s640/WebStoreHomePageDownload.png" width="640" /></span></a></div>
<div style="text-align: left;">
<span style="background-color: white;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;"><br /></span></span></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<ul>
<li><span style="font-family: Verdana, sans-serif;"><span style="line-height: 24.375px;">Run the installer on your CMS server</span></span></li>
</ul>
</div>
<div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrtYbth8rYf-91Wt5WsVswbDL_sAuns-Mzlim04GjNu-raQLvJkxyINJBveHIt3mdXjxUVpW7G_d9a44x2H0secNfgD2pTWSrE7TyRmqenjZ1mv3GcHexHsxYyXGfIQG2KDsXt0fanKbM/s1600/TridionCmsAlechemyInstall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrtYbth8rYf-91Wt5WsVswbDL_sAuns-Mzlim04GjNu-raQLvJkxyINJBveHIt3mdXjxUVpW7G_d9a44x2H0secNfgD2pTWSrE7TyRmqenjZ1mv3GcHexHsxYyXGfIQG2KDsXt0fanKbM/s320/TridionCmsAlechemyInstall.png" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Verdana, sans-serif;"> <span style="font-size: x-small;">Installation wizard starts</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBaDJkXfCsgXZMt9KU0uBCYnOZU7tm7_XgzYFwQYUvoit1JgLj05WTIyWGImoqpCCoKQSOLxOY835BJc43dEXfVi79xnVrudC4k39At5Ekrl9gmpjgYX3OmYQDHkLDHBMtl_su9t99wKw/s1600/InstallWiz1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBaDJkXfCsgXZMt9KU0uBCYnOZU7tm7_XgzYFwQYUvoit1JgLj05WTIyWGImoqpCCoKQSOLxOY835BJc43dEXfVi79xnVrudC4k39At5Ekrl9gmpjgYX3OmYQDHkLDHBMtl_su9t99wKw/s320/InstallWiz1.JPG" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Specify the installation location for Alchemy</span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpPFzHonEq1KUd8O4-dwZ1XEaU9eS8MZd1C3cc3ff7vY30pqAD_KYYJBva-MSs8gtSmcJo2kWcn-pVbCfm3lqA8AVRpu0l4ZANRhfbWGlpc8QpUq5fvJqEEfeB6BSY8AJSXHja2UOhCmI/s1600/InstallWiz2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpPFzHonEq1KUd8O4-dwZ1XEaU9eS8MZd1C3cc3ff7vY30pqAD_KYYJBva-MSs8gtSmcJo2kWcn-pVbCfm3lqA8AVRpu0l4ZANRhfbWGlpc8QpUq5fvJqEEfeB6BSY8AJSXHja2UOhCmI/s320/InstallWiz2.JPG" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-size: x-small;"><span style="font-family: Verdana, sans-serif;">Specify the system admin credentials (Optional) needed for plugins like "Servicer", which performs some system administrative task like restating a window service. If you skip this, you can update this information post-install as well, these are stored in the "impersonation" node of the Alchemy.xml file found at: </span><span style="font-family: Verdana, sans-serif;">[Tridion Home]\web\Alchemy\Configuration\ </span></span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: black; font-family: Verdana, sans-serif; margin-left: 1em; margin-right: 1em;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDjCx4U5Nga92Kc0OCs7KRgwfDm3nKH3gXWnIiPBFl2wEcfk4W3DYYZY722kQW0Fjq5_6s1dSAknWU4Ba0_q-A-6SMDY7mm-sD2_RbVM9hFXMDBpDI258E13RlRs2OP-aZJw20vjQF_n8/s1600/InstallWiz3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDjCx4U5Nga92Kc0OCs7KRgwfDm3nKH3gXWnIiPBFl2wEcfk4W3DYYZY722kQW0Fjq5_6s1dSAknWU4Ba0_q-A-6SMDY7mm-sD2_RbVM9hFXMDBpDI258E13RlRs2OP-aZJw20vjQF_n8/s320/InstallWiz3.JPG" width="320" /></a></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Click Close once installation is </span><span style="font-size: x-small;"><span style="font-family: Verdana, sans-serif;">complete</span></span><br />
<span style="font-size: x-small;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvazOmjD9-42VZdhmIVtep9t_feJTy_xcfC1ktJREh1MTlO6HCeDG_IFvJNa-2q2p2iPt-wB-AJbK1iBATIk9Y-6XwjSXApXkzduzcLu0QgZcX8lP8jjREnBaS1wE_r1rBlOD_VjwJVBE/s1600/InstallWiz4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvazOmjD9-42VZdhmIVtep9t_feJTy_xcfC1ktJREh1MTlO6HCeDG_IFvJNa-2q2p2iPt-wB-AJbK1iBATIk9Y-6XwjSXApXkzduzcLu0QgZcX8lP8jjREnBaS1wE_r1rBlOD_VjwJVBE/s320/InstallWiz4.JPG" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="text-align: left;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<ul>
<li><span style="font-family: Verdana, sans-serif; text-indent: -0.25in;">Refresh Tridion in browser. Boom!!! Welcome to the world of alchemy.</span></li>
</ul>
<span style="background-color: white;"></span><br />
<div class="separator" style="clear: both;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0LDYExZpFUP6o936uQ2h_MIPMDSltbOySGIHHGnGLOg22JrhPgZJCJ7mbz23dnPQIu9tREpZcW4dM7O5ll_woYP12ugSKg7O22XLnQLV2JOSoUAVQ3ruTtCUNCXBTOpqN4jMki1qOFvY/s1600/TridionCmsAlechemyLeftPanel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0LDYExZpFUP6o936uQ2h_MIPMDSltbOySGIHHGnGLOg22JrhPgZJCJ7mbz23dnPQIu9tREpZcW4dM7O5ll_woYP12ugSKg7O22XLnQLV2JOSoUAVQ3ruTtCUNCXBTOpqN4jMki1qOFvY/s640/TridionCmsAlechemyLeftPanel.png" width="640" /></span></a></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<span style="font-family: Verdana, sans-serif;"><o:p></o:p></span></div>
<ul>
<li><span style="font-family: Verdana, sans-serif; line-height: 24.375px;">Click on the Alchemy link in left panel, it will show you the Alchemy landing page. And yeah, you are all set to <a href="http://tridionbites.blogspot.in/2015/07/installing-alchemy-plugin-for-tridion.html" target="_blank">install Alchemy plugins</a> for the environment.</span><span style="font-family: Verdana, sans-serif; line-height: 24.375px;"> </span></li>
</ul>
<div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyOhjJLU8ot75MWAVM9d87vtQaSWGXv7t_tc-lwBiUx5PCP7xN27sxty3WaZ1TCIE8auFiCMZIBqmEYDB1bQlC2IVpJ8Pt-8PD-OQZ9hBzUuMewwLjbIaouChGpyKxT5C-VeOXLppMtMI/s1600/TridionCmsAlechemyHomePage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: black; font-family: Verdana, sans-serif;"><img border="0" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyOhjJLU8ot75MWAVM9d87vtQaSWGXv7t_tc-lwBiUx5PCP7xN27sxty3WaZ1TCIE8auFiCMZIBqmEYDB1bQlC2IVpJ8Pt-8PD-OQZ9hBzUuMewwLjbIaouChGpyKxT5C-VeOXLppMtMI/s640/TridionCmsAlechemyHomePage.png" width="640" /></span></a></div>
<div>
<span style="color: #373737; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 24.375px;"><br /></span></span></div>
</div>
</div>
<div>
</div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com2tag:blogger.com,1999:blog-7739304994971294045.post-67886155991637156122015-05-04T11:40:00.003-07:002015-05-05T02:42:46.060-07:00Publishing Category keyword hierarchy as XML<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
<b style="background-color: #ffd966; font-family: Arial, Helvetica, sans-serif;">Tridion Bite : Fetch taxonomies in RDF/OWL-Lite format from cms to improve performance.</b><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Many a times, we need category keywords hierarchy as xml
file on presentation server for different purposes. The common way to implement
it in templating is to iterate through the categories and keywords structure to
produce a xml document and add it as output.<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;">This works great but this doesn't result in a good
publishing performance. Especially if the publishing threads are limited and so
other items keep waiting for publish in the queue.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;">So here is an alternative approach, which quite faster as compared
to the previous one:</span></div>
<div class="MsoNormal">
</div>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif; text-indent: -0.25in;">Use Repository.GetTaxonomiesOwl() method to get the
taxonomies in a repository in <a href="http://www.w3.org/TR/owl-ref/" target="_blank">RDF/OWL-Lite</a> format.</span></li>
<li><span style="font-family: Verdana, sans-serif; text-indent: -0.25in;">Write a xslt to apply on the taxonomies results and add it as “Embedded Resource” in your
templating solution.</span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif; font-size: 11pt;">Transform the xml (RDF/OWL-Lite) using xslt and
add the result to the output.</span></li>
</ul>
<br />
<div>
</div>
<br />
<h3 style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">1. Use Repository.GetTaxonomiesOwl() method to get the taxonomies in this
Repository in RDF/OWL-Lite format:</span></h3>
<div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;">We get the results like below:</span><o:p></o:p></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi79nvzxOOXDKJk8h289Ake4wTm_FzRZF4VSUyzKEXILtin7kofnic5yEFrLxZHuumaSZRI3XgL8aR7TfwO_zHdBrkn5UCR1RoPERcE8fWKP3190dgM9iAe0lvfo8Jj1vxqU4kn2sHJZU/s1600/BLOG1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi79nvzxOOXDKJk8h289Ake4wTm_FzRZF4VSUyzKEXILtin7kofnic5yEFrLxZHuumaSZRI3XgL8aR7TfwO_zHdBrkn5UCR1RoPERcE8fWKP3190dgM9iAe0lvfo8Jj1vxqU4kn2sHJZU/s640/BLOG1.png" width="640" /></a></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="MsoNormal">
<br /></div>
</div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><br /></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;">from the cms structure:</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj60YSfdCpvp5u5UNqcbDZ3bJCS2n73wgu-QAUFelrdADrFH4-Gtz_SRnGMm8ggm6yTZqmcgSZOQ3daHizGD8QzdY8Iwn_O5t4QopLbL9VcTcoJj7zic6YBRY3FSxzo78l_34pM09ajKUM/s1600/Blog2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj60YSfdCpvp5u5UNqcbDZ3bJCS2n73wgu-QAUFelrdADrFH4-Gtz_SRnGMm8ggm6yTZqmcgSZOQ3daHizGD8QzdY8Iwn_O5t4QopLbL9VcTcoJj7zic6YBRY3FSxzo78l_34pM09ajKUM/s640/Blog2.png" width="640" /></a></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div>
<h3 style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">2. Write xslt and add it as “Embedded
Resource” in your templating solution:</span></h3>
<div>
<span style="font-family: Verdana, sans-serif; font-weight: normal;">The xslt code:</span></div>
<div>
<span style="font-family: Verdana, sans-serif; font-weight: normal;"><br /></span></div>
<div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><?</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xml</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">version</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">1.0</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"?></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:stylesheet</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">version</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">1.0</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:xsl</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/1999/XSL/Transform</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:owl</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/2002/07/owl#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:rdf</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:rdfs</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/2000/01/rdf-schema#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:xsd</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/2001/XMLSchema#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:tcmt</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.tridion.com/ContentManager/5.2/Taxonomies#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:tcmc</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:0-9-1/Categories#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">match</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">/rdf:RDF</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">publication</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:apply-templates</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcmt:Taxonomy</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">publication</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">match</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcmt:Taxonomy</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">category</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:attribute</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:value-of</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">@rdf:about</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:attribute</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:for-each</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcmt:rootKeyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:call-template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:with-param</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcmId</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">@rdf:resource</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:call-template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:for-each</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">category</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:param</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> =
"</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcmId</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">" /></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:attribute</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:value-of</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">$tcmId</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:attribute</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:attribute</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">title</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:value-of</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">/rdf:RDF/*[@rdf:about
= $tcmId]/rdfs:label</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">" /></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:attribute</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:for-each</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">/rdf:RDF/*[@rdf:about
= $tcmId]/tcmt:childKeyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:call-template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:with-param</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">name</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcmId</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">select</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">@rdf:resource</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:call-template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">>
</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:for-each</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:template</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"></</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xsl:stylesheet</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><o:p></o:p></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;">Add it as "OwlTaxonomies.xml" to the solution as below:</span></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2-wP7CS_J5IvWNLOEJqYzxFXEA8mTX-Aocgj644qTYPy9_dx6rojgaloL9u2vaUJ0HJG5R7rBeNOv8grb1rM5gu3mOOZpeywQtfNfw2lvxgMEHjzstXgbxaOVvDDiDThBwCRRH8nWnw/s1600/Blog4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXGyqTsE4naGo2yf9-Zi_Q1cLgP4BDjkQ1BVQQgghZVvGHlgzAiNnrZYOga7m-LT7i_nuU_WoytSg9z6j6v9yzqo10x-K5oDuZ486Di4IFkE3CkfjMID4ZfQ-lTKXH1DDeIy6cspECIA/s1600/Blog3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlXGyqTsE4naGo2yf9-Zi_Q1cLgP4BDjkQ1BVQQgghZVvGHlgzAiNnrZYOga7m-LT7i_nuU_WoytSg9z6j6v9yzqo10x-K5oDuZ486Di4IFkE3CkfjMID4ZfQ-lTKXH1DDeIy6cspECIA/s1600/Blog3.png" /></a></div>
<br />
<br />
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;">Make the file a embedded resource by selecting build action to "Embedded Resource" in file properties:</span></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2-wP7CS_J5IvWNLOEJqYzxFXEA8mTX-Aocgj644qTYPy9_dx6rojgaloL9u2vaUJ0HJG5R7rBeNOv8grb1rM5gu3mOOZpeywQtfNfw2lvxgMEHjzstXgbxaOVvDDiDThBwCRRH8nWnw/s1600/Blog4.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge2-wP7CS_J5IvWNLOEJqYzxFXEA8mTX-Aocgj644qTYPy9_dx6rojgaloL9u2vaUJ0HJG5R7rBeNOv8grb1rM5gu3mOOZpeywQtfNfw2lvxgMEHjzstXgbxaOVvDDiDThBwCRRH8nWnw/s1600/Blog4.png" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span>
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><br /></span></div>
<h3 style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">3. Transform the xml (RDF/OWL-Lite) using xslt and add the result to the output (The Example Code):</span></h3>
</div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">[</span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">TcmTemplateTitle<b>(</b></span><span style="background: black; color: #d69d85; font-family: Consolas; mso-highlight: black;">"Generate
Taxonomy Xml"</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">)]<o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">class</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">GenerateTaxonomyXml</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> : </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">TemplateBase<b><o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> {<o:p></o:p></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">///
<summary></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">///
Main function for TBB. Starting point of TBB code.</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">///
</summary></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">public</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">override</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">void</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Transform<b>(</b>Engine<b> </b>engine<b>,
</b>Package<b> </b>package<b>)<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> {<o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">//
Call the base function to initialize the engine and package objects.</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Initialize<b>(</b>engine<b>, </b>package<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Publication<b> </b>pub<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">GetPublication<b>();<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">var</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">repo<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">GetPublication<b>() </b></span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">as</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Repository<b>;<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">TaxonomiesOwlFilter<b> </b>fltr<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">new</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">TaxonomiesOwlFilter<b>(</b>repo</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Session<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas;">var</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas;">taxonomies<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas;">repo</span><span style="background: black; color: #b4b4b4; font-family: Consolas;">.</span><span style="background: black; color: gainsboro; font-family: Consolas;">GetTaxonomiesOwl<b>();</b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">//
Load the style sheet.</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">XslCompiledTransform<b> </b>xslTransformer<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">new</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">XslCompiledTransform<b>();<o:p></o:p></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">//load
the Xsl from the assembly</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">Stream</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">xslStream<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">LoadResourceAsStream<b>(</b></span><span style="background: black; color: #d69d85; font-family: Consolas; mso-highlight: black;">"MyTest.TemplateBuildingBlocks.Resources.OwlTaxonomies.xslt"</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">);<o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">xslTransformer</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Load<b>(</b>XmlReader</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Create<b>(</b>xslStream<b>));<o:p></o:p></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">string</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">strXmlListItems<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">taxonomies</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">OuterXml<b>;<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">StringReader</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">srXml<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">new</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">StringReader</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">(</span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">strXmlListItems<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">XmlReader<b> </b>readerXml<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">new</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">XmlTextReader<b>(</b>srXml<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #57a64a; font-family: Consolas; mso-highlight: black;">//
Execute the transform and output the results to a file.</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">StringWriter</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">sw<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">new</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">StringWriter</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">();<o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">XmlWriter<b> </b>writer<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">new</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">XmlTextWriter<b>(</b>sw<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">xslTransformer</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Transform<b>(</b>readerXml<b>,
</b>writer<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">package</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">PushItem<b>(</b></span><span style="background: black; color: #d69d85; font-family: Consolas; mso-highlight: black;">"Output"</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">, </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">package</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">CreateStringItem<b>(</b>ContentType</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">Xml<b>, </b>sw</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">ToString<b>()));<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> }<o:p></o:p></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">private</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">Stream</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">LoadResourceAsStream<b>(</b></span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">string</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">resourceName<b>)<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> {<o:p></o:p></span></b></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">var</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">assembly<b> </b></span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">=</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #4ec9b0; font-family: Consolas; mso-highlight: black;">Assembly</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">GetExecutingAssembly<b>();<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">return</span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> </span></b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">assembly</span><span style="background: black; color: #b4b4b4; font-family: Consolas; mso-highlight: black;">.</span><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">GetManifestResourceStream<b>(</b>resourceName<b>);<o:p></o:p></b></span></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"> }<o:p></o:p></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;">
}</span></b><o:p></o:p></div>
</div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<h3 style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">The Output:</span></h3>
<div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><?</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">xml</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">version</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">1.0</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">encoding</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">utf-8</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"?></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"><</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">publication</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:owl</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/2002/07/owl#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:rdf</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:rdfs</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/2000/01/rdf-schema#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:xsd</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.w3.org/2001/XMLSchema#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:tcmt</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">http://www.tridion.com/ContentManager/5.2/Taxonomies#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">xmlns:tcmc</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:0-9-1/Categories#</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">category</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5039-512</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5256-1024</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">title</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">Level1 - Test
Keyword1</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5257-1024</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">title</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">Level2 - Test
Keyword1</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">" /></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5258-1024</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">title</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">Level1 - Test
Keyword2 - (localized)</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5259-1024</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">title</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">Level2 - Test
Keyword2</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">" /></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5260-1024</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
</span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">title</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">Local Keyword</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">category</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">category</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5040-512</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> <</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">category</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"> </span><span style="background: black; color: #92caf4; font-family: Consolas; mso-highlight: black;">id</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">="</span><span style="background: black; color: #c8c8c8; font-family: Consolas; mso-highlight: black;">tcm:9-5041-512</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">"
/></span><b><span style="background: black; color: gainsboro; font-family: Consolas; mso-highlight: black;"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;"></</span><span style="background: black; color: #569cd6; font-family: Consolas; mso-highlight: black;">publication</span><span style="background: black; color: grey; font-family: Consolas; mso-highlight: black;">></span><span style="color: grey; font-family: Consolas;"><o:p></o:p></span></div>
</div>
<div>
<span style="font-weight: normal;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<h2>
<o:p></o:p></h2>
</div>
<h2>
<o:p></o:p></h2>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0tag:blogger.com,1999:blog-7739304994971294045.post-5046979549600506342015-03-19T03:18:00.001-07:002015-07-15T13:06:53.163-07:00Access and Resolve RTF component field in C# TBB<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial;">
<div style="background-color: white;">
<span style="font-family: Verdana, sans-serif; font-size: 11.0pt; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;"><br /></span></div>
<div style="background-color: white;">
<span style="font-family: Verdana, sans-serif; font-size: 11.0pt; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;"></span></div>
<div style="text-align: left;">
<span style="background-color: #ffd966;"><span style="font-family: Verdana, sans-serif; font-size: small;"><b>Tridion Bite : Use TemplateUtilities.
ResolveRichTextFieldXhtml(string inputXhtml) method to resolve value of a RTF field.</b></span></span></div>
</div>
<div class="MsoNormal" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="background: white; text-align: left;">
<span style="font-family: Verdana, sans-serif;">Recently came across the issue, when we access
RTF field value in c# TBB and add it to
the output; the link resolver wasn’t
resolving the component links inside the rtf field and having some unnecessary
namespaces like “xmlns="http://www.w3.org/1999/xhtml” in the output.</span></div>
<div style="background: white; text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div class="MsoNormal" style="background: white; text-align: left;">
<span style="font-family: Verdana, sans-serif;">The value we get in C# TBB is an anchor string like below (as it is
stored in component as XHTML)</span></div>
<div class="code">
<a xmlns:xlink="http://www.w3.org/1999/xlink" class="plain-link" xlink:href="tcm:x-y" title="someTitle" xlink:title="someTitle">linkText</a></div>
<br />
<div class="MsoNormal" style="background: white; text-align: left;">
<span style="font-family: Verdana, sans-serif;">But link resolver tbb expects it in
like below to resolve it<o:p></o:p></span></div>
<div class="code">
<a class="plain-link" title="someTitle" tridion:href="tcm:x-y" xmlns:tridion="http://www.tridion.com/ContentManager/5.0">linkText</a></div>
<div style="background: white; text-align: left;">
</div>
<div class="MsoNormal">
<br />
<span style="font-family: Verdana, sans-serif;">
</span><br />
<div class="MsoNormal">
<span style="font-family: Verdana, sans-serif;">With a little investigation we found that the static Method
<span style="background-color: #f3f3f3;">TemplateUtilities. ResolveRichTextFieldXhtml(string inputXhtml)</span> comes handy for it. it accepts the xhtml from the RTF field and </span><span style="font-family: Verdana, sans-serif;">converts the xhtml anchor links to the format link resolver expects. This also removes
unwanted namespaces as well.</span></div>
<div class="MsoNormal">
<o:p></o:p></div>
</div>
<div class="MsoNormal" style="background: white;">
<o:p></o:p></div>
</div>
Saurabh Gangwarhttp://www.blogger.com/profile/12819896069799566115noreply@blogger.com0