1

PDF an Google Drive

Hallo zusammen,

ich habe eine Datenbank basierend auf der Vorlage "Beschaffung" erstellt und dort einen Button hinzugefügt, der in der Maske für eine neue Bestellung verfügbar ist.

 

Dieser Button soll über "Make" das PDF-Dokument zunächst in Google Drive speichern. Hierfür habe ich folgendes Skript im Button:

let myID := this;
if myID then
    let documentLink := first(Links[Dokumente.Dokumenttyp = 4].Dokumente);
    if documentLink then
        let path := text(documentLink.Dokument);
        let parts := split(path, "/");
        let fileName := last(parts);
        let response := do as server
                http("POST", "https://hook.eu2.make.com/qn84wtuq6zr5q8guu2okjym1yxu77nru", {
                    'Content-Type': "application/json"
                }, {
                    TeamID: teamId(),
                    Ninox_Database_ID: databaseId(),
                    Ninox_Table_ID: tableId(myID),
                    Ninox_Record_ID: number(myID),
                    Ninox_Filename: urlEncode(fileName)
                })
            end;
        myID.(Google_Drive_File_ID := text(response.result))
    else
        alert("Keine Datei vorhanden!")
    end
else
    alert("Keine Datei vorhanden!")
end

 

Die Daten kommen auch in der Webhook an und in einer anderen Datenbank verwende ich das Ganze schon ähnlich, dort klappt es einwandfrei, aber dort versende ich ein Bild aus der selben Tabelle.

 

 

Danach verwende ich dann das Modul "Ninox Download File from Record", jedoch kann dieses Modul die Datei nicht finden, die ich eigentlich hinschicke, und der Prozess wird unterbrochen. Ich ging davon aus, dass es am Dateinamen liegt, weshalb man den "split"-Befehl im Skript findet, aber auch das hat das Problem nicht gelöst.

 

Es wäre super, wenn jemand eine Idee hat, wie ich das hinbekomme, dass mein PDF in meinem Google Drive gespeichert wird. Falls etwas unklar ist, meldet euch gerne.

Ich bin für jede Hilfe sehr dankbar.

Liebe Grüße,
Olli

 

9 Antworten

