context.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * DevExtreme (data/odata/context.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var Class = require("../../core/class");
  11. var extend = require("../../core/utils/extend").extend;
  12. var typeUtils = require("../../core/utils/type");
  13. var each = require("../../core/utils/iterator").each;
  14. var errorsModule = require("../errors");
  15. var ODataStore = require("./store");
  16. var mixins = require("./mixins");
  17. var deferredUtils = require("../../core/utils/deferred");
  18. var when = deferredUtils.when;
  19. var Deferred = deferredUtils.Deferred;
  20. require("./query_adapter");
  21. var ODataContext = Class.inherit({
  22. ctor: function(options) {
  23. var that = this;
  24. that._extractServiceOptions(options);
  25. that._errorHandler = options.errorHandler;
  26. each(options.entities || [], function(entityAlias, entityOptions) {
  27. that[entityAlias] = new ODataStore(extend({}, options, {
  28. url: that._url + "/" + encodeURIComponent(entityOptions.name || entityAlias)
  29. }, entityOptions))
  30. })
  31. },
  32. get: function(operationName, params) {
  33. return this.invoke(operationName, params, "GET")
  34. },
  35. invoke: function(operationName, params, httpMethod) {
  36. params = params || {};
  37. httpMethod = (httpMethod || "POST").toLowerCase();
  38. var d = new Deferred;
  39. var url = this._url + "/" + encodeURIComponent(operationName);
  40. var payload;
  41. if (4 === this.version()) {
  42. if ("get" === httpMethod) {
  43. url = mixins.formatFunctionInvocationUrl(url, mixins.escapeServiceOperationParams(params, this.version()));
  44. params = null
  45. } else {
  46. if ("post" === httpMethod) {
  47. payload = params;
  48. params = null
  49. }
  50. }
  51. }
  52. when(this._sendRequest(url, httpMethod, mixins.escapeServiceOperationParams(params, this.version()), payload)).done(function(r) {
  53. if (typeUtils.isPlainObject(r) && operationName in r) {
  54. r = r[operationName]
  55. }
  56. d.resolve(r)
  57. }).fail(this._errorHandler).fail(errorsModule._errorHandler).fail(d.reject);
  58. return d.promise()
  59. },
  60. objectLink: function(entityAlias, key) {
  61. var store = this[entityAlias];
  62. if (!store) {
  63. throw errorsModule.errors.Error("E4015", entityAlias)
  64. }
  65. if (!typeUtils.isDefined(key)) {
  66. return null
  67. }
  68. return {
  69. __metadata: {
  70. uri: store._byKeyUrl(key, true)
  71. }
  72. }
  73. }
  74. }).include(mixins.SharedMethods);
  75. module.exports = ODataContext;
  76. module.exports.default = module.exports;