<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration</link><description /><dc:language>en-US</dc:language><generator>14.0.0.586 14</generator><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration</link><pubDate>Wed, 05 Aug 2020 16:17:33 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Current Revision posted to Developer Training by Former Member on 08/05/2020 16:17:33&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Scripting|scripted customizations]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget, theme, or automation to&amp;nbsp;managers using the scripted customization. Dynamic configuration is defined as XML on a [[Widgets|widgets]], [[Themes|themes]], and [[Automations|automations]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;core_v2_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertySubGroup_gt" name="lt_propertySubGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertySubGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertySubGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertySubGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a sub-grouping of configuration properties. Within the widget configuration window, each sub-group is represented with a heading.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this sub-group (by default, sub-groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this sub-group should be shown on the widget configuration window (by default, all sub-groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [template=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for this property. This is the identifier used when retrieving values via the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;$core_v2_widget&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the data type of this property. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Bool&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Color&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS color value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Date&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;DateTime&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date and a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Double&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a double-precision floating point value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Guid&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a globally unique identifier value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Html&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an HTML value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Int&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an integer value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;String&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores as a string value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Time&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Unit&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS unit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;UrlList&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a list of zero or more URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Custom&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a custom string value suitable for use with custom property templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;defaultValue&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;editable&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;template&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the name of a shared property template (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyTemplate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface) or a local&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;.vm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file (the filename including the .vm extension) containing an [[Embedding a custom user interface for a configuration property|implementation of the user interface of this property]]. If not specified, the default template (named for the data type) will be used. Note that there is no default template for custom properties and an explicit template should always be provided.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored (for [[Widgets|widgets]] only). Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;span class="code"&gt;site&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;group&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;blog&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are any additional attributes used by property rules or property templates for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When using a local custom property template (implemented using a VM file or JSM file), the executed file is provided an additional API,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;core_v2_propertyTemplate&lt;/span&gt;&lt;/code&gt;, which provides access to property rendering specific data.&lt;/p&gt;
&lt;p&gt;HTML properties can be sanitized according to the global content filtering rules of the community by setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;sanitize&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the property to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String properties are always HTML encoded.&lt;/p&gt;
&lt;p&gt;To support file storage within a property with a custom data type, set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;trackEmbeddedFiles&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;node to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;. By default, file detection within custom properties considers the value as plain text. By setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;encoding&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/code&gt;, the custom value will be parsed as a URL encoded set of keys or key value pairs when detecting file URLs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;value&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;value&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyRule name=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;name&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of a shared property rule (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyRule&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;a id="Property_Value_Data_Types" name="Property_Value_Data_Types"&gt;&lt;/a&gt;Property Value Data Types&lt;/h2&gt;
&lt;p&gt;When working with property values on the server and client side via property rules or templates, note the data representation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration data type&lt;/th&gt;
&lt;th&gt;Server data type (.Net)&lt;/th&gt;
&lt;th&gt;Client data type (Javascript)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Bool&lt;/th&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Color&lt;/td&gt;
&lt;td&gt;String representation of the color: #RRGGBB, #RRGGBBAA, rgb(1-255, 1-255, 1-255), rgba(1-255, 1-255, 1-255, 0-1), hsl(1-255, %, %), hsla(1-255, %, %, 0-1), or a named HTML color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;DateTime&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Double&lt;/th&gt;
&lt;td&gt;Double&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Guid&lt;/th&gt;
&lt;td&gt;Guid&lt;/td&gt;
&lt;td&gt;String representation of a GUID: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Html&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Int&lt;/th&gt;
&lt;td&gt;Int32&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;String&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Unit&lt;/td&gt;
&lt;td&gt;String representation of a CSS unit, a px, pt, pc, in, mm, cm, %, em, ex, ch, rem, v2, or vh value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Url&lt;/th&gt;
&lt;td&gt;Uri&lt;/td&gt;
&lt;td&gt;String representation of a URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;UrlList&lt;/th&gt;
&lt;td&gt;Uri[]&lt;/td&gt;
&lt;td&gt;Array of string representations of URL that, when converted to a string, represents the URLs in querystring format with the key Uri, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Uri=http://url.com/&amp;amp;Uri=http://url2.com/&lt;/span&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Custom&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; labelResourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; labelResourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; labelResourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; labelResourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; labelResourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; labelResourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule name=&amp;quot;minmax&amp;quot; min=&amp;quot;1&amp;quot; max=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; labelResourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity|Velocity&amp;nbsp;script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Dynamic Configuration, widgets&lt;/div&gt;
</description></item><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/7</link><pubDate>Mon, 02 Mar 2020 18:10:45 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 7 posted to Developer Training by Ben Tiedt on 03/02/2020 18:10:45&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Scripting|scripted customizations]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget, theme, or automation to&amp;nbsp;managers using the scripted customization. Dynamic configuration is defined as XML on a [[Widgets|widgets]], [[Themes|themes]], and [[Automations|automations]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;core_v2_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertySubGroup_gt" name="lt_propertySubGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertySubGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertySubGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertySubGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a sub-grouping of configuration properties. Within the widget configuration window, each sub-group is represented with a heading.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this sub-group (by default, sub-groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this sub-group should be shown on the widget configuration window (by default, all sub-groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [template=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for this property. This is the identifier used when retrieving values via the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;$core_v2_widget&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the data type of this property. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Bool&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Color&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS color value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Date&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;DateTime&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date and a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Double&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a double-precision floating point value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Guid&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a globally unique identifier value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Html&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an HTML value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Int&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an integer value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;String&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores as a string value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Time&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Unit&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS unit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;UrlList&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a list of zero or more URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Custom&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a custom string value suitable for use with custom property templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;defaultValue&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;editable&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;template&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the name of a shared property template (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyTemplate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface) or a local&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;.vm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file (the filename including the .vm extension) containing an [[Embedding a custom user interface for a configuration property|implementation of the user interface of this property]]. If not specified, the default template (named for the data type) will be used. Note that there is no default template for custom properties and an explicit template should always be provided.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored (for [[Widgets|widgets]] only). Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;span class="code"&gt;site&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;group&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;blog&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are any additional attributes used by property rules or property templates for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When using a local custom property template (implemented using a VM file or JSM file), the executed file is provided an additional API,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;core_v2_propertyTemplate&lt;/span&gt;&lt;/code&gt;, which provides access to property rendering specific data.&lt;/p&gt;
&lt;p&gt;HTML properties can be sanitized according to the global content filtering rules of the community by setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;sanitize&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the property to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String properties are always HTML encoded.&lt;/p&gt;
&lt;p&gt;To support file storage within a property with a custom data type, set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;trackEmbeddedFiles&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;node to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;. By default, file detection within custom properties considers the value as plain text. By setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;encoding&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/code&gt;, the custom value will be parsed as a URL encoded set of keys or key value pairs when detecting file URLs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;value&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;value&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyRule name=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;name&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of a shared property rule (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyRule&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;a id="Property_Value_Data_Types" name="Property_Value_Data_Types"&gt;&lt;/a&gt;Property Value Data Types&lt;/h2&gt;
&lt;p&gt;When working with property values on the server and client side via property rules or templates, note the data representation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration data type&lt;/th&gt;
&lt;th&gt;Server data type (.Net)&lt;/th&gt;
&lt;th&gt;Client data type (Javascript)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Bool&lt;/th&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Color&lt;/td&gt;
&lt;td&gt;String representation of the color: #RRGGBB, #RRGGBBAA, rgb(1-255, 1-255, 1-255), rgba(1-255, 1-255, 1-255, 0-1), hsl(1-255, %, %), hsla(1-255, %, %, 0-1), or a named HTML color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;DateTime&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Double&lt;/th&gt;
&lt;td&gt;Double&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Guid&lt;/th&gt;
&lt;td&gt;Guid&lt;/td&gt;
&lt;td&gt;String representation of a GUID: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Html&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Int&lt;/th&gt;
&lt;td&gt;Int32&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;String&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Unit&lt;/td&gt;
&lt;td&gt;String representation of a CSS unit, a px, pt, pc, in, mm, cm, %, em, ex, ch, rem, v2, or vh value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Url&lt;/th&gt;
&lt;td&gt;Uri&lt;/td&gt;
&lt;td&gt;String representation of a URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;UrlList&lt;/th&gt;
&lt;td&gt;Uri[]&lt;/td&gt;
&lt;td&gt;Array of string representations of URL that, when converted to a string, represents the URLs in querystring format with the key Uri, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Uri=http://url.com/&amp;amp;Uri=http://url2.com/&lt;/span&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Custom&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; labelResourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; labelResourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; labelResourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; labelResourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; labelResourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; labelResourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule name=&amp;quot;minmax&amp;quot; min=&amp;quot;1&amp;quot; max=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; labelResourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity|Velocity&amp;nbsp;script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/6</link><pubDate>Mon, 02 Mar 2020 18:02:27 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 6 posted to Developer Training by Ben Tiedt on 03/02/2020 18:02:27&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Scripting|scripted customizations]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget, theme, or automation to&amp;nbsp;managers using the scripted customization. Dynamic configuration is defined as XML on a [[Widgets|widgets]], [[Themes|themes]], and [[Automations|automations]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;core_v2_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertySubGroup_gt" name="lt_propertySubGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertySubGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertySubGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertySubGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a sub-grouping of configuration properties. Within the widget configuration window, each sub-group is represented with a heading.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this sub-group (by default, sub-groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this sub-group should be shown on the widget configuration window (by default, all sub-groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [template=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for this property. This is the identifier used when retrieving values via the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;$core_v2_widget&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the data type of this property. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Bool&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Color&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS color value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Date&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;DateTime&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date and a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Double&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a double-precision floating point value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Guid&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a globally unique identifier value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Html&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an HTML value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Int&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an integer value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;String&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores as a string value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Time&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Unit&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS unit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;UrlList&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a list of zero or more URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Custom&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a custom string value suitable for use with custom property templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;defaultValue&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;editable&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;template&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the name of a shared property template (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyTemplate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface) or a local&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;.vm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file (the filename including the .vm extension) containing an [[Embedding a custom user interface for a configuration property|implementation of the user interface of this property]]. If not specified, the default template (named for the data type) will be used. Note that there is no default template for custom properties and an explicit template should always be provided. Note that use of IPropertyControls is obsolete and will be removed in the 12.0 release.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored (for [[Widgets|widgets]] only). Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;span class="code"&gt;site&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;group&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;blog&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are any additional attributes used by property rules or property templates for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When using a local custom property template (implemented using a VM file or JSM file), the executed file is provided an additional API,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;core_v2_propertyTemplate&lt;/span&gt;&lt;/code&gt;, which provides access to property rendering specific data.&lt;/p&gt;
&lt;p&gt;HTML properties can be sanitized according to the global content filtering rules of the community by setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;sanitize&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the property to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String properties are always HTML encoded.&lt;/p&gt;
&lt;p&gt;To support file storage within a property with a custom data type, set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;trackEmbeddedFiles&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;node to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;. By default, file detection within custom properties considers the value as plain text. By setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;encoding&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/code&gt;, the custom value will be parsed as a URL encoded set of keys or key value pairs when detecting file URLs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;value&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;value&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyRule name=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;name&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of a shared property rule (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyRule&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;a id="Property_Value_Data_Types" name="Property_Value_Data_Types"&gt;&lt;/a&gt;Property Value Data Types&lt;/h2&gt;
&lt;p&gt;When working with property values on the server and client side via property rules or templates, note the data representation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration data type&lt;/th&gt;
&lt;th&gt;Server data type (.Net)&lt;/th&gt;
&lt;th&gt;Client data type (Javascript)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Bool&lt;/th&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Color&lt;/td&gt;
&lt;td&gt;String representation of the color: #RRGGBB, #RRGGBBAA, rgb(1-255, 1-255, 1-255), rgba(1-255, 1-255, 1-255, 0-1), hsl(1-255, %, %), hsla(1-255, %, %, 0-1), or a named HTML color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;DateTime&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Double&lt;/th&gt;
&lt;td&gt;Double&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Guid&lt;/th&gt;
&lt;td&gt;Guid&lt;/td&gt;
&lt;td&gt;String representation of a GUID: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Html&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Int&lt;/th&gt;
&lt;td&gt;Int32&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;String&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Unit&lt;/td&gt;
&lt;td&gt;String representation of a CSS unit, a px, pt, pc, in, mm, cm, %, em, ex, ch, rem, v2, or vh value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Url&lt;/th&gt;
&lt;td&gt;Uri&lt;/td&gt;
&lt;td&gt;String representation of a URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;UrlList&lt;/th&gt;
&lt;td&gt;Uri[]&lt;/td&gt;
&lt;td&gt;Array of string representations of URL that, when converted to a string, represents the URLs in querystring format with the key Uri, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Uri=http://url.com/&amp;amp;Uri=http://url2.com/&lt;/span&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Custom&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; labelResourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; labelResourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; labelResourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; labelResourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; labelResourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; labelResourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule name=&amp;quot;minmax&amp;quot; min=&amp;quot;1&amp;quot; max=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; labelResourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity|Velocity&amp;nbsp;script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/5</link><pubDate>Tue, 02 Jul 2019 15:21:31 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 5 posted to Developer Training by Ben Tiedt on 07/02/2019 15:21:31&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Scripting|scripted customizations]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget, theme, or automation to&amp;nbsp;managers using the scripted customization. Dynamic configuration is defined as XML on a [[Widgets|widgets]], [[Themes|themes]], and [[Automations|automations]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;core_v2_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertySubGroup_gt" name="lt_propertySubGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertySubGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertySubGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertySubGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a sub-grouping of configuration properties. Within the widget configuration window, each sub-group is represented with a heading.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this sub-group (by default, sub-groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this sub-group should be shown on the widget configuration window (by default, all sub-groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [template=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for this property. This is the identifier used when retrieving values via the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;$core_v2_widget&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the data type of this property. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Bool&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Color&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS color value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Date&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;DateTime&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date and a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Double&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a double-precision floating point value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Guid&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a globally unique identifier value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Html&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an HTML value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Int&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an integer value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;String&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores as a string value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Time&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Unit&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS unit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;UrlList&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a list of zero or more URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Custom&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a custom string value suitable for use with custom property templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;defaultValue&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;editable&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;template&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the name of a shared property template (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyTemplate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface) or a local&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;.vm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file (the filename including the .vm extension) containing an [[Embedding a custom user interface for a configuration property|implementation of the user interface of this property]]. If not specified, the default template (named for the data type) will be used. Note that there is no default template for custom properties and an explicit template should always be provided.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored (for [[Widgets|widgets]] only). Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;span class="code"&gt;site&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;group&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;blog&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are any additional attributes used by property rules or property templates for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When using a local custom property template (implemented using a VM file or JSM file), the executed file is provided an additional API,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;core_v2_propertyTemplate&lt;/span&gt;&lt;/code&gt;, which provides access to property rendering specific data.&lt;/p&gt;
&lt;p&gt;HTML properties can be sanitized according to the global content filtering rules of the community by setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;sanitize&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the property to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String properties are always HTML encoded.&lt;/p&gt;
&lt;p&gt;To support file storage within a property with a custom data type, set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;trackEmbeddedFiles&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;node to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;. By default, file detection within custom properties considers the value as plain text. By setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;encoding&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/code&gt;, the custom value will be parsed as a URL encoded set of keys or key value pairs when detecting file URLs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;value&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;value&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyRule name=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;name&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of a shared property rule (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyRule&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;a id="Property_Value_Data_Types" name="Property_Value_Data_Types"&gt;&lt;/a&gt;Property Value Data Types&lt;/h2&gt;
&lt;p&gt;When working with property values on the server and client side via property rules or templates, note the data representation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration data type&lt;/th&gt;
&lt;th&gt;Server data type (.Net)&lt;/th&gt;
&lt;th&gt;Client data type (Javascript)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Bool&lt;/th&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Color&lt;/td&gt;
&lt;td&gt;String representation of the color: #RRGGBB, #RRGGBBAA, rgb(1-255, 1-255, 1-255), rgba(1-255, 1-255, 1-255, 0-1), hsl(1-255, %, %), hsla(1-255, %, %, 0-1), or a named HTML color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;DateTime&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Double&lt;/th&gt;
&lt;td&gt;Double&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Guid&lt;/th&gt;
&lt;td&gt;Guid&lt;/td&gt;
&lt;td&gt;String representation of a GUID: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Html&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Int&lt;/th&gt;
&lt;td&gt;Int32&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;String&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Unit&lt;/td&gt;
&lt;td&gt;String representation of a CSS unit, a px, pt, pc, in, mm, cm, %, em, ex, ch, rem, v2, or vh value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Url&lt;/th&gt;
&lt;td&gt;Uri&lt;/td&gt;
&lt;td&gt;String representation of a URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;UrlList&lt;/th&gt;
&lt;td&gt;Uri[]&lt;/td&gt;
&lt;td&gt;Array of string representations of URL that, when converted to a string, represents the URLs in querystring format with the key Uri, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Uri=http://url.com/&amp;amp;Uri=http://url2.com/&lt;/span&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Custom&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; labelResourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; labelResourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; labelResourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; labelResourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; labelResourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; labelResourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule name=&amp;quot;minmax&amp;quot; min=&amp;quot;1&amp;quot; max=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; labelResourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity|Velocity&amp;nbsp;script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/4</link><pubDate>Fri, 21 Jun 2019 20:58:18 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 4 posted to Developer Training by Ben Tiedt on 06/21/2019 20:58:18&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Scripting|scripted customizations]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget, theme, or automation to&amp;nbsp;managers using the scripted customization. Dynamic configuration is defined as XML on a [[Widgets|widgets]], [[Themes|themes]], and [[Automations|automations]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;core_v2_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertySubGroup_gt" name="lt_propertySubGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertySubGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertySubGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertySubGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a sub-grouping of configuration properties. Within the widget configuration window, each sub-group is represented with a heading.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this sub-group (by default, sub-groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this sub-group should be shown on the widget configuration window (by default, all sub-groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [template=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for this property. This is the identifier used when retrieving values via the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;$core_v2_widget&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the data type of this property. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Bool&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Color&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS color value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Date&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;DateTime&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date and a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Double&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a double-precision floating point value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Guid&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a globally unique identifier value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Html&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an HTML value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Int&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an integer value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;String&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores as a string value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Time&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Unit&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS unit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;UrlList&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a list of zero or more URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Custom&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a custom string value suitable for use with custom property templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;defaultValue&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;editable&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;template&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the name of a shared property template (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyTemplate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface) or a local&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;.vm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file (the filename including the .vm extension)containing an implementation of the user interface of this property. If not specified, the default template (named for the data type) will be used. Note that there is no default template for custom properties and an explicit template should always be provided.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored (for [[Widgets|widgets]] only). Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;span class="code"&gt;site&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;group&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;blog&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are any additional attributes used by property rules or property templates for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When using a local custom property template (implemented using a VM file or JSM file), the executed file is provided an additional API,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;core_v2_propertyTemplate&lt;/span&gt;&lt;/code&gt;, which provides access to property rendering specific data.&lt;/p&gt;
&lt;p&gt;HTML properties can be sanitized according to the global content filtering rules of the community by setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;sanitize&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the property to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String properties are always HTML encoded.&lt;/p&gt;
&lt;p&gt;To support file storage within a property with a custom data type, set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;trackEmbeddedFiles&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;node to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;. By default, file detection within custom properties considers the value as plain text. By setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;encoding&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/code&gt;, the custom value will be parsed as a URL encoded set of keys or key value pairs when detecting file URLs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;value&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;value&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyRule name=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;name&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of a shared property rule (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyRule&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;a id="Property_Value_Data_Types" name="Property_Value_Data_Types"&gt;&lt;/a&gt;Property Value Data Types&lt;/h2&gt;
&lt;p&gt;When working with property values on the server and client side via property rules or templates, note the data representation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration data type&lt;/th&gt;
&lt;th&gt;Server data type (.Net)&lt;/th&gt;
&lt;th&gt;Client data type (Javascript)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Bool&lt;/th&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Color&lt;/td&gt;
&lt;td&gt;String representation of the color: #RRGGBB, #RRGGBBAA, rgb(1-255, 1-255, 1-255), rgba(1-255, 1-255, 1-255, 0-1), hsl(1-255, %, %), hsla(1-255, %, %, 0-1), or a named HTML color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;DateTime&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Double&lt;/th&gt;
&lt;td&gt;Double&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Guid&lt;/th&gt;
&lt;td&gt;Guid&lt;/td&gt;
&lt;td&gt;String representation of a GUID: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Html&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Int&lt;/th&gt;
&lt;td&gt;Int32&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;String&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Unit&lt;/td&gt;
&lt;td&gt;String representation of a CSS unit, a px, pt, pc, in, mm, cm, %, em, ex, ch, rem, v2, or vh value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Url&lt;/th&gt;
&lt;td&gt;Uri&lt;/td&gt;
&lt;td&gt;String representation of a URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;UrlList&lt;/th&gt;
&lt;td&gt;Uri[]&lt;/td&gt;
&lt;td&gt;Array of string representations of URL that, when converted to a string, represents the URLs in querystring format with the key Uri, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Uri=http://url.com/&amp;amp;Uri=http://url2.com/&lt;/span&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Custom&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; labelResourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; labelResourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; labelResourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; labelResourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; labelResourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; labelResourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule name=&amp;quot;minmax&amp;quot; min=&amp;quot;1&amp;quot; max=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; labelResourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity|Velocity&amp;nbsp;script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/3</link><pubDate>Fri, 21 Jun 2019 20:56:58 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 3 posted to Developer Training by Ben Tiedt on 06/21/2019 20:56:58&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Scripting|scripted customizations]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget, theme, or automation to&amp;nbsp;managers using the scripted customization. Dynamic configuration is defined as XML on a [[Widgets|widgets]], [[Themes|themes]], and [[Automations|automations]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;core_v2_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertySubGroup_gt" name="lt_propertySubGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertySubGroup /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertySubGroup [id=""] [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [visible=""] &amp;gt;...&amp;lt;/propertySubGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a sub-grouping of configuration properties. Within the widget configuration window, each sub-group is represented with a heading.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for the sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this sub-group.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this sub-group (by default, sub-groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this sub-group should be shown on the widget configuration window (by default, all sub-groups with visible properties are shown).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [descriptionResourceName=""] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [template=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the identifier for this property. This is the identifier used when retrieving values via the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;$core_v2_widget&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the data type of this property. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Bool&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Color&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS color value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Date&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;DateTime&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a date and a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Double&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a double-precision floating point value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Guid&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a globally unique identifier value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Html&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an HTML value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Int&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores an integer value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;String&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores as a string value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Time&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Unit&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a CSS unit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a URL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;UrlList&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a list of zero or more URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;Custom&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;stores a custom string value suitable for use with custom property templates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;descriptionText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText description of this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;defaultValue&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;editable&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;visible&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is a boolean (&lt;span class="code"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;false&lt;/span&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;template&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the name of a shared property template (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyTemplate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface) or a local&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;.vm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;file (the filename including the .vm extension)containing an implementation of the user interface of this property. If not specified, the default template (named for the data type) will be used. Note that there is no default template for custom properties and an explicit template should always be provided.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored (for [[Widgets|widgets]] only). Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;scope&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;span class="code"&gt;site&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;group&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;span class="code"&gt;blog&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are any additional attributes used by property rules or property templates for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;id&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;dataType&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;When working with property values on the server and client side via property rules or templates, note the data representation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Configuration data type&lt;/th&gt;
&lt;th&gt;Server data type (.Net)&lt;/th&gt;
&lt;th&gt;Client data type (Javascript)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Bool&lt;/th&gt;
&lt;td&gt;Bool&lt;/td&gt;
&lt;td&gt;Boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Color&lt;/td&gt;
&lt;td&gt;String representation of the color: #RRGGBB, #RRGGBBAA, rgb(1-255, 1-255, 1-255), rgba(1-255, 1-255, 1-255, 0-1), hsl(1-255, %, %), hsla(1-255, %, %, 0-1), or a named HTML color.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;DateTime&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Double&lt;/th&gt;
&lt;td&gt;Double&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Guid&lt;/th&gt;
&lt;td&gt;Guid&lt;/td&gt;
&lt;td&gt;String representation of a GUID: FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Html&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Int&lt;/th&gt;
&lt;td&gt;Int32&lt;/td&gt;
&lt;td&gt;Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;String&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;td&gt;DateTime&lt;/td&gt;
&lt;td&gt;Date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;td&gt;Telligent.Evolution.Extensibility.Configuration.Version1.Unit&lt;/td&gt;
&lt;td&gt;String representation of a CSS unit, a px, pt, pc, in, mm, cm, %, em, ex, ch, rem, v2, or vh value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Url&lt;/th&gt;
&lt;td&gt;Uri&lt;/td&gt;
&lt;td&gt;String representation of a URL.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;UrlList&lt;/th&gt;
&lt;td&gt;Uri[]&lt;/td&gt;
&lt;td&gt;Array of string representations of URL that, when converted to a string, represents the URLs in querystring format with the key Uri, for example,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Uri=http://url.com/&amp;amp;Uri=http://url2.com/&lt;/span&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Custom&lt;/th&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;When using a local custom property template (implemented using a VM file or JSM file), the executed file is provided an additional API,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;core_v2_propertyTemplate&lt;/span&gt;&lt;/code&gt;, which provides access to property rendering specific data.&lt;/p&gt;
&lt;p&gt;HTML properties can be sanitized according to the global content filtering rules of the community by setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;sanitize&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the property to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;String properties are always HTML encoded.&lt;/p&gt;
&lt;p&gt;To support file storage within a property with a custom data type, set the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;trackEmbeddedFiles&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;node to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;true&lt;/span&gt;&lt;/code&gt;. By default, file detection within custom properties considers the value as plain text. By setting the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;encoding&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;attribute on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;&amp;lt;property /&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;Url&lt;/span&gt;&lt;/code&gt;, the custom value will be parsed as a URL encoded set of keys or key value pairs when detecting file URLs.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [labelResourceName=""] [labelText=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;value&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the plain labelText name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;orderNumber&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&lt;span class="code"&gt;labelResourceName&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code&gt;&lt;span class="code"&gt;labelText&lt;/span&gt;&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;are required in addition to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;value&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="documentation-member"&gt;
&lt;h3 class="member_heading"&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;div class="documentation-member-body"&gt;
&lt;div class="MethodOverloads"&gt;
&lt;div class="MethodOverload"&gt;
&lt;pre class="code"&gt;&amp;lt;propertyRule name=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul class="parameters"&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;name&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the name of a shared property rule (an installed plugin implementing the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="code"&gt;Telligent.Evolution.Extensibility.Configuration.Version1.IPropertyRule&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;interface).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span class="code"&gt;[other attributes]&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; labelResourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; labelResourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; labelResourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; labelResourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; labelResourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; labelResourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule name=&amp;quot;minmax&amp;quot; min=&amp;quot;1&amp;quot; max=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; labelResourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity|Velocity&amp;nbsp;script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Using Dynamic Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/2</link><pubDate>Fri, 21 Jun 2019 19:35:15 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 2 posted to Developer Training by Ben Tiedt on 06/21/2019 19:35:15&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Widgets|widgets]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget to administrators and other non-deveopers. Dynamic configuration is defined as XML on a [[Widgets|widget]] in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;$core_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;propertyGroup [id=""] [resourceName=&amp;quot;&amp;quot; [resourceFile=""]] [text=""] [descriptionResourceName=&amp;quot;&amp;quot; [descriptionResourceFile=""]] [descriptionText=""] [orderNumber=""] [visible=""] [other attributes]&amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id &lt;/code&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourceName &lt;/code&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resouceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;resourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text &lt;/code&gt;is the plain text name of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceName &lt;/code&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;descriptionResourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionText &lt;/code&gt;is the plain text description of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderNumber &lt;/code&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visible &lt;/code&gt;is a boolean (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups are shown).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;resourceName&lt;/code&gt; or &lt;code&gt;text&lt;/code&gt; are required.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [resourceName=&amp;quot;&amp;quot; [resourceFile=""]] [text=""] [descriptionResourceName=&amp;quot;&amp;quot; [descriptionResourceFile=""]] [descriptionText=""] [orderNumber=""] [defaultValue=""] [editable=""] [visible=""] [controlType=""] [scope=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id &lt;/code&gt;is the identifier for this property. This is the identifier used when retrieving values via the &lt;code&gt;$core_widget&lt;/code&gt; extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dataType &lt;/code&gt;is the data type of this property. Possible values are:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Bool &lt;/code&gt;stores a true or false value and is rendered as a checkbox by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Color &lt;/code&gt;stores an HTML color value and is rendered as a color selector by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date &lt;/code&gt;stores a date and is rendered as a date-bound text box with a calendar selector by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DateTime &lt;/code&gt;stores a date and a time and is rendered as a date/time-bound text box with a calendar selector by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Double &lt;/code&gt;stores a double-precision floating point value and renders as a double-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Guid &lt;/code&gt;stores a globally unique identifier value and renders as a GUID-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Html &lt;/code&gt;stores an HTML value and renders as a text box by default (HTML values are automatically HTML sanitized for rendering).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Int&lt;/code&gt; stores an integer value and renders as an integer-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;String &lt;/code&gt;stores as a string value and renders as a text box by default (string values are automatically HTML encoded for rendering).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Time &lt;/code&gt;stores a time and is rendered as a time-bound text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Unit &lt;/code&gt;stores a CSS unit and is rendered as a unit-bound text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Url &lt;/code&gt;stores a URL and is rendered as a URL-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Custom &lt;/code&gt;stores a custom string value suitable for use with custom property control implementations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourceName&lt;/code&gt; is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resouceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;resourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text&lt;/code&gt; is the plain text name of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceName &lt;/code&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;descriptionResourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionText &lt;/code&gt;is the plain text description of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderNumber &lt;/code&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultValue &lt;/code&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;editable &lt;/code&gt;is a boolean (&lt;code&gt;true &lt;/code&gt;or &lt;code&gt;false&lt;/code&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visible &lt;/code&gt;is a boolean (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;controlType &lt;/code&gt;is the full .net type name (&lt;code&gt;Namespace.ClassName, AssemblyName&lt;/code&gt;) of the &lt;code&gt;Telligent.DynamicConfiguration.Components.IPropertyControl&lt;/code&gt; implementation to use when editing this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scope &lt;/code&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored. Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when scope is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;site &lt;/code&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;group &lt;/code&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blog &lt;/code&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;br /&gt;When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;resourceName &lt;/code&gt;or &lt;code&gt;text &lt;/code&gt;are required in addition to &lt;code&gt;id &lt;/code&gt;and &lt;code&gt;dataType&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [resourceName=&amp;quot;&amp;quot; [resourceFile=""]] [text=""] [orderNumber=""] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt; is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourceName &lt;/code&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resouceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by resourceName.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text &lt;/code&gt;is the plain text name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderNumber &lt;/code&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;resourceName &lt;/code&gt;or &lt;code&gt;text &lt;/code&gt;are required in addition to &lt;code&gt;value&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;propertyRule type=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type &lt;/code&gt;is the full .net type name (&lt;code&gt;Namespace.ClassName, AssemblyName&lt;/code&gt;) of the &lt;code&gt;Telligent.DynamicConfiguration.Components.IPropertyRule&lt;/code&gt; implementation to apply to the associated property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a id="Scoped_Properties" name="Scoped_Properties"&gt;&lt;/a&gt;Scoped Properties&lt;/h2&gt;
&lt;p&gt;At times, it may be useful to have a widget placed on multiple pages share a single configuration. For example, the Group Application Navigation widget when shown on multiple pages within a group should always show the same set of navigation tabs. Widget developers can enable this behavior by defining an explicit scope for one or more widget configuration properties.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Defining_a_Property_39_s_Scope" name="Defining_a_Property_39_s_Scope"&gt;&lt;/a&gt;Defining a Property&amp;#39;s Scope&lt;/h3&gt;
&lt;p&gt;A property&amp;#39;s scope is defined by the &lt;code&gt;scope&lt;/code&gt;attribute. Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when scope is defined, the value will apply to all instances of the widget within the defined scope.&lt;/p&gt;
&lt;p&gt;For example, in the following sample, the &lt;code&gt;fragmentHeader &lt;/code&gt;property uses the default scoping (widget instance) and the &lt;code&gt;navigation &lt;/code&gt;property defines an explicit scope of &lt;code&gt;group&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="brush:xml;"&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;&lt;br /&gt;	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; resourceName=&amp;quot;CF_Title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:Groups_GroupApplicationNavigation_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;&lt;br /&gt;	&amp;lt;property id=&amp;quot;navigation&amp;quot; dataType=&amp;quot;custom&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.CustomNavigationCustomControl, Telligent.Evolution.Controls&amp;quot; maximumDepth=&amp;quot;1&amp;quot; resourceName=&amp;quot;Groups_GroupApplicationNavigation_Navigation&amp;quot; descriptionResourceName=&amp;quot;Groups_GroupApplicationNavigation_Navigation_Description&amp;quot; navigationType=&amp;quot;group&amp;quot; scope=&amp;quot;group&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;h3&gt;&lt;a id="Supported_Scopes" name="Supported_Scopes"&gt;&lt;/a&gt;Supported Scopes&lt;/h3&gt;
&lt;p&gt;The default scope is the instance of the widget. &amp;nbsp;This scope is used if the &lt;code&gt;scope &lt;/code&gt;attribute is not defined. &amp;nbsp;When &lt;code&gt;scope&lt;/code&gt; is explicitly defined, the following values are supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;site&lt;/code&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;group&lt;/code&gt;&amp;nbsp;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blog&lt;/code&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Platform_Property_Control_Types" name="Platform_Property_Control_Types"&gt;&lt;/a&gt;Platform Property Control Types&lt;/h2&gt;
&lt;p&gt;Dynamic configuration defines a default user interface for editing each of the supported property data types, however, there are situations where a more specific user interface is helpful. Dynamic configuration supports alternate editing experiences by defining a controlType when declaring a . The platform includes support for the following alternative property control types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[[Blog Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Checkbox List String Control]]&lt;/li&gt;
&lt;li&gt;[[Custom Navigation Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Email String Control]]&lt;/li&gt;
&lt;li&gt;[[Forum Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Forum Sortable List Control]]&lt;/li&gt;
&lt;li&gt;[[Group or Application Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Group Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Media Gallery Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Property Visibility Select Box Control]]&lt;/li&gt;
&lt;li&gt;[[Rich Editor HTML Control]]&lt;/li&gt;
&lt;li&gt;[[Sortable List Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Tokenized String Control]]&lt;/li&gt;
&lt;li&gt;[[User File URL Control]]&lt;/li&gt;
&lt;li&gt;[[User Profile Field Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[User Profile Group Int Control]]&lt;/li&gt;
&lt;li&gt;[[Wiki Selection Custom Control]]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; resourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; resourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; resourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; resourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; resourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; resourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule type=&amp;quot;Telligent.Evolution.Controls.PropertyRules.MinMaxValueRule, Telligent.Evolution.Controls&amp;quot; minValue=&amp;quot;1&amp;quot; maxValue=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; resourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="border:1px solid #AAA;width:785px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity in Widgets|widget content script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_output.png"&gt;&lt;img style="border:1px solid #AAA;width:412px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_output.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The complete example can be downloaded:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/WeatherForecast_2D00_Widget.xml"&gt;community.telligent.com/.../WeatherForecast_2D00_Widget.xml&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Supporting Configuration</title><link>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration/revision/1</link><pubDate>Fri, 14 Jun 2019 17:07:07 GMT</pubDate><guid isPermaLink="false">b5f7c190-cce9-4f23-bb93-1bf9b0c4c777</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65069/using-dynamic-configuration#comments</comments><description>Revision 1 posted to Developer Training by Ben Tiedt on 06/14/2019 17:07:07&lt;br /&gt;
&lt;p&gt;Dynamic configuration is a metadata-based dynamic form generation format used by [[Widgets|widgets]] to define configuration options.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_would_I_use_Dynamic_Configuration" name="When_would_I_use_Dynamic_Configuration"&gt;&lt;/a&gt;When would I use Dynamic Configuration?&lt;/h2&gt;
&lt;p&gt;Dynamic configuration is necessary when a developer wants to expose configuration options on a widget to administrators and other non-deveopers. Dynamic configuration is defined as XML on a [[Widgets|widget]] in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="XML_configuration_definition" name="XML_configuration_definition"&gt;&lt;/a&gt;XML configuration definition&lt;/h2&gt;
&lt;pre&gt;[&lt;br /&gt;&amp;lt;propertyGroup&amp;gt;&lt;br /&gt;&amp;nbsp; [&lt;br /&gt;&amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyValue /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;nbsp; [&amp;lt;propertyRule /&amp;gt;]*&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp; ]*&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;br /&gt;]*&lt;/pre&gt;
&lt;p&gt;One or more property groups can contain one or more properties each. Each group is represented as a tab on the widget configuration window and each property stores a single value. Each property can optionally define selectable values and rules.&lt;/p&gt;
&lt;p&gt;Property values can be retrieved within widgets using the get and set methods on the &lt;code&gt;$core_widget&lt;/code&gt; extension.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_propertyGroup_gt" name="lt_propertyGroup_gt"&gt;&lt;/a&gt;&amp;lt;propertyGroup /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;propertyGroup [id=&amp;quot;&amp;quot;] [resourceName=&amp;quot;&amp;quot; [resourceFile=&amp;quot;&amp;quot;]] [text=&amp;quot;&amp;quot;] [descriptionResourceName=&amp;quot;&amp;quot; [descriptionResourceFile=&amp;quot;&amp;quot;]] [descriptionText=&amp;quot;&amp;quot;] [orderNumber=&amp;quot;&amp;quot;] [visible=&amp;quot;&amp;quot;] [other attributes]&amp;gt;...&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a grouping of configuration properties. Within the widget configuration window, each group is represented by a tab.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id &lt;/code&gt;is the identifier for the group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourceName &lt;/code&gt;is the name of the language resource identifying the name of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resouceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;resourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text &lt;/code&gt;is the plain text name of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceName &lt;/code&gt;is the name of the language resource identifying the description of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;descriptionResourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionText &lt;/code&gt;is the plain text description of this group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderNumber &lt;/code&gt;is the integer order number of this group (by default, groups are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visible &lt;/code&gt;is a boolean (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;) identifying whether this group should be shown on the widget configuration window (by default, all groups are shown).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;resourceName&lt;/code&gt; or &lt;code&gt;text&lt;/code&gt; are required.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_property_gt" name="lt_property_gt"&gt;&lt;/a&gt;&amp;lt;property /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;property id=&amp;quot;&amp;quot; dataType=&amp;quot;&amp;quot; [resourceName=&amp;quot;&amp;quot; [resourceFile=&amp;quot;&amp;quot;]] [text=&amp;quot;&amp;quot;] [descriptionResourceName=&amp;quot;&amp;quot; [descriptionResourceFile=&amp;quot;&amp;quot;]] [descriptionText=&amp;quot;&amp;quot;] [orderNumber=&amp;quot;&amp;quot;] [defaultValue=&amp;quot;&amp;quot;] [editable=&amp;quot;&amp;quot;] [visible=&amp;quot;&amp;quot;] [controlType=&amp;quot;&amp;quot;] [scope=&amp;quot;&amp;quot;] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a configuration property within a configuration group.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id &lt;/code&gt;is the identifier for this property. This is the identifier used when retrieving values via the &lt;code&gt;$core_widget&lt;/code&gt; extension methods within widgets.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dataType &lt;/code&gt;is the data type of this property. Possible values are:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Bool &lt;/code&gt;stores a true or false value and is rendered as a checkbox by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Color &lt;/code&gt;stores an HTML color value and is rendered as a color selector by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Date &lt;/code&gt;stores a date and is rendered as a date-bound text box with a calendar selector by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DateTime &lt;/code&gt;stores a date and a time and is rendered as a date/time-bound text box with a calendar selector by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Double &lt;/code&gt;stores a double-precision floating point value and renders as a double-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Guid &lt;/code&gt;stores a globally unique identifier value and renders as a GUID-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Html &lt;/code&gt;stores an HTML value and renders as a text box by default (HTML values are automatically HTML sanitized for rendering).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Int&lt;/code&gt; stores an integer value and renders as an integer-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;String &lt;/code&gt;stores as a string value and renders as a text box by default (string values are automatically HTML encoded for rendering).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Time &lt;/code&gt;stores a time and is rendered as a time-bound text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Unit &lt;/code&gt;stores a CSS unit and is rendered as a unit-bound text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Url &lt;/code&gt;stores a URL and is rendered as a URL-validated text box by default.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Custom &lt;/code&gt;stores a custom string value suitable for use with custom property control implementations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourceName&lt;/code&gt; is the name of the language resource identifying the name of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resouceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;resourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text&lt;/code&gt; is the plain text name of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceName &lt;/code&gt;is the name of the language resource identifying the description of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionResourceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by &lt;code&gt;descriptionResourceName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;descriptionText &lt;/code&gt;is the plain text description of this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderNumber &lt;/code&gt;is the integer order number of this property (by default, properties are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultValue &lt;/code&gt;is the default value for this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;editable &lt;/code&gt;is a boolean (&lt;code&gt;true &lt;/code&gt;or &lt;code&gt;false&lt;/code&gt;) identifying whether this property should be editable on the widget configuration window (by default, all properties are editable).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;visible &lt;/code&gt;is a boolean (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;) identifying whether this property should be shown on the widget configuration window (by default, all properties are shown).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;controlType &lt;/code&gt;is the full .net type name (&lt;code&gt;Namespace.ClassName, AssemblyName&lt;/code&gt;) of the &lt;code&gt;Telligent.DynamicConfiguration.Components.IPropertyControl&lt;/code&gt; implementation to use when editing this property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scope &lt;/code&gt;defines the non-standard scope in which this property&amp;#39;s value should be stored. Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when scope is defined, the value will apply to all instances of the widget within the defined scope. Possible values are:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;site &lt;/code&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;group &lt;/code&gt;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blog &lt;/code&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;br /&gt;When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;resourceName &lt;/code&gt;or &lt;code&gt;text &lt;/code&gt;are required in addition to &lt;code&gt;id &lt;/code&gt;and &lt;code&gt;dataType&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_propertyValue_gt" name="lt_propertyValue_gt"&gt;&lt;/a&gt;&amp;lt;propertyValue /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;propertyValue value=&amp;quot;&amp;quot; [resourceName=&amp;quot;&amp;quot; [resourceFile=&amp;quot;&amp;quot;]] [text=&amp;quot;&amp;quot;] [orderNumber=&amp;quot;&amp;quot;] [other attributes] /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a selectable value for a property. When selectable values are defined for a property, the property, by default, is rendered using a drop-down list.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt; is the selectable value to which the the associated property should be set when selected.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resourceName &lt;/code&gt;is the name of the language resource identifying the name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resouceFile &lt;/code&gt;is the filename of the language resource file containing the resource identified by resourceName.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text &lt;/code&gt;is the plain text name of this selectable value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderNumber &lt;/code&gt;is the integer order number of this selectable value (by default, selectable values are ordered as they are defined in the XML configuration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used by property rules or property controls for additional configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;resourceName &lt;/code&gt;or &lt;code&gt;text &lt;/code&gt;are required in addition to &lt;code&gt;value&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a id="lt_propertyRule_gt" name="lt_propertyRule_gt"&gt;&lt;/a&gt;&amp;lt;propertyRule /&amp;gt;&lt;/h3&gt;
&lt;pre&gt;&amp;lt;propertyRule type=&amp;quot;&amp;quot; [other attributes]/&amp;gt;&lt;/pre&gt;
&lt;p&gt;Defines a rule to be applied to a property.&lt;/p&gt;
&lt;p&gt;Attributes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type &lt;/code&gt;is the full .net type name (&lt;code&gt;Namespace.ClassName, AssemblyName&lt;/code&gt;) of the &lt;code&gt;Telligent.DynamicConfiguration.Components.IPropertyRule&lt;/code&gt; implementation to apply to the associated property.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[other attributes]&lt;/code&gt; are any additional attributes used to configure the property rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a id="Scoped_Properties" name="Scoped_Properties"&gt;&lt;/a&gt;Scoped Properties&lt;/h2&gt;
&lt;p&gt;At times, it may be useful to have a widget placed on multiple pages share a single configuration. For example, the Group Application Navigation widget when shown on multiple pages within a group should always show the same set of navigation tabs. Widget developers can enable this behavior by defining an explicit scope for one or more widget configuration properties.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Defining_a_Property_39_s_Scope" name="Defining_a_Property_39_s_Scope"&gt;&lt;/a&gt;Defining a Property&amp;#39;s Scope&lt;/h3&gt;
&lt;p&gt;A property&amp;#39;s scope is defined by the &lt;code&gt;scope&lt;/code&gt;attribute. Normally, a property&amp;#39;s value is associated to a single instance of the widget, however, when scope is defined, the value will apply to all instances of the widget within the defined scope.&lt;/p&gt;
&lt;p&gt;For example, in the following sample, the &lt;code&gt;fragmentHeader &lt;/code&gt;property uses the default scoping (widget instance) and the &lt;code&gt;navigation &lt;/code&gt;property defines an explicit scope of &lt;code&gt;group&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="brush:xml;"&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;&lt;br /&gt;	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; resourceName=&amp;quot;CF_Title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:Groups_GroupApplicationNavigation_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;&lt;br /&gt;	&amp;lt;property id=&amp;quot;navigation&amp;quot; dataType=&amp;quot;custom&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.CustomNavigationCustomControl, Telligent.Evolution.Controls&amp;quot; maximumDepth=&amp;quot;1&amp;quot; resourceName=&amp;quot;Groups_GroupApplicationNavigation_Navigation&amp;quot; descriptionResourceName=&amp;quot;Groups_GroupApplicationNavigation_Navigation_Description&amp;quot; navigationType=&amp;quot;group&amp;quot; scope=&amp;quot;group&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/propertyGroup&amp;gt;&lt;/pre&gt;
&lt;h3&gt;&lt;a id="Supported_Scopes" name="Supported_Scopes"&gt;&lt;/a&gt;Supported Scopes&lt;/h3&gt;
&lt;p&gt;The default scope is the instance of the widget. &amp;nbsp;This scope is used if the &lt;code&gt;scope &lt;/code&gt;attribute is not defined. &amp;nbsp;When &lt;code&gt;scope&lt;/code&gt; is explicitly defined, the following values are supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;site&lt;/code&gt;shares the value of this property with all instances of this widget throughout the site.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;group&lt;/code&gt;&amp;nbsp;shares the value of this property with all instances of this widget within the context of the current group.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blog&lt;/code&gt;shares the value of this property with all instances of this widget within the context of the current blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the user does not have the proper permission to edit themes within the property&amp;#39;s defined scope, the property will not be shown within the widget&amp;#39;s configuration form.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Platform_Property_Control_Types" name="Platform_Property_Control_Types"&gt;&lt;/a&gt;Platform Property Control Types&lt;/h2&gt;
&lt;p&gt;Dynamic configuration defines a default user interface for editing each of the supported property data types, however, there are situations where a more specific user interface is helpful. Dynamic configuration supports alternate editing experiences by defining a controlType when declaring a . The platform includes support for the following alternative property control types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[[Blog Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Checkbox List String Control]]&lt;/li&gt;
&lt;li&gt;[[Custom Navigation Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Email String Control]]&lt;/li&gt;
&lt;li&gt;[[Forum Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Forum Sortable List Control]]&lt;/li&gt;
&lt;li&gt;[[Group or Application Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Group Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Media Gallery Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Property Visibility Select Box Control]]&lt;/li&gt;
&lt;li&gt;[[Rich Editor HTML Control]]&lt;/li&gt;
&lt;li&gt;[[Sortable List Custom Control]]&lt;/li&gt;
&lt;li&gt;[[Tokenized String Control]]&lt;/li&gt;
&lt;li&gt;[[User File URL Control]]&lt;/li&gt;
&lt;li&gt;[[User Profile Field Selection Custom Control]]&lt;/li&gt;
&lt;li&gt;[[User Profile Group Int Control]]&lt;/li&gt;
&lt;li&gt;[[Wiki Selection Custom Control]]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a id="Example" name="Example"&gt;&lt;/a&gt;Example&lt;/h2&gt;
&lt;p&gt;The following sample will demonstrate exposing simple configuration options for a hypothetical weather forecast widget.&lt;/p&gt;
&lt;p&gt;The following Dynamic Configuration exposes configuration options for zip code, scale, forecast days, and low temperature inclusion. Note that resources are used to localize the field names. Also note the min/max rule to restrict forecast days to a maximum of 10.&lt;/p&gt;
&lt;pre class="brush: xml"&gt;&lt;code&gt;&amp;lt;propertyGroup id=&amp;quot;options&amp;quot; resourceName=&amp;quot;Options&amp;quot;&amp;gt;
	&amp;lt;property id=&amp;quot;fragmentHeader&amp;quot; resourceName=&amp;quot;title&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;${resource:WeatherForecast_Name}&amp;quot; controlType=&amp;quot;Telligent.Evolution.Controls.ContentFragmentTokenStringControl, Telligent.Evolution.Controls&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;zipCode&amp;quot; resourceName=&amp;quot;zipCode&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;&amp;quot; /&amp;gt;
	&amp;lt;property id=&amp;quot;scale&amp;quot; resourceName=&amp;quot;scale&amp;quot; dataType=&amp;quot;string&amp;quot; defaultValue=&amp;quot;celsius&amp;quot;&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;fahrenheit&amp;quot; resourceName=&amp;quot;fahrenheit&amp;quot; /&amp;gt;
		&amp;lt;propertyValue value=&amp;quot;celsius&amp;quot; resourceName=&amp;quot;celsius&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;days&amp;quot; resourceName=&amp;quot;days&amp;quot; dataType=&amp;quot;int&amp;quot; defaultValue=&amp;quot;3&amp;quot;&amp;gt;
		&amp;lt;propertyRule type=&amp;quot;Telligent.Evolution.Controls.PropertyRules.MinMaxValueRule, Telligent.Evolution.Controls&amp;quot; minValue=&amp;quot;1&amp;quot; maxValue=&amp;quot;10&amp;quot; /&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property id=&amp;quot;includeLow&amp;quot; resourceName=&amp;quot;includeLow&amp;quot; descriptionResourceName=&amp;quot;includeLowDescription&amp;quot; dataType=&amp;quot;bool&amp;quot; defaultValue=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/propertyGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png"&gt;&lt;img style="width:785px;border:1px solid #AAA;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_form.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following sample [[Using Velocity in Widgets|widget content script]] reads and simply prints these configuration values. A real implementation would use them against a weather forecast API.&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($zipCode = $core_v2_widget.GetStringValue(&amp;#39;zipCode&amp;#39;, &amp;#39;&amp;#39;))
#set ($days = $core_v2_widget.GetIntValue(&amp;#39;days&amp;#39;, 3))
#set ($scale = $core_v2_widget.GetStringValue(&amp;#39;scale&amp;#39;, &amp;#39;celsius&amp;#39;))
#set ($includeLow = $core_v2_widget.GetBoolValue(&amp;#39;includeLow&amp;#39;, true))

&amp;lt;ul&amp;gt;
	&amp;lt;li&amp;gt;Zip Code: $zipCode&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Forecast Days: $days&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Scale: $scale&amp;lt;/li&amp;gt;
	&amp;lt;li&amp;gt;Include Low: #if($includeLow) Yes #else No #end&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Yields&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_output.png"&gt;&lt;img style="width:412px;border:1px solid #AAA;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/configuration_2D00_output.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The complete example can be downloaded:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/WeatherForecast_2D00_Widget.xml"&gt;community.telligent.com/.../WeatherForecast_2D00_Widget.xml&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>