Solved! Go to Solution.
esriRequest.setRequestPreCallback(function (args) { //do stuff return args; }); this.printTask.execute(this.printParameters, lang.hitch(this, this._print), lang.hitch(this, this._error)); //reset esriRequest.setRequestPreCallback();esriRequest.setRequestPreCallback(function (args) { //do stuff return args; }); this.printTask.execute(this.printParameters, lang.hitch(this, this._print), lang.hitch(this, this._error)); //reset esriRequest.setRequestPreCallback();esriRequest.setRequestPreCallback(lang.hitch(this, function (args) {
//Web_Map_as_JSON to js obj
var json = JSON.parse(args.content.Web_Map_as_JSON);
//remove map.graphics
json.operationalLayers.splice(arrayUtils.indexOf(json.operationalLayers, this.map.graphics.id), 1);
//remove non-print layers
arrayUtils.forEach(json.operationalLayers, function (ol) {
var layer = this.map.getLayer(ol.id);
if (layer._print && layer._print === false) {
json.operationalLayers.splice(arrayUtils.indexOf(json.operationalLayers, ol), 1);
}
}, this);
//strip graphic layer attributes and and info templates
arrayUtils.forEach(json.operationalLayers, function (ol) {
if (ol.featureCollection && ol.featureCollection.layers.length) {
arrayUtils.forEach(ol.featureCollection.layers, function (layer) {
arrayUtils.forEach(layer.featureSet.features, function (feature) {
if (feature.attributes) {
delete feature.attributes;
}
if (feature.infoTemplate) {
delete feature.infoTemplate;
}
});
});
}
});
//json to Web_Map_as_JSON
args.content.Web_Map_as_JSON = JSON.stringify(json);
return args;
}));This is excellent! Exactly what I was looking for.
One small change on line 9. If the _print property is false then the if statement will still evaluate to false. I think it should read:
if (layer.hasOwnProperty('_print') && layer._print === false) {
It looks setRequestPreCallback is not available in the API version 4.x (request | API Reference | ArcGIS API for JavaScript 4.3 )
I am trying to convert my old print task using new 4.x API. Is there any alternate way to retrieve and modify args.content.Web_Map_as_JSON before it call print task?
It is implemented in the API just not documented yet. You can refer back to the 3.x documentation for usage