DOWNLOADJSON & QUANTITYCHECK
DOWNLOADJSON
Klasse: OciDownloadJsonController
Zweck: Gibt den gesamten Produktkatalog als paginiertes JSON zurück. Das Format entspricht dem SAP-Ariba-Katalogsformat (NEWITEM-Struktur). Eingesetzt, um den lokalen Produktkatalog eines Procurement-Systems zu befüllen, ohne dass ein interaktiver Punchout-Prozess stattfindet.
Ablauf
- Parameter einlesen (alle optional mit Standardwerten)
- Produktanzahl laden:
OciProductService::getProductsTotalCount($dataFeedContext) - Aktuelle Seite berechnen und auf
totalPagesclampen - Produktseite laden:
OciProductService::getProductsPage($pageSize, $currentPage, $dataFeedContext) - Jedes Produkt in
NEWITEM-Struktur umwandeln - Session löschen
- JSON-Response zurückgeben
Parameter
| Parameter | Standard | Beschreibung |
|---|---|---|
pagesize | 50 | Anzahl der Produkte pro Seite |
requestedpage | 1 | Angefragte Seite (1-basiert, wird auf totalPages geclampt) |
transactionid | Auto-UUID | Transaktions-ID; wird automatisch generiert, wenn nicht angegeben |
cti | "X" | Catalog Type Indicator (SAP-Konvention) |
Response-Struktur
{
"CTI": "X",
"CURRENTPAGE": 1,
"TOTALITEMS": 150,
"TOTALPAGES": 3,
"TRANSACTIONID": "a1b2c3d4...",
"Items": [
{
"NEWITEM": {
"ATTACHMENTS": [
{
"descriptions": [{ "description": "item image", "languageCode": "" }],
"fileName": "https://example.com/media/product.jpg",
"mimeType": "image/jpeg",
"type": "01"
}
],
"ATTRIBUTES": [],
"CATALOG_NAME": "Kategoriename",
"CURRENCY": "EUR",
"DESCRIPTION": [{ "description": "Produktname", "languageCode": "" }],
"EXT_PRODUCT_ID": "SW-1234",
"ITEM_TYPE": "product",
"LEADTIME": "",
"MINORDER_QTY": 1,
"PRICE": "9.99",
"PRICE_QUANTITY": 1,
"PRICE_SCALES": [{ "low": 1, "price": "9.99", "scaleType": "01" }],
"TAX": "19.00",
"UNIT": "PCE",
"VENDOR": "Herstellername",
"VENDOR_NAME": "SalesChannel Name"
}
}
]
}
Preislogik
- Wenn Staffelpreise vorhanden (
calculatedPrices): erster Staffelpreis wird verwendet - Sonst:
calculatedPrice.unitPrice - Format: 2 Dezimalstellen, Punkt als Trennzeichen, kein Tausender-Trennzeichen
Fehlerbehandlung
Wirft der Controller eine Exception, gibt er statt eines Items-Arrays eine JSON-Fehlerantwort zurück:
{
"success": false,
"errorMessage": "..."
}
DOWNLOADJSON läuft ohne aktive ConnectorSession nach dem Call – die Session wird am Ende gelöscht. DataFields werden für DOWNLOADJSON nicht aufgelöst; die Felder werden direkt aus der SalesChannelProductEntity befüllt.
QUANTITYCHECK
Klasse: OciQuantityCheckController
Zweck: Gibt den verfügbaren Lagerbestand für ein einzelnes Produkt zurück. Eingesetzt, wenn das Procurement-System vor einer Bestellung die Verfügbarkeit prüfen möchte.
Ablauf
productid-Parameter prüfen (Pflichtfeld)- Produkt per
productNumberladen ($dataFeedContext) - Session löschen
- JSON-Response mit Verfügbarkeit zurückgeben
Parameter
| Parameter | Pflicht | Beschreibung |
|---|---|---|
productid | ✅ Ja | Produktnummer |
Response (JSON)
{
"AVAILABLE_QUANTITY": 42,
"LEADTIME": ""
}
| Feld | Quelle | Beschreibung |
|---|---|---|
AVAILABLE_QUANTITY | SalesChannelProductEntity::getAvailableStock() | Verfügbarer Lagerbestand |
LEADTIME | – | Immer leerer String (nicht implementiert) |
Fehlerverhalten
| Fehler | Exception |
|---|---|
productid fehlt | \RuntimeException: Parameter PRODUCTID is required and has not been provided. |
| Produkt nicht gefunden | \RuntimeException: Product with product number "..." was not found. |