Created
August 17, 2016 05:25
-
-
Save watzon/ea77dca19638cbe975b3d25260f63025 to your computer and use it in GitHub Desktop.
Salesforce Ajax Toolkit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if (!sforce) { | |
throw "unable to find sforce. Make sure that connection.js is loaded before apex.js script"; | |
} | |
sforce.Apex = function(){ | |
}; | |
sforce.RunTestsRequest = function() { | |
}; | |
sforce.RunTestsRequest.prototype = new sforce.Xml("RunTestsRequest"); | |
sforce.Apex.prototype.namespaceMap = [{ns:"http://soap.sforce.com/2006/08/apex", prefix:""}]; | |
sforce.Apex.prototype.executeAnonymous = function (string, callback) { | |
var arg1 = new sforce.internal.Parameter("String", string, false); | |
return sforce.connection._invoke("executeAnonymous",[arg1], false, | |
callback, this.namespaceMap, (typeof UserContext.siteUrlPrefix != "undefined") ? UserContext.getUrl("/services/Soap/s/37.0") : "/services/Soap/s/37.0", this.namespaceMap[0].ns); | |
}; | |
sforce.Apex.prototype.setDebug = function (flag, level, categories) { | |
if (flag) { | |
sforce.debug.apexTrace = true; | |
sforce.connection.debuggingHeader = {debugLevel : (level ? level : "Db"), debugCategories : (categories ? categories : null)}; | |
} else { | |
sforce.debug.apexTrace = false; | |
sforce.connection.debuggingHeader = null; | |
} | |
}; | |
sforce.Apex.prototype.execute = function (pkg, method, args, callback, isArray) { | |
pkg = pkg.replace(/\./g, "/"); | |
var sobjectNs = "http://soap.sforce.com/schemas/package/" + pkg; | |
var nsmap = [{ns:sobjectNs, prefix:""}]; | |
if (!args) { | |
throw "args not specified"; | |
} | |
var params = []; | |
for (var field in args) { | |
var value = args[field]; | |
if (typeof value != "function") { | |
var arrayParam = value === null ? false : (value.push?true:false); | |
var param = new sforce.internal.Parameter(field, value, arrayParam); | |
params.push(param); | |
} | |
} | |
var isRealArray = true; | |
if (isArray === false) { | |
isRealArray = false; | |
} | |
return sforce.connection._invoke(method, params, isRealArray, callback, nsmap, | |
((typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/Soap/package/") : "/services/Soap/package/") + pkg, sobjectNs, sobjectNs); | |
}; | |
sforce.Apex.prototype.runTests = function (request, callback) { | |
var arg1 = new sforce.internal.Parameter("RunTestsRequest", request, false); | |
return sforce.connection._invoke("runTests",[arg1], false, | |
callback, this.namespaceMap, (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/Soap/s/37.0") : "/services/Soap/s/37.0", this.namespaceMap[0].ns); | |
}; | |
sforce.apex = new sforce.Apex(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Salesforce.com AJAX Connector 36.0 | |
Copyright, 1999, salesforce.com, inc. | |
All Rights Reserved | |
*/ | |
/** check if sforce is already created by some other lib*/ | |
window.sforce = window.sforce || {}; | |
sforce.internal = {}; | |
/** StringBuffer */ | |
sforce.StringBuffer = function() { | |
this.buffer = []; | |
this.append = function (s) { | |
this.buffer.push(s); | |
return this; | |
}; | |
this.toString = function() { | |
return this.buffer.join(""); | |
}; | |
}; | |
/** Base64Binary */ | |
sforce.Base64Binary = function(text) { | |
this.input = text; | |
}; | |
sforce.Base64Binary.prototype.keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; | |
sforce.Base64Binary.prototype.toString = function() { | |
var output = []; | |
var chr1, chr2, chr3 = ""; | |
var enc1, enc2, enc3, enc4 = ""; | |
var i = 0; | |
do { | |
chr1 = this.input.charCodeAt(i++); | |
chr2 = this.input.charCodeAt(i++); | |
chr3 = this.input.charCodeAt(i++); | |
enc1 = chr1 >> 2; | |
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); | |
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); | |
enc4 = chr3 & 63; | |
if (isNaN(chr2)) { | |
enc3 = enc4 = 64; | |
} else if (isNaN(chr3)) { | |
enc4 = 64; | |
} | |
output.push(this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) + this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4)); | |
chr1 = chr2 = chr3 = ""; | |
enc1 = enc2 = enc3 = enc4 = ""; | |
} while (i < this.input.length); | |
return output.join(""); | |
}; | |
sforce.Base64Binary.prototype.decode = function(input) { | |
var output = []; | |
var chr1, chr2, chr3 = ""; | |
var enc1, enc2, enc3, enc4 = ""; | |
var i = 0; | |
var base64test = /[^A-Za-z0-9\+\/\=]/g; | |
if (base64test.exec(input)) { | |
alert("There were invalid base64 characters in the input text.\n" + | |
"Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" + "Expect errors in decoding."); | |
} | |
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); | |
do { | |
enc1 = this.keyStr.indexOf(input.charAt(i++)); | |
enc2 = this.keyStr.indexOf(input.charAt(i++)); | |
enc3 = this.keyStr.indexOf(input.charAt(i++)); | |
enc4 = this.keyStr.indexOf(input.charAt(i++)); | |
chr1 = (enc1 << 2) | (enc2 >> 4); | |
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); | |
chr3 = ((enc3 & 3) << 6) | enc4; | |
output.push(String.fromCharCode(chr1)); | |
if (enc3 != 64) { | |
output.push(String.fromCharCode(chr2)); | |
} | |
if (enc4 != 64) { | |
output.push(String.fromCharCode(chr3)); | |
} | |
chr1 = chr2 = chr3 = ""; | |
enc1 = enc2 = enc3 = enc4 = ""; | |
} while (i < input.length); | |
return output.join(""); | |
}; | |
/**DateCodec.js*/ | |
sforce.internal.dateToString = function(theDate) { | |
var today = theDate; | |
var year = today.getFullYear(); | |
var month = today.getMonth() + 1; | |
var day = today.getDate(); | |
return year + "-" + month + "-" + day; | |
}; | |
sforce.internal.dateTimeToString = function(theDate) { | |
var today = theDate; | |
var year = today.getFullYear(); | |
var month = today.getMonth() + 1; | |
var day = today.getDate(); | |
var hour = today.getHours(); | |
var minute = today.getMinutes(); | |
var second = today.getSeconds(); | |
var offset = today.getTimezoneOffset(); | |
var pm = (offset < 0) ? "+" : "-"; | |
offset = Math.abs(offset); | |
var hourdifference = offset / 60; | |
var minutedifference = offset % 60; | |
if (second <= 9) { | |
second = "0" + second; | |
} | |
var milli = today.getMilliseconds(); | |
if (milli !== 0) { | |
milli = "." + milli; | |
if (milli.length > 4) { | |
milli = milli.substring(0, 4); | |
} | |
second = second + milli; | |
} | |
var timezone; | |
if (offset === 0) { | |
timezone = "Z"; | |
} else { | |
if (minutedifference < 10) { | |
minutedifference = "0" + minutedifference; | |
} | |
if (hourdifference < 10) { | |
hourdifference = "0" + hourdifference; | |
} | |
timezone = pm + hourdifference + ":" + minutedifference; | |
} | |
if (month <= 9) { | |
month = "0" + month; | |
} | |
if (day <= 9) { | |
day = "0" + day; | |
} | |
if (hour <= 9) { | |
hour = "0" + hour; | |
} | |
if (minute <= 9) { | |
minute = "0" + minute; | |
} | |
return year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":" + second + timezone; | |
}; | |
sforce.internal.stringToDate = function(source) { | |
var bc = false; | |
if (source === null || source.length === 0) { | |
throw "Unable to parse dateTime"; | |
} | |
if (source.charAt(0) == '+') { | |
source = source.substring(1); | |
} | |
if (source.charAt(0) == '-') { | |
source = source.substring(1); | |
bc = true; | |
} | |
if (source.length != 10) { | |
throw ("Unable to parse date, " + source + " length != 10"); | |
} | |
if (source.charAt(4) != '-' || source.charAt(7) != '-') { | |
throw ("Unable to parse date"); | |
} | |
var year = source.substring(0, 4); | |
var month = source.substring(5, 7); | |
var day = source.substring(8, 10); | |
var date = new Date(year, month-1, day, 0, 0, 0); | |
date.setMilliseconds(0); | |
return date; | |
}; | |
sforce.internal.stringToDateTime = function(source) { | |
var bc = false; | |
if (source === null || source.length === 0) { | |
throw "Unable to parse dateTime"; | |
} | |
if (source.charAt(0) == '+') { | |
source = source.substring(1); | |
} | |
if (source.charAt(0) == '-') { | |
source = source.substring(1); | |
bc = true; | |
} | |
if (source.length < 19) { | |
throw ("Unable to parse dateTime"); | |
} | |
if (source.charAt(4) != '-' || source.charAt(7) != '-' || | |
source.charAt(10) != 'T') { | |
throw ("Unable to parse dateTime"); | |
} | |
if (source.charAt(13) != ':' || source.charAt(16) != ':') { | |
throw ("Unable to parse dateTime"); | |
} | |
var year = source.substring(0, 4); | |
var month = source.substring(5, 7); | |
var day = source.substring(8, 10); | |
var hour = source.substring(11, 13); | |
var min = source.substring(14, 16); | |
var sec = source.substring(17, 19); | |
var date = new Date(year, month-1, day, hour, min, sec); | |
var pos = 19; | |
// parse optional milliseconds | |
if (pos < source.length && source.charAt(pos) == '.') { | |
var milliseconds = 0; | |
var start = ++pos; | |
while (pos < source.length && sforce.internal.isDigit(source.charAt(pos))) { | |
pos++; | |
} | |
var decimal = source.substring(start, pos); | |
if (decimal.length == 3) { | |
milliseconds = decimal; | |
} else if (decimal.length < 3) { | |
milliseconds = (decimal + "000").substring(0, 3); | |
} else { | |
milliseconds = decimal.substring(0, 3); | |
if (decimal.charAt(3) >= '5') { | |
++milliseconds; | |
} | |
} | |
date.setMilliseconds(milliseconds); | |
} | |
var offset = date.getTimezoneOffset() * 60000; | |
//offset in milli; | |
// parse optional timezone | |
if (pos + 5 < source.length && | |
(source.charAt(pos) == '+' || (source.charAt(pos) == '-'))) { | |
if (!sforce.internal.isDigit(source.charAt(pos + 1)) || | |
!sforce.internal.isDigit(source.charAt(pos + 2)) || | |
source.charAt(pos + 3) != ':' || | |
!sforce.internal.isDigit(source.charAt(pos + 4)) || | |
!sforce.internal.isDigit(source.charAt(pos + 5))) { | |
throw "Unable to parse dateTime"; | |
} | |
var hours = (source.charAt(pos + 1) - '0') * 10 + source.charAt(pos + 2) - '0'; | |
var mins = (source.charAt(pos + 4) - '0') * 10 + source.charAt(pos + 5) - '0'; | |
var mseconds = (hours * 60 + mins) * 60 * 1000; | |
// subtract milliseconds from current date to obtain GMT | |
if (source.charAt(pos) == '+') { | |
mseconds = -mseconds; | |
} | |
date = new Date(date.getTime() - offset + mseconds); | |
pos += 6; | |
} | |
if (pos < source.length && source.charAt(pos) == 'Z') { | |
pos++; | |
date = new Date(date.getTime() - offset); | |
} | |
if (pos < source.length) { | |
throw ("Unable to parse dateTime"); | |
} | |
return date; | |
}; | |
sforce.internal.isDigit = function (ch) { | |
if (ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || | |
ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9') { | |
return true; | |
} else { | |
return false; | |
} | |
}; | |
/** Xml */ | |
sforce.Xml = function(name) { | |
}; | |
sforce.Xml.prototype.toXml = function (sobjectNs, name, writer) { | |
writer.writeStartElement(name, sobjectNs); | |
if (this._xsiType) { | |
writer.writeXsiType(this._xsiType); | |
} | |
for (var f in this) { | |
if ("_name" == f || "_xsiType" == f) { | |
//skip | |
} else { | |
var val = this[f]; | |
if (typeof val != "function") { | |
// if (typeof val == "array") { | |
if (Array.isArray(val)) { | |
for (var i=0; i<val.length; i++) { | |
this.writeValue(sobjectNs, writer, f, val[i]); | |
} | |
} else { | |
this.writeValue(sobjectNs, writer, f, val); | |
} | |
} | |
} | |
} | |
writer.writeEndElement(name, sobjectNs); | |
}; | |
sforce.Xml.prototype.writeValue = function (sobjectNs, writer, name, val) { | |
if (val === null) { | |
writer.writeNameValueNode("fieldsToNull", name); | |
return; | |
} | |
if (typeof(val) === "undefined") { | |
//TODO: throw "value for field " + name + " is undefined"; Bug: 100000000000Ufg | |
return; //skip for now | |
} | |
if (val.toXml) { | |
val.toXml(sobjectNs, name, writer); | |
} else { | |
writer.writeNameValueNode(name, val); | |
} | |
}; | |
sforce.Xml.prototype.get = function(name) { | |
return this[name] ? this[name] : null; | |
}; | |
sforce.Xml.prototype.set = function(name, value) { | |
this[name] = value; | |
}; | |
sforce.Xml.prototype.getArray = function(name) { | |
var obj = this[name]; | |
if (obj) { | |
if (obj.join) { | |
return obj; | |
} else { | |
return [obj]; | |
} | |
} else { | |
return []; | |
} | |
}; | |
sforce.Xml.prototype.getBoolean = function(name) { | |
return ("true" == this[name]) ? true : false; | |
}; | |
sforce.Xml.prototype.getDate = function(name) { | |
if (this[name]) { | |
if (this[name].getFullYear) { | |
return this[name]; | |
} else { | |
return sforce.internal.stringToDate(this[name]); | |
} | |
} else { | |
return null; | |
} | |
}; | |
sforce.Xml.prototype.getDateTime = function(name) { | |
if (this[name]) { | |
if (this[name].getFullYear) { | |
return this[name]; | |
} else { | |
return sforce.internal.stringToDateTime(this[name]); | |
} | |
} else { | |
return null; | |
} | |
}; | |
sforce.Xml.prototype.getInt = function(name) { | |
if (this[name]) { | |
if (typeof this[name] === "number") { | |
return this[name]; | |
} else { | |
return parseInt(this[name], 10); | |
} | |
} else { | |
throw "Unable to parse int field: " + name; | |
} | |
}; | |
sforce.Xml.prototype.getFloat = function(name) { | |
if (this[name]) { | |
if (typeof this[name] === "number") { | |
return this[name]; | |
} else { | |
return parseFloat(this[name]); | |
} | |
} else { | |
throw "Unable to parse float field: " + name; | |
} | |
}; | |
sforce.Xml.prototype.getBase64Binary = function(name) { | |
if (this[name]) { | |
return sforce.Base64Binary.prototype.decode(this[name]); | |
} else { | |
throw "Unable to parse base64Binary field: " + name; | |
} | |
}; | |
sforce.Xml.prototype.toString = function() { | |
var sb = new sforce.StringBuffer(); | |
sb.append("{"); | |
for (var f in this) { | |
var field = this[f]; | |
if (!field) { | |
sb.append(f).append(":").append("" + field); | |
} else if (typeof(field) == "object") { | |
sb.append(f).append(":").append(field.toString()); | |
} else if (field.join) { | |
sb.append(f).append(":").append("["); | |
for (var i = 0; i < field.length; i++) { | |
sb.append(field[i]); | |
if (i < field.length - 1) { | |
sb.append(", "); | |
} | |
} | |
sb.append("]"); | |
} else if (typeof(field) == "function") { | |
continue; | |
} else { | |
sb.append(f).append(":").append("'" + field + "'"); | |
} | |
sb.append(", "); | |
} | |
sb.append("}"); | |
return sb.toString(); | |
}; | |
/** Debug */ | |
sforce.internal.Debug = function() { | |
this.output = null; | |
this.trace = false; | |
this.apexTrace = false; | |
this.win = null; | |
this.traceQueue = []; | |
this.quiet = false; | |
this.open = function() { | |
this.println("", "print"); | |
}; | |
this.println = function(s, type) { | |
if (this.quiet) { | |
return; | |
} | |
if (typeof(println) === "function") { | |
println(s, type); | |
return; | |
} | |
if (this.win === null || !this.win.document) { | |
this.output = null; | |
this.win = window.open((typeof window.UserContext != "undefined") ? UserContext.getUrl('/soap/ajax/37.0/debugshell.html') : '/soap/ajax/37.0/debugshell.html', '', | |
'width=800,height=400,toolbar=no,location=no,directories=no,alwaysRaised=yes,' + | |
'status=no,menubar=no,scrollbars=yes,copyhistory=yes,resizable=yes'); | |
} | |
if (this.output === null) { | |
this.findOutput(); | |
} | |
if (this.output !== null) { | |
if (sforce.debug.traceQueue.length > 0) { | |
this.traceCallback(); | |
} | |
this.win.println(s, type); | |
} else { | |
sforce.debug.traceQueue.push({message: s, type: type}); | |
setTimeout(sforce.debug.traceCallback, 1000); | |
} | |
}; | |
this.traceCallback = function() { | |
sforce.debug.findOutput(); | |
if (sforce.debug.output === null) { | |
setTimeout(sforce.debug.traceCallback, 1000); | |
return; | |
} | |
for (var i=0; i<sforce.debug.traceQueue.length; i++) { | |
var element = sforce.debug.traceQueue[i]; | |
sforce.debug.win.println(element.message, element.type); | |
} | |
sforce.debug.traceQueue = []; | |
}; | |
this.findOutput = function() { | |
if (this.output === null) { | |
this.output = this.win.document.getElementById("output"); | |
} | |
return this.output; | |
}; | |
this.logXml = function(str) { | |
str = str.replace(/</g, "<"); | |
str = str.replace(/>/g, ">"); | |
str = "<textarea cols=80 rows=5 wrap=hard>" + str + "</textarea>"; | |
this.println(str, "printxml"); | |
}; | |
this.log = function(str) { | |
this.println(str, "print"); | |
}; | |
this.logApex = function(response) { | |
var start = response.indexOf("<debugLog>"); | |
var end = response.indexOf("</debugLog>"); | |
if (start === -1) | |
start = 0; | |
else | |
start = start + '<debugLog>'.length; | |
if (end === -1) end = response.length; | |
var msg = response.substring(start, end); | |
this.println(msg, "printxml"); | |
}; | |
}; | |
sforce.debug = new sforce.internal.Debug(); | |
/** Transport */ | |
sforce.internal._connections = []; | |
sforce.internal.ConnectionHolder = function(connection, callback) { | |
this.connection = connection; | |
this.callback = callback; | |
this.timedout = false; | |
}; | |
sforce.Transport = function(url) { | |
this.url = url; | |
this.connection = null; | |
this.newConnection = function() { | |
try { | |
this.connection = new ActiveXObject('Msxml2.XMLHTTP'); | |
} catch(e) { | |
try { | |
this.connection = new ActiveXObject('Microsoft.XMLHTTP'); | |
} catch(e) { | |
this.connection = new XMLHttpRequest(); | |
} | |
} | |
return this.connection; | |
}; | |
this.send = function (envelope, callback, async, timeout) { | |
this.newConnection(); | |
if (async) { | |
this.connection.onreadystatechange = this.httpConnectionCallback; | |
} | |
var holder = new sforce.internal.ConnectionHolder(this.connection, callback); | |
sforce.internal._connections.push(holder); | |
this.connection.open("POST", this.url, async); | |
this.connection.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); | |
this.connection.setRequestHeader("SOAPAction", "\"\""); | |
this.connection.setRequestHeader("Accept", "text/xml"); | |
this.connection.setRequestHeader("User-Agent", "SFAJAX 1.0"); | |
this.connection.send(envelope); | |
if (async && typeof(timeout) !== "undefined") { | |
this.setTimeoutOn(holder, timeout); | |
} | |
if (!async) { | |
this.httpConnectionCallback(); | |
} | |
}; | |
this.setTimeoutOn = function (holder, timeout) { | |
function abortConnection() { | |
if (holder.connection.readyState !== 4) { | |
holder.timedout = true; | |
holder.connection.abort(); | |
} | |
} | |
setTimeout(abortConnection, timeout); | |
}; | |
this.httpConnectionCallback = function () { | |
for (var i = 0; i < sforce.internal._connections.length; i++) { | |
var holder = sforce.internal._connections[i]; | |
if (holder !== null) { | |
if (holder.timedout) { | |
sforce.internal._connections[i] = null; | |
sforce.internal._connections.slice(i,1); | |
holder.callback.httpCallback("Remote invocation timed out", false); | |
} else if (holder.connection.readyState == 4) { | |
sforce.internal._connections[i] = null; | |
sforce.internal._connections.slice(i,1); | |
var success = holder.connection.status == 200; | |
if (sforce.debug.trace) { | |
sforce.debug.log("Response : status - " + holder.connection.status); | |
sforce.debug.logXml(holder.connection.responseText); | |
} | |
if (sforce.debug.apexTrace) { | |
sforce.debug.logApex(holder.connection.responseText); | |
} | |
if (holder.connection.responseXML && holder.connection.responseXML.documentElement) { | |
holder.callback.httpCallback(holder.connection.responseXML.documentElement, success); | |
} else { | |
holder.callback.httpCallback("Remote invocation failed, due to: " + holder.connection.responseText + | |
" status code: ", holder.connection.status); | |
} | |
} | |
} | |
} | |
}; | |
}; | |
/** XmlWriter */ | |
sforce.XmlWriter = function() { | |
this.buffer = new sforce.StringBuffer(); | |
this.namespaces = {}; | |
this.prefixCount = 0; | |
this.writingStartElement = false; | |
}; | |
sforce.XmlWriter.prototype.writeStartElement = function(name, namesp, prefix) { | |
if (this.writingStartElement) { | |
this.buffer.append(">"); | |
} | |
this.buffer.append("<"); | |
var newns = false; | |
if (namesp) { | |
if (!this.namespaces[namesp] && this.namespaces[namesp] !== "") { | |
newns = true; | |
} | |
if (!prefix) { | |
prefix = this.getPrefix(namesp); | |
} | |
if (prefix !== null && prefix !== "") { | |
this.buffer.append(prefix); | |
this.buffer.append(":"); | |
} | |
} | |
this.buffer.append(name); | |
if (newns === true) { | |
this.writeNamespace(namesp, prefix); | |
} | |
this.writingStartElement = true; | |
}; | |
sforce.XmlWriter.prototype.writeEndElement = function(name, namesp) { | |
if (this.writingStartElement) { | |
this.buffer.append("/>"); | |
} else { | |
this.buffer.append("</"); | |
if (namesp) { | |
var prefix = this.getPrefix(namesp); | |
if (prefix && prefix !== "") { | |
this.buffer.append(prefix); | |
this.buffer.append(":"); | |
} | |
} | |
this.buffer.append(name); | |
this.buffer.append(">"); | |
} | |
this.writingStartElement = false; | |
}; | |
sforce.XmlWriter.prototype.writeNamespace = function(namesp, prefix) { | |
if (prefix && "" !== prefix) { | |
this.namespaces[namesp] = prefix; | |
this.buffer.append(" "); | |
this.buffer.append("xmlns:"); | |
this.buffer.append(prefix); | |
} else { | |
this.namespaces[namesp] = ""; | |
this.buffer.append(" "); | |
this.buffer.append("xmlns"); | |
} | |
this.buffer.append("=\""); | |
this.buffer.append(namesp); | |
this.buffer.append("\""); | |
}; | |
sforce.XmlWriter.prototype.writeText = function(text) { | |
if (this.writingStartElement) { | |
this.buffer.append(">"); | |
this.writingStartElement = false; | |
} else { | |
throw "Can only write text after a start element"; | |
} | |
if (typeof text == 'string') { | |
text = text.replace(/&/g, '\&'); | |
text = text.replace(/</g, '<'); | |
text = text.replace(/>/g, '>'); | |
} | |
this.buffer.append(text); | |
}; | |
sforce.XmlWriter.prototype.writeXsiType = function(xsiType) { | |
this.writeNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi"); | |
this.writeAttribute("xsi:type", xsiType); | |
}; | |
sforce.XmlWriter.prototype.writeAttribute = function(name, value) { | |
this.buffer.append(" " + name + "=\"" + value + "\""); | |
}; | |
sforce.XmlWriter.prototype.getPrefix = function(namesp) { | |
var prefix = this.namespaces[namesp]; | |
//sforce.debug.log("--------"); | |
//sforce.debug.log(namesp + ":" + (prefix === null ? "null":prefix) + ":"); | |
if (!prefix && prefix !== "") { | |
prefix = "ns" + this.prefixCount; | |
this.prefixCount++; | |
this.namespaces[namesp] = prefix; | |
return prefix; | |
} | |
return prefix; | |
}; | |
sforce.XmlWriter.prototype.toString = function() { | |
return this.buffer.toString(); | |
}; | |
/** soap writer*/ | |
sforce.XmlWriter.prototype.soapNS = "http://schemas.xmlsoap.org/soap/envelope/"; | |
sforce.XmlWriter.prototype.startEnvelope = function() { | |
this.writeStartElement("Envelope", this.soapNS, "se"); | |
}; | |
sforce.XmlWriter.prototype.endEnvelope = function() { | |
this.writeEndElement("Envelope", this.soapNS); | |
}; | |
sforce.XmlWriter.prototype.startHeader = function() { | |
this.writeStartElement("Header", this.soapNS, "se"); | |
}; | |
sforce.XmlWriter.prototype.endHeader = function() { | |
this.writeEndElement("Header", this.soapNS); | |
}; | |
sforce.XmlWriter.prototype.startBody = function() { | |
this.writeStartElement("Body", this.soapNS, "se"); | |
}; | |
sforce.XmlWriter.prototype.endBody = function() { | |
this.writeEndElement("Body", this.soapNS); | |
}; | |
sforce.XmlWriter.prototype.writeNameValueNode = function(name, value) { | |
if (value === null) { | |
this.writeStartElement(name); | |
this.writeNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi"); | |
this.writeAttribute("xsi:nill", "true"); | |
this.writeEndElement(name); | |
return; | |
} | |
if (value.toUTCString) { | |
value = sforce.internal.dateTimeToString(value); | |
} | |
if (typeof value == "boolean") { | |
// boolean 'false' values get joined in string buffer, | |
// so convert to strings: | |
value = value ? "true" : "false"; | |
} | |
if (value && value.join) { | |
for (var i=0; i<value.length; i++) { | |
this.writeStartElement(name); | |
this.writeText(value[i]); | |
this.writeEndElement(name); | |
} | |
} else { | |
this.writeStartElement(name); | |
this.writeText(value); | |
this.writeEndElement(name); | |
} | |
}; | |
/** XmlReader */ | |
sforce.XmlReader = function(root) { | |
this.envelope = root; | |
}; | |
sforce.XmlReader.prototype.getEnvelope = function() { | |
if (this.isTag("Envelope", this.envelope)) { | |
return this.envelope; | |
} | |
throw "Unable to find soap envelope, but found " + this.envelope.nodeName; | |
}; | |
sforce.XmlReader.prototype.getBody = function() { | |
return this.getChild("Body", this.envelope); | |
}; | |
sforce.XmlReader.prototype.getHeader = function() { | |
return this.getChild("Header", this.envelope); | |
}; | |
sforce.XmlReader.prototype.getChild = function(name, node) { | |
var children = node.childNodes; | |
for (var i = 0; i < children.length; i++) { | |
if (children[i].nodeType == 1 && this.isTag(name, children[i])) { | |
return children[i]; | |
} | |
} | |
return null; | |
}; | |
sforce.XmlReader.prototype.getFirstElement = function(node) { | |
var children = node.childNodes; | |
for (var i = 0; i < children.length; i++) { | |
if (children[i].nodeType == 1) { | |
return children[i]; | |
} | |
} | |
return null; | |
}; | |
sforce.XmlReader.prototype.isTag = function(name, node) { | |
var ns = node.nodeName.split(":"); | |
if (ns.length == 2 && ns[1] == name) { | |
return true; | |
} | |
if (ns.length == 1 && ns[0] == name) { | |
return true; | |
} | |
return false; | |
}; | |
sforce.XmlReader.prototype.isNameValueNode = function(node) { | |
var children = node.childNodes; | |
for (var i = 0; i < children.length; i++) { | |
if (children[i].nodeType != 3) { | |
return false; | |
} | |
} | |
return true; | |
}; | |
sforce.XmlReader.prototype.getTextValue = function(node) { | |
if (node.nodeType == 3) { | |
return node.nodeValue; | |
} | |
//todo: fix the hardcoded xsi prefix | |
var xsiNil = node.getAttribute("xsi:nil"); | |
if (xsiNil == "true") { | |
return null; | |
} | |
var sb = ""; | |
var children = node.childNodes; | |
for (var i = 0; i < children.length; i++) { | |
if (children[i].nodeType == 3) { | |
sb += children[i].nodeValue; | |
} else { | |
throw "Not a simple name value node"; | |
} | |
} | |
return sb; | |
}; | |
//todo: optimize | |
/* | |
sforce.XmlReader.prototype.toXmlObject2 = function(node) { | |
var children = node.childNodes; | |
var obj = new sforce.Xml(); | |
for (var i = 0; i < children.length; i++) { | |
var child = children[i]; | |
if (child.nodeType != 1) continue; | |
var name = child.nodeName; | |
var index = name.indexOf(":"); | |
name = (index == -1) ? name : name.substring(index + 1); | |
var value; | |
if (this.isNameValueNode(child)) { | |
value = this.getTextValue(child); | |
} else { | |
value = this.toXmlObject(child); | |
} | |
this.addToObject(obj, name, value); | |
} | |
return obj; | |
} | |
*/ | |
sforce.XmlReader.prototype.toXmlObject = function(n) { | |
//todo: fix the hardcoded xsi prefix | |
var xsiNil = n.getAttribute("xsi:nil"); | |
if (xsiNil == "true") { | |
return null; | |
} | |
var top = new sforce.Xml(); | |
var stack = []; | |
stack.push({node: n, obj: top}); | |
while (stack.length > 0) { | |
var st = stack.shift(); | |
for (var child = st.node.firstChild; child !== null; child = child.nextSibling) { | |
if (child.nodeType != 1) { | |
continue; | |
} | |
var name = child.nodeName; | |
var index = name.indexOf(":"); | |
name = (index == -1) ? name : name.substring(index + 1); | |
var value; | |
var isNameValue = true; | |
var sb = ""; | |
for (var tc = child.firstChild; tc !== null; tc = tc.nextSibling) { | |
if (tc.nodeType != 3) { | |
isNameValue = false; | |
break; | |
} else { | |
sb += tc.nodeValue; | |
} | |
} | |
if (isNameValue) { | |
if (child.getAttribute("xsi:nil") == "true") { | |
value = null; | |
} else { | |
value = sb; | |
} | |
} else { | |
value = new sforce.Xml(); | |
stack.push({node: child, obj: value}); | |
} | |
if (!st.obj[name]) { | |
st.obj[name] = value; | |
} else { | |
if (st.obj[name].push) { | |
st.obj[name].push(value); | |
} else { | |
var old = st.obj[name]; | |
if (name === "Id" && old === value) { | |
//skip, special case for dup Id in sobject | |
} else { | |
st.obj[name] = []; | |
st.obj[name].push(old); | |
st.obj[name].push(value); | |
} | |
} | |
} | |
} | |
} | |
return top; | |
}; | |
/** SoapTransport */ | |
sforce.SoapTransport = function() { | |
this.connectionCallback = null; | |
this.result = null; | |
this.fault = null; | |
this.isAsync = true; | |
this.isArray = false; | |
}; | |
sforce.SoapTransport.prototype.onFailure = function(res, writer) { | |
var error = "ERROR: ........... "; | |
alert(error + res); | |
this.result = null; | |
}; | |
sforce.SoapTransport.prototype.send = function(url, writer, isArray, connectionCallback) { | |
this.isArray = isArray; | |
var transport = new sforce.Transport(url); | |
this.isAsync = connectionCallback ? true : false; | |
if (this.isAsync) { | |
this.connectionCallback = connectionCallback; | |
transport.send(writer.toString(), this, this.isAsync, connectionCallback.timeout); | |
} else { | |
transport.send(writer.toString(), this, this.isAsync); | |
if (this.fault !== null) { | |
throw this.fault; | |
} | |
return this.result; | |
} | |
}; | |
sforce.SoapTransport.prototype.httpCallback = function(response, success) { | |
try { | |
if (success === true) { | |
var reader = new sforce.XmlReader(response); | |
var envelope = reader.getEnvelope(); | |
var body = reader.getBody(); | |
var operation = reader.getFirstElement(body); | |
if (operation === null) { | |
throw "Unable to find operation response element"; | |
} | |
var resultArray = []; | |
var children = operation.childNodes; | |
for (var i = 0; i < children.length; i++) { | |
if (children[i].nodeType != 1) { | |
continue; | |
} | |
if (reader.isNameValueNode(children[i])) { | |
resultArray.push(reader.getTextValue(children[i])); | |
} else { | |
resultArray.push(reader.toXmlObject(children[i])); | |
} | |
} | |
if (this.isArray) { | |
this.result = resultArray; | |
} else { | |
if (resultArray.length > 1) { | |
throw "Found more than one response: " + resultArray; | |
} | |
this.result = resultArray[0]; | |
} | |
if (this.isAsync) { | |
try { | |
this.beforeCallback(); | |
if (typeof this.connectionCallback == "function") { | |
this.connectionCallback(this.result); | |
} else { | |
if (this.connectionCallback.onSuccess) { | |
this.connectionCallback.onSuccess(this.result, this.connectionCallback.source); | |
} else { | |
throw "Unable to find onSuccess method in the callback object"; | |
} | |
} | |
} finally { | |
this.afterCallback(); | |
} | |
} | |
} else { | |
if (typeof(response.nodeName) !== "undefined") { | |
var reader2 = new sforce.XmlReader(response); | |
var envelope2 = reader2.getEnvelope(); | |
var body2 = reader2.getBody(); | |
var soapfaultEl = reader2.getFirstElement(body2); | |
var soapfault = reader2.toXmlObject(soapfaultEl); | |
this.sendFault(soapfault); | |
} else { | |
this.sendFault(response); | |
} | |
} | |
} catch(fault) { | |
this.sendFault(fault); | |
} | |
}; | |
sforce.SoapTransport.prototype.sendFault = function(fault) { | |
if (this.isAsync) { | |
if (this.connectionCallback.onFailure) { | |
try { | |
this.beforeCallback(); | |
this.connectionCallback.onFailure(fault, this.connectionCallback.source); | |
} finally { | |
this.afterCallback(); | |
} | |
} else { | |
this.onFailure(fault); | |
} | |
} else { | |
this.fault = fault; | |
} | |
}; | |
sforce.SoapTransport.prototype.beforeCallback = function () {}; | |
sforce.SoapTransport.prototype.afterCallback = function () {}; | |
/** SObject */ | |
sforce.SObject = function(type) { | |
this.type = type; | |
}; | |
sforce.SObject.prototype = new sforce.Xml("sObjects"); | |
/** LeadConvert */ | |
sforce.LeadConvert = function() { | |
}; | |
sforce.LeadConvert.prototype = new sforce.Xml("leadConverts"); | |
/** MergeRequest */ | |
sforce.MergeRequest = function() { | |
}; | |
sforce.MergeRequest.prototype = new sforce.Xml("request"); | |
/** DescribeSoqlListViewsRequest - see describeSoqlListViews() */ | |
sforce.DescribeSoqlListViewsRequest = function() { | |
}; | |
sforce.DescribeSoqlListViewsRequest.prototype = new sforce.Xml("request"); | |
/** DescribeSoqlListViewParams - see describeSoqlListViews() */ | |
sforce.DescribeSoqlListViewParams = function() { | |
}; | |
sforce.DescribeSoqlListViewParams.prototype = new sforce.Xml("listViewParams"); | |
/** QuickAction */ | |
sforce.QuickAction = function() { | |
}; | |
sforce.QuickAction.prototype = new sforce.Xml("quickActions"); | |
/** MatchOptions */ | |
sforce.MatchOptions = function() { | |
}; | |
sforce.MatchOptions.prototype = new sforce.Xml("matchOptions"); | |
/** Connection */ | |
sforce.Connection = function() { | |
this.sessionId = null; | |
this.updateMru = null; | |
this.allowFieldTruncation = null; | |
this.disableFeedTracking = null; | |
this.streamingEnabled = null; | |
this.allOrNone = null; | |
this.client = null; | |
this.defaultNamespace = null; | |
this.batchSize = null; | |
this.loginScopeHeader = null; | |
this.emailHeader = null; | |
this.assignmentRuleHeader = null; | |
this.duplicateRuleHeader = null; | |
this.transferToUserId = null; | |
this.debuggingHeader = null; | |
this.serverUrl = (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/Soap/u/37.0") : "/services/Soap/u/37.0"; | |
}; | |
/** internal methods */ | |
sforce.internal.Parameter = function (n, v, a) { | |
this.name = n; | |
this.value = v; | |
this.isArray = a; | |
}; | |
sforce.Connection.prototype.sforceNs = "urn:partner.soap.sforce.com"; | |
sforce.Connection.prototype.sobjectNs = "sobject.partner.soap.sforce.com"; | |
sforce.Connection.prototype.writeOne = function (writer, name, value, sobjectNs) { | |
if (value === null) { | |
writer.writeNameValueNode(name, null); | |
} else if (value.toXml) { | |
value.toXml(sobjectNs, name, writer); | |
} else { | |
writer.writeNameValueNode(name, value); | |
} | |
}; | |
sforce.Connection.prototype.init = function(sessionId, serverUrl) { | |
this.sessionId = sessionId; | |
this.serverUrl = serverUrl; | |
}; | |
sforce.Connection.prototype.login = function (username, password) { | |
var arg1 = new sforce.internal.Parameter("username", username, false); | |
var arg2 = new sforce.internal.Parameter("password", password, false); | |
var result = this.invoke("login", [arg1, arg2], false, null); | |
this.sessionId = result.sessionId; | |
return result; | |
}; | |
sforce.Connection.prototype.describeSObject = function(type, callback) { | |
var arg = new sforce.internal.Parameter("sObjectType", type, false); | |
return this.invoke("describeSObject", [arg], false, callback); | |
}; | |
sforce.Connection.prototype.describeSObjects = function(types, callback) { | |
var arg = new sforce.internal.Parameter("sObjectType", types, true); | |
return this.invoke("describeSObjects", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.describeSearchLayouts = function(type, callback) { | |
var arg = new sforce.internal.Parameter("sObjectType", type, true); | |
return this.invoke("describeSearchLayouts", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.describeListViews = function(type, callback) { | |
var arg = new sforce.internal.Parameter("sObjectType", type, true); | |
return this.invoke("describeListViews", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.describeSoqlListViews = function(name, type, callback) { | |
// this interface is only for a single list | |
// build up a request for the user - easier than making caller do it | |
var rp = new sforce.DescribeSoqlListViewParams(); | |
rp.developerNameOrId = name; | |
rp.sobjectType = type; | |
var describeRequest = new sforce.DescribeSoqlListViewsRequest(); | |
describeRequest.listViewParams = [ rp ]; | |
var arg1 = new sforce.internal.Parameter("request", describeRequest, false); | |
return this.invoke("describeSoqlListViews", [arg1], false, callback); | |
}; | |
sforce.Connection.prototype.describeGlobal = function(callback) { | |
return this.invoke("describeGlobal", [], false, callback); | |
}; | |
sforce.Connection.prototype.describeLayout = function(type, layoutName, recordTypes, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjectType", type, false); | |
if (!layoutName) { | |
layoutName = null; | |
} | |
var arg2 = new sforce.internal.Parameter("layoutName", layoutName, false); | |
if (!recordTypes) { | |
recordTypes = []; | |
} | |
var arg3 = new sforce.internal.Parameter("recordTypeIds", recordTypes, true); | |
return this.invoke("describeLayout", [arg1, arg2, arg3], false, callback); | |
}; | |
sforce.Connection.prototype.describeAvailableQuickActions = function(parentType, callback) { | |
var arg = new sforce.internal.Parameter("parentType", parentType, false); | |
return this.invoke("describeAvailableQuickActions", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.describeQuickActions = function(quickActionNames, callback) { | |
var arg = new sforce.internal.Parameter("quickActionNames", quickActionNames, true); | |
return this.invoke("describeQuickActions", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.performQuickActions = function(quickActions, callback) { | |
var arg = new sforce.internal.Parameter("quickActions", quickActions, true); | |
return this.invoke("performQuickActions", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.describeCompactLayouts = function(type, recordTypes, callback) { | |
var arg = new sforce.internal.Parameter("sObjectType", type, false); | |
if (!recordTypes) { | |
recordTypes = []; | |
} | |
var arg2 = new sforce.internal.Parameter("recordTypeIds", recordTypes, true); | |
return this.invoke("describeCompactLayouts", [arg, arg2], false, callback); | |
}; | |
sforce.Connection.prototype.describePathAssistants = function(type, picklistValue, recordTypes, callback) { | |
var arg = new sforce.internal.Parameter("sObjectType", type, false); | |
if (!picklistValue) { | |
picklistValue = null; | |
} | |
var arg2 = new sforce.internal.Parameter("picklistValue", picklistValue, false); | |
if (!recordTypes) { | |
recordTypes = []; | |
} | |
var arg3 = new sforce.internal.Parameter("recordTypeIds", recordTypes, true); | |
return this.invoke("describePathAssistants", [arg, arg2, arg3], false, callback); | |
}; | |
sforce.Connection.prototype.describePrimaryCompactLayouts = function(sObjectTypes, callback) { | |
var arg = new sforce.internal.Parameter("sObjectTypes", sObjectTypes, true); | |
return this.invoke("describePrimaryCompactLayouts", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.describeApprovalLayout = function(type, approvalProcessNames, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjectType", type, false); | |
if (!approvalProcessNames) { | |
approvalProcessNames = []; | |
} | |
var arg2 = new sforce.internal.Parameter("approvalProcessNames", approvalProcessNames, true); | |
return this.invoke("describeApprovalLayout", [arg1, arg2], false, callback); | |
}; | |
sforce.Connection.prototype.describeSObjectListViews = function(type, recentlyViewed, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjectType", type, false); | |
var arg2 = new sforce.internal.Parameter("recentlyViewed", recentlyViewed, false); | |
var arg3 = new sforce.internal.Parameter("isSoqlCompatible", isSoqlCompatible, false); | |
var arg4 = new sforce.internal.Parameter("limit", limit, false); | |
var arg5 = new sforce.internal.Parameter("offset", offset, false); | |
return this.invoke("describeSObjectListViews", [arg1, arg2, arg3, arg4, arg5], true, callback); | |
}; | |
sforce.Connection.prototype.describeTabs = function(uiType, callback) { | |
var args = []; | |
if (uiType) { | |
// As of 200, the internal interface supports specifying a UiType | |
var arg1 = new sforce.internal.Parameter("uiType", uiType, false); | |
args = [arg1]; | |
} | |
return this.invoke("describeTabs", args, true, callback); | |
}; | |
sforce.Connection.prototype.describeAllTabs = function(callback) { | |
return this.invoke("describeAllTabs", [], true, callback); | |
}; | |
sforce.Connection.prototype.describeAppMenu = function(appMenuType, networkId, callback) { | |
var arg1 = new sforce.internal.Parameter("appMenuType", appMenuType, false); | |
var arg2 = new sforce.internal.Parameter("networkId", networkId, false); | |
return this.invoke("describeAppMenu", [arg1, arg2], true, callback); | |
}; | |
sforce.Connection.prototype.describeFlexiPages = function(flexipageDevName, callback) { | |
var arg1 = new sforce.internal.Parameter("FlexiPage", flexipageDevName, false); | |
return this.invoke("describeFlexiPages", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.describeTheme = function(callback) { | |
return this.invoke("describeTheme", [], true, callback); | |
}; | |
sforce.Connection.prototype.describeGlobalTheme = function(callback) { | |
return this.invoke("describeGlobalTheme", [], true, callback); | |
}; | |
sforce.Connection.prototype.describeSoftphoneLayout = function(callback) { | |
return this.invoke("describeSoftphoneLayout", [], false, callback); | |
}; | |
sforce.Connection.prototype.describeMiniLayout = function (type, recordTypeIds, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjectType", type, false); | |
var arg2 = new sforce.internal.Parameter("recordTypeIds", recordTypeIds, true); | |
return this.invoke("describeMiniLayout", [arg1, arg2], false, callback); | |
}; | |
sforce.Connection.prototype.describeSearchScopeOrder = function(callback) { | |
return this.invoke("describeSearchScopeOrder", [], true, callback); | |
}; | |
sforce.Connection.prototype.create = function (sobjects, callback) { | |
var arg = new sforce.internal.Parameter("sObjects", sobjects, true); | |
return this.invoke("create", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.update = function (sobjects, callback) { | |
var arg = new sforce.internal.Parameter("sObjects", sobjects, true); | |
return this.invoke("update", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.upsert = function (externalIDFieldName, sobjects, callback) { | |
var arg1 = new sforce.internal.Parameter("externalIDFieldName", externalIDFieldName, false); | |
var arg2 = new sforce.internal.Parameter("sObjects", sobjects, true); | |
return this.invoke("upsert", [arg1, arg2], true, callback); | |
}; | |
sforce.Connection.prototype.deleteIds = function (ids, callback) { | |
var arg = new sforce.internal.Parameter("ids", ids, true); | |
return this.invoke("delete", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.impersonateUser = function (ids, callback) { | |
var arg = new sforce.internal.Parameter("ids", ids, true); | |
return this.invoke("impersonateUser", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.query = function(queryString, callback) { | |
var arg = new sforce.internal.Parameter("queryString", queryString, false); | |
return this.invoke("query", [arg], false, callback); | |
}; | |
sforce.Connection.prototype.queryAll = function(queryString, callback) { | |
var arg = new sforce.internal.Parameter("queryString", queryString, false); | |
return this.invoke("queryAll", [arg], false, callback); | |
}; | |
sforce.Connection.prototype.queryMore = function(queryLocator, callback) { | |
var arg = new sforce.internal.Parameter("queryLocator", queryLocator, false); | |
return this.invoke("queryMore", [arg], false, callback); | |
}; | |
sforce.Connection.prototype.retrieve = function(fieldList, sObjectType, ids, callback) { | |
var arg1 = new sforce.internal.Parameter("fieldList", fieldList, false); | |
var arg2 = new sforce.internal.Parameter("sObjectType", sObjectType, false); | |
var arg3 = new sforce.internal.Parameter("ids", ids, true); | |
return this.invoke("retrieve", [arg1, arg2, arg3], true, callback); | |
}; | |
sforce.Connection.prototype.match = function(sobjects, matchOptions, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjects", sobjects, true); | |
var arg2 = new sforce.internal.Parameter("matchOptions", matchOptions, false); | |
return this.invoke("match", [arg1, arg2], false, callback); | |
}; | |
sforce.Connection.prototype.getAccessInfo = function(callback) { | |
return this.invoke("getAccessInfo", [], false, callback); | |
}; | |
sforce.Connection.prototype.getUserInfo = function(callback) { | |
return this.invoke("getUserInfo", [], false, callback); | |
}; | |
sforce.Connection.prototype.resetPassword = function(userId, callback) { | |
var arg1 = new sforce.internal.Parameter("userId", userId, false); | |
return this.invoke("resetPassword", [arg1], false, callback); | |
}; | |
sforce.Connection.prototype.setPassword = function(userId, password, callback) { | |
var arg1 = new sforce.internal.Parameter("userId", userId, false); | |
var arg2 = new sforce.internal.Parameter("password", password, false); | |
return this.invoke("setPassword", [arg1, arg2], false, callback); | |
}; | |
sforce.Connection.prototype.search = function(searchString, callback) { | |
var arg1 = new sforce.internal.Parameter("searchString", searchString, false); | |
return this.invoke("search", [arg1], false, callback); | |
}; | |
sforce.Connection.prototype.getDeleted = function(sObjectType, startDate, endDate, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjectType", sObjectType, false); | |
var arg2 = new sforce.internal.Parameter("startDate", startDate, false); | |
var arg3 = new sforce.internal.Parameter("endDate", endDate, false); | |
return this.invoke("getDeleted", [arg1, arg2, arg3], false, callback); | |
}; | |
sforce.Connection.prototype.getUpdated = function(sObjectType, startDate, endDate, callback) { | |
var arg1 = new sforce.internal.Parameter("sObjectType", sObjectType, false); | |
var arg2 = new sforce.internal.Parameter("startDate", startDate, false); | |
var arg3 = new sforce.internal.Parameter("endDate", endDate, false); | |
return this.invoke("getUpdated", [arg1, arg2, arg3], false, callback); | |
}; | |
sforce.Connection.prototype.getServerTimestamp = function(callback) { | |
return this.invoke("getServerTimestamp", [], false, callback); | |
}; | |
sforce.Connection.prototype.convertLead = function(leadConverts, callback) { | |
var arg1 = new sforce.internal.Parameter("leadConverts", leadConverts, true); | |
return this.invoke("convertLead", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.merge = function(mergeRequest, callback) { | |
var arg1 = new sforce.internal.Parameter("request", mergeRequest, true); | |
return this.invoke("merge", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.undelete = function(ids, callback) { | |
var arg1 = new sforce.internal.Parameter("ids", ids, true); | |
return this.invoke("undelete", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.process = function(actions, callback) { | |
var arg1 = new sforce.internal.Parameter("actions", actions, true); | |
return this.invoke("process", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.sendEmail = function(messages, callback) { | |
var arg1 = new sforce.internal.Parameter("messages", messages, true); | |
return this.invoke("sendEmail", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.emptyRecycleBin = function(ids, callback) { | |
var arg1 = new sforce.internal.Parameter("ids", ids, true); | |
return this.invoke("emptyRecycleBin", [arg1], true, callback); | |
}; | |
sforce.Connection.prototype.invalidateSessions = function(sessionIds, callback) { | |
var arg = new sforce.internal.Parameter("sessionIds", sessionIds, true); | |
return this.invoke("invalidateSessions", [arg], true, callback); | |
}; | |
sforce.Connection.prototype.logout = function(callback) { | |
return this.invoke("logout", [], true, callback); | |
}; | |
sforce.Connection.prototype.remoteFunction = function(args) { | |
if (!args.url) { | |
throw "url not defined"; | |
} | |
if (!args.onSuccess) { | |
throw "onSuccess method not defined"; | |
} | |
if (!args.method) { | |
args.method = "GET"; | |
} | |
if (!args.mimeType) { | |
args.mimeType = "text/plain"; | |
} | |
if (typeof(args.async) == 'undefined') { | |
args.async = true; | |
} | |
if (typeof(args.cache) == 'undefined') { | |
args.cache = false; | |
} | |
if (!(args.mimeType == "text/plain" || | |
args.mimeType == "text/xml")) { | |
throw "Unknown mime type " + args.mimeType; | |
} | |
if (sforce.debug.trace) { | |
sforce.debug.log("Open connection to ... " + args.url); | |
} | |
var request = new sforce.Transport().newConnection(); | |
var proxyUrl = (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/proxy") : "/services/proxy"; | |
if (args.cache) { | |
proxyUrl = proxyUrl + "?end-point-url=" + args.url; | |
} else { | |
proxyUrl = proxyUrl + "?no-cache=" + new Date().getTime(); | |
} | |
request.open(args.method, proxyUrl, args.async); | |
if (args.requestHeaders) { | |
for (var k in args.requestHeaders) { | |
if (typeof args.requestHeaders[k] != "function") { | |
request.setRequestHeader(k, args.requestHeaders[k]); | |
} | |
} | |
} | |
request.setRequestHeader("SalesforceProxy-Endpoint", args.url); | |
request.setRequestHeader("SalesforceProxy-SID", this.sessionId); | |
if (args.async) { | |
request.onreadystatechange = _remoteFunctionCallback; | |
} | |
if (sforce.debug.trace) { | |
sforce.debug.log("Sending ..."); | |
} | |
if (args.requestData) { | |
request.send(args.requestData); | |
} else { | |
request.send(null); | |
} | |
if (sforce.debug.trace) { | |
sforce.debug.log("Done Sending ..."); | |
} | |
if (!args.async) { | |
_remoteFunctionCallback(); | |
} | |
function _remoteFunctionCallback() { | |
if (sforce.debug.trace) { | |
sforce.debug.log("callback called ..."); | |
} | |
if (request.readyState == 4) { | |
if (request.status == 200) { | |
if (args.mimeType == "text/plain") { | |
args.onSuccess(request.responseText, request); | |
} else if (args.mimeType == "text/xml") { | |
if (!request.responseXML || !request.responseXML.documentElement) { | |
throw "Response not text/xml mime type: " + request.responseText; | |
} | |
args.onSuccess(request.responseXML.documentElement, request); | |
} else { | |
throw "unsupported mime type: " + args.mimeType; | |
} | |
} else { | |
if (args.onFailure) { | |
args.onFailure(request.responseText, request); | |
} else { | |
sforce.debug.log(request.responseText); | |
} | |
} | |
} | |
} | |
}; | |
sforce.Connection.prototype.writeHeader = function(writer, headerNs) { | |
writer.startHeader(); | |
writer.writeNamespace(headerNs, "sfns"); | |
if (this.sessionId !== null) { | |
writer.writeStartElement("SessionHeader", headerNs); | |
writer.writeNameValueNode("sessionId", this.sessionId); | |
writer.writeEndElement("SessionHeader", headerNs); | |
} | |
if (typeof(this.organizationId) !== "undefined") { | |
throw "Use sforce.connection.loginScopeHeader.organizationId instead of sforce.connection.organizationId"; | |
} | |
if (this.loginScopeHeader !== null) { | |
writer.writeStartElement("LoginScopeHeader", headerNs); | |
if (this.loginScopeHeader.organizationId !== null) { | |
writer.writeNameValueNode("organizationId", this.loginScopeHeader.organizationId); | |
} | |
if (this.loginScopeHeader.portalId !== null) { | |
writer.writeNameValueNode("portalId", this.loginScopeHeader.portalId); | |
} | |
writer.writeEndElement("LoginScopeHeader", headerNs); | |
} | |
if (this.client !== null || this.defaultNamespace !== null) { | |
writer.writeStartElement("CallOptions", headerNs); | |
if (this.client !== null) { | |
writer.writeNameValueNode("client", this.client); | |
} | |
if (this.defaultNamespace !== null) { | |
writer.writeNameValueNode("defaultNamespace", this.defaultNamespace); | |
} | |
writer.writeEndElement("CallOptions", headerNs); | |
} | |
if (this.batchSize !== null) { | |
writer.writeStartElement("QueryOptions", headerNs); | |
writer.writeNameValueNode("batchSize", this.batchSize); | |
writer.writeEndElement("QueryOptions", headerNs); | |
} | |
if (this.allowFieldTruncation !== null) { | |
writer.writeStartElement("AllowFieldTruncationHeader", headerNs); | |
writer.writeNameValueNode("allowFieldTruncation", this.allowFieldTruncation); | |
writer.writeEndElement("AllowFieldTruncationHeader", headerNs); | |
} | |
if (this.disableFeedTracking !== null) { | |
writer.writeStartElement("DisableFeedTrackingHeader", headerNs); | |
writer.writeNameValueNode("disableFeedTracking", this.disableFeedTracking); | |
writer.writeEndElement("DisableFeedTrackingHeader", headerNs); | |
} | |
if (this.streamingEnabled !== null) { | |
writer.writeStartElement("StreamingEnabledHeader", headerNs); | |
writer.writeNameValueNode("StreamingEnabled", this.streamingEnabled); | |
writer.writeEndElement("StreamingEnabledHeader", headerNs); | |
} | |
if (this.allOrNone !== null) { | |
writer.writeStartElement("AllOrNoneHeader", headerNs); | |
writer.writeNameValueNode("allOrNone", this.allOrNone); | |
writer.writeEndElement("AllOrNoneHeader", headerNs); | |
} | |
if (this.updateMru !== null) { | |
writer.writeStartElement("MruHeader", headerNs); | |
writer.writeNameValueNode("updateMru", this.updateMru); | |
writer.writeEndElement("MruHeader", headerNs); | |
} | |
if (this.emailHeader !== null) { | |
writer.writeStartElement("EmailHeader", headerNs); | |
if (this.emailHeader.triggerAutoResponseEmail) { | |
writer.writeNameValueNode("triggerAutoResponseEmail", this.emailHeader.triggerAutoResponseEmail); | |
} | |
if (this.emailHeader.triggerOtherEmail) { | |
writer.writeNameValueNode("triggerOtherEmail", this.emailHeader.triggerOtherEmail); | |
} | |
if (this.emailHeader.triggerUserEmail) { | |
writer.writeNameValueNode("triggerUserEmail", this.emailHeader.triggerUserEmail); | |
} | |
writer.writeEndElement("EmailHeader", headerNs); | |
} | |
if (this.assignmentRuleHeader !== null) { | |
writer.writeStartElement("AssignmentRuleHeader", headerNs); | |
if (this.assignmentRuleHeader.assignmentRuleId) { | |
writer.writeNameValueNode("assignmentRuleId", this.assignmentRuleHeader.assignmentRuleId); | |
} | |
if (this.assignmentRuleHeader.useDefaultRule) { | |
writer.writeNameValueNode("useDefaultRule", this.assignmentRuleHeader.useDefaultRule); | |
} | |
writer.writeEndElement("AssignmentRuleHeader", headerNs); | |
} | |
if (this.transferToUserId !== null) { | |
writer.writeStartElement("UserTerritoryDeleteHeader", headerNs); | |
writer.writeNameValueNode("transferToUserId", this.transferToUserId); | |
writer.writeEndElement("UserTerritoryDeleteHeader", headerNs); | |
} | |
if (this.duplicateRuleHeader !== null) { | |
writer.writeStartElement("DuplicateRuleHeader", headerNs); | |
if (this.duplicateRuleHeader.allowSave) { | |
writer.writeNameValueNode("allowSave", this.duplicateRuleHeader.allowSave); | |
} | |
if (this.duplicateRuleHeader.includeRecordDetails) { | |
writer.writeNameValueNode("includeRecordDetails", this.duplicateRuleHeader.includeRecordDetails); | |
} | |
if (this.duplicateRuleHeader.runAsCurrentUser) { | |
writer.writeNameValueNode("runAsCurrentUser", this.duplicateRuleHeader.runAsCurrentUser); | |
} | |
writer.writeEndElement("DuplicateRuleHeader", headerNs); | |
} | |
if (this.debuggingHeader !== null) { | |
writer.writeStartElement("DebuggingHeader", headerNs); | |
// Write out old style if specified | |
if (this.debuggingHeader.debugLevel) { | |
writer.writeNameValueNode("debugLevel", this.debuggingHeader.debugLevel); | |
} | |
// Write out the new style debugging categories and levels | |
if (this.debuggingHeader.debugCategories) { | |
var categories = this.debuggingHeader.debugCategories; | |
for (var i = 0; i < categories.length; i++) { | |
var catAndLevel = categories[i].split(","); | |
if (catAndLevel.length == 2) { | |
writer.writeStartElement("categories"); | |
writer.writeNameValueNode("category", catAndLevel[0]); | |
writer.writeNameValueNode("level", catAndLevel[1]); | |
writer.writeEndElement("categories"); | |
} | |
} | |
} | |
writer.writeEndElement("DebuggingHeader", headerNs); | |
} | |
writer.endHeader(); | |
}; | |
sforce.Connection.prototype.namespaceMap = [ | |
{ns:sforce.Connection.prototype.sforceNs, prefix:null}, | |
{ns:sforce.Connection.prototype.sobjectNs, prefix:"ns1"} | |
]; | |
sforce.Connection.prototype.invoke = function(method, args, isArray, callback) { | |
return this._invoke(method, args, isArray, callback, this.namespaceMap, this.serverUrl, this.sforceNs, this.sobjectNs); | |
}; | |
sforce.Connection.prototype._invoke = function(method, args, isArray, callback, namespaces, url, headerNs, sobjectNs) { | |
if (callback) { | |
if (typeof(callback) == "function") { | |
} else { | |
if (!callback.onSuccess) { | |
throw "onSuccess not defined in the callback"; | |
} | |
if (!callback.onFailure) { | |
throw "onFailure not defined in the callback"; | |
} | |
} | |
} | |
var writer = new sforce.XmlWriter(); | |
writer.startEnvelope(); | |
this.writeHeader(writer, headerNs); | |
writer.startBody(); | |
writer.writeStartElement(method); | |
for (var i = 0; i<namespaces.length; i++) { | |
writer.writeNamespace(namespaces[i].ns, namespaces[i].prefix); | |
} | |
for (var i = 0; i < args.length; i++) { | |
var arg = args[i]; | |
if (typeof(arg.value) === "undefined") { | |
throw "arg " + i + " '" + arg.name + "' not specified"; | |
} | |
if (arg.value !== null) { | |
if (arg.isArray && !arg.value.push) { | |
throw "arg " + i + " '" + arg.name + "' is an array. But passed in value is not an array"; | |
} | |
if (!arg.isArray && arg.value.push) { | |
throw "arg " + i + " '" + arg.name + "' is not an array. But passed in value is an array"; | |
} | |
} | |
if (arg.value === null) { | |
this.writeOne(writer, arg.name, null, sobjectNs); | |
} else if (arg.value.push) { //this is an array | |
for (var j = 0; j < arg.value.length; j++) { | |
var obj = arg.value[j]; | |
if (!obj) { | |
throw "Array element at " + j + " is null."; | |
} | |
this.writeOne(writer, arg.name, obj, sobjectNs); | |
} | |
} else { | |
this.writeOne(writer, arg.name, arg.value, sobjectNs); | |
} | |
} | |
writer.writeEndElement(method); | |
writer.endBody(); | |
writer.endEnvelope(); | |
if (sforce.debug.trace) { | |
sforce.debug.log("Request: server- " + url); | |
sforce.debug.logXml(writer.toString()); | |
} | |
var transport = new sforce.SoapTransport(); | |
return transport.send(url, writer, isArray, callback); | |
}; | |
/* QueryResultIterator */ | |
sforce.QueryResultIterator = function(queryResult) { | |
this.queryResult = queryResult; | |
this.index = 0; | |
this.records = this.queryResult.getArray("records"); | |
}; | |
sforce.QueryResultIterator.prototype.hasNext = function() { | |
if (this.records.length > this.index) { | |
return true; | |
} | |
if (this.queryResult.queryLocator !== null) { | |
this.queryResult = sforce.connection.queryMore(this.queryResult.queryLocator); | |
this.records = this.queryResult.getArray("records"); | |
this.index = 0; | |
} | |
if (this.records.length > this.index) { | |
return true; | |
} else { | |
return false; | |
} | |
}; | |
sforce.QueryResultIterator.prototype.next = function() { | |
if (this.records.length > this.index) { | |
var result = this.records[this.index]; | |
this.index++; | |
return result; | |
} else { | |
throw "Index out of bound : " + this.index; | |
} | |
}; | |
/* Email */ | |
sforce.Email = function() { | |
}; | |
sforce.Email.prototype = new sforce.Xml("messages"); | |
sforce.MassEmailMessage = function() { | |
}; | |
sforce.MassEmailMessage.prototype = new sforce.Xml("messages"); | |
sforce.MassEmailMessage.prototype._xsiType = "MassEmailMessage"; | |
sforce.SingleEmailMessage = function() { | |
}; | |
sforce.SingleEmailMessage.prototype = new sforce.Xml("messages"); | |
sforce.SingleEmailMessage.prototype._xsiType = "SingleEmailMessage"; | |
/* ProcessRequest */ | |
sforce.ProcessRequest = function() { | |
}; | |
sforce.ProcessRequest.prototype = new sforce.Xml("actions"); | |
sforce.ProcessSubmitRequest = function() { | |
}; | |
sforce.ProcessSubmitRequest.prototype = new sforce.Xml("actions"); | |
sforce.ProcessSubmitRequest.prototype._xsiType = "ProcessSubmitRequest"; | |
sforce.ProcessWorkitemRequest = function() { | |
}; | |
sforce.ProcessWorkitemRequest.prototype = new sforce.Xml("actions"); | |
sforce.ProcessWorkitemRequest.prototype._xsiType = "ProcessWorkitemRequest"; | |
/* set up connection */ | |
sforce.connection = new sforce.Connection(); | |
var UserContext = (typeof window.UserContext != "undefined") ? window.UserContext : { | |
siteUrlPrefix : "", | |
getUrl : function (url) { | |
// fix URL for sites with prefixes | |
if (typeof url == "undefined" || typeof UserContext.siteUrlPrefix == "undefined" || !UserContext.siteUrlPrefix) | |
return url; | |
if (url.indexOf('/') != 0) | |
return url; | |
if(url.indexOf(UserContext.siteUrlPrefix) == 0) | |
return url; | |
return UserContext.siteUrlPrefix + url; | |
} | |
}; | |
if (typeof(__sfdcSiteUrlPrefix) != "undefined") { | |
UserContext.siteUrlPrefix = __sfdcSiteUrlPrefix; | |
} | |
sforce.connection.serverUrl = (typeof window.UserContext != "undefined") ? UserContext.getUrl("/services/Soap/u/37.0") : "/services/Soap/u/37.0"; | |
if (typeof(__sfdcSessionId) != "undefined") { | |
sforce.connection.sessionId = __sfdcSessionId; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment