3. Abrufen der neuesten Berichte
Ein typisches Integrationsszenario ist, dass Sie alle Abschlussberichte von Inspektionen abrufen müssen, um sie z.B. in einem speziellen Dokumentenmanagementsystem zu speichern. Dies kann sogar eine gesetzliche Anforderung sein. Hierfür gibt es zwei Ansätze.
- Sie können die Änderungen von Aufgaben abfragen, bis eine Aufgabe als erledigt markiert ist und ein Sendedatum hat. Zu diesem Zeitpunkt können Sie alle Berichte zu dieser Aufgabe/Inspektion abfragen und jede Datei einzeln herunterladen.
- Der einfachere Ansatz ist, die Änderungen der Berichte selbst abzufragen.
In jedem Fall müssen Sie überprüfen, ob es sich bei dem Bericht nicht um einen Entwurf handelt und ob er erfolgreich erstellt worden ist. Dies kann durch die Überprüfung der Eigenschaften "isDraft" und "reportState" des Berichts erfolgen.
- Ein Bericht, bei dem
isDraft
auftrue
gesetzt ist, ist nur ein Berichtsentwurf, der vom Benutzer während der Prüfung erstellt wurde, um zu sehen, wie der Bericht aussehen wird. - Jeder andere
reportState
als3
bedeutet, dass der Bericht nicht erfolgreich erstellt wurde und Sie ihn nicht herunterladen sollten.
Berichte haben ihre eigene Reihe von Zuständen.
0
... bedeutet in Bearbeitung oder in Erwartung der Erstellung1
... sobald das Portal mit der Erstellung des Berichts beginnt, wird der Status auf1
gesetzt, was in Erstellung bedeutet2
... falls etwas schiefgeht - z.B. ein Fehler in der Berichtsvorlage - wird der Status auf2
gesetzt, was Fehler bedeutet3
... oder wenn alles gut geht und der Bericht erfolgreich erstellt wurde, wird der Status auf3
gesetzt, was erstellt bedeutet
1. Ansatz: Herunterladen von Berichten über abgeschlossene Aufgaben/Inspektionen
Dieser erste Ansatz ist ratsam, wenn Sie zusätzlich einige Metadaten zu den Aufgaben in Ihrem Altsystem aktualisieren müssen. Während Sie bereits die Änderungen von Aufgaben abfragen, können Sie auch prüfen, ob die Aufgabe abgeschlossen ist und ein Sendedatum hat, um festzustellen, ob es Berichte zum Herunterladen gibt.
Als Erstes sollten Sie die zuletzt geänderten Aufgaben abfragen.
Um ein tieferes Verständnis dieser API zu erhalten, lesen Sie bitte diese Anleitung.
GET https://dev.iclportal.com/api/services/custom/externalTask/GetChanges?changeToken=AAAAAAAFpYA HTTP/1.1
Accept: application/json
Authorization: Bearer HwBUGEn1p9S5BJi6iM.....
AAAAAAAFpYA
ist ein fiktiver Änderungs-Token. Sie müssen es durch den letzten Änderungs-Token ersetzen, den Sie vom vorherigen Aufruf erhalten haben, oder den Token weglassen
So erhalten Sie die zuletzt geänderten Aufgaben. Nehmen wir nun an, dass eine der Aufgaben den Status abgeschlossen und ein Absendedatum hat:
{
"result": {
"results": [
{
"id": "5bb89fe4-25dd-4014-b00e-c3ed05c15213",
"inspectionId": "6603837e-2d0d-4b3b-9264-99867c4151a8",
"externalId": "TSK___000001",
"title": "Task 000000",
"workbookId": "baf7b34d-825a-443b-bf5e-928ff83d9c2e",
"workbookTitle": "test iWorkbook",
"workbookVersionCode": 52,
"assignedUserId": 4,
"assignedUserName": "antoine gadget",
"description": null,
"startDate": null,
"dueDate": null,
"state": 3, // das ist der Status "erstellt"
"isSelfAssignable": true,
"workAreaId": "6058f602-f55b-45b2-90b2-9081869f7774",
"workAreaTitle": "test",
"isPublished": true,
"actualStart": "2022-10-18T13:16:23.583Z",
"actualEnd": "2022-10-18T14:15:23.583Z", // der Inspektor hat diese Aufgabe erfüllt
"sentDate": "2022-10-18T16:20:00.583Z", // und das Sendedatum ist gesetzt, was bedeutet, dass alle erforderlichen Berichte erstellt wurden
"hasTask": true,
"lastModificationTime": "2022-10-21T13:16:23.583Z",
"inspectedItems": null,
"isDeleted": false
},
... many many more... (500 total)
],
"nextChangeToken": "AAAAAAAFpYA",
"nextLink": "https://dev.iclportal.com/api/services/custom/externalTask/GetChanges?changeToken=AAAAAAAFpYA"
},
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}
Sie wissen nun, dass Sie die Berichte dieser Aufgabe abfragen können. Dazu müssen Sie zunächst alle Berichte zu dieser Aufgabe/Inspektion abrufen:
GET https://dev.iclportal.com/api/services/app/reports/getofinspection?inspectionId=6603837e-2d0d-4b3b-9264-99867c4151a8
Authorization: Bearer HwBUGEn1p9S5BJi6iM.....
inspectionid
Beachten Sie, dass Sie die inspectionid
und nicht die externalid
für diesen Endpunkt benötigen
So erhalten Sie eine Liste aller Berichte zu dieser Aufgabe/Inspektion
{
"result": {
"results": [
{
"id": "5576222e-6936-41e5-adc2-468ee5022e35",
"isDraft": false, // dieser Bericht ist ein Abschlussbericht
"reportState": 3, // 3 bedeutet "erfolgreich erstellt"
"fileName": "003ZP1332-2022-3_WORD.docx",
"mimeType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"recipients": null,
"error": null,
"created": "2022-10-18T13:28:09.48Z",
"workAreaId": "f46628b0-8eb2-4db3-b142-e77c23572400"
},
{
"id": "472ec6d5-3a8f-45d0-812c-be801de8dd9a",
"isDraft": false, // dieser Bericht ist ein Abschlussbericht
"reportState": 3, // 3 bedeutet "erfolgreich erstellt"
"fileName": "003ZP1332-2022-3.pdf",
"mimeType": "application/pdf",
"recipients": "optiqser@opti-q.com,office@democorp.com",
"error": null,
"created": "2022-10-18T13:27:48.997Z",
"workAreaId": "f46628b0-8eb2-4db3-b142-e77c23572400"
}
],
"__count": 2
},
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}
Wie Sie sehen können, geben die Ergebnisse Auskunft darüber, wann der Bericht erstellt wurde und was der Bericht ist (pdf, word, etc.).
Wichtiger ist jedoch, dass der reportState
3 ist.
Der letzte Schritt besteht darin, jeden Bericht anhand seiner id
über die reports get API herunterzuladen.
GET https://dev.iclportal.com/api/reports/get/5576222e-6936-41e5-adc2-468ee5022e35
Authorization: Bearer HwBUGEn1p9S5BJi6iM.....
Die Antwort ist die Datei mit einem Content-Disposition
-Header, der auf attachment; filename="003ZP1332-2022-3_WORD.docx"
gesetzt ist.
2. Ansatz: Herunterladen aller abgeschlossenen Berichte
Dieser Ansatz verwendet die reports getchanges API.
Beim ersten Aufruf können Sie den Parameter changeToken
weglassen.
GET https://dev.iclportal.com/api/services/custom/externalReports/GetChanges HTTP/1.1
Accept: application/json
Authorization: Bearer HwBUGEn1p9S5BJi6iM.....
Die Antwort liefert uns die Berichte (wie erwartet), enthält aber einen "NextChangeToken" und einen "NextLink", mit denen wir die nächsten 500 geänderten Berichte abrufen können.
{
"result": {
"results": [
{
"id": "4b2c2e24-52b6-4f3f-8efa-3fd7b15c3e0c",
"reportState": 3, // erfolgreich generiert
"error": null,
"isDraft": false, // kein Berichtsentwurf
"fileName": null,
"mimeType": null,
"recipients": "optiqser@opti-q.com,s.p@opti-q.com",
"taskTitle": null,
"taskId": null,
"inspectionId": "a4da0ea9-e567-4c15-8c8f-25526b17d1a4",
"taskExternalId": null,
"inspectionTitle": "Brandschutz-Kontrolle 13.08.2021",
"workAreaTitle": "Brandschutz Test",
"workbookTitle": "Brandschutz-Kontrolle",
"creationTime": "2021-08-13T11:58:39.72Z",
"created": "2021-08-13T11:59:50.637Z",
"inspectionCompletedDate": "2021-08-13T11:58:13.533Z",
"inspectionSentDate": "2021-08-13T12:00:51.95Z",
"workAreaId": "c9518bd5-016f-4030-9937-86e5c3a1b97f",
"isDeleted": false, // nicht gelöscht
"deletionTime": null
},
{
"id": "9ab5d5b7-d692-4600-a82b-c0e1e271c4d7",
"reportState": 3,
"error": null,
"isDraft": false,
"fileName": null,
"mimeType": null,
"recipients": null,
"taskTitle": null,
"taskId": null,
"inspectionId": "a4da0ea9-e567-4c15-8c8f-25526b17d1a4",
"taskExternalId": null,
"inspectionTitle": "Brandschutz-Kontrolle 13.08.2021",
"workAreaTitle": "Brandschutz Test",
"workbookTitle": "Brandschutz-Kontrolle",
"creationTime": "2021-08-13T11:59:58.31Z",
"created": "2021-08-13T12:00:25.94Z",
"inspectionCompletedDate": "2021-08-13T11:58:13.533Z",
"inspectionSentDate": "2021-08-13T12:00:51.95Z",
"workAreaId": "c9518bd5-016f-4030-9937-86e5c3a1b97f",
"isDeleted": false, // Sie erhalten auch gelöschte Berichte
"deletionTime": null
},
... many many more... (500 total)
],
"nextChangeToken": "AAAAAAAFpYA",
"nextLink": "https://dev.iclportal.com/api/services/custom/externalReports/GetChanges?changeToken=AAAAAAAFpYA"
},
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}
Um also die nächsten 500 geänderten Berichte zu erhalten, können Sie entweder nur den Wert "NextLink" verwenden oder die API mit "NextChangeToken" wie folgt aufrufen:
GET https://dev.iclportal.com/api/services/custom/externalReports/GetChanges?changeToken=AAAAAAAFpYA HTTP/1.1
Accept: application/json
Authorization: Bearer HwBUGEn1p9S5BJi6iM.....
Da es keine weiteren Änderungen mehr gibt, gibt das System einfach die letzte verfügbare Änderung zurück, was in der Regel genau der gleiche Änderungs-Token ist, den wir gerade in der Anfrage verwendet haben.
Sie können diesen Mechanismus jedoch nutzen, um direkt zur letzten Seite der geänderten Berichte zu gelangen, indem Sie den höchstmöglichsten Änderungs-Token __________8
verwenden.
Dies ist praktisch, wenn Sie nur die Änderungen von jetzt abrufen wollen und nicht alle historischen Änderungen durchgehen wollen.
Dann, für jeden Bericht, der
- nicht gelöscht ist (d.h.
isDeleted
istfalse
) - erfolgreich erstellt wurde (d.h.
reportState
ist3
) - und kein Entwurfsbericht ist (d.h.
isDraft
istfalse
) können Sie den Bericht über die reports get API unter Verwendung seinerid
herunterladen.
GET https://dev.iclportal.com/api/reports/get/4b2c2e24-52b6-4f3f-8efa-3fd7b15c3e0c
Authorization: Bearer HwBUGEn1p9S5BJi6iM.....
Die Antwort ist die Datei mit einem Content-Disposition
-Header, der auf attachment; filename="003ZP1332-2022-3_WORD.docx"
gesetzt ist.