It seems REST API in 10.5 deprecated simple sintax on layerDefs:
Simple syntax is not supported as an expected value for layerDefs parameter starting 10.5.
This is pretty hidden in the documentation by the way...
As a side effect, it seems imageparameter.layerDefinitions no longer works since it still translates requests to the simple sintax:
ImageParameters | API Reference | ArcGIS API for JavaScript 3.19
In our server we get an error when debugging http requests on the browser's console:
{"error":{"code":400,"message":"Invalid 'layerDefs' is specified","details":[]}}
Our code is pretty simple and worked last week against a 10.3 server.
Can anyone reproduce and confirm this?
EDIT: Just to add that the simplest sample from esri does not work against a 10.5 server:
Layer definitions on a dynamic map service | ArcGIS API for JavaScript 3.19
It seems a bug to me... I wish I'm proven wrong...
Thanks.
Solved! Go to Solution.
Glad I found this thread since it indicates the problem I am having is not of my own making.
My unfortunate observation is that in the 10.41 REST API if you (1) use a layerDefs parameter ***with either JSON or non-JSON syntax*** and you (2) also use a dynamicLayers parameter, then your layerDefs parameter is ignored.
I have developed a Google map viewer called Gmap4 that uses the ESRI REST API to display user-specified MapServer layers.
The following map links use layer 9 from
https://services.nationalmap.gov/arcgis/rest/services/govunits/MapServer and also use a layerDefs parameter to display an outline map of just the congressional districts just in Washington State. The basemap tiles are all white.
Since the layer I am displaying supports dynamic layers, I wish to change the styling of how the layer data appears on the map. If I take the exact same map and add a dynamicLayers parameter, then (1) the appearance of layer 9 is correctly changed according to my dynamicLayers parameter, but (2) all congressional districts for the USA now appear on the map. In other words, the layerDefs parameter requesting only data for Washington state is ignored. I tried using non-JSON syntax for layerDefs and got the same result.
I suspect that I am SOL and will simply have to wait for the server admin to change to a different version of ArcGIS that hopefully does not have this bug.
Joseph
Joseph this is a different, unrelated problem, and I would suggest opening a new thread.
Anyway, you have to add a definitionExpression to your dynamicLayer 9. For instance:
That works.
@Duarte - Thanks for setting me straight.
Yup, I missed definitionExpression in the REST documentation but I see it now. Works fine.
@Joseph, just re-read my answer... I'm sorry if I came across less polite... I wrote that in a hurry and it's not my native language... just glad I could help out.
No worries!
I am thankful that you took the time to point out my mistake.
This is obviously the first time I have tried to wrap my brain around dynamic layers.
Just got word from support this is fixed in version 3.20:
> The current status of the bug is "Implemented" and it is being addressed in JavaScript API version 3.20. As of now, we do not have the information when the next version will be released.
Gregg,
3.19 was released @ 21 Dec 2016 and the API is on a 3 month release cycle so you can expect 3.20 to be around March.
So no patch? Really? So 10.5 is a dud release for 3 months? So... maintenance and support gets us on the bug list and a recommendation of "do not install"... I'm out of words...
Just a side note and potential workaround:
While dynamic layers definition queries are not working, feature layer queries still are working so if you set up your feature layer to point to the dynamic mapserver url and add the layer id to the end, you can provide a where clause to the feature layer.
new FeatureLayer('/arcgis/rest/services/myservice/MapServer/0', {
definitionExpression: 'myField = \'value\'';
});
Hi Gregg. This works but implies a huge change to all logic in our applications. Changing from dynamicservices to featurelayers is a full rewrite of each app.