# API_PURCHASEORDER_PROCESS_SRV ?Purchase Order (OData V2, DEPRECATED)

> **Service Root:** `/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV/`
> **Protocol:** OData V2
> **Status:** DEPRECATED (successor: `API_PURCHASEORDER_PROCESS_SRV` OData V4)
> **Application Component:** `MM-PUR` (Purchasing)
> **Default Paging Size:** 1000 | **Maximum Paging Size:** 5000

---

## Overview

This synchronous OData V2 service enables you to create, read, update, and delete purchase orders from an external system. It exposes the SAP S/4HANA purchase order business object with header, item, account assignment, schedule line, pricing, partner, and note entities.

---

## Entity Summary

| Entity | Description |
|---|---|
| `A_PurchaseOrder` | Purchase Order Header |
| `A_PurchaseOrderItem` | Purchase Order Item |
| `A_PurchaseOrderAccount` | Account Assignment |
| `A_PurchaseOrderScheduleLine` | Schedule Line |
| `A_PurchaseOrderPricingElement` | Pricing Element |
| `A_PurchaseOrderHeaderPartner` | Header Partner |
| `A_PurchaseOrderItemPartner` | Item Partner |
| `A_PurchaseOrderHeaderNote` | Header Note |
| `A_PurchaseOrderNote` | Item Note |

---

## CRUD Endpoints

| Method | URL | Description |
|---|---|---|
| `GET` | `/A_PurchaseOrder` | Read multiple purchase orders |
| `GET` | `/A_PurchaseOrder('{PurchaseOrder}')` | Read single purchase order header |
| `POST` | `/A_PurchaseOrder` | Create purchase order |
| `PATCH` | `/A_PurchaseOrder('{PurchaseOrder}')` | Update purchase order header |
| `DELETE` | `/A_PurchaseOrder('{PurchaseOrder}')` | Delete purchase order |
| `GET` | `/A_PurchaseOrderItem` | Read multiple items |
| `GET` | `/A_PurchaseOrderItem(PurchaseOrder='{PO}',PurchaseOrderItem='{Item}')` | Read single item |
| `POST` | `/A_PurchaseOrder('{PO}')/to_PurchaseOrderItem` | Create item under header |
| `PATCH` | `/A_PurchaseOrderItem(PurchaseOrder='{PO}',PurchaseOrderItem='{Item}')` | Update item |
| `DELETE` | `/A_PurchaseOrderItem(PurchaseOrder='{PO}',PurchaseOrderItem='{Item}')` | Delete item |
| `GET` | `/A_PurchaseOrderAccount` | Read account assignments |
| `POST` | `/A_PurchaseOrderItem(...)/to_PurchaseOrderAccount` | Create account assignment |
| `GET` | `/A_PurchaseOrderScheduleLine` | Read schedule lines |
| `POST` | `/A_PurchaseOrderItem(...)/to_ScheduleLine` | Create schedule line |
| `GET` | `/A_PurchaseOrderPricingElement` | Read pricing elements |
| `GET` | `/A_PurchaseOrderHeaderPartner` | Read header partners |
| `GET` | `/A_PurchaseOrderItemPartner` | Read item partners |
| `GET` | `/A_PurchaseOrderHeaderNote` | Read header notes |
| `GET` | `/A_PurchaseOrderNote` | Read item notes |

---

## A_PurchaseOrder (Header)

