AnsweredAssumed Answered

Need help with modification of print plus widget

Question asked by Qiran058 on Mar 26, 2018

Hi,

I'm trying to use our own print service in the print plus widget. But later I found out that it doesn't execute the "Get Layout Templates Info" GP services like the WAB print widget did.  I need some help with adding the "Get Layout Templates Info" in there. 

 

I tried to add the code 

LayerInfos, in the functions 

and then 

LayerInfos.getInstance(this.map, this.map.itemInfo)
  .then(lang.hitch(this, function(layerInfosObj) {
    this.layerInfosObj = layerInfosObj;
    return all([this._getPrintTaskInfo(), this._getLayerTemplatesInfo()])
      .then(lang.hitch(this, function(results) {
        var taksInfo = results[0],
          templatesInfo = results[1];
        if (templatesInfo && !templatesInfo.error) {
          var parameters = templatesInfo && templatesInfo.results;
          if (parameters && parameters.length > 0) {
            array.some(parameters, lang.hitch(this, function(p) {
              return p && p.paramName === 'Output_JSON' ?
                this.templateInfos = p.value : false;
            }));
            if (this.templateInfos && this.templateInfos.length > 0) {
              this.templateNames = array.map(this.templateInfos, function(ti) {
                return ti.layoutTemplate;
              });
            }
          }
        } else {
          console.warn('Get Layout Templates Info Error',
            templatesInfo && templatesInfo.error);
        }
        if (!esriLang.isDefined(taksInfo) || (taksInfo && taksInfo.error)) {
          this._handleError(taksInfo.error);
        } else {
          this._handlePrintInfo(taksInfo);
        }
      }));
  })).always(lang.hitch(this, function() {
    this.shelter.hide();
  }));

and
_getLayerTemplatesInfo: function() {
  var def = new Deferred();
  var parts = this.printTaskURL.split('/');
  var pos = parts.indexOf('GPServer');
  if (pos > -1) {
    var url = null;
    if (/Utilities\/PrintingTools\/GPServer/.test(this.printTaskURL)) {
      url = parts.slice(0, pos + 1).join('/') + '/' +
        encodeURIComponent('Get Layout Templates Info Task') + '/execute';
    } else {
      url = parts.slice(0, pos + 1).join('/') + '/' +
        encodeURIComponent('Get Layout Templates Info') + '/execute';
    }
    esriRequest({
      url: url,
      content: {
        f: "json"
      },
      callbackParamName: "callback",
      handleAs: "json",
      timeout: 60000
    }).then(lang.hitch(this, function(info) {
      def.resolve(info);
    }), lang.hitch(this, function(err) {
      def.resolve({
        error: err
      });
    }));
  } else {
    def.resolve(null);
  }

  return def;
},

to the printplus.js 

then the widget fail loading in WAB.

Outcomes