Go to ..\arcgis-web-appbuilder-2.7\WebAppBuilderForArcGIS\server\apps\xx\jimu
- Modify MapUrlParamsHandler.js (make a backup)
- Add:
- In mo.postProcessUrlParams = function(urlParams, map) add if('filter' in urlParams){ setSpecialZoom(urlParams, map);}
-
- 3 functions
function setSpecialZoom(queryObject, map){
//myZooms is a keyValue string, separated by ; char, key is layerObject Id, values are filters, separated by *
var myZooms = queryObject.filter.split(";");
if (myZooms.length < 1) {console.error("No arguments in specialzoom");return;}
var layersKeyValue = {};
for (myLayer in myZooms){
//iterate over each itemid
myLayer = myZooms[myLayer];
layerAndFilter = myLayer.split("*");
if (layerAndFilter.length < 2){console.error("LayerObject, ID or filters are missing");return;}
var layerFilters = [];
layerId = layerAndFilter[0];
for ( i = 1; i < layerAndFilter.length; i++){
//iterate over each id in item id
layerFilters = processFilter(layerFilters,layerAndFilter.split("|"));
}
layersKeyValue[layerId] = layerFilters;
}
assignFilterPropertiesToLayer(layersKeyValue,map);
//var valuesForProcess = [myZooms[0]];
//map.itemInfo.itemData.operationalLayers[0].layerObject.setLayerDefinitions( valuesForProcess);
}
function processFilter (layerFilters,myFilters){
//creates a string structure from all the filters.
var andString = " AND ";
var filterCombined = "";
var layerId = myFilters[0]
for (j = 1; j < myFilters.length;j++) {
currentFilter = myFilters;
// currentFilter = "(" + currentFilter + ")";
if (filterCombined.length == 0){
filterCombined = currentFilter;
}else{
filterCombined = filterCombined + andString + currentFilter;
}
}
layerFilters[layerId] = filterCombined;
return layerFilters;
}
function assignFilterPropertiesToLayer (layersKeyValue,map){
//loop over all operational layers and set new filter if necessary
for (myOperLayer in map.itemInfo.itemData.operationalLayers){
myOperLayer = map.itemInfo.itemData.operationalLayers[myOperLayer];
if (myOperLayer.id && layersKeyValue[myOperLayer.id]){
myOperLayer.layerObject.setLayerDefinitions(layersKeyValue[myOperLayer.id]);
}
}
}
How to use in URL :
Add "filter=" in url
separated by ; between Map services
separated by * between itemid and id (Service Features in a Map service) separated by | between field Values
example :
?filter=3fb26b36ed2d43f48c63770fc50bc7f8*0|Unit_Code=26|Measure_Code=285*1|branch_code=26|Measure_Code=285*2|Measure_Code=285;b26b36ed2d43f48c63770fc50bc7f8*0|Unit_Code=26|Measure_Code=285;
ITEMID ID Field Values