**Key:** `PurchaseOrder` (Edm.String)

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | Purchasing Document Number |
| `CompanyCode` | String | Company Code |
| `PurchaseOrderType` | String | Document Type (e.g. NB, ZNB) |
| `PurchasingOrganization` | String | Purchasing Organization |
| `PurchasingGroup` | String | Purchasing Group |
| `Supplier` | String | Vendor/Supplier Account Number |
| `DocumentCurrency` | String | Currency Key |
| `PaymentTerms` | String | Terms of Payment Key |
| `PaymentCards` | String | Payment Card ID |
| `PaymentMethod` | String | Payment Method |
| `IncotermsClassification` | String | Incoterms (Part 1) |
| `IncotermsTransferLocation` | String | Incoterms Location (Part 2) |
| `PurchasingDocumentOrigin` | String | Source of Purchase Order |
| `CreationDate` | DateTime | Date PO Created |
| `LastChangeDateTime` | DateTime | Last Changed On |
| `SupplierAddress` | String | Supplier Address ID |
| `SupplierPhoneNumber` | String | Supplier Phone |
| `SupplierAddressUUID` | GUID | Supplier Address UUID |
| `ReleaseCode` | String | Release Code for Approval |
| `ReleaseStatus` | String | Overall Release Status |
| `ManualSupplierAddress` | String | Manually Entered Address |
| `DeliveryAddress` | String | Delivery Address ID |
| `DeliveryAddressUUID` | GUID | Delivery Address UUID |
| `ResponsiblePerson` | String | Person Responsible |
| `CreatedByUser` | String | Created by User |
| `ExchangeRate` | Decimal | Direct Quoted Exchange Rate |
| `DocumentDate` | DateTime | Document Date on PO |
| `PostingDate` | DateTime | Posting Date |
| `ValidityStartDate` | DateTime | Validity Start |
| `AgreementType` | String | Agreement Type |
| `SupplierQuotationDate` | DateTime | Supplier Quotation Date |
| `SupplierQuotationExternalID` | String | Supplier Quote Number |
| `PurchaseOrderProcessingState` | String | Processing State (02=approved) |
| `SupplierRespSalesPerson` | String | Salesperson at Supplier |
| `SupplierPhoneRespSalesPers` | String | Salesperson Phone |
| `SupplierFaxNumber` | String | Supplier Fax |
| `SupplyingPlant` | String | Supplying Plant (Stock Transfer) |
| `GrossAmount` | Decimal | Total Gross Amount |
| `NetAmount` | Decimal | Net Document Value |
| `DownPaymentAmount` | Decimal | Down Payment Amount |
| `DownPaymentDueDate` | DateTime | Down Payment Due Date |
| `DownPaymentIsPercentage` | Boolean | Down Payment in Percent |
| `DownPaymentPercentage` | Decimal | Down Payment Percentage |
| `CashDiscount1Percent` | Decimal | Cash Disc. 1 Percent |
| `CashDiscount1Days` | Integer | Cash Disc. 1 Days |
| `CashDiscount2Percent` | Decimal | Cash Disc. 2 Percent |
| `CashDiscount2Days` | Integer | Cash Disc. 2 Days |
| `NetPaymentTermsPeriod` | Integer | Net Payment Terms Period |
| `DeletionIndicator` | Boolean | Deletion Flag |

### Navigation Properties

| Navigation Property | Target Entity | Multiplicity |
|---|---|---|
| `to_PurchaseOrderItem` | `A_PurchaseOrderItem` | 0..* |
| `to_HeaderPartner` | `A_PurchaseOrderHeaderPartner` | 0..* |
| `to_HeaderNote` | `A_PurchaseOrderHeaderNote` | 0..* |
| `to_SupplierAddress` | `A_Address_2` | 0..1 |

---

## A_PurchaseOrderItem (Item)

