Wie kriege ich die Items der Pickliste über API?

Hallo zusammen,

weiß evtl. jemand wie ich alle Items für eine Pickliste per API bekomme?!
Über die Route: „/rest/fulfillment/picklist/picking_order_item“ mit dem Parameter „pickingOrderId“ hängt sich meine APP auf, da anscheinend zu viele Daten geliefert werden bzw. Parameter wird nicht angewendet.

Ich will einfach die offenen Picklisten mit Artikel+Menge aus Plenty ziehen. Also das, was man über Fulfillment->Pickliste als CSV herunterladen kann.

Oder geht es bei Plenty gar nicht?

  <?php
 // ---------- Konfiguration ----------
    $itemsPerPage   = 10;    // pro Seite
    $maxPages       = 2;     // Sicherheitskappe
    $maxCollect     = 1000;  // max. Anzahl, die wir ins RAM sammeln
    $maxEcho        = 500;   // max. Anzahl, die wir im JSON ausgeben
    // -----------------------------------

    echo "<h2>/rest/fulfillment/picklist/picking_order_item – Dump</h2>";

    // Optionaler Filter via GET: ?pickingOrderId=38332
    $pickingOrderId = isset($_GET['pickingOrderId']) ? trim($_GET['pickingOrderId']) : 'eq:38332';

    $page = 1;
    $pagesFetched = 0;
    $totalsCount  = null;
    $collected    = [];

    while (true) {
        $params = [
            'page'         => $page,
            'itemsPerPage' => $itemsPerPage,
            // Optionaler Filter (hier aktiv gesetzt; nimm ihn raus, wenn du wirklich alle willst):
            'pickingOrderId' => $pickingOrderId,
            // 'sortBy'      => 'id',
            // 'sortOrder'   => 'asc',
        ];

        $res = $api->get('/rest/fulfillment/picklist/picking_order_item', $params);
        $pagesFetched++;

        if (isset($res['totalsCount'])) {
            $totalsCount = (int)$res['totalsCount'];
        }

        $entries = normalize_entries($res);
        if (!$entries) break;

        // Sammeln (ohne processState-Filter)
        foreach ($entries as $row) {
            $collected[] = $row;
            if (count($collected) >= $maxCollect) break 2;
        }

        // Paginierung beenden?
        $isLast = isset($res['isLastPage']) ? (bool)$res['isLastPage'] : false;
        $lastPageNumber = isset($res['lastPageNumber']) ? (int)$res['lastPageNumber'] : null;
        if ($isLast) break;
        if ($lastPageNumber !== null && $page >= $lastPageNumber) break;
        if ($pagesFetched >= $maxPages) break;

        $page++;
    }
?>

Hey,

hab es in meinem Test-System versucht:

Request:
{{systemURL}}/rest/fulfillment/picklist/picking_order_item/

Response:
[
    {
        "id": 43,
        "pickingOrderId": 14,
        "orderItemId": 451,
        "processState": "done",
        "processDate": "-0001-11-30T00:00:00+00:53",
        "processUserId": 0,
        "comment": "",
        "quantity": 1,
        "itemId": 542,
        "holdingArea": 157,
        "warehouseId": 1,
        "orderIdList": "309",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 44,
        "pickingOrderId": 14,
        "orderItemId": 452,
        "processState": "done",
        "processDate": "-0001-11-30T00:00:00+00:53",
        "processUserId": 0,
        "comment": "",
        "quantity": 2,
        "itemId": 543,
        "holdingArea": 0,
        "warehouseId": 1,
        "orderIdList": "309, 310",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 45,
        "pickingOrderId": 14,
        "orderItemId": 449,
        "processState": "done",
        "processDate": "-0001-11-30T00:00:00+00:53",
        "processUserId": 0,
        "comment": "",
        "quantity": 2,
        "itemId": 564,
        "holdingArea": 0,
        "warehouseId": 1,
        "orderIdList": "308",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 46,
        "pickingOrderId": 15,
        "orderItemId": 451,
        "processState": "done",
        "processDate": "2024-09-10T16:59:25+02:00",
        "processUserId": 0,
        "comment": "",
        "quantity": 1,
        "itemId": 542,
        "holdingArea": 157,
        "warehouseId": 1,
        "orderIdList": "309",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 47,
        "pickingOrderId": 15,
        "orderItemId": 452,
        "processState": "done",
        "processDate": "2024-09-10T16:59:25+02:00",
        "processUserId": 0,
        "comment": "",
        "quantity": 2,
        "itemId": 543,
        "holdingArea": 0,
        "warehouseId": 1,
        "orderIdList": "309, 310",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 48,
        "pickingOrderId": 15,
        "orderItemId": 449,
        "processState": "done",
        "processDate": "2024-09-10T16:59:25+02:00",
        "processUserId": 0,
        "comment": "",
        "quantity": 2,
        "itemId": 564,
        "holdingArea": 0,
        "warehouseId": 1,
        "orderIdList": "308",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 49,
        "pickingOrderId": 16,
        "orderItemId": 454,
        "processState": "open",
        "processDate": "-0001-11-30T00:00:00+00:53",
        "processUserId": 0,
        "comment": "",
        "quantity": 1,
        "itemId": 543,
        "holdingArea": 0,
        "warehouseId": 1,
        "orderIdList": "310",
        "batchBestBeforeDateId": "0"
    },
    {
        "id": 50,
        "pickingOrderId": 16,
        "orderItemId": 449,
        "processState": "open",
        "processDate": "-0001-11-30T00:00:00+00:53",
        "processUserId": 0,
        "comment": "",
        "quantity": 2,
        "itemId": 564,
        "holdingArea": 0,
        "warehouseId": 1,
        "orderIdList": "308",
        "batchBestBeforeDateId": "0"
    }
]

