AnsweredAssumed Answered

Running geoprocessing script from custom widget

Question asked by a00847138 on Oct 22, 2017
Latest reply on Oct 23, 2017 by a00847138

Hi all,

 

I'm taking my first foray into creating a custom widget and am running into some difficulty. The geoprocessing script I am trying to run takes a user entry, and uses that value to create a report. I am having troubles getting the geoprocessing service to run. My script is below:

 

  


  define([
"dojo/_base/declare",
"jimu/BaseWidget",
"dijit/_WidgetsInTemplateMixin",
"dojo/aspect",
"jimu/ConfigManager",
'dojo/_base/html',
"jimu/WidgetManager",
"esri/layers/FeatureLayer",
"dojo/query",
"esri/tasks/query",
"esri/tasks/QueryTask",
"dojo/store/Memory",
"dojo/_base/array",
"dojo/on",
"dojo/_base/lang",
"dijit/form/ComboBox",
"dojo/dom",
'jimu/dijit/Message',
'esri/tasks/GPMessage',
'esri/tasks/JobInfo',
'esri/request',
"esri/tasks/Geoprocessor"
],

function (
declare,
BaseWidget,
_WidgetsInTemplateMixin,
aspect,
html,
ConfigManager,
WidgetManager,
FeatureLayer,
dojoQuery,
Query,
QueryTask,
Memory,
array,
on,
lang,
dom,
JobInfo,
esriRequest,
Geoprocessor,
GPMessage,
Message
) {
return declare([BaseWidget, _WidgetsInTemplateMixin], {

baseClass: "jimu-widget-reportingtool",

queryTask: null,
query: null,
userEntry: null,
gp: null,

postCreate: function () {
this.queryTask = new QueryTask("myservice");
this.query = new Query();
this.query.returnGeometry = false;
this.query.outFields = ["bridge_name_num"];
this.query.where = "bridge_name_num <> '' AND status <> 'Undefined'";
},

onOpen: function () {
this.queryTask.execute(this.query, lang.hitch(this, this.populateList));
},

populateList: function (results) {
//Populate the ComboBox with unique values
var zone;
var values = [];
var testVals = {};

//Add option to display all zoning types to the ComboBox
values.push({
name: "ALL"
});

//Loop through the QueryTask results and populate an array
//with the unique values
var features = results.features;
array.forEach(features, function (feature) {
zone = feature.attributes.bridge_name_num;
if (!testVals[zone]) {
testVals[zone] = true;
values.push({
name: zone
});
}
});
//Create a ItemFileReadStore and use it for the
//ComboBox's data source
var dataItems = {
identifier: "name",
label: "name",
items: values
};
//console.log(dataItems);
var store = new Memory({
data: dataItems
});
//console.log(store);
this.mySelect.set("store", store);
},

exportReport: function(){
//this.results.innerHTML = "<center><b>Processing...</b><br><img src='widgets/tExport/images/loading.gif' width='360px'></center>"


var userEntry = this.mySelect.value;

//var message = new Message({
//message: userEntry,
//titleLabel: "userEntry"
//});

this.gpSubmit(this.mySelect.value);
},

gpSubmit: function(userEntry){

this.gp = new Geoprocessor(myservice");

var params = {
"Bridge_Name": userEntry
}
console.log(params);
this.gp.submitJob(params, lang.hitch(this,this.jobComplete), this.jobStatus, lang.hitch(this, this.jobError));
},

jobComplete: function(jobInfo){

this.gp.getResultData(jobInfo.jobId, "pdf_export", lang.hitch(this, function(data){
console.log(data);
console.log(this.results);

this.results.innerHTML = "<a href='" + data.value.url + "'><div><img src='widgets/VegtExport/images/zip-icon.jpg' height='20px'>  <b>Export Package Ready!</b></div></a>";

}));
console.log(jobInfo.jobStatus);
console.log(jobInfo.results);

},
jobStatus: function(jobInfo){

console.log(jobInfo);

},
jobError: function(error){

this.results.innerHTML = "<center><b>Export Failed...</b></center>";

}
});
});

At the moment the error I am getting is:

 

Uncaught TypeError: this.gp.submitJob is not a function
at Object.gpSubmit (Widget.js?wab_dv=2.6:131)
at Object.exportReport (Widget.js?wab_dv=2.6:120)
at HTMLDivElement.<anonymous> (init.js:63)

Outcomes