**Keys:** `PurchaseOrder`, `PurchaseOrderItem`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | Purchasing Document Number (FK) |
| `PurchaseOrderItem` | String | Item Number |
| `PurchaseOrderItemText` | String | Short Text |
| `Material` | String | Material Number |
| `MaterialGroup` | String | Material Group |
| `Plant` | String | Plant |
| `StorageLocation` | String | Storage Location |
| `OrderQuantity` | Decimal | Quantity Ordered |
| `PurchaseOrderQuantityUnit` | String | Unit of Measure (order) |
| `OrderPriceUnit` | String | Order Price Unit |
| `NetPriceAmount` | Decimal | Net Price Amount |
| `NetPriceQuantity` | Decimal | Quantity for Net Price |
| `NetPriceCurrency` | String | Currency |
| `DocumentCurrency` | String | Item Currency |
| `PurchaseOrderItemCategory` | String | Item Category (0=Standard, 2=Consignment, 3=Subcontracting, etc.) |
| `AccountAssignmentCategory` | String | Account Assignment Category (K=Cost Center, U=Unknown, etc.) |
| `GoodsReceiptQuantity` | Decimal | Quantity of Goods Received |
| `DeliveryQuantity` | Decimal | Delivered Quantity |
| `OverdelivToleranceLimit` | Decimal | Overdelivery Tolerance |
| `UnderdelivToleranceLimit` | Decimal | Underdelivery Tolerance |
| `UnlimitedOverdeliveryAllowed` | Boolean | Unlimited Overdelivery |
| `DeletionIndicator` | Boolean | Deletion Flag |
| `DeliveryDate` | DateTime | Delivery Date |
| `CompanyCode` | String | Company Code |
| `TaxCode` | String | Tax Code |
| `ConsumptionTaxCtrlCode` | String | Consumption Tax Control Code |
| `GoodsReceiptIsExpected` | Boolean | Goods Receipt Expected |
| `InvoiceIsExpected` | Boolean | Invoice Receipt Expected |
| `EstimatedPrice` | Decimal | Estimated Price |
| `IsCompletelyDelivered` | Boolean | Complete Delivery Flag |
| `IsFinallyInvoiced` | Boolean | Final Invoice Flag |
| `PurchaseRequisition` | String | Purchase Requisition (source) |
| `PurchaseRequisitionItem` | String | PR Item (source) |
| `OrderedProbability` | String | Ordering Probability |
| `DeliveryPriority` | String | Delivery Priority |
| `BaseUnit` | String | Base Unit of Measure |
| `SupplierMaterialNumber` | String | Vendor Material Number |
| `ManufacturerMaterial` | String | Manufacturer Material Number |
| `ManufacturerPartNumber` | String | Mfr Part Number |
| `ManufacturerNumber` | String | Manufacturer Code |
| `Batch` | String | Batch Number |
| `IncotermsClassification` | String | Incoterms |
| `LeadTimeOffset` | Decimal | Lead Time Offset |
| `ContractNumber` | String | Contract Number |
| `ContractItemNumber` | String | Contract Item Number |
| `PricingDate` | DateTime | Date for Pricing |
| `PlannedDeliveryTime` | Decimal | Planned Delivery Time (days) |
| `GrossWeight` | Decimal | Gross Weight |
| `NetWeight` | Decimal | Net Weight |
| `WeightUnit` | String | Weight Unit |
| `Volume` | Decimal | Volume |
| `VolumeUnit` | String | Volume Unit |
| `Packages` | Integer | Number of Packages |
| `ShippingType` | String | Shipping Type |
| `ShippingInstruction` | String | Shipping Instructions |
| `ConfirmationControlKey` | String | Confirmation Control Key |
| `UnlimitedOverdelivIsAllowed` | Boolean | Unlimited Overdelivery Allowed |
| `IsPartialDeliveryAllowed` | Boolean | Partial Delivery Allowed |
| `RejectionReason` | String | Rejection Reason |
| `RejectedQuantity` | Decimal | Rejected Quantity |
| `StockType` | String | Stock Type (Valuation) |
| `StockSegment` | String | Stock Segment |
| `MaterialRevisionLevel` | String | Revision Level |
| `EnvrlmtlRelevance` | String | Environmental Relevance |
| `InvoicingPlan` | String | Invoicing Plan Number |
| `LimitAmount` | Decimal | Limit Amount (service PO) |
| `ExpectedOverallLimit` | Decimal | Expected Limit |
| `OverallLimitAmount` | Decimal | Total Limit |
| `ServiceBasedBilling` | Boolean | Service-Based Billing |
| `NoLimit` | Boolean | No Limit |
| `FreeItem` | Boolean | Free Item |
| `SourceOfSupply` | String | Source of Supply |
| `SourceOfSupplyType` | String | Source Type |
| `PurchasingInfoRecord` | String | Info Record |
| `Scheduled` | Boolean | Scheduled Indicator |
| `SchedulingAgreement` | String | Scheduling Agreement |
| `QuantityChangeable` | Boolean | Quantity Changeable |
| `Networks` | String | Network Number |
| `NetworkItem` | String | Network Item |
| `RoutingNumber` | String | Routing Number |
| `ComponentNumber` | String | Component Number |
| `OperationNumber` | String | Operation Number |
| `MatlPlaningPlant` | String | Materials Planning Plant |
| `IndustryStandardDescription` | String | Standard Description |
| `InternationalArticleNumber` | String | EAN/UPC Code |
| `ServiceDocument` | String | Service Document |
| `ServiceDocumentItem` | String | Service Document Item |

