Select to view content in your preferred language

Inconsistency of Layer Definition string escaping for Export and Identify operations

2542
0
01-20-2013 07:22 PM
DamianSlee1
Deactivated User
Hi,
I've encountered this issue with the ArcGIS Silverlight API 3.0.

I was wondering if it is a known issue, or by design to be consistent with the Javascript and Flex arcgis SDKs?
I want to know whether to implement the required string escaping in my application, or expect it to be fixed soon?  I don't want the case where double escaping occurs in the future.
And it should be documented.

----------

If for example I set a layer definition query to something like this
Operator = '\\testescaping this'
or in code
private const string testDefintionQuery = "Operator = '\\\\testescaping this'";


--------

The map control / export map operation will escape the single quotes, and backslashes.  Looking at the request in fiddler WebForms view, we see
layerDefs={"1":"Operator = \u0027\\\\testescaping this\u0027"}

-------

If i perform an identify, using the same layer definition, it is not escaped.   Looking at the request in fiddler WebForms view, we see
layerDefs={"1":"Operator = '\\testescaping this'"}

-------

I also think the Query operation also does not escape the Where property.

-------


Example code - map export layer definition
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var arcgisDynamicLayer = new ArcGISDynamicMapServiceLayer();
            arcgisDynamicLayer.Url = _TestMapServiceUrl;
            this.Map.Layers.Add(arcgisDynamicLayer);

            _mapLayerId = this.Map.Layers.IndexOf(arcgisDynamicLayer);
            var layerDefinition = new LayerDefinition();
            layerDefinition.LayerID = _mapLayerId;
            layerDefinition.Definition = testDefintionQuery;
            arcgisDynamicLayer.LayerDefinitions.Add(layerDefinition);

        }


Example code - identify with layer definition
        private void PerformIdentify(Map.MouseEventArgs mouseEventArgs)
        {
            var identifyParameters = new IdentifyParameters();
            identifyParameters.DPI = 96;
            identifyParameters.Geometry = mouseEventArgs.MapPoint;
            identifyParameters.Height = (int)Map.Height;
            identifyParameters.Width = (int)Map.Width;
            identifyParameters.LayerIds.Add(_TestMapServiceLayerId);
            var layerDefinition = new LayerDefinition();
            layerDefinition.LayerID = _mapLayerId;
            layerDefinition.Definition = testDefintionQuery;
            var layerDefinitions = new List<LayerDefinition>();
            layerDefinitions.Add(layerDefinition);
            identifyParameters.LayerDefinitions = layerDefinitions;
            identifyParameters.MapExtent = Map.Extent;
            identifyParameters.ReturnGeometry = true;
            identifyParameters.SpatialReference = new SpatialReference(102100);
            

            var identifyTask = new IdentifyTask();
            identifyTask.DisableClientCaching = true;
            identifyTask.Url = _TestMapServiceUrl;
            identifyTask.ExecuteCompleted += (sender, args) =>
                {

                };
            identifyTask.Failed += (sender, args) =>
                {

                };

            // execute
            identifyTask.ExecuteAsync(identifyParameters);


        }
0 Kudos
0 Replies