ArcGIS Simple Edit service
ArcGIS_SimpleEdit_CSharp\ArcGIS_SimpleEdit_WebAppCSharp\App_Code\IdentifyTool.cs
// 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.
// 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public class IdentifyTool : ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction
{
    #region IMapServerToolAction Members

    void ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction.ServerAction(
        ESRI.ArcGIS.ADF.Web.UI.WebControls.ToolEventArgs toolEventArgs)
    {
        // Get reference to the map control
        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap =
            (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control;
        try
        {
            // Cast tool event arguments to map point event arguments, which allows
            // easy access to the map point clicked by the user
            ESRI.ArcGIS.ADF.Web.UI.WebControls.MapPointEventArgs mapPointEventArgs =
                (ESRI.ArcGIS.ADF.Web.UI.WebControls.MapPointEventArgs)toolEventArgs;
            // Get the map point from the map point event arguments
            ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = mapPointEventArgs.MapPoint;

            ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality = 
                adfMap.GetFunctionality("ServerResource");

            // Retrieve the resource for the current map functionality object
            ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisResource = mapFunctionality.Resource;

            // Check whether the current resource supports querying
            bool supportsQuery = gisResource.SupportsFunctionality(typeof
                (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));

            if (supportsQuery)
            {
                // Create a query functionality object from the current resource
                ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality queryFunctionality =
                    (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)
                    gisResource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);

                // Get the names and ids of the queryable layers in the current resource
                string[] layerIDs;
                string[] layerNames;
                queryFunctionality.GetQueryableLayers(null, out layerIDs, out layerNames);

                // Set the layer name on which you want to identify
                string activeLayerName = "ServiceCalls";

                // Iterate through the layer names until a match is found for
                // activeLayerName.  Include a call to ToUpper() or ToLower() in the comparison
                // to eliminate case sensitivity.
                string activeLayerID = null;
                for (int index = 0; index < layerNames.Length; index++)
                {
                    if (layerNames[index].ToUpper() == activeLayerName.ToUpper())
                    {
                        // Get the layer id of the match found from the layer id array
                        activeLayerID = layerIDs[index];
                        break;
                    }
                }

                // Initialize a variable to store tolerance.  This will be used as the tolerance
                // around the point clicked by the user
                int pixelTolerance = 3;

                // Execute the identify operation
                System.Data.DataTable[] resultDataTableArray = queryFunctionality.Identify(
                    mapFunctionality.Name, adfPoint, pixelTolerance,
                    ESRI.ArcGIS.ADF.Web.IdentifyOption.AllLayers, new string[] { activeLayerID });

                // Exit the loop if no results were found
                if (resultDataTableArray == null)
                    return;

                // Display results in a GridView
                Utility.DisplayOrHideSelectionTable(adfMap, 
                    (ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicsLayer)resultDataTableArray[0], true);                
            }
        }
        catch (System.Exception exception)
        {
            ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult errorAlertCallbackResult =
                Utility.CreateErrorCallbackResult(exception);
            adfMap.CallbackResults.Add(errorAlertCallbackResult);
        }

    }
    #endregion
}