### Navigation Properties

| Navigation Property | Target Entity | Multiplicity |
|---|---|---|
| `to_PurchaseOrderAccount` | `A_PurchaseOrderAccount` | 0..* |
| `to_ScheduleLine` | `A_PurchaseOrderScheduleLine` | 0..* |
| `to_PricingElement` | `A_PurchaseOrderPricingElement` | 0..* |
| `to_ItemPartner` | `A_PurchaseOrderItemPartner` | 0..* |
| `to_ItemNote` | `A_PurchaseOrderNote` | 0..* |
| `to_ItemDeliveryAddress` | `A_PurOrderItemDeliveryAddress` | 0..1 |

---

## A_PurchaseOrderAccount (Account Assignment)

**Keys:** `PurchaseOrder`, `PurchaseOrderItem`, `AccountAssignmentNumber`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `PurchaseOrderItem` | String | Item Number (FK) |
| `AccountAssignmentNumber` | String | Serial Number |
| `CostCenter` | String | Cost Center |
| `GLAccount` | String | G/L Account |
| `Quantity` | Decimal | Quantity |
| `DeliveryQuantity` | Decimal | Delivery Quantity |
| `DocumentCurrency` | String | Currency |
| `NetAmount` | Decimal | Net Amount |
| `NetValue` | Decimal | Net Value |
| `CommitmentItem` | String | Commitment Item |
| `FundsCenter` | String | Funds Center |
| `Fund` | String | Fund |
| `GrantID` | String | Grant |
| `BusinessArea` | String | Business Area |
| `ProfitCenter` | String | Profit Center |
| `WBSElement` | String | WBS Element |
| `OrderID` | String | Order (CO) |
| `SalesOrderItem` | String | Sales Order Item |
| `SalesOrder` | String | Sales Order |
| `Segement` | String | Segment for Segmental Reporting |
| `FunctionalArea` | String | Functional Area |
| `ControllingArea` | String | Controlling Area |
| `CostObject` | String | Cost Object |
| `ProjectNetwork` | String | Network |
| `JointVenture` | String | Joint Venture |
| `RecoveryIndicator` | String | Recovery Indicator |
| `RealEstateObject` | String | Real Estate Object |
| `PartnerAccountNumber` | String | Partner Account |
| `TaxCode` | String | Tax Code |
| `IsDeleted` | Boolean | Deletion Indicator |

---

## A_PurchaseOrderScheduleLine (Schedule Line)

**Keys:** `PurchaseOrder`, `PurchaseOrderItem`, `ScheduleLine`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `PurchaseOrderItem` | String | Item Number (FK) |
| `ScheduleLine` | String | Schedule Line Number |
| `DeliveryDate` | DateTime | Delivery Date |
| `Quantity` | Decimal | Scheduled Quantity |
| `QuantityUnit` | String | Unit of Measure |
| `DeliveryQuantity` | Decimal | Quantity Delivered |
| `GoodsReceiptQuantity` | Decimal | GR Quantity |
| `CommittedQuantity` | Decimal | Committed Quantity |
| `IsCompletelyDelivered` | Boolean | Complete Delivery |
| `Plant` | String | Plant |
| `StorageLocation` | String | Storage Location |
| `Batch` | String | Batch |
| `StockType` | String | Stock Type |
| `StockSegment` | String | Stock Segment |
| `ManufacturerNumber` | String | Manufacturer |
| `ManufacturerPartNumber` | String | Mfr Part Number |
| `RequirementSegment` | String | Requirement Segment |
| `RequirementDate` | DateTime | Requirement Date |
| `ReschedulingDate` | DateTime | Rescheduling Date |
| `IsPartiallyDelivered` | Boolean | Partial Delivery |
| `IsRescheduling` | Boolean | Rescheduling Indicator |
| `ReschedulingType` | String | Rescheduling Type |
| `ScheduledQuantity` | Decimal | Scheduled Quantity |
| `ConfirmedQuantity` | Decimal | Confirmed Quantity |
| `ReceiptIsExpected` | Boolean | Receipt Expected |
| `GoodsIssueQuantity` | Decimal | GI Quantity |

