Skip to content

OData Create

The ODataCreateCL class leverages the sap.ui.model.odata.v2.ODataModel to facilitate the handling of POST (CREATE) requests in a promisified manner.

Constructor

In order to utilise the functionality of ODataCreateCL, it is necessary to initialise the object.

Parameter Type Mandatory Default Value Description
controller sap.ui.core.mvc.Controller Yes The controller object (usually this object)
entityPath string Yes The name of the EntitySet. It can start with a "/" (slash)
modelName? string No undefined The name of the OData V2 model which can be found on the manifest.json file. Leave this parameter undefined if the name of the OData model = "" (empty string)

Tip for TypeScript

The ODataCreateCL<EntityT> is a generic class that can be initialized with a type containing the properties of the EntitySet specified as a parameter in the class constructor.

  • The EntityT type is used as the type for the data parameter of the setData(data: EntityT) method and as the return type for the getData(): EntityT method.
  • Additionally, the EntityT type is utilized as the return type for the create(): Promise<EntityT> method, which is employed to facilitate the POST request through the sap.ui.model.odata.v2.ODataModel.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import Controller from "sap/ui/core/mvc/Controller";
import ODataCreateCL from "ui5/antares/odata/v2/ODataCreateCL"; // Import the class

/**
 * @namespace your.apps.namespace
 */
export default class YourController extends Controller {
  public onInit() {

  }

  public async onCreateProduct() {
    // Initialize without a type
    const odata = new ODataCreateCL(this, "Products"); 
  }

  public async onCreateCategory() {
    // Initialize with a type
    const odata = new ODataCreateCL<ICategory>(this, "Categories"); 
  }

  public async onCreateCustomer() {
    // Initialize with a model name
    const odata = new ODataCreateCL(this, "Customers", "myODataModelName"); 
  }
}

interface ICategory {
  ID: string;
  name?: string;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "ui5/antares/odata/v2/ODataCreateCL" // Import the class
], 
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, ODataCreateCL) {
      "use strict";

      return Controller.extend("your.apps.namespace.YourController", {
        onInit: function () {

        },

        onCreateProduct: async function () {
          // Initialize
          const odata = new ODataCreateCL(this, "Products"); 
        },

        onCreateCategory: async function () {
          // Initialize with a model name
          const odata = new ODataCreateCL(this, "Categories", "myODataModelName");
        }
      });

    });

Set Data

To define the data that will be transmitted via the POST HTTP request body, the setData() method can be utilized.

Tip

It is also possible to set the data for the navigation properties (deep create).

Parameter Type Mandatory Description
data EntityT Yes The data that will be sent via the POST HTTP request body

Returns Description
EntityT Returns the value that was set using setData() method. Default value is undefined

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import Controller from "sap/ui/core/mvc/Controller";
import ODataCreateCL from "ui5/antares/odata/v2/ODataCreateCL"; // Import the class

/**
 * @namespace your.apps.namespace
 */
export default class YourController extends Controller {
  public onInit() {

  }

  public async onCreateProduct() {
    // Initialize with a type
    const odata = new ODataCreateCL<IProducts>(this, "Products"); 

    // set the http body
    odata.setData({
      ID: "b2f0013e-418f-42aa-9a24-3770fe17ce18",
      name: "Product Name",
      description: "Description",
      brand: "Brand",
      price: 999,
      currency: "EUR",
      quantityInStock: 15,
      categoryID: "eb7783a6-f30f-4f7d-b85c-f211eea54568",
      supplierID: "7734d25f-0d1e-4ab4-b8a8-cd201f29fd2f"
    });
  }

}

interface IProducts {
  ID: string;
  name: string;
  description: string;
  brand: string;
  price: number;
  currency: string;
  quantityInStock: number;
  categoryID: string;
  supplierID: string;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "ui5/antares/odata/v2/ODataCreateCL" // Import the class
], 
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, ODataCreateCL) {
      "use strict";

      return Controller.extend("your.apps.namespace.YourController", {
        onInit: function () {

        },

        onCreateProduct: async function () {
          // Initialize
          const odata = new ODataCreateCL(this, "Products"); 

          // set the http body
          odata.setData({
            ID: "b2f0013e-418f-42aa-9a24-3770fe17ce18",
            name: "Product Name",
            description: "Description",
            brand: "Brand",
            price: 999,
            currency: "EUR",
            quantityInStock: 15,
            categoryID: "eb7783a6-f30f-4f7d-b85c-f211eea54568",
            supplierID: "7734d25f-0d1e-4ab4-b8a8-cd201f29fd2f"
          });
        }
      });

    });

Create Request

To send a POST (Create) request through the OData V2 model, you can use the create() method.

Attention

It is a prerequisite that data be set using the setData() method before calling the create() method.

Info

  • The create() method runs asynchronously and can be awaited.
  • If the request is successful, the create() method will return the data of the newly created entity.

