Jetzt teilnehmen:Online-Umfrage zur Verbesserung von DRACOONMehr Infos

Dracoon API - Monday.com Integration

Kommentare

9 Kommentare

  • Offizieller Kommentar
    Avatar
    Florian Scheuer

    Hallo,

    ja, das ist sogar sehr gut möglich. Unsere wachsende Entwicklerdokumentation ist hier abgelegt: https://support.dracoon.com/hc/de/categories/115000849985-Developer-Information
    Zudem bietet DRACOON eine vollständige Dokumentation der API mit OpenAPI 2.0 über Swagger an. Eine interaktive Dokumentation ist automatisch auf jeder Umgebung unter /api deployed; z.B. https://dracoon.team/api. Wir bieten SDKs für Java, C# und Swift an: https://github.com/dracoon.

    Konkret könnte die Aufgabe folgendermaßen gelöst werden:

    1. Verwenden eines Nutzers mit der Rolle "Raum-Manager".
    2. Login des Nutzers mit OAuth.
    3. Anlegen des Datenraums (POST /nodes/rooms); Nutzer wird Datenraumadministrator.
    4. ggf. Berechtigung weiterer Nutzer und/oder Gruppen auf den Datenraum. (PUT /nodes/rooms/{room_id}/users bzw. /groups)
    5. Anlegen der gewünschten Datenräume der nächsten Ebene (POST /nodes/rooms); Aktivierung der Vererbung, damit die Rechte des übergeordneten Datenraums übernommen werden.
    6. Logout des Nutzers

    Ich hoffe, das hilft schon einmal. Bei Rückfragen helfen wir gerne weiter!

    Viele Grüße
    Florian

    Aktionen für Kommentare Permalink
  • Avatar
    Maximilian Plach

    Hallo Florian,

    Besten Dank erst mal. Wir haben uns entlang der "Getting started with DRACOON API" Dokumentation gehangelt. Einen GET /public/software/version bekommen wir hin; die prinzipielle Kommunikation funktioniert also. Wir sind allerdings darauf angewiesen, das ganze aus VBA heraus zu machen.

    Leider kommen wir momentan bei der Authentifizierung des Nutzers nicht weiter.

    Skript:

    Option Explicit

    Sub Test_LateBinding()

    Dim objRequest As Object

    Dim host As String
    Dim apipath As String
    Dim api As String

    Dim password As String
    Dim userName As String
    Dim authType As String
    Dim token As String
    Dim state As String

    Dim blnAsync As Boolean
    Dim strResponse As String

    Set objRequest = CreateObject("MSXML2.XMLHTTP")

    host = "https://data.2bind.com/"
    apipath = "api/v4/"
    api = "auth/login"

    password = "XXXXXXXXXXXXXXXX"
    userName = "dracoon_room_manager@2bind.com"
    authType = "sql"

    blnAsync = True

    With objRequest
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "password", password
    .SetRequestHeader "userName", userName
    .SetRequestHeader "authType", authType
    .Send

    ' Spin wheels whilst waiting for response
    While .readyState <> 4
    DoEvents
    Wend
    strResponse = .ResponseText
    End With

    Debug.Print strResponse

    End Sub

    Response:

    {"code":401,"message":"Unauthorized","debugInfo":"","errorCode":null}

     

    Viele Grüße

       Max

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Roland Siegert

    Hallo Max,

    ihr versucht, die Login-Infos als Header des Requests zu senden.

    Jedoch müssen diese als JSON im Body des Requests übermittelt werden.

    Beispiel:

    objRequest.Send "{""login"": ""dracoon_room_manager@2bind.com"", ""password"": ""XXXXXXXXXXXXXXXX"", ""authType"": ""sql""}"

    Beste Grüße
    Roland

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Maximilian Plach

    Hallo Roland,

    Top! Genau das wars.
    Wir sind inzwischen gut weiter gekommen. User Info anzeigen, Logout, etc. funktioniert alles bestens.

    Scheinbar haben wir aber ein kleines Syntaxproblem in VBA (wieder einmal...):

     

    .Send "{""name"": ""TESTROOM"", ""parentId"": 1932, ""recycleBinRetentionPeriod"": 0, ""quota"": 0, ""inheritPermissions"": True, ""adminIds"": [4], ""adminGroupIds"": [4, 25]}"

    gibt uns als response:

    {"code":400,"message":"Bad Request","debugInfo":"JSON parse error.","errorCode":null}

     

    Der Fehler liegt vermutlich in den "Listen", die für die Argumente "adminIds" und "adminGroupIds" angegeben sind.
    Wenn die beiden Argumente heraus genommen werden, funktioniert das Anlegen des Raums.

    Danke!
       Max

     

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Maximilian Plach

    Hallo, noch ein "kurzes" Update. Unten der bisherige Code.

    Was funktioniert:

    • Einloggen eines Users
    • Anlegen eines Raums für einen "Customer" innerhalb des Raums "CustomersNEW". Letzterer ist ein Top-Level Raum.
    • Anlegen von Sub-Räumen "Quotations", "Projects" und "Upload"

    Was noch nicht funktioniert:

    • Verwenden eines Users mit der Rolle "Raum Manager". Nur wenn ich meine User-Credentials verwende, klappt das oben augelistete. Ich selbst bin "Raum Administrator" für den Raum "CustomersNEW". Der User "dracoon_room_manager@2bind.com" kann dies nicht, obwohl er die Rolle "Raum Manager" hat.
    • Ausloggen am Ende (/users/logout call; scheint in der neuesten API nicht mehr verfügbar?)
    • Verwenden expliziter Raum-Admin und Raum-Admingruppen IDs (siehe Kommentar darüber)

    Besten Dank für die Hilfe!

       Max

     

    Option Explicit

    Sub Test_LateBinding()

    Dim objRequest As Object
    Dim JSONa As Object

    Dim host As String
    Dim apipath As String
    Dim api As String
    Dim blnAsync As Boolean

    Dim respLogin As String
    Dim token As String
    Dim state As String
    Dim arrLogin As Variant

    Dim respRoom As String
    Dim customerRoomId As String
    Dim arrRoom As Variant


    Dim debugFile As Integer


    Set objRequest = CreateObject("MSXML2.XMLHTTP")

    host = "https://data.2bind.com/"
    apipath = "api/v4/"

    blnAsync = True

    With objRequest


    'Login the Room Manager User
    api = "auth/login"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    '.Send "{""login"": ""dracoon_room_manager@2bind.com"", ""password"": ""XXXXXXXXXXXXXXXXXX"", ""authType"": ""sql""}"
    .Send "{""login"": ""plach@2bind.com"", ""password"": ""XXXXXXXXXXXXXXXXX"", ""authType"": ""sql""}"

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    'Split the response to get the token
    respLogin = Replace(.ResponseText, ",", ":")
    respLogin = Replace(respLogin, """", "")
    respLogin = Replace(respLogin, "{", "")
    respLogin = Replace(respLogin, "}", "")
    arrLogin = Split(respLogin, ":")
    token = arrLogin(1)

    'Display results
    If .Status = 200 Then
    Debug.Print "Login sucessfull!"
    Else
    Debug.Print "Something went wrong during user login!"
    End If


    'Test the login by getting some user information
    api = "user/account"
    .Open "GET", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token
    .Send

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    'Display results
    If .Status = 200 Then
    Debug.Print "User Info Retrieval sucessfull!"
    Else
    Debug.Print "Something went wrong during user login!"
    End If

    api = "nodes"
    .Open "GET", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token
    .Send

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    'debugFile = FreeFile()
    'Open "C:\Users\LocalAdmin\Desktop\debug.txt" For Output As #debugFile
    'Print #debugFile, .ResponseText
    'Close #debugFile



    'Create new customer room
    api = "nodes/rooms"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token

    'Room ID 1932 is for the "Customers" Top-Level dataroom
    'Room ID 45210 is for the "CustomersNEW" Top-Level dataroom
    .Send "{""name"": ""TESTROOM"", ""parentId"": 45210, ""recycleBinRetentionPeriod"": 90, ""quota"": 0}"

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    respRoom = Replace(.ResponseText, ",", ":")
    respRoom = Replace(respRoom, """", "")
    respRoom = Replace(respRoom, " ", "")
    respRoom = Replace(respRoom, "{", "")
    respRoom = Replace(respRoom, "}", "")
    arrRoom = Split(respRoom, ":")
    customerRoomId = arrRoom(1)

    'Display results
    If .Status = 201 Then
    Debug.Print "Room successfully generated."
    Else
    Debug.Print "Something went wrong during room generation!"
    End If



    'Create the subrooms inside the customer room
    'Quotations room
    api = "nodes/rooms"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token

    'Room ID comes from the parent customer room
    .Send "{""name"": ""Quotations"", ""parentId"": " & customerRoomId & ", ""recycleBinRetentionPeriod"": 90, ""quota"": 0}"

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    'Display results
    If .Status = 201 Then
    Debug.Print "Subroom Quotations successfully generated."
    Else
    Debug.Print "Something went wrong during generation of the subroom Quotations!"
    End If

    'Projects room
    api = "nodes/rooms"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token

    'Room ID comes from the parent customer room
    .Send "{""name"": ""Projects"", ""parentId"": " & customerRoomId & ", ""recycleBinRetentionPeriod"": 90, ""quota"": 0}"

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    'Display results
    If .Status = 201 Then
    Debug.Print "Subroom Projects successfully generated."
    Else
    Debug.Print "Something went wrong during generation of the subroom Projects!"
    End If

    'Upload room
    api = "nodes/rooms"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token

    'Room ID comes from the parent customer room
    .Send "{""name"": ""Upload"", ""parentId"": " & customerRoomId & ", ""recycleBinRetentionPeriod"": 30, ""quota"": 1000000000}"

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    'Display results
    If .Status = 201 Then
    Debug.Print "Subroom Upload successfully generated."
    Else
    Debug.Print "Something went wrong during generation of the subroom Upload!"
    End If



    Logout again
    api = "user/logout"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json"
    .SetRequestHeader "X-Sds-Auth-Token", token
    .Send

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    Debug.Print .ResponseText

    'Display results
    If .Status = 200 Then
    Debug.Print "Logout sucessfull!"
    Else
    Debug.Print "Something went wrong during user logout!"
    End If



    End With

    End Sub
    0
    Aktionen für Kommentare Permalink
  • Avatar
    Maximilian Plach

    Hallo, kurzes Update:

    Wir haben es geschafft, das Skript zum Laufen zu bringen. Das Problem war, dass ds UTF-8 Charset noch explizit spezifiziert werden musste.

    Allerdings gibt es immer noch zwei Probleme:

    1. Ein "Room Manager" User kann die Aktionen nicht ausführen; obwohl er doch die Rechte haben sollte, Räume anzulegen (und die ja nicht nur im Toplevel, sondern auch eine Eben darunter? Oder müsste der User dazu auch "Room Admin" für diesen Ordner sein?
    2. Logout funktioniert nicht.

    Danke!

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Florian Scheuer

    Hallo,

    1. "Room Manager" kann lediglich auf oberster Ebene Räume anlegen; auf den weiteren Ebenen übernehmen die jeweiligen Raum-Administratoren diese Aufgabe.

    2. Welchen Fehler erscheint beim Logout-Versuch? Üblicherweise gibt DRACOON API über entsprechende Status- und Fehlercodes detaillierte Informationen über mögliche Fehlersituationen.

    Viele Grüße
    Florian

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Maximilian Plach

    Hallo Florian,

    besten Dank.

    1. Ist es nicht möglich einen Raum-Admin für die zweite Raum-Ebene einzurichten? Denn im Grunde benötigt der User, über den per API neue Räume angelegt werden ja keine Admin-Rechte (inkl. Lesen, Schreiben, Löschen, Anlegen von Shares, etc.). Lediglich die Funktion zum Anlegen von Räumen wird benötigt.

    2. Es gibt leider keinen entsprechenden response text, dieser scheint schlicht leer zu sein. Der Code über den der logout stattfinden soll:

    api = "user/logout"
    .Open "POST", host & apipath & api, blnAsync
    .SetRequestHeader "Content-Type", "application/json;charset=UTF-8"
    .SetRequestHeader "X-Sds-Auth-Token", token
    .Send

    'Wait for response
    While .readyState <> 4
    DoEvents
    Wend

    Debug.Print .ResponseText

    Die API "users/logout" stammt aus dem "Einstieg in Dracoon API" Artikel. Auf der Swagger-UI kann ich aber diesen Befehl nirgends finden. Kann es damit etwas zu tun haben?

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Florian Scheuer

    Hallo Maximilian,

    1. Unser Rechtekonzept findest du hier beschrieben: https://support.dracoon.com/hc/de/articles/115001865005-Begriffe-Rollen-und-Rechte

    2. Offenbar wird der falsche Endpunkt genutzt – korrekt ist /user/account/logout. Steht das so falsch in der Dokumentation?

    Viele Grüße
    Florian

    0
    Aktionen für Kommentare Permalink

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.