---

## A_PurchaseOrderPricingElement (Pricing)

**Keys:** `PurchaseOrder`, `PurchaseOrderItem`, `PricingDocument`, `PricingCondition`, `ConditionType`, `PricingConditionCounter`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `PurchaseOrderItem` | String | Item Number (FK) |
| `PricingDocument` | String | Document Number |
| `PricingCondition` | String | Condition Record |
| `ConditionType` | String | Condition Type (e.g. PB00, PBXX) |
| `PricingConditionCounter` | String | Condition Counter |
| `ConditionRateValue` | Decimal | Rate / Amount |
| `ConditionCurrency` | String | Currency |
| `ConditionQuantity` | Decimal | Condition Quantity |
| `ConditionQuantityUnit` | String | Condition Unit |
| `ConditionBasisValue` | Decimal | Condition Basis |
| `ConditionValue` | Decimal | Condition Value |
| `ExchangeRate` | Decimal | Exchange Rate |
| `CalculationType` | String | Calculation Type |
| `ConditionControl` | String | Condition Control |
| `ConditionOrigin` | String | Condition Origin |
| `ConditionNumber` | String | Condition Number |
| `Changeable` | Boolean | Changeable |
| `ManualChangeAllowed` | Boolean | Manual Change Allowed |
| `NumberOfConditionRecords` | Integer | Record Count |
| `ScaleBaseValue` | Decimal | Scale Base Value |
| `ScaleBaseValueUnit` | String | Scale Unit |
| `ScaleQuantity` | Decimal | Scale Quantity |
| `ScaleQuantityUnit` | String | Scale Quantity Unit |
| `IsRelevantForIntrastat` | Boolean | Intrastat Relevance |
| `EvalutionType` | String | Evaluation Type |
| `ConditionInactiveReason` | String | Inactive Reason |
| `Subtotal1` | Decimal | Subtotal 1 |
| `Subtotal2` | Decimal | Subtotal 2 |
| `Subtotal3` | Decimal | Subtotal 3 |
| `Subtotal4` | Decimal | Subtotal 4 |
| `Subtotal5` | Decimal | Subtotal 5 |
| `Subtotal6` | Decimal | Subtotal 6 |

---

## A_PurchaseOrderHeaderPartner

**Keys:** `PurchaseOrder`, `PartnerFunction`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `PartnerFunction` | String | Partner Function (e.g. AG, LI, RE) |
| `PartnerNumber` | String | Partner ID |
| `PartnerNumberValue` | String | Partner Number (display) |
| `CreationDate` | DateTime | Created On |
| `CreatedByUser` | String | Created By |
| `LastChangeDateTime` | DateTime | Last Changed |
| `Supplier` | String | Supplier Account |

---

## A_PurchaseOrderItemPartner

**Keys:** `PurchaseOrder`, `PurchaseOrderItem`, `PartnerFunction`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `PurchaseOrderItem` | String | Item Number (FK) |
| `PartnerFunction` | String | Partner Function |
| `PartnerNumber` | String | Partner ID |
| `CreationDate` | DateTime | Created On |
| `CreatedByUser` | String | Created By |
| `LastChangeDateTime` | DateTime | Last Changed |

---

## A_PurchaseOrderHeaderNote

**Keys:** `PurchaseOrder`, `NoteNumber`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `NoteNumber` | String | Note Counter |
| `NoteDescription` | String | Note Text |
| `Language` | String | Language Key |
| `CreationDate` | DateTime | Created On |
| `CreatedByUser` | String | Created By |

---

## A_PurchaseOrderNote (Item Note)

**Keys:** `PurchaseOrder`, `PurchaseOrderItem`, `NoteNumber`

