Import aus REST-Quelle

Die REST-API wird von rimacon omniSuite nicht direkt unterstützt, aber durch die Nutzung von C#-Scripten lassen sich die REST-Quellen relativ leicht anbinden.

Aufgabe

Importieren Sie die ToDos aus der Quelle https://jsonplaceholder.typicode.com/todos.
JSON-Struktur:

[
{
    "userId": 1,
    "id": 1,
    "title": "delectus aut autem",
    "completed": false
},
{
    "userId": 1,
    "id": 2,
    "title": "quis ut nam facilis et officia qui",
    "completed": false
},        
...

Lösung

Schritt 1

Für REST-API nutzen wir die Bibliothek RestSharp (https://restsharp.dev). In diesem Beispiel wird die Version 106.9 genutzt.
Kopieren Sie die entsprechende RestSharp.dll in das cmdbcore.exe-Verzeichnis.

Schritt 2

Bei Import Neu ➟ Quelle Auswahl - wählen Sie C#

Schritt 3

Jetzt die einzelnen Code-Sektionen:
Referenzen

{$CMDBCOREDIR}\RestSharp.dll
Usings:
rimacon.cmdb.ExternalDataSet
System.Collections.Generic
RestSharp
RestSharp.Authenticators
Interne Definitionen:
class TodoRow
{
    public bool completed { get; set; }
    public int id { get; set; }
    public string title { get; set; }
    public int userId { get; set; }
}

List<TodoRow> CurrentData = null;
int CursorIndex = 0;
Open:
var client = new RestClient("https://jsonplaceholder.typicode.com");
var request = new RestRequest("/todos", DataFormat.Json);
var resp = client.Execute<List<TodoRow>>(request);
CurrentData = resp.Data;
CursorIndex = -1;
return ""; // Fehlermeldung    

FieldInfo:
return new FieldInfo[] { 
    new FieldInfo() { Name="completed", OriginalTypeAsString="bool", CmdbType=8, CmdbLength=-1, CmdbScale=0 }, 
    new FieldInfo() { Name="id", OriginalTypeAsString="int", CmdbType=8, CmdbLength=-1, CmdbScale=0 }, 
    new FieldInfo() { Name="title", OriginalTypeAsString="string", CmdbType=19, CmdbLength=-1, CmdbScale=0 }, 
    new FieldInfo() { Name="userId", OriginalTypeAsString="int", CmdbType=8, CmdbLength=-1, CmdbScale=0 }
};  // Beispiel
Read:
CursorIndex++;
return (CurrentData != null && CursorIndex < CurrentData.Count);
GetData:
errmsg= ""; // todo
if (CurrentData == null || CursorIndex >= CurrentData.Count) return "";
if (index == 0) return (CurrentData[CursorIndex].completed ? 1 : 0);
if (index == 1) return CurrentData[CursorIndex].id;
if (index == 2) return CurrentData[CursorIndex].title;
if (index == 3) return CurrentData[CursorIndex].userId;
return "";    
Close:
if (CurrentData != CurrentData) CurrentData.Clear();
CurrentData = null;    

Schritt 4

Button "Vorschau" anklicken.

Schritt 5

Die Quell-Konfiguration ist damit fertiggestellt und kann jetzt genauso wie andere Quellen genutzt werden.