📄 dataservice.js
字号:
//----------------------------------------------------------
// Copyright (C) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------
// DataService.js
Type.registerNamespace("Sys.Data");Sys.Data.ActionResult=function(c,d,a,b){this._result=c;this._error=d;this._actionContext=a;this._operation=b};Sys.Data.ActionResult.prototype={get_result:function(){return this._result},get_error:function(){return this._error},get_actionContext:function(){return this._actionContext},get_operation:function(){return this._operation}};Sys.Data.ActionResult.registerClass("Sys.Data.ActionResult");Sys.Data.ActionSequence=function(a){this._dataService=a;this._actionQueue=[]};Sys.Data.ActionSequence.prototype={get_service:function(){return this._dataService},addInsertAction:function(d,a,b){var c=this._dataService;Array.enqueue(this._actionQueue,function(e){c.insert(d,a,Sys.Data.ActionSequence._genSuccessCallback(e),Sys.Data.ActionSequence._genFailureCallback(e),b)})},addUpdateAction:function(d,c,a){var b=this._dataService;Array.enqueue(this._actionQueue,function(e){b.update(d,c,Sys.Data.ActionSequence._genSuccessCallback(e),Sys.Data.ActionSequence._genFailureCallback(e),a)})},addRemoveAction:function(d,c,a){var b=this._dataService;Array.enqueue(this._actionQueue,function(e){b.remove(d,c,Sys.Data.ActionSequence._genSuccessCallback(e),Sys.Data.ActionSequence._genFailureCallback(e),a)})},clearActions:function(){Array.clear(this._actionQueue)},executeActions:function(b,c){var a={actionResultQueue:[],hasError:false,remainingActions:this._actionQueue};this._actionQueue=[];Array.enqueue(a.remainingActions,function(a){if(b)window.setTimeout(function(){b(a.actionResultQueue,a.hasError,c)},0)});Array.dequeue(a.remainingActions)(a)}};Sys.Data.ActionSequence._genSuccessCallback=function(a){return function(d,b,c){var e=new Sys.Data.ActionResult(d,null,b,c);Array.enqueue(a.actionResultQueue,e);Array.dequeue(a.remainingActions)(a)}};Sys.Data.ActionSequence._genFailureCallback=function(a){return function(d,b,c){a.hasError=true;var e=new Sys.Data.ActionResult(null,d,b,c);Array.enqueue(a.actionResultQueue,e);Array.dequeue(a.remainingActions)(a)}};Sys.Data.ActionSequence.registerClass("Sys.Data.ActionSequence");Sys.Data.DataService=function(a){this._serviceUri=a;this._timeout=0;this._defaultUserContext=null;this._defaultSucceededCallback=null;this._defaultFailedCallback=null};Sys.Data.DataService.prototype={get_serviceUri:function(){return this._serviceUri},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},get_defaultUserContext:function(){return this._defaultUserContext},set_defaultUserContext:function(a){this._defaultUserContext=a},get_defaultSucceededCallback:function(){return this._defaultSucceededCallback},set_defaultSucceededCallback:function(a){this._defaultSucceededCallback=a},get_defaultFailedCallback:function(){return this._defaultFailedCallback},set_defaultFailedCallback:function(a){this._defaultFailedCallback=a},query:function(a,b,c,d,e){var f=this._prepWebRequest(null,a,"GET",b,c,d,a,e);f.invoke()},loadProperty:function(a,b,c,f,g,h){var e=function(e,d,b){a[b]=e;if(!c)c=this._defaultSucceededCallback;if(c)c(a,d,b)},d;if(a[b]&&a[b].__metadata&&a[b].__metadata.uri)d=a[b].__metadata.uri;else if(a.__metadata&&a.__metadata.uri)d=a.__metadata.uri+"/"+b;else throw Error.create(Sys.Data.Res.dataServiceLoadPropertyUriNotPresent);var i=this._prepWebRequest(null,d,"GET",e,f,g,b,h);i.invoke()},insert:function(g,d,b,c,e,f){var a=this._prepWebRequest(null,d,"POST",b,c,e,"insert",f);a.set_body(Sys.Serialization.JavaScriptSerializer.serialize(g));a.get_headers()["Content-Type"]="application/json";a.invoke()},update:function(g,d,b,c,e,f){var a=this._prepWebRequest(g,d,"PUT",b,c,e,"update",f);a.get_headers()["Content-Type"]="application/json";a.invoke()},remove:function(a,c,d,e,f,g){if(!(a&&a.__metadata&&a.__metadata.uri||c))throw Error.create(Sys.Data.Res.dataServiceRemoveUriNotPresent);var b=this._prepWebRequest(a,c,"DELETE",this._cbReplaceResult(d,null),e,f,"remove",g);delete b.get_headers()["Content-Type"];b.set_body(null);b.invoke()},invoke:function(a,c,b,f,g,h,i){var e=new Sys.Data.QueryBuilder(a);for(key in b)e.get_queryParams()[encodeURIComponent(key)]=encodeURIComponent(b[key]);var d=this._prepWebRequest(null,e.toString(),c,f,g,h,a,i);if(c=="POST")d.get_headers()["X-Service-Post"]="true";d.invoke()},createActionSequence:function(){return new Sys.Data.ActionSequence(this)},_prepWebRequest:function(b,f,i,d,c,e,h,a){if(!f)f="";if(!a)a=new Sys.Net.WebRequest;a.set_url(Sys.Data.DataService._concatUris(this._serviceUri,f));a.set_httpVerb(i);a.set_timeout(this.get_timeout());var g=a.get_headers();g["Accept"]="application/json";if(b){a.set_body(Sys.Serialization.JavaScriptSerializer.serialize(b));g["Content-Type"]="application/json";if(b.__metadata&&b.__metadata.uri)a.set_url(b.__metadata.uri)}if(!d)d=this._defaultSucceededCallback;if(!c)c=this._defaultFailedCallback;if(!e)e=this._defaultUserContext;a.add_completed(function(b,a){Sys.Data.DataService._callbackHelper(b,a,d,c,e,h)});return a},_cbReplaceResult:function(a,b){if(!a)a=this._defaultSucceededCallback;return a?function(e,d,c){a(b,d,c)}:null}};Sys.Data.DataService._concatUris=function(a,b){if(a.endsWith("/"))a=a.substr(0,a.length-1);if(b.startsWith("/"))b=b.substr(1);return a+"/"+b};Sys.Data.DataService._callbackHelper=function(b,l,j,e,g,c){if(b.get_responseAvailable()){var d=b.get_statusCode();if(d==1223)d=204;var a=null;try{var f=b.getResponseHeader("Content-Type");if(f.startsWith("application/json"))a=b.get_object();else if(f.startsWith("text/xml"))a=b.get_xml();else a=b.get_responseData()}catch(m){}var k=b.getResponseHeader("jsonerror"),h=k==="true";if(h){if(a)a=new Sys.Data.DataServiceError(false,a.Message,a.StackTrace,a.ExceptionType)}else if(f.startsWith("application/json")){if(!a||typeof a.d==="undefined")throw Sys.Data.DataService._createFailedError(c,String.format("The data operation '{0}' returned invalid data. The JSON wrapper is incorrect.",c));a=a.d}if(d<200||d>=300||h){if(e){if(!a||!h)a=new Sys.Data.DataServiceError(false,String.format("The data operation '{0}' failed.",c),"","");a._statusCode=d;e(a,g,c)}}else if(j)j(a,g,c)}else{var i;if(b.get_timedOut())i=String.format("The data operation '{0}' timed out.",c);else i=String.format("The data operation '{0}' failed.",c);if(e)e(new Sys.Data.DataServiceError(b.get_timedOut(),i,"",""),g,c)}};Sys.Data.DataService.registerClass("Sys.Data.DataService");Sys.Data.DataServiceError=function(c,d,b,a){this._timedOut=c;this._message=d;this._stackTrace=b;this._exceptionType=a;this._statusCode=-1};Sys.Data.DataServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace},get_exceptionType:function(){return this._exceptionType}};Sys.Data.DataServiceError.registerClass("Sys.Data.DataServiceError");Sys.Data.QueryBuilder=function(a){this._queryparams={};this._uri=a;var b=a.indexOf("?");if(b>=0){this._uri=a.substr(0,b);var d=a.substr(b+1).split("&");for(var e in d){param=d[e];var c=param.indexOf("=");if(c>=0)this._queryparams[param.substr(0,c)]=param.substr(c+1);else this._queryparams[param]=""}}};Sys.Data.QueryBuilder.prototype={get_skip:function(){return this._getIntParam("$skip")},set_skip:function(a){this._setParam("$skip",a)},get_top:function(){return this._getIntParam("$top")},set_top:function(a){this._setParam("$top",a)},get_orderby:function(){return this._getStringParam("$orderby")},set_orderby:function(a){this._setParam("$orderby",a)},get_filter:function(){return this._getStringParam("$filter")},set_filter:function(a){this._setParam("$filter",a)},get_expand:function(){return this._getStringParam("$expand")},set_expand:function(a){this._setParam("$expand",a)},get_resourcePath:function(){return this._uri},get_queryParams:function(){return this._queryparams},toString:function(){var b=[];for(var a in this._queryparams)if(!Array.contains(Sys.Data.QueryBuilder._queryOptions,a)){var e=this._queryparams[a];if(e!=null)Array.add(b,{key:a,value:e})}for(var d in Sys.Data.QueryBuilder._queryOptions){var a=Sys.Data.QueryBuilder._queryOptions[d],e=this._queryparams[a];if(e!=null)Array.add(b,{key:a,value:e})}var c=new Sys.StringBuilder(this._uri),f=true;for(var d in b){c.append(f?"?":"&");c.append(b[d].key);c.append("=");c.append(b[d].value);f=false}return c.toString()},_setParam:function(b,a){if(a==null)delete this._queryparams[b];else this._queryparams[b]=a},_getStringParam:function(b){var a=this._queryparams[b];return a===undefined?null:a},_getIntParam:function(b){var a=parseInt(this._queryparams[b]);return isNaN(a)?null:a}};Sys.Data.QueryBuilder._queryOptions=["$filter","$orderby","$skip","$top"];Sys.Data.QueryBuilder.registerClass("Sys.Data.QueryBuilder");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -