Zum Hauptinhalt springen

Berichte

Um die für eine bestimmte Inspektion erstellten Berichte herunterzuladen, kann der folgende REST-Dienst verwendet werden. Endpunkte: /api/services/app/reports /api/services/custom/externalreport /api/reports

Veraltete Endpunkte: /api/services/app/reports

1. Abfrage von Berichten

Sobald ein Inspektor eine Inspektion abgeschlossen oder einen Berichtsentwurf erstellt hat, kann diese Liste von Berichten abgerufen werden.

Url: /getall

HTTP-Methode: GET

Beispiel:

GET https://dev.iclportal.com/api/services/custom/externalreports/getall HTTP/1.1

{
"Ergebnisse":[
{
"id":"c87be9ab-1d35-4c6a-8444-2aed3eb9a717",
"isDraft":false,
"reportState":3,
"fileName": "DerAktuelleDateiname.pdf",
"mimeType": "application/pdf",
"recipients":"",
"error":null,
"creationTime": "2016-03-15T14:55:06.182Z",
"created":"2016-03-15T15:10:08.257Z",
"inspectionCompletedDate": "2016-03-15T15:05:06.182Z",
"inspectionSentDate": "2016-03-15T15:10:12.182Z",
"workAreaId":"51cd73f7-d176-4833-9bd5-903eb9d8c0d3"
},
],
"__count":1
}

Beispiel 2 - Abrufen einer Liste von 10 Berichten, die seit einem bestimmten Zeitpunkt erfolgreich erstellt wurden:

GET https://dev.iclportal.com/api/services/custom/externalreports/getall?$filter=Created+ge+datetime%272016-03-15T00:00:00%27&$inlinecount=allpages&$top=10 HTTP/1.1 HTTP/1.1

{
"results":[
{
"id":"c87be9ab-1d35-4c6a-8444-2aed3eb9a717",
"isDraft":false,
"reportState":3,
"fileName": "DerAktuelleDateiname.pdf",
"mimeType": "application/pdf",
"recipients":"",
"error":null,
"creationTime": "2016-03-15T14:55:06.182Z",
"created":"2016-03-15T15:10:08.257Z",
"inspectionCompletedDate": "2016-03-15T15:05:06.182Z",
"inspectionSentDate": "2016-03-15T15:10:12.182Z",
"workAreaId":"51cd73f7-d176-4833-9bd5-903eb9d8c0d3"
},
],
"__count":1
}
NameTypBeschreibung
idstringDie eindeutige Identität eines Berichts. Hinweis: Jedes Mal, wenn ein Bericht neu erstellt wird, wird ein neuer Datensatz für ihn angelegt. Daher ändert sich auch die ID.
isDraftbooleanWenn true, bedeutet dies, dass es sich nicht um einen endgültigen Bericht handelt, sondern um einen Berichtsentwurf, der vor Abschluss einer Inspektion erstellt wurde, um eine Vorschau des Dokuments zu erhalten
reportStatenumberGibt an, in welchem Zustand sich ein Bericht befindet. Kann 0..neu, 1..ausstehend, 2..fehlgeschlagen, 3..abgeschlossen sein.
fileNamestringDer Dateiname
mimeTypestringDer Mime-Typ
recipientsstringKommagetrennte Liste aller E-Mail-Adressen, an die dieser Bericht gesendet wurde.
errorstringFalls der Berichtsstatus 2..fehlgeschlagen ist, wird in diesem Feld die Fehlermeldung angezeigt.
creationTimedateDer Zeitpunkt, zu dem der Datensatz für diesen Bericht erstellt wurde. Hinweis: Dies geschieht in der App, sodass die Verwendung dieses Feldes zum Filtern von Berichten zu fehlenden Daten führen kann, da diese Berichte möglicherweise noch nicht synchronisiert wurden.
createddateDer Zeitpunkt, zu dem der Bericht auf dem Server erstellt wurde. Dieses Feld kann für Abfragen von inkrementellen Änderungen verwendet werden.
inspectionCompletedDatedateDer Zeitpunkt, an dem der Benutzer die Inspektion in der App abgeschlossen hat. Hinweis: Dies geschieht in der App, sodass die Verwendung dieses Feldes zum Filtern von Berichten zu fehlenden Daten führen kann, da diese Berichte möglicherweise noch nicht synchronisiert wurden.
inspectionSentDatedateDer Zeitpunkt, an dem die App festgestellt hat, dass alle Daten an den Server übertragen und alle Abschlussberichte erfolgreich erstellt wurden. Hinweis: Dies geschieht in der App, sodass die Verwendung dieser Angabe zum Filtern von Berichten zu fehlenden Daten führen kann, da diese Berichte möglicherweise noch nicht synchronisiert wurden.
workAreaIdstringDie eindeutige Identität des Teams, in dem dieser Bericht (und seine übergeordnete Prüfung) erstellt wurde.