| Property | Type | Description |
|---|---|---|
| `PurchaseOrder` | String | PO Number (FK) |
| `PurchaseOrderItem` | String | Item Number (FK) |
| `NoteNumber` | String | Note Counter |
| `NoteDescription` | String | Note Text |
| `Language` | String | Language Key |
| `CreationDate` | DateTime | Created On |
| `CreatedByUser` | String | Created By |

---

## Entity Relationship Diagram (Simplified)

```
A_PurchaseOrder (Header)
├── A_PurchaseOrderHeaderPartner        (1..*)
├── A_PurchaseOrderHeaderNote           (0..*)
└── A_PurchaseOrderItem (Item)          (1..*)
    ├── A_PurchaseOrderAccount          (0..*)
    ├── A_PurchaseOrderScheduleLine     (0..*)
    ├── A_PurchaseOrderPricingElement   (0..*)
    ├── A_PurchaseOrderItemPartner      (0..*)
    └── A_PurchaseOrderNote             (0..*)
```

---

## Authentication & Authorization

- **Authentication:** Basic Auth (username/password) or OAuth 2.0 (client credentials)
- **Authorization Objects:**
  - `M_BEST_BSA` ?Release strategy for PO
  - `M_BEST_EKG` ?Purchasing Group
  - `M_BEST_EKO` ?Purchasing Organization
  - `M_BEST_WRK` ?Plant
- **CSRF Protection:** Token required for POST/PATCH/DELETE (fetch via `GET /sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV/$csrf`)

---

## Query Examples

### Header with all items
```
GET /A_PurchaseOrder('4500000001')?$expand=to_PurchaseOrderItem
```

### Items with account assignments
```
GET /A_PurchaseOrderItem?$filter=PurchaseOrder eq '4500000001'
  &$expand=to_PurchaseOrderAccount
```

### Filter by creation date
```
GET /A_PurchaseOrder?$filter=CreationDate gt datetime'2024-01-01T00:00:00'
  &$top=200
```

### Schedule lines for an item
```
GET /A_PurchaseOrderItem(PurchaseOrder='4500000001',PurchaseOrderItem='00010')
  /to_ScheduleLine
```

---

## Important Constraints

1. **Paging:** Default = 1000, max = 5000 (with `$top`). Server-driven paging with `$skiptoken`.
2. **Decimal fields:** Always sent with 3 decimal places even if zero.
3. **Currency/Quantity conversion:** OData V2 inbound/outbound conversion enabled.
4. **Read-only fields:** Some pricing fields are calculated server-side and ignored on POST.
5. **Field control:** Dynamic field control ?certain fields become read-only based on context (e.g., order quantity when schedule lines exist).
6. **ETags:** Used for optimistic locking on updates (supports `If-Match` header).
7. **Batch requests:** Supported via `$batch` endpoint (changesets limited to single purchase order).

---

## SAP Cloud SDK (VDM) ?Java / JS

**Java (V2 VDM):**
```java
PurchaseOrderService service = new PurchaseOrderService();
PurchaseOrderHeader header = service.getPurchaseOrderByKey("4500000001")
    .select(PurchaseOrderHeader.COMPANY_CODE,
            PurchaseOrderHeader.TO_PURCHASE_ORDER_ITEM)
    .executeRequest(destination);
```

**JavaScript (V2 Client):**
```js
const { purchaseOrderService } = require('./generated');
const { purchaseOrderApi } = purchaseOrderService();
const header = await purchaseOrderApi.requestBuilder()
    .getByKey('4500000001')
    .execute({ destinationName: 'S4HANA' });
```

---

## References

- [SAP Help Portal ?Purchase Order (OData V2)](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/91af7f8d3acd47da90d33aaacfcd0d59/acd2da57df6cc525e10000000a4450e5.html)
- [SAP Business Accelerator Hub](https://api.sap.com/api/API_PURCHASEORDER_PROCESS_SRV)
- [be-lenka/sap_purchase-order (OpenAPI/PHP Client)](https://github.com/be-lenka/sap_purchase-order)
- [SAP Note 3360429 ?Differences OData V2 vs V4](https://me.sap.com/notes/3360429)
- [SAP Cloud SDK ?OData V2 Client](https://sap.github.io/cloud-sdk/docs/js/features/odata/v2-client)