Anhang löschen per Befehl
HAllo zusammen,
gibt es einen Befehlt (delete?) mit dem man statt einen Datensatz nur einen bestimmten oder alle Anhänge löschen kann? Ich habe aktuell das Problem, dass ich per Button einen Tagesbericht per Mail versende und dazu einen Bericht drucke welcher als Anhang zugefügt wird. wenn ich am nöchsten Tag wieder einen Tagesbericht sende wird aber der Bericht nicht ersetzt und angehangen sondern der vom ersten mal wird wieder mit versendet.
Danke vorab für Eure Vorschläge!
Guten Wochenstart
Gruß Florian Wisser
35 Antworten
-
Hallo Florian, ein Befehl zum direkten Löschen von Dateianhängen ist mir nicht bekannt. Man könnte die Datei höchstens in einem Bildfeld speichern. Bildfelder lassen sich mit "BILDFELD := null" leeren, wobei die Datei aber auch nicht gelöscht, sondern lediglich in den Anhang verschoben wird.
Lässt sich dein Problem vielleicht auch über verschiedene Dateinamen lösen? Also Bericht1, Bericht2 etc. und einem Feld, das die jeweils letzte Nummer oder den zuletzt generierten Dateinamen beinhaltet? Nur so als Idee.
-
Ja hab ich eben nachdem ich das abgeschickt habe auch gedacht. Wenn ich dem Dateinamen noch das Datum Today zufüge und beim Anhang der mitversendet wird auch, sollte es eigentlich gehen. Dann hat der Datensatz zwar nachher 20 Anhänge aber das macht ja eigentlich nix. (oder man löscht das dann ab und an mal. Probiere das gleich mal.
Danke erst mal!
-
Es gäbe prinzipiell auch noch die Möglichkeit, die Dateianhänge per Bildfeld in einer eigenen (Unter-) Tabelle zu speichern und dann per Script die Datensätze zu löschen, wenn sie nicht mehr benötigt werden. Das aber auch erst mal nur so als spontane Idee, ohne es jetzt im Detail durchdacht zu haben.
-
Hallo zusammen,
ich komm gerade aus anderem Grunde mal wieder auf das thema. Unsere Datenbank ist mittlerweile ziemlich groß geworden und ich hab das gefühl dass die PErformance darunter leidet. Daher möchte ich gerne in Zukunft temporäre Anhänge die ich nur zum versenden eines Berichtes wie Tagesberichte / Produktionsberichte etc. verwende direkt in dem Mail versenden Befehlt wieder löschen. Daher frag ich hier nochmal: Gibts da mttlerweile was neues zu? Ist ja schon ne Weile her
Wenns nicht einfacher geht, würde ich dann denke ich auf die Variante mit der separaten Dateianhangtabelle zurückgreifen. wie von planox vorgeschlagen...
Danke vorab falls
-
Hi Florian,
du kannst Anhänge über die API löschen. Du müsstest dazu per for-Schleife durch die Anhänge iterieren und wenn dann ein File deinem gesuchten entspricht, kannst Du es löschen... Ich habe sowas mal aufgesetzt, ich such das mal raus.
-
Also Parallel dazu hab ich mal die Variante mit separater Tabelle ausprobiert:
let DateiName := "Tagesbericht " + '003_Mitarbeiter'.Vorname + " " + '003_Mitarbeiter'.Nachname + ".pdf";
let a := importFile(this, printAndSaveRecord(this), DateiName);
let myId := this;
let newTask := (create 'Anhangzwischenspeicher');
newTask.(Bild := a)Das klappt leider nicht. Der Datensatz wird zwar angelegt und ein Anhang ist auch dran aber ws wird das graue Blatt dargestellt und beim anklicken kommt die Fehlermeldung: Failed to load PDF File
-
Das myID:= this hat hiermit natürlich nix zu tun. Hab nicht den gesammten Code eingefügt und das vergessen zu löschen...
-
Wobei das bringt mir ja auch nichts da ja dennoch die Datei erst im Anhang gespeichert wird den ich dann wieder nicht gelöscht bekomme
-
Du brauchst einen API Zugang für deine Ninox. Der nutzt einen Bearer Token, den du für den folgenden Code unten brauchst.
Ich habe außerdem ein mehrzeiliges Textfeld "APIresponse", damit ich sehe was der API call mir ausgibt... und du brauchst den Pfad in deine Datenbank (den hast Du ja in der Adresszeile)
Nun kannst Du per Button mit folgendem Code einzelne Dateien löschen...
let myId := number(Nr);
let myArray := split(text(files(this)), ",");
let response := "";
let auth := {
Authorization: "Bearer 4d5aef90-76ee-11e9-b088-XXXXXXXXXXXX",
'Content-Type': "application/json"
};
for p in myArray do
if p like "DEINEGESUCHTEDATEI" then
let myAnhang := item(split(p, "/"), 1);
let response := do as server
http("DELETE", "https://api.ninoxdb.de/v1/teams/63XXXXXXXX8P9fc/databases/ihjufXXXXXXc1/tables/Z/records/" + myId + "/files/" + myAnhang, auth, {})
end;
end
end;
APIresponse := text(response)
Das war von mir jetzt auch nur rauskopiert.... man müsste das je nach Anwendung etwas umstricken. So könnte das direkt nach deinem Mailversand laufen und nur diesen einen, soeben verschickten Anhang wieder aus der NINOX löschen....
-
Hallo Florian, du kannst die PDF-Datei gleich in den neuen Datensatz hinein erzeugen. Am besten verknüpfst du die Tabellen auch, damit der Bezug erhalten bleibt. Beispiel:
let me := this;
let DateiName := "Trallala.pdf";
let newRec := (create TABELLE);
newRec.(VERKNÜPFUNG := me);
newRec.(Bild := importFile(newRec, printAndSaveRecord(me, "DRUCKLAYOUT"), DateiName))
-
Super Danke erst mal ich versuche das. Ich hab was ähnliches eben schon von LEo in nem anderen Post gefunden. Was mich wunderte: Mein Dateipfad sieht anders aus oder ist das egal?
https://app.ninox.com/#/teams/XXXXXX/database/xxxxxxxx/module/UC/view/xxxxxxx/node/UC2472/tab/0
ich hab "module" statt " tables und statt "records" hab ich "view" und dann noch node...
API Key hab ich wenn auch bisher nie verwendet. Ahb mich bisher noch nicht damit befasst aber wenn das klappt wäre das super.
-
@ Planox: Danke ja hatte ich auch schon versucht direkt in das Bild der anderen Tabelle zu erzeugen wie du geschrieben hast. Aber erzeugt bekommen hab ich den Anhang in der Haupttabelle dennoch. Nur wenn das Bildfeld selbst in der HAupttabelle ist und ich direkt darein erzeuge wird kein zus. Anhang erzeugt.
kann ja an der fehlen Verknüpfung eigentlich nicht liegen oder? Versuche das aber mal...
-
Scheint wirklich geholfen zu haben. Wenn die verknüft sind klappt es mit dem öffnen ohne die Fehlermeldung und Anhang wird auch keiner erzeugt. Das klappt schonmal Danke!
Das Thema mit der API Variante ist dennoch interessant. Ich könnte ja theoretisch so umbauen auch alte Datensätze durchsucht und gelöscht werden oder?
-
Hab da aber leider das nächste Problem. In der Mfehlt der Anhang. So siehts jetzt aus:
let me := this;
let DateiName := "Tagesbericht.pdf";
let newRec := (create Anhangzwischenspeicher);
newRec.('103_Tagesplanung' := me);
newRec.(Bild := importFile(newRec, printAndSaveRecord(me, druckvorlage), DateiName));
sendEmail({
from: userEmail(),
to: '003_Mitarbeiter'.'Ninox ID',
subject: "Tagesbericht " + '003_Mitarbeiter'.Nachname + " " + Datum,
text: "Anbei der Tagesbericht vom " + Datum + ". Gruß " + '003_Mitarbeiter'.Vorname,
attachments: newRec.Bild
}); -
M = Mail
-
Hallo Florian, das funktioniert auch ohne Verknüpfung. Die ist in meinem Beispiel nur dazu da, den Bezug des erzeugten Dokumentes zu dem Datensatz zu erhalten, aus dem es erzeugt wurde. Wenn du diesen Bezug nicht brauchst, kannst du die Verknüpfung weglassen. Wichtig ist halt, dass du beim importFile() den neuen Datensatz der Anhang-Tabelle angibst (newRec), beim printAndSaveRecord() den Datensatz mit den zu druckenden Inhalten (me).
-
Ah das war mein Fehler. Ich hatte beim ImportFile this angegeben. Ok verstanden. Das Problem dass der Anhang fehlte hab ich auch gelöst über einen Umweg. Wobei es doch anders auch hätte gehen müssen oder?
let me := this;
let DateiName := "Tagesbericht.pdf";
let newRec := (create Anhangzwischenspeicher);
newRec.('103_Tagesplanung' := me);
newRec.(Bild := importFile(newRec, printAndSaveRecord(me, "DRUCKLAYOUT"), DateiName));
let Anhang := (select Anhangzwischenspeicher where '103_Tagesplanung' = me);
sendEmail({
from: userEmail(),
to: '003_Mitarbeiter'.'Ninox ID',
cc: text(cc),
subject: "Tagesbericht " + '003_Mitarbeiter'.Nachname + " " + Datum,
text: "Anbei der Tagesbericht vom " + Datum + ". Gruß " + '003_Mitarbeiter'.Vorname,
attachments: Anhang.Bild
}); -
Zum Mailversand - versuch's mal so:
attachments: file(newRec, DateiName)
-
PS: Und wenn du die PDF-Datei nicht mehr brauchst, kannst du einfach den betreffenden Datensatz der Anhang-Tabelle löschen.
-
Jap so klappt es auch und mit weniger Codezeilen stimmt danke! Ja ich hab unten dann einfach
delete newRec
hinter den Mailversand gepackt. Klappt super! Danke
-
Hi Florian - zum Thema API: Ja, du kannst natürlich dann auch durch alle Datensätze gehen und da wiederum durch alle Anhänge und die löschen die überflüssig sind... Wenn das System mit der API erstmal steht, ist das echt eine geniale Erweiterung und macht vieles Möglich. API ist echt mächtig. Ich beschicke z.B. einen Wordpress Shop mit Artikeln aus der NINOX, ich habe eine Routenplanung mit mehreren Zwischenzielen und optimierter Routein einem bestimmten Zeitfenster über eine API realisiert usw.... das ist echt ein spannendes Feld.
-
Anhang Löschen:
"/
/ Funktion um Anhang im Record zu löschen /
/";
function fx_AnhangLoeschen(xUrl : text) do
let Antwort := "";
let vAPIKey := "Dein API-Key";
let vHeader := {
Authorization: "Bearer " + vAPIKey
};
let vUrl := xUrl;
Antwort := text(http("DELETE", xUrl, vHeader, ""))
end;vFileName :=
let vUrl := "https://api.ninoxdb.de/v1/teams/" + teamId() + "/databases/" + databaseId() + "/tables/" + tableId(this) + "/records/" + Nr + "/files/" + "Hier Namer des ANhangs inkl. Dateiendung eintragen";
fx_AnhangLoeschen(text(vUrl)) -
Die Zeile mit 'vFileName' kann automatisch bestückt werden, wenn nur ein Anhang vorhanden ist oder bei mehreren mit einer Vorabauswahl. Das muss dann in der URL eingesetzt werden als letzter Punkt.
-
Hallo zusammen, vielen Dank für eure wertvollen Beiträge.
Ich bin auf der Suche nach einer Möglichkeit, Dateien umzubenennen, da diese teilweise das Gedankenstrich-Symbol "–" enthalten und dieses bei Make (ehemals Integromat) zu Fehlermeldungen führt.
Mein bisheriger Ansatz:
Mit folgendem Code wird die Datei freigegeben, umbenannt und ins Feld "Beleg" geladen.
let myFileName := last(split(text(Beleg), "/")); myFileName := replace(myFileName, "–", ""); let vShare := shareFile(Beleg); Beleg := importFile(this, vShare, myFileName)
Dadurch wird aber die ursprüngliche Datei in den Anhang verschoben. Diese möchte ich nun mit folgendem Code löschen.
let vAPIKey := "XXXXXXX"; let vHeader := {Authorization: "Bearer " + vAPIKey}; let myFileToDelete := last(split(text(item(files(this), 1)), "/")); let vUrl := "https://api.ninoxdb.de/v1/teams/" + teamId() + "/databases/" + databaseId() + "/tables/" + tableId(this) + "/records/" + Nr + "/files/" + myFileToDelete; let Response := do as server http("DELETE", vUrl, vHeader, "") end; APIresponse := text(Response)
Im Feld "APIresponse" wird mir anschliessend die Fehlermeldung angezeigt, dass unzulässige Zeichen existieren: {"error":{"code":"ERR_UNESCAPED_CHARACTERS"}}
Wenn ich den Gedankenstrich manuell entferne, lässt sich die Datei im Anhang ohne Probleme löschen.
Habt ihr ggf. eine Lösung für dieses Problem?
-
Probiere mal folgendes in einem Script:
let myFileName := last(split(text(Beleg), "/")); let myFileToDelete := myFileName; myFileName := replace(myFileName, "-", ""); let vShare := shareFile(Beleg); Beleg := importFile(this, vShare, myFileName); let vAPIKey := "xxxx-xxxxxx-xxxxx-xxxxx"; let vHeader := { Authorization: "Bearer " + vAPIKey }; let vUrl := "https://api.ninoxdb.de/v1/teams/" + teamId() + "/databases/" + databaseId() + "/tables/" + tableId(this) + "/records/" + Nr + "/files/" + myFileToDelete; let Response := do as server http("DELETE", vUrl, vHeader, "") end; APIResponse := text(Response)
Damit wird der Name des Files geändert und das verschobene File gelöscht.
Content aside
- vor 9 MonatenZuletzt aktiv
- 35Antworten
- 2272Ansichten
-
8
Folge bereits