• RE: Problem mit der Metadaten-Aktualisierung nach Dokumenten-Upload (Status 200, aber Indexfelder b

    Guten Tag! Wir konnten das Problem beheben, indem wir die Daten nun in das application/x-www-form-urlencoded-Format umgewandelt und an den Server gesendet haben. - Es funktioniert. Ich danke trotzdem.
  • Problem mit der Metadaten-Aktualisierung nach Dokumenten-Upload (Status 200, aber Indexfelder b

    Hallo zusammen,

    ich habe folgendes Problem mit der DocuWare API:

    Ich lade ein PDF-Dokument erfolgreich in ein DocuWare-Archiv hoch und erhalte einen HTTP-Statuscode 200 sowie die Dokumenten-ID. Danach versuche ich, die Metadaten des Dokuments mit einem PUT-Request zu aktualisieren. Auch hier erhalte ich einen Status 200, jedoch bleiben die Indexfelder leer.

    Hier ist mein Code für die Metadaten-Aktualisierung:

    // Minimalistische Anfrage ohne Metadaten
    echo "Versuche Upload ohne Metadaten...\n";

    $postFields = [
        'file' => new CURLFile($pdfFilePath, 'application/pdf', '12345.pdf')
    ];

    $headers = [
        "Accept: application/json",
        "Content-Type: multipart/form-data"
    ];

    $responseData = uploadDocument($docuwareUrl, $postFields, $headers);

    // Wenn der Upload erfolgreich war und eine Dokumenten-ID zurückgegeben wurde
    if ($responseData && isset($responseData['Id'])) {
        $documentId = $responseData['Id'];
        echo "Dokument erfolgreich hochgeladen. Dokumenten-ID: $documentId\n";

        // Update mit erweiterten Metadaten
        $updateUrl = "https://xxxxx.docuware.cloud/DocuWare/Platform/FileCabinets/$fileCabinetId/Documents/$documentId/Fields";

    // Metadaten für das Update (mit den spezifizierten Feldern)
    $metadata = [
        'Fields' => [
            ['FieldName' => 'DOCUMENT_TYPE', 'Item' => 'Rechnung', 'ItemElementName' => 'String'],
            ['FieldName' => 'COMPANY', 'Item' => '100033 Ecobulhart Ltd.', 'ItemElementName' => 'String'],
            ['FieldName' => 'DATE', 'Item' => '2024-09-08T00:00:00Z', 'ItemElementName' => 'DateTime'],
            ['FieldName' => 'DOCUMENT_NUMBER', 'Item' => '12345', 'ItemElementName' => 'String'],
            ['FieldName' => 'NETTOENDBETRAG', 'Item' => '200.00', 'ItemElementName' => 'Decimal'],
            ['FieldName' => 'ABRECHNUNG', 'Item' => 'Abrechnung XYZ', 'ItemElementName' => 'String'],
            ['FieldName' => 'BUCHUNGSDATUM', 'Item' => '2024-09-08T00:00:00Z', 'ItemElementName' => 'DateTime'],
            ['FieldName' => 'MANDANT', 'Item' => 'M1', 'ItemElementName' => 'String']
        ]
    ];
        
        
        

        // Konvertiere die Metadaten in JSON
        $metadataJson = json_encode($metadata, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
        echo "Sende folgende JSON-Daten:\n$metadataJson\n";

        // Ausgabe der zu sendenden JSON-Daten mit var_dump
    echo "Zu sendende JSON-Daten: ";
    var_dump($metadataJson);

        // cURL-Anfrage für die Aktualisierung der Metadaten
        $ch = curl_init($updateUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // Verwende PUT für die Aktualisierung
        curl_setopt($ch, CURLOPT_POSTFIELDS, $metadataJson);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Content-Type: application/json",
            "X-Organization: xxxxxxxxxxxxx",  // Stelle sicher, dass die Organisation-ID übermittelt wird
            "Accept: application/json"
        ]);

        // Setze Optionen für die sichere Verbindung und das automatische Folgen von Weiterleitungen
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Automatisch Weiterleitungen folgen
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // SSL-Zertifikatsüberprüfung in einer Produktionsumgebung aktivieren
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); // Session-Cookies verwenden

        echo "Versuche Update der Metadaten...\n";
        $response = curl_exec($ch);

        if (curl_errno($ch)) {
            echo 'Fehler bei der Metadatenaktualisierung: ' . curl_error($ch);
        } else {
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            echo "HTTP-Statuscode: $httpCode\n";
            
            if ($httpCode >= 200 && $httpCode < 300) {
                echo "Antwort Metadatenaktualisierung:\n$response\n";
            } else {
                echo "Fehlerhafte Antwort von der API:\n$response\n";
            }
        }

        curl_close($ch);
    }

    Trotz des Status 200 bleiben die Indexfelder im Dokument leer. Ich habe bereits geprüft:

    1. Die Feldnamen stimmen mit denen im DocuWare-Archiv überein.
    2. Die Datentypen sind korrekt.
    3. Ich erhalte keine Fehlermeldungen oder Warnungen in der API-Antwort.

    Hat jemand eine Idee, woran das liegen könnte oder was ich noch überprüfen sollte?

    Vielen Dank im Voraus für jede Hilfe!