Common Extend tasks
Common_ExtendTasks_VBNet\App_Code\ExtendGPTask.vb
' Copyright 2010 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
Namespace ExtendedTasks
  Public Class ExtendGPTask
    Inherits ESRI.ArcGIS.ADF.Tasks.GeoprocessingTask
    #Region "Instance Variable Declarations"

    Private m_taskResults As ESRI.ArcGIS.ADF.Web.UI.WebControls.TaskResults = Nothing

    #End Region

    #Region "GeoprocessingTask Overrides"

    Public Overrides Function GetCallbackResult() As String
      ' Call the base task's GetCallbackResult method so the base task logic is executed
      MyBase.GetCallbackResult()

            For Each commonMapFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality In TaskResultsInstance.MapInstance.GetFunctionalities()
                ' Check whether the current resource contains the task's point results
                If (commonMapFunctionality.Resource.Name = TaskResultsInstance.ClientID & " Point Results") Then
                    ' Get a reference to the resource containing the results
                    Dim commonMapResource As ESRI.ArcGIS.ADF.Web.DataSources.IMapResource = CType(commonMapFunctionality.Resource, ESRI.ArcGIS.ADF.Web.DataSources.IMapResource)

                    ' Change the transparency of the point results by altering the transparency of 
                    ' the Web ADF Map Resource Item.  For GraphicsLayers rendered in the web tier
                    ' (as GP Task Results are by default), this property acts as a transparency limit -
                    ' GraphicsLayers can be more transparent than this, but not less.  For 
                    ' GraphicsLayers rendered on the client, this setting has no effect
                    commonMapResource.DisplaySettings.Transparency = 70
                    TaskResultsInstance.MapInstance.RefreshResource(commonMapResource.Name)

                    ' Add the map's callback results to those of the base task, since we refreshed a
                    ' map resource
                    MyBase.CallbackResults.CopyFrom(TaskResultsInstance.MapInstance.CallbackResults)
                End If
            Next commonMapFunctionality

      Return MyBase.CallbackResults.ToString()
    End Function

    Public Overrides Sub ExecuteTask()
      MyBase.ExecuteTask()

      If TypeOf Results Is ESRI.ArcGIS.ADF.Web.UI.WebControls.TreeViewPlusNode Then
        ' Set the TaskResults' GraphicsTransparency to zero to allow client-side results to be rendered as 
        ' completely opaque.  When explicitly setting transparency on GraphicsLayers that are rendered 
        ' client-side (as in SetPolygonNodeRenderers, below), this property acts as transparency limit - 
        ' GraphicsLayers can be more transparent than this, but not less.  For GraphicsLayers rendered in 
        ' the web tier, this setting has no effect.
                Me.TaskResultsInstance.GraphicsTransparency = 0

        Dim rootResultsTreeViewPlusNode As ESRI.ArcGIS.ADF.Web.UI.WebControls.TreeViewPlusNode = CType(Results, ESRI.ArcGIS.ADF.Web.UI.WebControls.TreeViewPlusNode)
        SetPolygonNodeRenderers(rootResultsTreeViewPlusNode, True)
      End If
    End Sub

    #End Region

    #Region "Instance Properties and Methods"

    ' Convenient access to the first TaskResults control in the Task's TaskResultsContainers collection
        Private ReadOnly Property TaskResultsInstance() As ESRI.ArcGIS.ADF.Web.UI.WebControls.TaskResults
            Get
                ' Retrieve the TaskResults control if it has not already been
                If (m_taskResults Is Nothing) AndAlso (Not TaskResultsContainers(0) Is Nothing) Then
                    m_taskResults = TryCast(Utility.FindControl(TaskResultsContainers(0).Name, Page), ESRI.ArcGIS.ADF.Web.UI.WebControls.TaskResults)
                End If
                Return m_taskResults
            End Get
        End Property

    Private Sub SetPolygonNodeRenderers(ByVal treeViewPlusNode As ESRI.ArcGIS.ADF.Web.UI.WebControls.TreeViewPlusNode, ByVal recursive As Boolean)
      ' Only manipulate GraphicsLayerNodes
      If TypeOf treeViewPlusNode Is ESRI.ArcGIS.ADF.Web.UI.WebControls.GraphicsLayerNode Then
        ' Get a reference to the feature graphics layer corresponding to the node
        Dim graphicsLayerNode As ESRI.ArcGIS.ADF.Web.UI.WebControls.GraphicsLayerNode = TryCast(treeViewPlusNode, ESRI.ArcGIS.ADF.Web.UI.WebControls.GraphicsLayerNode)
        Dim featureGraphicsLayer As ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer = TryCast(graphicsLayerNode.Layer, ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGraphicsLayer)

        ' Task results have a selected renderer, but neither a highlight renderer nor a default renderer by 
        ' default.  Here we check to make sure this is the case, and that the graphics layer has a polygon
        ' geometry type - the code here only handles polygons.
        If (Not featureGraphicsLayer.SelectedRenderer Is Nothing) AndAlso (featureGraphicsLayer.HighlightRenderer Is Nothing) AndAlso (featureGraphicsLayer.Renderer Is Nothing) AndAlso (featureGraphicsLayer.FeatureType = ESRI.ArcGIS.ADF.Web.FeatureType.Polygon) Then
          ' Get the selected renderer
          Dim adfSelectedRenderer As ESRI.ArcGIS.ADF.Web.Display.Renderer.SimpleRenderer = TryCast(featureGraphicsLayer.SelectedRenderer, ESRI.ArcGIS.ADF.Web.Display.Renderer.SimpleRenderer)

          ' Create a highlight renderer
          Dim adfHighlightFillSymbol As ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleFillSymbol = TryCast(adfSelectedRenderer.Symbol.Clone(), ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleFillSymbol)
          adfHighlightFillSymbol.Color = System.Drawing.Color.Red
          adfHighlightFillSymbol.Transparency = 25
          Dim adfHighlightRenderer As ESRI.ArcGIS.ADF.Web.Display.Renderer.SimpleRenderer = New ESRI.ArcGIS.ADF.Web.Display.Renderer.SimpleRenderer(adfHighlightFillSymbol)
          featureGraphicsLayer.HighlightRenderer = adfHighlightRenderer

          ' Create a default renderer
          Dim adfDefaultFillSymbol As ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleFillSymbol = TryCast(adfSelectedRenderer.Symbol.Clone(), ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleFillSymbol)
          adfDefaultFillSymbol.Color = System.Drawing.Color.Purple
          adfDefaultFillSymbol.Transparency = 25
          Dim adfDefaultRenderer As ESRI.ArcGIS.ADF.Web.Display.Renderer.SimpleRenderer = New ESRI.ArcGIS.ADF.Web.Display.Renderer.SimpleRenderer(adfDefaultFillSymbol)
          featureGraphicsLayer.Renderer = adfDefaultRenderer

          ' De-select each row in the graphics layer.  Otherwise, the symbology specified by the selected
          ' renderer would be used
          For Each dataRow As System.Data.DataRow In featureGraphicsLayer.Rows
            If featureGraphicsLayer.IsSelected(dataRow) Then
              dataRow(featureGraphicsLayer.IsSelectedColumn) = False
            End If
          Next dataRow

          ' Specify that the layer be rendered on the client so the highlight symbology shows when polygon
          ' results are moused over, and that callouts are disabled so maptips do not appear
          featureGraphicsLayer.RenderOnClient = True
          featureGraphicsLayer.EnableCallout = False
        End If
      End If

      ' Set up renderers for child nodes if the function call specified recursion
      If recursive AndAlso (treeViewPlusNode.Nodes.Count > 0) Then
        For Each childTreeViewPlusNode As ESRI.ArcGIS.ADF.Web.UI.WebControls.TreeViewPlusNode In treeViewPlusNode.Nodes
          SetPolygonNodeRenderers(childTreeViewPlusNode, True)
        Next childTreeViewPlusNode
      End If
    End Sub

    #End Region
  End Class
End Namespace