[GIS] Unable to print feature layer from the ArcGIS Server

arcgis-10.2arcgis-javascript-apiarcgis-server

EDIT :

I replaced the url to my arcgis server by the IP address and everything worked. It was probably a problem with the web adaptor.

I am trying to print a map that I made with ArcGIS Server 10.2 and ArcGIS javascript API. If I remove the layers from ArcGIS Server it works (with ESRI basemap)

The problem is that I keep getting an error (code: 400, message: "Unable to complete operation.", details: Array[1], log: undefined, httpCode: 400).

which is more specifically –>

Unable to complete operation.
Error executing tool.: Layer "graphicsLayer8": Failed to create layer from service at http://MYSERVER.com/arcgis/rest/services/Tests/MyFirstMapService/MapServer/2. Layer "graphicsLayer9": Failed to create layer from service at http://MYSERVER.com/arcgis/rest/services/Tests/MyFirstMapService/MapServer/2. Layer "graphicsLayer10": Failed to create layer from service at http://MYSERVER.com/arcgis/rest/services/Tests/MyFirstMapService/MapServer/0. Failed to execute (Export Web Map). Failed to execute (Export Web Map Task).

I get the error if I try to do it via my web server or directly off the ArcGIS Server by doing :

    http://MYSERVER.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task/execute?Web_Map_as_JSON=%7B%22mapOptions%22%3A%7B%22showAttribution%22%3Atrue%2C%22extent%22%3A%7B%22xmin%22%3A-9023064.378303602%2C%22ymin%22%3A5567074.228631147%2C%22xmax%22%3A-6082990.5223433655%2C%22ymax%22%3A7675513.216848888%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%2C%22scale%22%3A9244648.868617998%7D%2C%22operationalLayers%22%3A%5B%7B%22id%22%3A%22layer0%22%2C%22title%22%3A%22layer0%22%2C%22opacity%22%3A1%2C%22minScale%22%3A591657527.591555%2C%22maxScale%22%3A1128.497176%2C%22url%22%3A%22http%3A%2F%2Fservices.arcgisonline.com%2FArcGIS%2Frest%2Fservices%2FWorld_Street_Map%2FMapServer%22%7D%2C%7B%22id%22%3A%22graphicsLayer8%22%2C%22title%22%3A%22graphicsLayer8%22%2C%22opacity%22%3A1%2C%22minScale%22%3A0%2C%22maxScale%22%3A0%2C%22layerDefinition%22%3A%7B%22drawingInfo%22%3A%7B%22renderer%22%3A%7B%22type%22%3A%22simple%22%2C%22symbol%22%3A%7B%22color%22%3Anull%2C%22outline%22%3A%7B%22color%22%3A%5B46%2C46%2C46%2C255%5D%2C%22width%22%3A3%2C%22type%22%3A%22esriSLS%22%2C%22style%22%3A%22esriSLSSolid%22%7D%2C%22type%22%3A%22esriSFS%22%2C%22style%22%3A%22esriSFSSolid%22%7D%7D%7D%7D%2C%22url%22%3A%22http%3A%2F%2FMYSERVER.com%2Farcgis%2Frest%2Fservices%2FTests%2FMyFirstMapService%2FMapServer%2F2%22%7D%2C%7B%22id%22%3A%22graphicsLayer9%22%2C%22title%22%3A%22graphicsLayer9%22%2C%22opacity%22%3A0%2C%22minScale%22%3A0%2C%22maxScale%22%3A0%2C%22layerDefinition%22%3A%7B%22drawingInfo%22%3A%7B%22renderer%22%3A%7B%22type%22%3A%22simple%22%2C%22symbol%22%3A%7B%22color%22%3A%5B46%2C46%2C46%2C255%5D%2C%22outline%22%3A%7B%22color%22%3A%5B46%2C46%2C46%2C255%5D%2C%22width%22%3A3%2C%22type%22%3A%22esriSLS%22%2C%22style%22%3A%22esriSLSSolid%22%7D%2C%22type%22%3A%22esriSFS%22%2C%22style%22%3A%22esriSFSSolid%22%7D%7D%7D%7D%2C%22url%22%3A%22http%3A%2F%2FMYSERVER.com%2Farcgis%2Frest%2Fservices%2FTests%2FMyFirstMapService%2FMapServer%2F2%22%7D%2C%7B%22id%22%3A%22graphicsLayer10%22%2C%22title%22%3A%22graphicsLayer10%22%2C%22opacity%22%3A1%2C%22minScale%22%3A0%2C%22maxScale%22%3A0%2C%22layerDefinition%22%3A%7B%22drawingInfo%22%3A%7B%22renderer%22%3A%7B%22type%22%3A%22simple%22%2C%22label%22%3A%22%22%2C%22description%22%3A%22%22%2C%22symbol%22%3A%7B%22color%22%3A%5B204%2C64%2C57%2C255%5D%2C%22size%22%3A8%2C%22angle%22%3A0%2C%22xoffset%22%3A0%2C%22yoffset%22%3A0%2C%22type%22%3A%22esriSMS%22%2C%22style%22%3A%22esriSMSSquare%22%2C%22outline%22%3A%7B%22color%22%3A%5B120%2C64%2C61%2C255%5D%2C%22width%22%3A0.25%2C%22type%22%3A%22esriSLS%22%2C%22style%22%3A%22esriSLSSolid%22%7D%7D%7D%7D%7D%2C%22url%22%3A%22http%3A%2F%2FMYSERVER.COM%2Farcgis%2Frest%2Fservices%2FTests%2FMyFirstMapService%2FMapServer%2F0%22%7D%2C%7B%22id%22%3A%22map_graphics%22%2C%22opacity%22%3A1%2C%22minScale%22%3A0%2C%22maxScale%22%3A0%2C%22featureCollection%22%3A%7B%22layers%22%3A%5B%5D%7D%7D%5D%2C%22exportOptions%22%3A%7B%22outputSize%22%3A%5B800%2C1100%5D%2C%22dpi%22%3A96%7D%2C%22layoutOptions%22%3A%7B%22titleText%22%3A%22Un+titre%22%2C%22authorText%22%3A%22MSSS%2C+Direction+de+la+gestion+int%C3%A9gr%C3%A9e+de+l%27information.%22%2C%22copyrightText%22%3A%22%3Ccopyright+info+here%3E%22%2C%22scaleBarOptions%22%3A%7B%22metricUnit%22%3A%22esriKilometers%22%2C%22metricLabel%22%3A%22km%22%2C%22nonMetricUnit%22%3A%22esriMiles%22%2C%22nonMetricLabel%22%3A%22mi%22%7D%2C%22legendOptions%22%3A%7B%22operationalLayers%22%3A%5B%5D%7D%7D%7D&Format=PDF&Layout_Template=A3+Landscape&env%3AoutSR=&env%3AprocessSR=&returnZ=false&returnM=false&f=html