Warning

In the event of a failed POST request, the OData Create class will generate an error message. To ensure the error is identified and addressed, it is recommended to call the create() method within a try-catch block.

Error Type

In the event of a failed POST request, the object generated by the class can contain the properties outlined below.

Returns Description
object
    headers?: object | undefined The HTTP response headers.
    message?: string | undefined The HTTP response message.
    responseText?: string | undefined The HTTP response text.
    statusCode?: string | number | undefined The status code of the HTTP request.
    statusText?: string | undefined The HTTP status text.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import Controller from "sap/ui/core/mvc/Controller";
import ODataCreateCL from "ui5/antares/odata/v2/ODataCreateCL"; // Import the class
import { IError } from "ui5/antares/types/common"; // Import the error type
import MessageBox from "sap/m/MessageBox";

/**
 * @namespace your.apps.namespace
 */
export default class YourController extends Controller {
  public onInit() {

  }

  public async onCreateProduct() {
    // Initialize with a type
    const odata = new ODataCreateCL<IProducts>(this, "Products"); 

    // set the http body
    odata.setData({
      ID: "b2f0013e-418f-42aa-9a24-3770fe17ce18",
      name: "Product Name",
      description: "Description",
      brand: "Brand",
      price: 999,
      currency: "EUR",
      quantityInStock: 15,
      categoryID: "eb7783a6-f30f-4f7d-b85c-f211eea54568",
      supplierID: "7734d25f-0d1e-4ab4-b8a8-cd201f29fd2f"
    });

    try {
      // send the http request and get the result
      const result = await odata.create();
      MessageBox.information(result.ID + " was created.");
    } catch (error) {
      // catch the error
      MessageBox.error((error as IError).message || "Request failed");
    }
  }

}

interface IProducts {
  ID: string;
  name: string;
  description: string;
  brand: string;
  price: number;
  currency: string;
  quantityInStock: number;
  categoryID: string;
  supplierID: string;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "ui5/antares/odata/v2/ODataCreateCL", // Import the class
    "sap/m/MessageBox"
], 
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, ODataCreateCL, MessageBox) {
      "use strict";

      return Controller.extend("your.apps.namespace.YourController", {
        onInit: function () {

        },

        onCreateProduct: async function () {
          // Initialize
          const odata = new ODataCreateCL(this, "Products"); 

          // set the http body
          odata.setData({
            ID: "b2f0013e-418f-42aa-9a24-3770fe17ce18",
            name: "Product Name",
            description: "Description",
            brand: "Brand",
            price: 999,
            currency: "EUR",
            quantityInStock: 15,
            categoryID: "eb7783a6-f30f-4f7d-b85c-f211eea54568",
            supplierID: "7734d25f-0d1e-4ab4-b8a8-cd201f29fd2f"
          });

          try {
            // send the http request and get the result
            const result = await odata.create();
            MessageBox.information(result.ID + " was created.");
          } catch (error) {
            // catch the error
            MessageBox.error(error.message || "Request failed");
          }          
        }
      });

    });

URL Parameters

Prior to sending the POST request with the create() method, it is possible to set the URL parameters using the setUrlParameters() method.

Parameter Type Mandatory Description
urlParameters Record<string, string> Yes The URL parameters of the POST request

Returns Description
Record<string, string> | undefined Returns the value that was set using setUrlParameters() method. Default value is undefined

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import Controller from "sap/ui/core/mvc/Controller";
import ODataCreateCL from "ui5/antares/odata/v2/ODataCreateCL"; // Import the class

/**
 * @namespace your.apps.namespace
 */
export default class YourController extends Controller {
  public onInit() {

  }

  public async onCreateProduct() {
    // Initialize with a type
    const odata = new ODataCreateCL<IProducts>(this, "Products"); 

    // set the url parameters
    odata.setUrlParameters({
      "$expand": "toProductLocations"
    });
  }

}

interface IProducts {
  ID: string;
  name: string;
  description: string;
  brand: string;
  price: number;
  currency: string;
  quantityInStock: number;
  categoryID: string;
  supplierID: string;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "ui5/antares/odata/v2/ODataCreateCL" // Import the class
], 
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, ODataCreateCL) {
      "use strict";

      return Controller.extend("your.apps.namespace.YourController", {
        onInit: function () {

        },

        onCreateProduct: async function () {
          // Initialize
          const odata = new ODataCreateCL(this, "Products"); 

          // set the url parameters
          odata.setUrlParameters({
            "$expand": "toProductLocations"
          });         
        }
      });

    });

Refresh After Change

The OData V2 model will be automatically refreshed after the POST request has been completed.

To change the default behavior, the setRefreshAfterChange() method can be utilized.

Parameter Type Mandatory Description
refreshAfterChange boolean Yes If set to false, the OData V2 model will not be refreshed after the request has been completed