Der Prozess zur Erstellung der Berichte läuft folgendermaßen ab:

  1. Der Benutzer schließt die Inspektion in der App ab. (inspectionCompletedDate)
  2. Daher werden die Datensätze für die Abschlussberichte erstellt (creationTime)
  3. Der Server erstellt die Berichte und legt ihr Erstellungsdatum fest. (created)
  4. Wenn die App die Bestätigung erhält, dass alle Berichte erstellt wurden, kennzeichnet sie die Inspektion als gesendet (inspectionSentDate) Dies zeigt, dass diese Datumsfelder immer die folgende Beziehung haben: InspectionCompletedDate < creationTime < created < inspectionSentDate

Parameter: Dies ist ein ODATA 3.0 Endpunkt, mit dem Sie die Aufgaben im System abfragen können.

Hinweis

Sie können alle Attribute der zurückgegebenen json-Objekte verwenden, um eine Abfrage zu erstellen. Aufgrund der ODATA-Spezifikation müssen Sie sie jedoch in der Abfrage in Großbuchstaben schreiben. Da dies eine Konvention in JSON und der JavaScript-Arbeit ist, werden unsere Ergebnisse mit klein geschriebenen Attributnamen zurückgegeben.

Beispiel: Sie erhalten eine Aufgabe wie:

{"workAreaTitle": "Vienna Inspectors", ...}
Wie Sie sehen können, beginnt das Attribut "workAreaTitle" mit einem Kleinbuchstaben.
Wenn Sie jedoch den ODATA-Endpunkt mit "workAreaTitle" abfragen, müssen Sie den ersten Buchstaben in Großbuchstaben schreiben:
/getall?$filter=WorkAreaTitle+eq+....
Hinweis

"WorkArea" ist unser interner Name für "Team".

2. Abrufen der Liste der Berichte für eine Inspektion

Sobald ein Inspektor eine Inspektion abgeschlossen oder einen Berichtsentwurf erstellt hat, kann die Liste der Berichte abgerufen werden.

Url: /getofinspection

HTTP-Methode: GET

Beispiel:

GET https://dev.iclportal.com/api/services/app/reports/getofinspection?inspectionId=<uniqueid> HTTP/1.1

NameTypeRequired?Description
inspectionIdstringRequiredDie eindeutige Identität der Inspektion, zu der die Berichte gehören. (Um die inspectionId zu erhalten, siehe 3.3)

Der Server antwortet mit einem 200 OK, das ein Ergebnisobjekt im Antwortkörper enthält, das wiederum ein JSON-Array mit den folgenden Einträgen ist:

NameTypBeschreibung
idstringDie eindeutige ID des Berichts.
isDraftbooleanTrue, wenn dies ein Berichtsentwurf ist, der jederzeit gelöscht werden kann. False, wenn es sich um einen endgültigen Bericht handelt.
reportStateenumerationDer aktuelle Status, in dem sich dieser bestimmte Bericht befindet: Pending = 0, // wartet darauf, generiert zu werden Generating = 1, // wird gerade generiert Failed = 2, // konnte den Bericht nicht generieren Generated = 3, // der Bericht ist vollständig und kann abgerufen werden
fileNamestringDer tatsächliche Dateiname dieses Berichts.
mimeTypestringDer Mimetyp der Berichtsdatei.
recipientsstringDie Liste der E-Mail-Empfänger, an die dieser Bericht gesendet wird/wurde.
errorstringFalls bei der Erstellung des Berichts ein Fehler aufgetreten ist, enthält dieses Feld die aktuelle Fehlermeldung.
createddateDas Datum und die Uhrzeit, zu der dieser Bericht erstellt wurde.
workAreaIdstringDie weltweit eindeutige ID des Arbeitsbereichs/Teams, dem dieser Bericht zugeordnet ist.

Beispiel für Anfrage und Antwort 2

Anfrage:

