SimpleUserControlTask_VBNet\Configurators\SimpleTaskWebConfig\TaskWebConfigurator.ascx.vb
' Copyright 2011 ESRI ' ' All rights reserved under the copyright laws of the United States ' and applicable international laws, treaties, and conventions. ' ' You may freely redistribute and use this sample code, with or ' without modification, provided you include the original copyright ' notice and use restrictions. ' ' See the use restrictions. ' Imports Microsoft.VisualBasic Imports System Imports System.Data Imports System.Text Imports System.Configuration Imports System.Collections.Generic Imports System.Collections Imports System.Web Imports System.Web.Security Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Imports System.Web.UI.HtmlControls Imports ESRI.ArcGIS.ADF.Web.UI.WebControls Imports ESRI.ArcGIS.ADF.Web Imports System.Drawing Partial Public Class SimpleTaskWebConfigurator Inherits System.Web.UI.UserControl Implements IWebConfigurator, IWebConfiguratorValidation, IDefaultWebConfiguration Private defaultText As String = String.Empty Private backColor As Color Public Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs) ' #Region "Populate UI from task's configuration settings" If ScriptManager.GetCurrent(Page) IsNot Nothing AndAlso (Not ScriptManager.GetCurrent(Page).IsInAsyncPostBack) Then If ControlToConfigure IsNot Nothing AndAlso (Not String.IsNullOrEmpty((TryCast(ControlToConfigure, UserControlTask)).Configuration)) Then FromJsonstring((TryCast(ControlToConfigure, UserControlTask)).Configuration) End If txtLabelText.Text = defaultText colorPicker.ChosenColor = backColor End If ' #End Region End Sub #Region "Design Tag Creation" Private Function getMarkup(ByVal additionalControls As ControlCollection) As String ', string defaultConfigurationValue, Color backColor) ' #Region "Find task result control to buddy with" Dim taskResultControls As New ArrayList() If additionalControls IsNot Nothing AndAlso additionalControls.Count > 0 Then FindControls(GetType(TaskResults), additionalControls, taskResultControls) Else FindControls(GetType(TaskResults), Page.Controls, taskResultControls) End If Dim taskResultsID As String = String.Empty If taskResultControls IsNot Nothing AndAlso taskResultControls.Count > 0 Then taskResultsID = (TryCast(taskResultControls(0), TaskResults)).ID End If ' #End Region ' #Region "Create tag for task results property" Dim taskResultsTag As New StringBuilder() If (Not String.IsNullOrEmpty(taskResultsID)) Then taskResultsTag.Append("<TaskResultsContainers>") taskResultsTag.AppendFormat("<esri:BuddyControl Name=""{0}"" />", taskResultsID) taskResultsTag.Append("</TaskResultsContainers>") End If ' #End Region ' #Region "Create markup for the user control task" Dim color As String = If((IsNothing(backColor) OrElse backColor = System.Drawing.Color.Transparent OrElse backColor = System.Drawing.Color.Empty), "White", ColorTranslator.ToHtml(backColor)) Dim str As String = String.Format("<esriTasks:UserControlTask runat=""server"" Width=""200px"" Transparency=""35"" BackColor=""{0}"" " & "TitleBarColor=""WhiteSmoke"" TitleBarSeparatorLine=""False"" TitleBarHeight=""20px"" Visible=""False"" " & "BorderColor=""LightSteelBlue"" BorderStyle=""Outset"" BorderWidth=""1px"" Font-Names=""Verdana"" " & "Font-Size=""8pt"" ForeColor=""Black"" TaskControl=""~/App_Data/UserControlTasks/SimpleTask/SimpleTask.ascx"" Configuration=""{1}"">", color, _controlToConfigure.Configuration) + taskResultsTag.ToString() & "</esriTasks:UserControlTask>" Return str ' #End Region End Function #End Region #Region "Event Handlers - On OK and Cancel" Protected Sub ok_Clicked(ByVal sender As Object, ByVal args As EventArgs) 'Fire WebConfigurationCompleted event If WebConfigurationCompletedEvent IsNot Nothing Then ' parse the json string and set the default values _controlToConfigure.Configuration = ToJsonString() FromJsonstring(_controlToConfigure.Configuration) RaiseEvent WebConfigurationCompleted(sender, New WebConfigurationCompleteEventArgs(_controlToConfigure, getMarkup(AdditionalControls))) End If End Sub Protected Sub cancel_Clicked(ByVal sender As Object, ByVal args As EventArgs) 'Fire WebConfigurationCanceled event RaiseEvent WebConfigurationCanceled(sender, EventArgs.Empty) End Sub Public Function ToJsonString() As String Dim json As New ESRI.ArcGIS.ADF.Web.Display.JsonSerializer(True) json.StartObject() json.WriteProperty("textboxvalue", txtLabelText.Text) json.AddSeparator() json.WriteProperty("color", colorPicker.ChosenColor) json.EndObject() Dim xmlhelper As New ESRI.ArcGIS.ADF.XmlHelper() Return xmlhelper.Encode(json.ToString()) End Function 'Read of the configuration by parsing JSON string Public Sub FromJsonstring(ByVal json As String) If String.IsNullOrEmpty(json) Then Return End If Dim xmlhelper As New ESRI.ArcGIS.ADF.XmlHelper() Dim decoded As String = xmlhelper.Decode(json) Dim jss As New System.Web.Script.Serialization.JavaScriptSerializer() Dim deserilizedjson As System.Collections.Generic.IDictionary(Of String, Object) = TryCast(jss.DeserializeObject(decoded), System.Collections.Generic.IDictionary(Of String, Object)) 'set the textbox value by reading the json string from configuration If deserilizedjson.ContainsKey("textboxvalue") Then defaultText = TryCast(deserilizedjson("textboxvalue"), String) End If If deserilizedjson.ContainsKey("color") Then backColor = System.Drawing.ColorTranslator.FromHtml(TryCast(deserilizedjson("color"), String)) End If Return End Sub #End Region #Region "IWebConfigurator - Properties" Private _additionalControls As ControlCollection Public Property AdditionalControls() As System.Web.UI.ControlCollection Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IWebConfigurator.AdditionalControls Get Return _additionalControls End Get Set(ByVal value As System.Web.UI.ControlCollection) _additionalControls = value End Set End Property Private _controlToConfigure As UserControlTask Public Property ControlToConfigure() As Control Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IWebConfigurator.ControlToConfigure Get Return _controlToConfigure End Get Set(ByVal value As Control) If Not (TypeOf value Is UserControlTask) Then Throw New ArgumentException() End If _controlToConfigure = TryCast(value, UserControlTask) End Set End Property #End Region #Region "IWebConfigurator Methods/Events" Public Function ValidateResources(ByRef message As String) As Boolean Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IWebConfigurator.ValidateResources ' This task is not dependent on any resources message = Nothing Return True End Function Public Event WebConfigurationCanceled As WebConfigurationCanceledEventHandler Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IWebConfigurator.WebConfigurationCanceled Public Event WebConfigurationCompleted As WebConfigurationCompleteEventHandler Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IWebConfigurator.WebConfigurationCompleted #End Region #Region "IConfiguratorValidation Members - an opportunity to validate configuration" Public Function IsConfigurationValid(ByRef message As String) As Boolean Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IWebConfiguratorValidation.IsConfigurationValid message = String.Empty Return True End Function #End Region #Region "IDefaultWebConfiguration Members - to allow users to add task without configuring it" Public Function GetDefaultTag(ByVal AdditionalControls As ControlCollection) As String Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.IDefaultWebConfiguration.GetDefaultTag Return getMarkup(AdditionalControls) ', string.Empty, Color.White); End Function #End Region #Region "Helper functions" Private Shared Sub FindControls(ByVal type As Type, ByVal controls As ControlCollection, ByRef foundControls As ArrayList) If controls Is Nothing Then Return End If Dim control As Control If foundControls Is Nothing Then foundControls = New ArrayList() End If For i As Integer = 0 To controls.Count - 1 control = controls(i) If type.IsInstanceOfType(control) Then foundControls.Add(control) End If If control.Controls.Count > 0 Then FindControls(type, control.Controls, foundControls) End If Next i End Sub #End Region End Class