null
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Moin ,

    in dem Ninox-Node den du gepostet hast sehe ich eine statische Record-ID (1) eingetragen.
    Hier muss die Ninox-Record-ID vom Webhook (wäre hier die 44) gemappt sein.

    In deinem Beispiel kommt der Datensatz 44 und du willst das File von Record 1 laden...

     

    VG Ronald

      • Oliver_Takens
      • vor 5 Monaten
      • Gemeldet - anzeigen

      Hey  ,

      ja auch das habe ich schon ausprobiert und dafür einfach die gemappten Daten genutzt um sicherzustellen, dass alles die richtigen Daten hat. Leider auch mit der 44 (Ninox_Record_ID) der gleiche Fehler.

      Trotzdem danke für die Idee :)

      LG Olli

    • UweG
    • vor 5 Monaten
    • Gemeldet - anzeigen

    In welcher Tabelle liegt denn das Bild.
    Laut Script scheinbar in einer verknpften Tabelle: documentLink.Dokument
    da du von dort den Bildnamen erzeugst.
    Zeigt denn der Make Node für den File-Download auf die Tabelle, wo das File hinterlegt ist oder auf die Tabelle, von wo der Wbhokk aufgerufen wird.
    Leider sind die Informationen etwas spärlich wie so häufig.

      • Oliver_Takens
      • vor 5 Monaten
      • Gemeldet - anzeigen

      Lieber  ,

      vielen Dank für deine Antwort und deine Unterstützung.

      Ich habe beide Optionen ausprobiert: Einmal zeigt der Make-Node auf die Tabelle mit dem Bild und einmal auf die Tabelle, in der der Webhook aufgerufen wurde. Wie du richtig erkannt hast, liegt das Bild in einer anderen Tabelle als der endgültige Button, der zum Versenden genutzt werden soll.

      Ich möchte nur kurz klarstellen, dass ich die exakte Datenbankstruktur bereitgestellt habe, damit sich jeder den Aufbau ansehen kann. Das erscheint mir einfacher, als jede Tabellenstruktur hier detailliert zu beschreiben. Außerdem habe ich den gesamten Code mit der Information, was dieser tun soll, sowie eine Beschreibung, wie das gesamte Szenario in Make aufgebaut ist, zur Verfügung gestellt. Dazu habe ich auch die Daten bereitgestellt, die bei der Webhook ankommen. So kann man tatsächlich alles bis ins Detail nachvollziehen, was in dieser Datenbank und bei Make passiert.

      Daher fand ich es etwas enttäuschend, dass dennoch von "spärlichen Informationen" die Rede ist. Das kann dazu führen, dass die Motivation zur Teilnahme an Foren sinkt.

      Vielen Dank für dein Verständnis und deine Hilfe.

      Beste Grüße

      Olli

      • Developer by Smartplanung
      • smartplanung
      • vor 5 Monaten
      • Gemeldet - anzeigen

       Du müsstest dann in der Ninox Node die ID aus der Variable documentLink mitgeben number(documentLink) und auch die entsprechende Tabelle (Dokumente ?) auswählen, wenn dort das Bild drin liegt. die ID 44 ist ja nur die ID aus dem Datensatz, wo der Button liegt.

      let myID := this;
      if myID then
          let documentLink := first(Links[Dokumente.Dokumenttyp = 4].Dokumente);
          if documentLink then
              let path := text(documentLink.Dokument);
              let parts := split(path, "/");
              let fileName := last(parts);
              let response := do as server
                      http("POST", "https://hook.eu2.make.com/qn84wtuq6zr5q8guu2okjym1yxu77nru", {
                          'Content-Type': "application/json"
                      }, {
                          TeamID: teamId(),
                          Ninox_Database_ID: databaseId(),
                          Ninox_Table_ID: tableId(myID),
                          Ninox_Record_ID: number(myID),
                          Ninox_Filename: urlEncode(fileName),
                          documentID: number(documentLink)
                      })
                  end;
              myID.(Google_Drive_File_ID := text(response.result))
          else
              alert("Keine Datei vorhanden!")
          end
      else
          alert("Keine Datei vorhanden!")
      end
      
    • NorbertSzpak
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Hallo  bei mir hat es so funktioniert:

    mit splitx und einem regex kommst du an die korrekte TableID, RecordID und den Filenamen.

    (File liegt bei mir auch in einer anderen Tabelle)

    let myID := this;
    if myID.Bilder.Bild then
        alert("bild gibt es: " + myID.Bilder.Bild);
        let myFileDatas := splitx(string(myID.Bilder.Bild), "^(?<tabelle>[A-Z]+)(?<id>\d)/(?<dateiname>.+)$");
        let myFileDatasTableID := item(myFileDatas, 1);
        let myFileDatasRecordID := item(myFileDatas, 2);
        let myFileDatasFileName := item(myFileDatas, 3);
        let response := do as server
                http("POST", "https://hook.eu2.make.com/deineHookAdresse", {
                    'Content-Type': "application/json"
                }, {
                    TeamID: teamId(),
                    Ninox_Database_ID: databaseId(),
                    Ninox_Table_ID: myFileDatasTableID,
                    Ninox_Record_ID: myFileDatasRecordID,
                    Ninox_Filename: myFileDatasFileName
                })
            end;
        myID.('Google-ID' := text(response.result))
    else
        alert("gibt kein Bild ")
    end

    • Norbert_Szpak
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Hallo 

     bei mir hat es so funktioniert:

    mit splitx und einem regex kommst du an die korrekte TableID, RecordID und den Filenamen.

    (File liegt bei mir auch in einer anderen Tabelle)

    let myID := this;
    if myID.Bilder.Bild then
        alert("bild gibt es: " + myID.Bilder.Bild);
        let myFileDatas := splitx(string(myID.Bilder.Bild), "^(?<tabelle>[A-Z]+)(?<id>\d)/(?<dateiname>.+)$");
        let myFileDatasTableID := item(myFileDatas, 1);
        let myFileDatasRecordID := item(myFileDatas, 2);
        let myFileDatasFileName := item(myFileDatas, 3);
        let response := do as server
                http("POST", "https://hook.eu2.make.com/deineHookAdresse", {
                    'Content-Type': "application/json"
                }, {
                    TeamID: teamId(),
                    Ninox_Database_ID: databaseId(),
                    Ninox_Table_ID: myFileDatasTableID,
                    Ninox_Record_ID: myFileDatasRecordID,
                    Ninox_Filename: myFileDatasFileName
                })
            end;
        myID.('Google-ID' := text(response.result))
    else
        alert("gibt kein Bild ")
    end

      • NorbertSzpak
      • vor 5 Monaten
      • Gemeldet - anzeigen

       

      noch zur Ergänzung:
      der Regex müsste eigentlich noch so angepasst werden:

      ^(?<tabelle>[A-Z]+)(?<id>\d)\/(?:[^\/]+\/)*(?<dateiname>.+)

      dann würde er aus dem folgenden String:
      B3/unterordner/meinDateiname.pdf

      tabelle: B
      id: 3
      dateiname: meinDateiname.pdf

      extrahieren.

      hier getestet; siehe Screenshot.
      https://regex101.com/

      Gibt es da evtl. auch eine andere Möglichkeit als den regex mit splitx zu verwenden um die Tabelle die id und den Dateinamen herauszufinden, wenn die Datei/Bild in einer anderen Tabelle liegt?
       

    • NorbertSzpak
    • vor 5 Monaten
    • Gemeldet - anzeigen

    noch zur Ergänzung:
    der Regex müsste eigentlich noch so angepasst werden:

    ^(?<tabelle>[A-Z]+)(?<id>\d)\/(?:[^\/]+\/)*(?<dateiname>.+)

    (Danke ChatGPT :-)

    dann würde er aus dem folgenden String:
    B3/unterordner/meinDateiname.pdf

    tabelle: B
    id: 3
    dateiname: meinDateiname.pdf

    extrahieren.

    hier getestet; siehe Screenshot.
    https://regex101.com/

    Gibt es da evtl. auch eine andere Möglichkeit als den regex mit splitx zu verwenden um die Tabelle die id und den Dateinamen herauszufinden, wenn die Datei/Bild in einer anderen Tabelle liegt?