11
22var datajsPatch ;
3- datajsPatch = function ( ) {
3+ datajsPatch = function ( OData ) {
44 // just datajs-1.1.0
55 if ( OData && OData . jsonHandler && 'useJsonLight' in OData . jsonHandler && typeof datajs === 'object' && ! datajs . version ) {
66 $data . Trace . log ( '!!!!!!! - patch datajs 1.1.0' ) ;
@@ -25,11 +25,6 @@ datajsPatch = function () {
2525$C ( '$data.storageProviders.oData.oDataProvider' , $data . StorageProviderBase , null ,
2626{
2727 constructor : function ( cfg , ctx ) {
28- if ( typeof OData === 'undefined' ) {
29- Guard . raise ( new Exception ( 'datajs is required' , 'Not Found!' ) ) ;
30- }
31- datajsPatch ( ) ;
32-
3328 this . SqlCommands = [ ] ;
3429 this . context = ctx ;
3530 this . providerConfiguration = $data . typeSystem . extend ( {
@@ -48,6 +43,21 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
4843 UpdateMethod : 'PATCH'
4944 } , cfg ) ;
5045
46+ if ( this . providerConfiguration . maxDataServiceVersion === "4.0" ) {
47+ if ( typeof odatajs === 'undefined' || typeof odatajs . oData === 'undefined' ) {
48+ Guard . raise ( new Exception ( 'odatajs is required' , 'Not Found!' ) ) ;
49+ } else {
50+ this . oData = odatajs . oData
51+ }
52+ } else {
53+ if ( typeof OData === 'undefined' ) {
54+ Guard . raise ( new Exception ( 'datajs is required' , 'Not Found!' ) ) ;
55+ } else {
56+ this . oData = OData ;
57+ datajsPatch ( this . oData ) ;
58+ }
59+ }
60+
5161 this . fixkDataServiceVersions ( cfg ) ;
5262
5363 if ( this . context && this . context . _buildDbType_generateConvertToFunction && this . buildDbType_generateConvertToFunction ) {
@@ -94,7 +104,7 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
94104 //}
95105
96106 this . context . prepareRequest . call ( this , requestData ) ;
97- OData . request . apply ( this , requestData ) ;
107+ this . oData . request . apply ( this , requestData ) ;
98108 } else {
99109 callBack . success ( that . context ) ;
100110 }
@@ -174,30 +184,31 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
174184 var schema = this . context ;
175185
176186 var that = this ;
187+ var countProperty = "__count" ;
188+ if ( this . providerConfiguration . maxDataServiceVersion === "4.0" ) {
189+ countProperty = "@odata.count" ;
190+ }
191+
177192 var requestData = [
178193 {
179194 requestUri : this . providerConfiguration . oDataServiceHost + sql . queryText ,
180195 method : sql . method ,
181196 data : sql . postData ,
182197 headers : {
183- MaxDataServiceVersion : this . providerConfiguration . maxDataServiceVersion
184198 }
185199 } ,
186200 function ( data , textStatus , jqXHR ) {
201+
187202 if ( ! data && textStatus . body && ! sql . isBatchExecuteQuery ) data = JSON . parse ( textStatus . body ) ;
188203 if ( callBack . success ) {
189204 var processSuccess = function ( query , data , sql ) {
190205 query . rawDataList = typeof data === 'string' ? [ { cnt : Container . convertTo ( data , $data . Integer ) } ] : data ;
191- if ( sql . withInlineCount && typeof data === 'object' && ( typeof data . __count !== 'undefined' || ( 'd' in data && typeof data . d . __count !== 'undefined' ) ) ) {
192- query . __count = new Number ( typeof data . __count !== 'undefined' ? data . __count : data . d . __count ) . valueOf ( ) ;
206+ if ( sql . withInlineCount && typeof data === 'object' && ( typeof data [ countProperty ] !== 'undefined' || ( 'd' in data && typeof data . d [ countProperty ] !== 'undefined' ) ) ) {
207+ query . __count = new Number ( typeof data [ countProperty ] !== 'undefined' ? data [ countProperty ] : data . d [ countProperty ] ) . valueOf ( ) ;
193208 }
194209 }
195210
196211 if ( sql . isBatchExecuteQuery ) {
197- if ( data . __batchResponses . length !== sql . subQueries . length ) {
198- return callBack . error ( new Exception ( "Batch response count failed" , "Http request failed!" , textStatus ) ) ;
199- }
200-
201212 query . rawDataList = sql . subQueries ;
202213 for ( var i = 0 ; i < data . __batchResponses . length ; i ++ ) {
203214 var resp = data . __batchResponses [ i ] ;
@@ -223,10 +234,14 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
223234 function ( error ) {
224235 callBack . error ( that . parseError ( error , arguments ) ) ;
225236 } ,
226- sql . isBatchExecuteQuery ? OData . batchHandler : undefined
237+ sql . isBatchExecuteQuery ? this . oData . batchHandler : undefined
227238 ] ;
228239
229- if ( this . providerConfiguration . dataServiceVersion ) {
240+ if ( this . providerConfiguration . maxDataServiceVersion && this . providerConfiguration . maxDataServiceVersion !== "4.0" ) {
241+ requestData [ 0 ] . headers . MaxDataServiceVersion = this . providerConfiguration . maxDataServiceVersion ;
242+ }
243+
244+ if ( this . providerConfiguration . dataServiceVersion && this . providerConfiguration . maxDataServiceVersion !== "4.0" ) {
230245 requestData [ 0 ] . headers . DataServiceVersion = this . providerConfiguration . dataServiceVersion ;
231246 }
232247
@@ -246,7 +261,7 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
246261 this . context . prepareRequest . call ( this , requestData ) ;
247262 //$data.ajax(requestData);
248263 //OData.request(requestData, requestData.success, requestData.error);
249- OData . request . apply ( this , requestData ) ;
264+ this . oData . request . apply ( this , requestData ) ;
250265 } ,
251266 _compile : function ( queryable , params ) {
252267 var compiler = new $data . storageProviders . oData . oDataCompiler ( ) ;
@@ -285,10 +300,12 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
285300 request = {
286301 requestUri : this . providerConfiguration . oDataServiceHost + '/' ,
287302 headers : {
288- MaxDataServiceVersion : this . providerConfiguration . maxDataServiceVersion
289303 }
290304 } ;
291- if ( this . providerConfiguration . dataServiceVersion ) {
305+ if ( this . providerConfiguration . maxDataServiceVersion && this . providerConfiguration . maxDataServiceVersion !== "4.0" ) {
306+ request . headers . MaxDataServiceVersion = this . providerConfiguration . maxDataServiceVersion ;
307+ }
308+ if ( this . providerConfiguration . dataServiceVersion && this . providerConfiguration . maxDataServiceVersion !== "4.0" ) {
292309 request . headers . DataServiceVersion = this . providerConfiguration . dataServiceVersion ;
293310 }
294311 if ( typeof this . providerConfiguration . useJsonLight !== 'undefined' ) {
@@ -355,7 +372,7 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
355372 //}
356373
357374 this . context . prepareRequest . call ( this , requestData ) ;
358- OData . request . apply ( this , requestData ) ;
375+ this . oData . request . apply ( this , requestData ) ;
359376 } ,
360377 _saveBatch : function ( independentBlocks , index2 , callBack ) {
361378 var batchRequests = [ ] ;
@@ -365,9 +382,11 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
365382 convertedItem . push ( independentBlocks [ index ] [ i ] . data ) ;
366383 var request = { } ;
367384 request . headers = {
368- "Content-Id" : convertedItem . length ,
369- MaxDataServiceVersion : this . providerConfiguration . maxDataServiceVersion
385+ "Content-Id" : convertedItem . length
370386 } ;
387+ if ( this . providerConfiguration . maxDataServiceVersion != "4.0" ) {
388+ request . headers . MaxDataServiceVersion = this . providerConfiguration . maxDataServiceVersion ;
389+ }
371390 switch ( independentBlocks [ index ] [ i ] . data . entityState ) {
372391 case $data . EntityState . Unchanged : continue ; break ;
373392 case $data . EntityState . Added :
@@ -391,7 +410,10 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
391410 default : Guard . raise ( new Exception ( "Not supported Entity state" ) ) ;
392411 }
393412
394- if ( this . providerConfiguration . dataServiceVersion ) {
413+ if ( this . providerConfiguration . maxDataServiceVersion && this . providerConfiguration . maxDataServiceVersion !== "4.0" ) {
414+ request . headers . MaxDataServiceVersion = this . providerConfiguration . maxDataServiceVersion ;
415+ }
416+ if ( this . providerConfiguration . dataServiceVersion && this . providerConfiguration . maxDataServiceVersion !== "4.0" ) {
395417 request . headers . DataServiceVersion = this . providerConfiguration . dataServiceVersion ;
396418 }
397419 batchRequests . push ( request ) ;
@@ -406,7 +428,6 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
406428 __batchRequests : [ { __changeRequests : batchRequests } ]
407429 } ,
408430 headers : {
409- MaxDataServiceVersion : this . providerConfiguration . maxDataServiceVersion
410431 }
411432 } , function ( data , response ) {
412433 if ( response . statusCode == 202 ) {
@@ -446,9 +467,12 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
446467
447468 } , function ( e ) {
448469 callBack . error ( that . parseError ( e ) ) ;
449- } , OData . batchHandler ] ;
470+ } , this . oData . batchHandler ] ;
450471
451- if ( this . providerConfiguration . dataServiceVersion ) {
472+ if ( this . providerConfiguration . maxDataServiceVersion && this . providerConfiguration . maxDataServiceVersion != "4.0" ) {
473+ requestData [ 0 ] . headers . MaxDataServiceVersion = this . providerConfiguration . maxDataServiceVersion ;
474+ }
475+ if ( this . providerConfiguration . dataServiceVersion && this . providerConfiguration . maxDataServiceVersion != "4.0" ) {
452476 requestData [ 0 ] . headers . DataServiceVersion = this . providerConfiguration . dataServiceVersion ;
453477 }
454478 if ( typeof this . providerConfiguration . useJsonLight !== 'undefined' ) {
@@ -462,7 +486,7 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
462486 //}
463487
464488 this . context . prepareRequest . call ( this , requestData ) ;
465- OData . request . apply ( this , requestData ) ;
489+ this . oData . request . apply ( this , requestData ) ;
466490 } ,
467491 reload_fromResponse : function ( item , data , response ) {
468492 var that = this ;
@@ -510,16 +534,43 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
510534 } , this ) ;
511535 } ,
512536
513- save_getInitData : function ( item , convertedItems ) {
537+ //save_getInitData: function (item, convertedItems) {
538+ // var self = this;
539+ // item.physicalData = this.context._storageModel.getStorageModel(item.data.getType()).PhysicalType.convertTo(item.data, convertedItems);
540+ // var serializableObject = {}
541+ // item.physicalData.getType().memberDefinitions.asArray().forEach(function (memdef) {
542+ // if (memdef.kind == $data.MemberTypes.navProperty || memdef.kind == $data.MemberTypes.complexProperty || (memdef.kind == $data.MemberTypes.property && !memdef.notMapped)) {
543+ // if (typeof memdef.concurrencyMode === 'undefined' && (memdef.key === true || item.data.entityState === $data.EntityState.Added || item.data.changedProperties.some(function (def) { return def.name === memdef.name; }))) {
544+ // var typeName = Container.resolveName(memdef.type);
545+ // var converter = self.fieldConverter.toDb[typeName];
546+ // serializableObject[memdef.name] = converter ? converter(item.physicalData[memdef.name]) : item.physicalData[memdef.name];
547+ // }
548+ // }
549+ // }, this);
550+ // return serializableObject;
551+ //},
552+ save_getInitData : function ( item , convertedItems , isComplex , isDeep ) {
514553 var self = this ;
515- item . physicalData = this . context . _storageModel . getStorageModel ( item . data . getType ( ) ) . PhysicalType . convertTo ( item . data , convertedItems ) ;
554+ if ( ! isComplex ) {
555+ item . physicalData = this . context . _storageModel . getStorageModel ( item . data . getType ( ) ) . PhysicalType . convertTo ( item . data , convertedItems ) ;
556+ } else {
557+ item . physicalData = item . data ;
558+ }
516559 var serializableObject = { }
517560 item . physicalData . getType ( ) . memberDefinitions . asArray ( ) . forEach ( function ( memdef ) {
518- if ( memdef . kind == $data . MemberTypes . navProperty || memdef . kind == $data . MemberTypes . complexProperty || ( memdef . kind == $data . MemberTypes . property && ! memdef . notMapped ) ) {
519- if ( typeof memdef . concurrencyMode === 'undefined' && ( memdef . key === true || item . data . entityState === $data . EntityState . Added || item . data . changedProperties . some ( function ( def ) { return def . name === memdef . name ; } ) ) ) {
520- var typeName = Container . resolveName ( memdef . type ) ;
521- var converter = self . fieldConverter . toDb [ typeName ] ;
522- serializableObject [ memdef . name ] = converter ? converter ( item . physicalData [ memdef . name ] ) : item . physicalData [ memdef . name ] ;
561+ if ( memdef . kind == $data . MemberTypes . complexProperty && item . physicalData [ memdef . name ] ) {
562+ serializableObject [ memdef . name ] = self . save_getInitData ( { data : item . physicalData [ memdef . name ] } , convertedItems , true , true ) ;
563+ }
564+ else if ( memdef . kind == $data . MemberTypes . navProperty || ( memdef . kind == $data . MemberTypes . property && ! memdef . notMapped ) ) {
565+ if ( isDeep || typeof memdef . concurrencyMode === 'undefined' && ( memdef . key === true || item . data . entityState === $data . EntityState . Added || ( item . data . changedProperties && item . data . changedProperties . some ( function ( def ) { return def . name === memdef . name ; } ) ) ) ) {
566+
567+ if ( memdef . kind == $data . MemberTypes . navProperty && item . physicalData [ memdef . name ] && this . providerConfiguration . maxDataServiceVersion === "4.0" ) {
568+ serializableObject [ memdef . name + "@odata.bind" ] = item . physicalData [ memdef . name ] . __metadata . uri ;
569+ } else {
570+ var typeName = Container . resolveName ( memdef . type ) ;
571+ var converter = self . fieldConverter . toDb [ typeName ] ;
572+ serializableObject [ memdef . name ] = converter ? converter ( item . physicalData [ memdef . name ] ) : item . physicalData [ memdef . name ] ;
573+ }
523574 }
524575 }
525576 } , this ) ;
0 commit comments