I guess that means it's not a proxy or CORS problem.

Here's the code for the printing part :

printUrl = "http://MySERVER.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task";

    var printInfo = esriRequest({
      "url": printUrl,
      "content": { "f": "json" }
    });
    printInfo.then(dojo.hitch(printUrl,dojo.hitch(myMap,handlePrintInfo)), handleError);

    function handlePrintInfo(resp) {


      var layoutTemplate, templateNames, mapOnlyIndex, templates;

      layoutTemplate = arrayUtils.filter(resp.parameters, function(param, idx) {
        return param.name === "Layout_Template";
      });

      if ( layoutTemplate.length === 0 ) {
        console.log("print service parameters name for templates must be \"Layout_Template\"");
        return;
      }
      templateNames = layoutTemplate[0].choiceList;

      // remove the MAP_ONLY template then add it to the end of the list of templates 
      mapOnlyIndex = arrayUtils.indexOf(templateNames, "MAP_ONLY");
      if ( mapOnlyIndex > -1 ) {
        var mapOnly = templateNames.splice(mapOnlyIndex, mapOnlyIndex + 1)[0];
        templateNames.push(mapOnly);
      }

      // create a print template for each choice
      templates = arrayUtils.map(templateNames, function(ch) {
        var plate = new PrintTemplate();
        plate.layout = plate.label = ch;
        plate.format = "PDF";
        plate.layoutOptions = { 
          "authorText": "Author.",
          "copyrightText": "<copyright info here>",
          "legendLayers": [], 
          "titleText": "A title", 
          "scalebarUnit": "Kilometers" 
        };
        return plate;
      });

      // create the print dijit
      var printer = new Print({
        "map": myMap,
        "templates": templates,
        "url": printUrl
      }, dojo.byId("print_button"));
      printer.startup();
    }

    function handleError(err) {
      console.log("Something broke: ", err);
    }`

Best Answer

I changed the URL call to my arcgis server to the ip address and the map finally prints. Probably a problem with the web adaptor.