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:
- Die Feldnamen stimmen mit denen im DocuWare-Archiv überein.
- Die Datentypen sind korrekt.
- 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!