Request:
{{systemURL}}/rest/fulfillment/picklist/picking_order_item/50

Response:
{
    "id": 50,
    "pickingOrderId": 16,
    "orderItemId": 449,
    "processState": "open",
    "processDate": "-0001-11-30T00:00:00+00:53",
    "processUserId": 0,
    "comment": "",
    "quantity": 2,
    "itemId": 564,
    "holdingArea": 0,
    "warehouseId": 1,
    "orderIdList": "308",
    "batchBestBeforeDateId": "0"
}

Sven von der webimpact® GmbH
www.webimpact.io
webimpact GmbH Logo Banner PlentyONE Enterprise Partner
:envelope: office@webimpact.io
:telephone_receiver: +49 (0) 2974 77 999 99

Hi Sven,

besten Dank für deine Antwort.

Und die 50 ist die PicklistenID aus Fulfillment->Pickliste? (/rest/fulfillment/picklist/picking_order_item/50)

Kannst du mir noch sagen, ob du evtl. noch irgendwelche Parameters für die Suche übergibst? Sortierung, Datum oder so?

Nein, meine offene Pickliste wäre die ID 16. Die ID 50 habe ich aus dem Response gefischt. Das ist eine picking_order_item ID.

Weitere Parameter habe ich nicht verwendet.

Sven von der webimpact® GmbH
www.webimpact.io
webimpact GmbH Logo Banner PlentyONE Enterprise Partner
:envelope: office@webimpact.io
:telephone_receiver: +49 (0) 2974 77 999 99

Hi,
weißt du evtl. wie ich am besten alle Items aus einer Pickliste (in deinem Fall ID 16) von der API erhalte? Oder geht nur über : zuerst alle picking_order_items anfragen, dann alle mit pickingOrderId zum Array und dann erneut jeden Eintrag aus dem Array einzeln durchjagen und die ItemID und Quantity sammeln? Ist dann sozusagen die einzige Möglichkeit?

Das weiß ich leider nicht. Der gefundene Weg wirkt etwas umständlich. In der Dokumentation habe ich nichts finden können um nach der Picklisten-ID zu filtern.

Sven von der webimpact® GmbH
www.webimpact.io
webimpact GmbH Logo Banner PlentyONE Enterprise Partner
:envelope: office@webimpact.io
:telephone_receiver: +49 (0) 2974 77 999 99

Alles klar, besten Dank für diene Hilfe.
Ich habe auch nichts im Handbuch gefunden und auch bereits mehrere Filter probiert, jedoch ohne Erfolg… Na ja, dann muss ich halt weiter mit csv arbeiten, wäre dann in diesem Fall der schnellste Weg..

Hi,

versuch es mal mit unserem kostenlosen Plugin:

Beste Grüße
Thorsten

Hi Thorsten,

besten Dank. Das Plugin habe ich bereits seit längerem im Einsatz.

Nur benötige ich keine Ausgabe der Aufträge, ich brauche einfach nur Ausgabe aller ItemIds + Menge für die bestimmte Pickliste. Das alles per API, damit ich diese Daten (bzw. Artikel+Menge) an das Lagersystem weitergeben kann und die Jungs dann entsprechend die Artikel im Lager picken können (vorerst ohne Auftragszuordnung).

Da wirst du über die API wohl sehr viel selbst erarbeiten müssen, das war schon im alten Forum ein graus.

Über /rest/fulfillment/picklist/ kannst du auf jeden fall an alle Picklisten kommen, dass sind aber auch immer alle (zumindest hab ich das dunkel im hinterkopf.

Über /rest/fulfillment/picklist/{id} solltest du theoretisch dann die Produktids bekommen die du mit /rest/fulfillment/picklist/picking_order_item/{id} weiter auslesen kannst.

Daraus war es dann irgendwie die orderItemId und damit dann die Varianten-ID aus der Bestellung ziehen. Irgendwie ganz seltsam, habs nicht mehr 100% im Kopf.

Problem ist, dass dieser Bereich wohl zu den ältesten von Plenty zählt und derjenige der das damals gebaut hat wohl nicht mehr da ist :slight_smile: ein hoch auf gute Software-Dokumentation.

Ich meine, es gab auch mal die aussage das eine der Methoden garnicht existieren oder entfernt wird (wenn ich nicht irre sogar unbekannt war) obwohl sie in der Doku ist :slight_smile:

Hi Kevin,
besten Dank für Deine Antwort.

Leider gibt mir die Route /rest/fulfillment/picklist/{id} keine OrderItemIds aus, sondern nur die zu der Pickliste zugehörige OrderID, also nur die Auftragsnummer selber, ohne der VariationIDs. Hab schon mehrere Möglichkeiten ausprobiert, komme leider nicht direkt zu den VariationIDs.

Den Beitrag zur Abschaltung dieser Route im alten Forum habe ich auch gefunden. Der Beitrag war aus 2021, aber die Route ist immernoch im Handbuch drin und ist auch nicht als veraltet gekennzeichnet.

Na gut, dann muss ich wohl die Daten weiterhin per csv ziehen.

Gerade wieder über den Platz gestolpert. Kann man die Picklisten eigentlich schon über die api erstellen?