Closed lovis-ff closed 2 weeks ago
Hi @lovis-ff ,
Destructuring the service function is how the API is designed to be used. Please refer to the docs here for more details.
ok, I still find this very confusing to use properly but at least I know how to use it now. Thanks!
Describe the bug The result of the initialisation of an odata api from the sdk is dependent on the apis initialised along-side. This has to be considered when using the sdk where the sdk could be initialised in different places with different apis being used.
To be precise, I am using the SalesQuotation odata api generated from the sap provided edmx file. I am using the sdk in different places to split my code for different responsibilities. This results in errors which are hard to understand/debug and navigation properties being omitted on deep create requests resulting in wrong data.
To Reproduce
1. Error on navigation properties Steps to reproduce the behavior:
const salesQuotation = apiSalesQuotationSrv.salesQuotationApi .entityBuilder() .salesQuotation("ABC") .toItem([ apiSalesQuotationSrv.salesQuotationItemApi .entityBuilder() .salesQuotationItem("0001") .salesQuotationItemText("0001 text") .toSalesQuotation(null) .salesQuotationItemCategory("TAN") .material("AAA") .build(), ]) .build();
const apiSalesQuotationSrv2 = OP_API_SALES_QUOTATION_SRV_0001.opApiSalesQuotationSrv0001();
const rb = apiSalesQuotationSrv2.salesQuotationApi .requestBuilder() .create(salesQuotation);
TypeError: Cannot read properties of undefined (reading '_fieldName')
const apiSalesQuotationSrv2 = OP_API_SALES_QUOTATION_SRV_0001.opApiSalesQuotationSrv0001();
const { salesQuotationItemApi } = apiSalesQuotationSrv2;
const rb = apiSalesQuotationSrv2.salesQuotationApi .requestBuilder() .create(salesQuotation);
const apiSalesQuotationSrv = OP_API_SALES_QUOTATION_SRV_0001.opApiSalesQuotationSrv0001();
const salesQuotation = apiSalesQuotationSrv.salesQuotationApi .entityBuilder() .salesQuotation("ABC") .toItem([ apiSalesQuotationSrv.salesQuotationItemApi .entityBuilder() .salesQuotationItem("0001") .salesQuotationItemText("0001 text") .salesQuotationItemCategory("TAN") .material("AAA") .toPartner([ apiSalesQuotationSrv.salesQuotationItemPartnerApi .entityBuilder() .partnerFunction("AB") .build(), ]) .build(), ]) .build();
const apiSalesQuotationSrv2 = OP_API_SALES_QUOTATION_SRV_0001.opApiSalesQuotationSrv0001();
const rb = apiSalesQuotationSrv2.salesQuotationApi .requestBuilder() .create(salesQuotation);
{ SalesQuotation: 'ABC', to_Item: [ { SalesQuotationItem: '0001', SalesQuotationItemText: '0001 text', SalesQuotationItemCategory: 'TAN', Material: 'AAA' } ] }
const apiSalesQuotationSrv2 = OP_API_SALES_QUOTATION_SRV_0001.opApiSalesQuotationSrv0001(); const { salesQuotationItemApi, salesQuotationItemPartnerApi } = apiSalesQuotationSrv2; const rb = apiSalesQuotationSrv2.salesQuotationApi .requestBuilder() .create(salesQuotation);
{ "SalesQuotation": "ABC", "to_Item": [ { "SalesQuotationItem": "0001", "SalesQuotationItemText": "0001 text", "SalesQuotationItemCategory": "TAN", "Material": "AAA", "to_Partner": [ { "PartnerFunction": "AB" } ] } ] }