<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components</link><pubDate>Thu, 13 Jun 2024 13:22:56 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Current Revision posted to Guide by joel.larin on 6/13/2024 1:22:56 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/p&gt;
&lt;p&gt;Skills Checklist:&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li&gt;List three frequently reused Appian components.&lt;/li&gt;
&lt;li&gt;Identify strategies to ensure proper handling of reusable components.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/p&gt;
&lt;p&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Validator rules (email, SLA, date, etc.)&lt;/li&gt;
&lt;li&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Section headers&lt;/li&gt;
&lt;li&gt;Grids&lt;/li&gt;
&lt;li&gt;Charts/Graphs&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/li&gt;
&lt;li&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/li&gt;
&lt;li&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Create expression rule to check if &lt;i&gt;myUsername@mydomain.com&lt;/i&gt; ends with &amp;lsquo;&lt;i&gt;@mydomain.com&lt;/i&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/li&gt;
&lt;li&gt;Once the validation is accurate, remove any direct reference of &lt;i&gt;myUsername@mydomain.com&lt;/i&gt; from the expression and replace it with a rule input named ri!email.&lt;/li&gt;
&lt;li&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:99%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Special Considerations for Implementation&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/p&gt;
&lt;p&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/p&gt;
&lt;p&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/29</link><pubDate>Tue, 11 Jun 2024 19:12:02 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 29 posted to Guide by joel.larin on 6/11/2024 7:12:02 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/p&gt;
&lt;p&gt;Skills Checklist:&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li&gt;List three frequently reused Appian components.&lt;/li&gt;
&lt;li&gt;Identify strategies to ensure proper handling of reusable components.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/p&gt;
&lt;p&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Validator rules (email, SLA, date, etc.)&lt;/li&gt;
&lt;li&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Section headers&lt;/li&gt;
&lt;li&gt;Grids&lt;/li&gt;
&lt;li&gt;Charts/Graphs&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/li&gt;
&lt;li&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/li&gt;
&lt;li&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Create expression rule to check if &lt;i&gt;myUsername@mydomain.com&lt;/i&gt; ends with &amp;lsquo;&lt;i&gt;@mydomain.com&lt;/i&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/li&gt;
&lt;li&gt;Once the validation is accurate, remove any direct reference of &lt;i&gt;myUsername@mydomain.com&lt;/i&gt; from the expression and replace it with a rule input named ri!email.&lt;/li&gt;
&lt;li&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Special Considerations for Implementation&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/p&gt;
&lt;p&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/p&gt;
&lt;p&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/28</link><pubDate>Tue, 11 Jun 2024 19:11:29 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 28 posted to Guide by joel.larin on 6/11/2024 7:11:29 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/p&gt;
&lt;p&gt;Skills Checklist:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li&gt;List three frequently reused Appian components.&lt;/li&gt;
&lt;li&gt;Identify strategies to ensure proper handling of reusable components.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/p&gt;
&lt;p&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Validator rules (email, SLA, date, etc.)&lt;/li&gt;
&lt;li&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Section headers&lt;/li&gt;
&lt;li&gt;Grids&lt;/li&gt;
&lt;li&gt;Charts/Graphs&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/li&gt;
&lt;li&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/li&gt;
&lt;li&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Create expression rule to check if &lt;i&gt;myUsername@mydomain.com&lt;/i&gt; ends with &amp;lsquo;&lt;i&gt;@mydomain.com&lt;/i&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/li&gt;
&lt;li&gt;Once the validation is accurate, remove any direct reference of &lt;i&gt;myUsername@mydomain.com&lt;/i&gt; from the expression and replace it with a rule input named ri!email.&lt;/li&gt;
&lt;li&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Special Considerations for Implementation&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/p&gt;
&lt;p&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/p&gt;
&lt;p&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/27</link><pubDate>Tue, 11 Jun 2024 19:01:07 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 27 posted to Guide by joel.larin on 6/11/2024 7:01:07 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Skills Checklist:&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Other considerations for implementation&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/26</link><pubDate>Tue, 11 Jun 2024 18:52:59 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 26 posted to Guide by joel.larin on 6/11/2024 6:52:59 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Other considerations for implementation&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/25</link><pubDate>Tue, 11 Jun 2024 18:51:44 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 25 posted to Guide by joel.larin on 6/11/2024 6:51:44 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:108%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Other considerations for implementation&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/24</link><pubDate>Tue, 11 Jun 2024 18:51:09 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 24 posted to Guide by joel.larin on 6/11/2024 6:51:09 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:105%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Other considerations for implementation&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/23</link><pubDate>Tue, 11 Jun 2024 18:49:53 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 23 posted to Guide by joel.larin on 6/11/2024 6:49:53 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. Applications developed as part of a project, along with their user interfaces, are built from scratch. Therefore, support for multiple languages is optional and depends on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. As of version 23.4, applications use the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html" target="_new"&gt;Translation Set Object&lt;/a&gt; to enable multi-language support.&lt;/p&gt;
&lt;h3&gt;Make Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that will be used by people speaking different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;&lt;strong&gt;Platform level&lt;/strong&gt;: This includes all base-product words, such as the names of the five tabs, numerical value, and date formats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application level&lt;/strong&gt;: This includes all application-specific words, such as record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console under the Internationalization tab. You can select the languages available to users and the primary locale of the site. Users will default to the primary language and can change their language to any enabled language through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users can switch the language in which they see the Appian interface. For instance, if Russian is enabled, users can display Appian in Russian or English. The following elements will be translated into different languages:&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;The five tabs and any base-product words in the Tempo interface, including:
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News, and Related Actions tabs in Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html" target="_new"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html" target="_new"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Note that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific can be internationalized as part of application development. Application internationalization is enabled through the &lt;a href="https://docs.appian.com/suite/help/24.1/translation-set-object.html"&gt;Translation Set Object&lt;/a&gt;. This object is a collection of translation strings that you can use to translate user display text, such as headers and labels, in interfaces and expressions. It is possible to add translation strings in bulk by generating them directly from an interface, converting hard-coded labels into translation strings.&lt;/p&gt;
&lt;p&gt;When all interfaces are included in the translation set, it can be exported in a spreadsheet format for professional translators to provide the values in all other locales, and imported back once it&amp;rsquo;s populated. Then, switch your user profile settings to a different language/locale to enable viewing your application in that language/locale.&lt;/p&gt;
&lt;p&gt;Other considerations for implementation&lt;/p&gt;
&lt;ul style="font-size:101%;"&gt;
&lt;li&gt;If a language is not supported and available out-of-the-box within the &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html" target="_new"&gt;Internationalization Settings&lt;/a&gt; of the platform environment at the Admin Console, Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application" target="_new"&gt;Internationalization Application plugin&lt;/a&gt; and the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt; on Appian AppMarket.&lt;/li&gt;
&lt;li&gt;Object names cannot be internationalized, for example, Groups, Record Types, Knowledge Center, Documents, etc.&lt;/li&gt;
&lt;li&gt;Object internal components with expression-backed labels can be internationalized, for example, Record List View User Filters, Process Model Display Names, etc.&lt;/li&gt;
&lt;li&gt;Reference data coming from the database will require translation via the &lt;a href="/b/appmarket/posts/load-resource-bundle" target="_new"&gt;Load Resource Bundle plugin&lt;/a&gt;. Instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve all reference data from the database in one read operation that you can then use to populate fields and selection lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By implementing these internationalization practices, you can ensure that your application is accessible and user-friendly for a global audience, meeting diverse language and locale requirements effectively.&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/22</link><pubDate>Tue, 23 Apr 2024 13:11:30 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Appian Max Team</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 22 posted to Guide by Appian Max Team on 4/23/2024 1:11:30 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/21</link><pubDate>Tue, 31 Oct 2023 16:35:29 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Kim Day</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 21 posted to Guide by Kim Day on 10/31/2023 4:35:29 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/20</link><pubDate>Tue, 31 Oct 2023 16:09:02 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Kim Day</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 20 posted to Guide by Kim Day on 10/31/2023 4:09:02 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/19</link><pubDate>Tue, 31 Oct 2023 15:05:40 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Kim Day</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 19 posted to Guide by Kim Day on 10/31/2023 3:05:40 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/18</link><pubDate>Tue, 31 Oct 2023 15:05:09 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Kim Day</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 18 posted to Guide by Kim Day on 10/31/2023 3:05:09 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/17</link><pubDate>Tue, 31 Oct 2023 15:01:02 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Kim Day</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 17 posted to Guide by Kim Day on 10/31/2023 3:01:02 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design patterns&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/16</link><pubDate>Tue, 31 Oct 2023 14:59:11 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Kim Day</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 16 posted to Guide by Kim Day on 10/31/2023 2:59:11 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/15</link><pubDate>Wed, 25 Oct 2023 14:27:04 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 15 posted to Guide by joel.larin on 10/25/2023 2:27:04 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/23.3/sail/sail-design-system-overview.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/14</link><pubDate>Wed, 25 Oct 2023 14:25:16 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 14 posted to Guide by joel.larin on 10/25/2023 2:25:16 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a multi-language framework, is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/latest/Get_Started_with_Appian_Designer.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/13</link><pubDate>Wed, 25 Oct 2023 14:24:26 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 13 posted to Guide by joel.larin on 10/25/2023 2:24:26 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a &lt;a href="/w/the-appian-playbook/100/application-internationalization"&gt;multi-language framework,&lt;/a&gt; is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/latest/Get_Started_with_Appian_Designer.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces, Task Display Names, Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers, Folders, Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/12</link><pubDate>Wed, 25 Oct 2023 14:23:53 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 12 posted to Guide by joel.larin on 10/25/2023 2:23:53 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a &lt;a href="/w/the-appian-playbook/100/application-internationalization"&gt;multi-language framework,&lt;/a&gt; is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h3 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h3&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="platform_internationalization"&gt;Platform Internationalization&lt;/h3&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/latest/Get_Started_with_Appian_Designer.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application_internationalization"&gt;Application Internationalization&lt;/h3&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces,Task Display Names,Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers,Folders,Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/11</link><pubDate>Wed, 25 Oct 2023 14:22:28 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 11 posted to Guide by joel.larin on 10/25/2023 2:22:28 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a &lt;a href="/w/the-appian-playbook/100/application-internationalization"&gt;multi-language framework,&lt;/a&gt; is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="making_applications_available_in_multiple_languages"&gt;Making Applications Available in Multiple Languages&lt;/h2&gt;
&lt;p&gt;You may need to build an application that is going to be used by people in different languages. There are two levels of internationalization that need to be handled:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Platform level - these are all base-product words, for example, the names of the five tabs, numerical value and date formats.&lt;/li&gt;
&lt;li&gt;Application level - these are all application-specific words, for example record names and field labels on an interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="platform_internationalization"&gt;Platform Internationalization&lt;/h2&gt;
&lt;p&gt;Platform internationalization is handled in the Administration Console in the&amp;nbsp;Internationalization tab. You can select the languages available to the users, and primary locale of the site. Users will be defaulted to the Primary Language to begin with, and will be able to change their language to any language enabled through the settings. For details on how to enable additional languages for your site, see &lt;a href="https://docs.appian.com/suite/help/latest/Internationalization_Settings.html"&gt;Internationalization Settings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If multiple languages are enabled, users will be able to switch the way they see the Appian interface. For instance, if Russian is enabled, this will allow users to display Appian in Russian or English. The following will be translated into different languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 5 tabs and any of the base-product words in the Tempo interface will be translated.
&lt;ul&gt;
&lt;li&gt;Filters and actions in the News tab&lt;/li&gt;
&lt;li&gt;Out-of-the-box filters in the Tasks tab&lt;/li&gt;
&lt;li&gt;Summary, News and Related Actions tabs in&amp;nbsp;Records&lt;/li&gt;
&lt;li&gt;Search filter on the Reports tab&lt;/li&gt;
&lt;li&gt;Filters in the Actions tab&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://docs.appian.com/suite/help/latest/Get_Started_with_Appian_Designer.html"&gt;Appian Designer&lt;/a&gt;, Designer Interface, and &lt;a href="https://docs.appian.com/suite/help/latest/Appian_Administration_Console.html"&gt;Administration Console&lt;/a&gt; out-of-the-box words will also appear in the user&amp;rsquo;s selected language. Keep in mind that most proper nouns or common abbreviations (Tempo, Appian, LDAP) will not be translated.&lt;/li&gt;
&lt;li&gt;All out-of-the-box notifications will be sent to users in their selected locale.&lt;/li&gt;
&lt;li&gt;Date and number formatting will be changed to reflect the user&amp;#39;s selected locale.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="application_internationalization"&gt;Application Internationalization&lt;/h2&gt;
&lt;p&gt;Any displayed words that are application-specific will need to be internationalized during application design. Depending on the object type the approaches to internationalization are different.&lt;/p&gt;
&lt;table class="appianTable"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Object Type&lt;/th&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applications&lt;/td&gt;
&lt;td&gt;For situations with a limited set of language options (maximum 3), we recommend using a single application with all 3 languages displayed in line for Actions (see detail under Actions).To display Application names within the Actions tab in different languages create a separate published application for each target language, for example Case Management (for English speakers), and Zarzadzanie Sprawami (for Polish). Additionally, you will have to create language specific groups and secure the applications, otherwise users will see all the published applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groups&lt;/td&gt;
&lt;td&gt;Group names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Action in-line with the names in different languages visible. For example New Contract | Neu Vertrag | Nowy Kontrakt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interfaces,Task Display Names,Record Views&lt;/td&gt;
&lt;td&gt;Utilize the &lt;a href="/b/appmarket/posts/load-resource-bundle"&gt;Load Resource Bundle&lt;/a&gt; plugin to retrieve correct labels for the referenced keys. Use per language resource file to store key value pairs. When the user accesses the interface, all field labels, instructions, validation messages, etc. will be retrieved from the resource bundle based on logged in user&amp;rsquo;s locale. This approach can be used for all expressionable locations: record views, user filters, etc. Avoid using multiple language tabs in the Process Model for task display names, use the Resource Bundle plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Internationalized apps need to use an expression-backed record to load the bundle once and pass the bundle into an element of the record source CDT. In the record list view the bundle element of the source CDT can be referenced to internationalize labels and data in the list view.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference Data&lt;/td&gt;
&lt;td&gt;Utilize a similar approach as described in&amp;nbsp;Managing Reference Data. However, instead of storing reference data labels, save data keys that you can then use for translation in the database. The updated table structure needs to have a label defined for the same key for each language. Create a view for data retrieval and a non-nested CDT to write data. On interfaces, retrieve &lt;em&gt;all&lt;/em&gt; reference data from the&amp;nbsp;database in one read operation that you can then use to populate fields and selection lists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record Types&lt;/td&gt;
&lt;td&gt;Record Types cannot be internationalized.Do not define separate record types for different languages, this will break any record links and make embedded interfaces much more difficult to integrate. Customer A is a Customer no matter the locale of the user viewing the record.For sites using three or fewer enabled languages, you can name your Records in-line with the names in different languages visible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record List View User Filters&lt;/td&gt;
&lt;td&gt;Use &lt;a href="https://docs.appian.com/suite/help/latest/Record_Type_Object.html#Expression_User_Filters"&gt;Expression User Filters&lt;/a&gt; to retrieve filter names and values using the same approach as Interfaces.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related Actions&lt;/td&gt;
&lt;td&gt;Related action names can be set dynamically in the&amp;nbsp;Process Model&amp;nbsp;Display Name field&amp;nbsp;using expressions.&amp;nbsp; It is no longer necessary to configure the legacy internationalization&amp;nbsp;tabs to ensure that related action names are internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reports&lt;/td&gt;
&lt;td&gt;For sites using three or less enabled languages, you can name your Reports in-line with the names in different languages visible. For example, &amp;quot;Agent Performance&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Events&lt;/td&gt;
&lt;td&gt;News Events will always retain the language they were posted in.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News Feeds&lt;/td&gt;
&lt;td&gt;News Feed names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Centers,Folders,Documents&lt;/td&gt;
&lt;td&gt;Collaboration object names cannot be internationalized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Document Generation&lt;/td&gt;
&lt;td&gt;In a case where internationalized documents must be generated from a template, translated versions of the template document can be stored in a folder with a locale identifier as a suffix (Eg: _en_US,_ es_ES, etc.).The correct template can be chosen using the Content Expressions plugin. Call getdocumentsfromfolder() specifying the locale as the filename and the template folder as the root folder in order to return your desired document template in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Emails can be internationalized using the Content Expressions plugin, Text File Utilities plugin, and html templates in multiple languages (text files). The text file names should be suffixed with the locale identifier (Eg: _en_US,_ es_ES, etc.). Call readtextfromfile(), specifying the file returned by getdocumentsfromfolder() specifying the locale as the filename and the correct template folder as the root folder in order to return your desired email in the desired language.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item><item><title>Frequently Reused Appian Components</title><link>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components/revision/10</link><pubDate>Wed, 22 Mar 2023 16:08:01 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:0c8ab730-c6e5-482d-852a-e2dd779d761d</guid><dc:creator>Devon Lee</dc:creator><comments>https://community.appian.com/success/w/guide/3058/frequently-reused-appian-components#comments</comments><description>Revision 10 posted to Guide by Devon Lee on 3/22/2023 4:08:01 PM&lt;br /&gt;
&lt;div style="margin:8px 16% 8px 8%;"&gt;
&lt;h2 id="skills_covered"&gt;Skills Covered&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key benefit of the Appian platform is that it allows you to create and store development and design objects so you can easily retrieve them for future use. A developer needs to consider reuse in the way a component is built. To enable effective reuse, a minimum of parameterization is required. While this will add a small amount of additional effort, it is easily outweighed by efficiency gains throughout the application development life cycle. The following five components are commonly found in Appian projects, and therefore make excellent candidates for reuse.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Skills Checklist:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li style="font-weight:400;"&gt;Identify benefits to reusing Appian components and interfaces in development.&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;&lt;span style="font-weight:400;"&gt;List three&amp;nbsp;frequently reused Appian&amp;nbsp;components.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight:400;"&gt;Identify strategies to ensure proper handling of reusable components.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="queries"&gt;Queries&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Data capture, storage and retrieval are key functions of any application. The storage and retrieval of data to and from the database is efficiently managed through query rules. The functionality supporting the retrieval or update of data to a database table is one of the most common parameterized expressions you will find in any application.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;To create more reusable queries, first build a query object or query expression object that returns all columns for a given row. Then add all major columns as filters and configure the query to ignore empty filters, which is done by using &lt;a href="https://docs.appian.com/suite/help/latest/fnc_system_a_querylogicalexpression.html"&gt;a!logicalQueryExpression&lt;/a&gt;. Once the object is created, you can source local variables within interface or expression objects using the general query object with desired filter criteria.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_1.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_2.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="interface_components"&gt;Interface Components&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian delivers out-of-the-box drag and drop functionality of countless components which allows you to create great user interfaces. However developers often take it a step further in fine-tuning layout to the specific needs of the end-users. These needs can relate to how data is graphically presented on-screen (e.g. branding, fonts, graphs, date formats) as well as how the data is manipulated before presented on screen (e.g. accumulation, permutation, classification). Both categories of fine-tuning, the interface components and business rules, once configured can be easily reused by making them available through a &lt;a href="/w/the-appian-playbook/193/common-object-management-guide"&gt;shared components application&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Business Rules&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Validator rules (email, SLA, date, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Formatting (Dates, datetimes, SSN, etc.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Interfaces&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Section headers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Grids&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Charts/Graphs&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Section Header&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create interface object using stamps, icons, and multiple types of formatted rich text.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;For each element that could be different from instance to the next (stamp, header value) replace the element&amp;rsquo;s value with a rule input.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all interfaces that will use this section header, reference the object and enter the desired values for the parameterized elements in the rule inputs.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Steps to Create Reusable Email Validator&lt;/h4&gt;
&lt;ul style="font-size:115%;"&gt;
&lt;li&gt;&lt;span&gt;Create expression rule to check if&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ends with &amp;lsquo;&lt;/span&gt;&lt;i&gt;&lt;span&gt;@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&amp;rsquo; and does not contain any special characters in the username.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Once the validation is accurate, remove any direct reference of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span&gt;myUsername@mydomain.com&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;from the expression and replace it with a rule input named ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;In all form objects that require this validation, simply reference the object and enter the desired value into the parameter input for ri!email.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appmarket_applications"&gt;AppMarket Applications&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Appian offers a robust set of frameworks, support applications, utilities and third-party integrations designed to streamline application development. Examples include &lt;a href="/b/appmarket/posts/audit-history-application"&gt;audit&lt;/a&gt;, &lt;a href="/b/appmarket/posts/record-comments"&gt;comments&lt;/a&gt;, &lt;a href="/b/appmarket/posts/user-and-group-management-application"&gt;user and group management&lt;/a&gt;, &lt;a href="/b/appmarket/posts/business-value-framework-bvf"&gt;metrics capture&lt;/a&gt;, and &lt;a href="/b/appmarket/posts/end-user-reporting"&gt;reporting&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_3.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Simply download the application from the AppMarket and import into your environment through the Admin Console. Once the application is uploaded, you are free to use the packaged objects anywhere in your application! For the full list of available applications and plug-ins, click &lt;a href="/b/appmarket"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="internationalization"&gt;Internationalization&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;The Appian design and admin interfaces are available out-of-the-box in multiple languages. The application that is developed as part of a project, and its included user interfaces, are built from scratch. Hence, support for multiple languages is optional and depending on business requirements. Backend functionality, a &lt;a href="/w/the-appian-playbook/100/application-internationalization"&gt;multi-language framework,&lt;/a&gt; is set up once and shared across the Appian platform. Appian offers an &lt;a href="/b/appmarket/posts/internationalization-application"&gt;Internationalization Application&lt;/a&gt; on Appian AppMarket to improve performance and effectiveness of designing applications for multiple languages.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="business_processes"&gt;Business Processes&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;A key architectural design principle in building Appian applications is to compartmentalize functional process steps. This is not only good for efficient system memory management, but also allows for reuse of repetitive business logic. To leverage a reusable process, simply add it to your business workflow as a subprocess within that process model.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Review and approval is a typical business process that can be applied to multiple areas. A frequently seen example occurs in loan origination processes within the banking industry. For some banks, different types of loans (eg. secured or unsecured) both go through the same or similar approvals. Through parameterization of the business process components the approval functionality can be efficiently reused across the platform.&lt;/span&gt;&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_4.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="text-align:center;"&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/980x546/__key/communityserver-wikis-components-files/00-00-00-00-46/reused_2D00_comp_2D00_5.png" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="authentication"&gt;Authentication&lt;/h2&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;Many Appian customers configure their higher environments with SAML Single Sign-On (SSO) or LDAP configurations to leverage already existing identity providers. Authentication configurations are done at the platform level, meaning that it can be reused across all applications in a given environment with minimal additional configurations.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font-size:115%;"&gt;&lt;span style="font-weight:400;"&gt;SAML and LDAP configuration is located in the Admin Console underneath Authentication. For more detailed instructions, see &lt;a href="/success/w/article/3057/configuring-multi-factor-authentication-mfa"&gt;Configuring Multi-Factor Authentication (MFA)&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: design-patterns, Platform&lt;/div&gt;
</description></item></channel></rss>