Returns Description
boolean Returns the value that was set using setRefreshAfterChange() method. Default value is true

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import Controller from "sap/ui/core/mvc/Controller";
import ODataCreateCL from "ui5/antares/odata/v2/ODataCreateCL"; // Import the class

/**
 * @namespace your.apps.namespace
 */
export default class YourController extends Controller {
  public onInit() {

  }

  public async onCreateProduct() {
    // Initialize with a type
    const odata = new ODataCreateCL<IProducts>(this, "Products"); 

    // deactivate the auto model refresh
    odata.setRefreshAfterChange(false);
  }

}

interface IProducts {
  ID: string;
  name: string;
  description: string;
  brand: string;
  price: number;
  currency: string;
  quantityInStock: number;
  categoryID: string;
  supplierID: string;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "ui5/antares/odata/v2/ODataCreateCL" // Import the class
], 
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, ODataCreateCL) {
      "use strict";

      return Controller.extend("your.apps.namespace.YourController", {
        onInit: function () {

        },

        onCreateProduct: async function () {
          // Initialize
          const odata = new ODataCreateCL(this, "Products"); 

          // deactivate the auto model refresh
          odata.setRefreshAfterChange(false);      
        }
      });

    });

Additional Response Info

The create() method returns the data of the successfully created entity. However, you may require further information such as the status code and headers.

Once the create() function has been completed, the getResponse() method can be utilized to obtain further details.

Returns Description
object
    $reported?: boolean | undefined
    body?: string | undefined The HTTP body
    headers?: object | undefined The HTTP response headers.
    statusCode?: string | number | undefined The status code of the HTTP request.
    statusText?: string | undefined The HTTP status text.
    _imported?: boolean | undefined
    data?: EntityT | undefined The data that was created

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import Controller from "sap/ui/core/mvc/Controller";
import ODataCreateCL from "ui5/antares/odata/v2/ODataCreateCL"; // Import the class
import { IError } from "ui5/antares/types/common"; // Import the error type
import MessageBox from "sap/m/MessageBox";

/**
 * @namespace your.apps.namespace
 */
export default class YourController extends Controller {
  public onInit() {

  }

  public async onCreateProduct() {
    // Initialize with a type
    const odata = new ODataCreateCL<IProducts>(this, "Products"); 

    // set the http body
    odata.setData({
      ID: "b2f0013e-418f-42aa-9a24-3770fe17ce18",
      name: "Product Name",
      description: "Description",
      brand: "Brand",
      price: 999,
      currency: "EUR",
      quantityInStock: 15,
      categoryID: "eb7783a6-f30f-4f7d-b85c-f211eea54568",
      supplierID: "7734d25f-0d1e-4ab4-b8a8-cd201f29fd2f"
    });

    try {
      // send the http request and get the result
      const result = await odata.create();
      MessageBox.information(result.ID + " was created.");

      // get the additional response info
      const response = odata.getResponse();

      if (response) {
        console.log("Status Code: " + response.statusCode);
      }
    } catch (error) {
      // catch the error
      MessageBox.error((error as IError).message || "Request failed");
    }
  }

}

interface IProducts {
  ID: string;
  name: string;
  description: string;
  brand: string;
  price: number;
  currency: string;
  quantityInStock: number;
  categoryID: string;
  supplierID: string;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "ui5/antares/odata/v2/ODataCreateCL", // Import the class
    "sap/m/MessageBox"
], 
    /**
     * @param {typeof sap.ui.core.mvc.Controller} Controller
     */
    function (Controller, ODataCreateCL, MessageBox) {
      "use strict";

      return Controller.extend("your.apps.namespace.YourController", {
        onInit: function () {

        },

        onCreateProduct: async function () {
          // Initialize
          const odata = new ODataCreateCL(this, "Products"); 

          // set the http body
          odata.setData({
            ID: "b2f0013e-418f-42aa-9a24-3770fe17ce18",
            name: "Product Name",
            description: "Description",
            brand: "Brand",
            price: 999,
            currency: "EUR",
            quantityInStock: 15,
            categoryID: "eb7783a6-f30f-4f7d-b85c-f211eea54568",
            supplierID: "7734d25f-0d1e-4ab4-b8a8-cd201f29fd2f"
          });

          try {
            // send the http request and get the result
            const result = await odata.create();
            MessageBox.information(result.ID + " was created.");

            // get the additional response info
            const response = odata.getResponse();

            if (response) {
              console.log("Status Code: " + response.statusCode);
            }            
          } catch (error) {
            // catch the error
            MessageBox.error(error.message || "Request failed");
          }          
        }
      });

    });

Create Entry

To create a transient entity context which can be bound to a form or a dialog, the createEntry() method can be utilized.

Tip

If you wish to create the context with the initial values, the setData() method can be utilized.

Returns Description
Context The context of the transient entity