GET https:// dev.iclportal.com/api/services/app/reports/getofinspection?inspectionId=98e678a5-e771-46dd-b933-8a3ee9059684 HTTP/1.1
Rechner: dev.iclportal.com
Verbindung: keep-alive
Akzeptiert: application/json, text/plain, */*
Benutzer-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/50.0.2661.102 Safari/537.36
Autorisierung: Bearer <langes Token>

Antwort:

HTTP/1.1 200 OK
Cache-Kontrolle: no-cache
Pragma: no-cache
Inhalt-Länge: 204
Inhalt-Typ: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 25 Jan 2016 11:23:53 GMT

{
"results":[
{
"id":"c87be9ab-1d35-4c6a-8444-2aed3eb9a717",
"isDraft":false,
"reportState":3,
"fileName": "DerAktuelleDateiname.pdf",
"mimeType": "application/pdf",
"recipients":"",
"error":null,
"created":"2016-03-15T15:10:08.257Z",
"workAreaId":"51cd73f7-d176-4833-9bd5-903eb9d8c0d3"
},
],
"__count":1
}

3. Herunterladen von Berichten

Um einen generierten Bericht (reportstate=3) herunterzuladen, können Sie diese Url verwenden

Url: /get

HTTP-Methode: GET

Beispiel:

GET https://dev.iclportal.com/api/reports/get/<reportId> HTTP/1.1

NameTypeRequired?Description
reportIdstringRequiredDie eindeutige Identität des Berichts

Der Server antwortet mit einem 200 OK, das die eigentliche Berichtsdatei im Antwortstrom enthält.

Beispiel für Anfrage und Antwort 3

Anfrage:

GET https:// dev.iclportal.com /api/reports/get/c87be9ab-1d35-4c6a-8444-2aed3eb9a717 HTTP/1.1
Rechner: dev.iclportal.com
Verbindung: keep-alive
Autorisierung: Bearer <langes Token>

Antwort:

HTTP/1.1 200 OK
Cache-Kontrolle: no-cache
Pragma: no-cache
Inhalt-Typ: application/pdf
Inhalt-Encoding: gzip
Expires: -1
Server: Microsoft-IIS/10.0
Set-Cookie: fileDownload=true; path=/
Inhalt-Disposition: Anhang; Dateiname=DerAktuelleDateiname.pdf
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 01 Jun 2016 10:13:00 GMT
Inhalt-Länge: 83756

%PDF-1.5
4 0 obj
<</Type /Page/Parent 3 0 R/Contents 5 0 R/MediaBox [0 0 595.45001221 841. 70001221]/Resources<</Font<</FAAAAH 7 0 R/FAAABA 10 0 R/FAAABD 13 0 R/FAAABG 16 0 R/FAAABJ 19 0 R/FAAACF 25 0 R>>/XObject<</X1 28 0 R>>>>/Group <</Type/Group/S/Transparency/CS/DeviceRGB>>/Annots[23 0 R 27 0 R ]>>
endobj
5 0 obj
<</Länge 29 0 R/Filter /FlateDecode>>stream
x Y r M K N2 oԐR EY3. U I EOjf 6 _ _ y S~ = H * #\ . n 8 M ~x-
......

4. Abrufen geänderter Berichte

Diese API bietet Ihnen eine Möglichkeit, alle Berichte abzurufen, die sich seit dem letzten Aufruf der API geändert haben. Dies wird mit Hilfe eines changeToken realisiert, den Sie in einem externen System speichern müssen.

Ein ausführlicheres Beispiel finden Sie im incremental changes walkthrough.

GET https://dev.iclportal.com/api/services/custom/externalReports/GetChanges HTTP/1.1
Akzeptieren: application/json
Autorisierung: Bearer HwBUGEn1p9S5BJi6iM.....

Die Antwort liefert uns die Berichte (wie erwartet), enthält aber einen nextChangeToken und einen nextLink, womit wir die nächsten 500 geänderten Berichte abrufen können.

{
"result": {
"results": [
{
"id": "4b2c2e24-52b6-4f3f-8efa-3fd7b15c3e0c",
"reportState": 3,
"error": null,
"isDraft": false,
"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-Kontrolle",
"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, // damit erhalten Sie auch gelöschte Berichte
"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-Kontrolle",
"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, // damit erhalten Sie auch gelöschte Berichte
"deletionTime": null
},
... viele viele mehr... (500 insgesamt)
],
"nextChangeToken": "AAAAAAAFpYA",
"nextLink": "https://dev.iclportal.com/api/services/custom/externalReports/GetChanges?changeToken=AAAAAAAFpYA"
},
"targetUrl": null,
"success": true,
"error": null,
"unAuthorizedRequest": false,
"__abp": true
}

dieser Endpunkt gibt auch gelöschte Berichte zurück

Da dieser Endpunkt dazu dient, inkrementelle Änderungen zu erhalten, gibt er auch gelöschte Berichte zurück, sodass Sie diese entsprechend aus Ihrem System entfernen können.

Direkt auf die letzte Seite gelangen

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 jedoch diesen Mechanismus nutzen, um direkt zur letzten Seite der geänderten Berichte zu gelangen, indem Sie den höchstmöglichen Änderungs-Token __________8 verwenden. Dies ist praktisch, wenn Sie nur die Änderungen von jetzt abrufen wollen und nicht alle historischen Änderungen durchgehen wollen.