Startseite > Lotus Notes Software , Lotus Notes-Lösung , Lotus Notes Tutorial , LotusScript , Notes-Designer > Lotus Notes Richtext Feld Überprüfung Attachmentment oder Größe Without Saving Dokument

Lotus Notes Richtext Feld Überprüfung Attachmentment oder Größe Without Saving Dokument

Mehrere Themen decken das Thema der Verhinderung der Anlagerung von übermäßig große Dateien an ein Notes-Dokument, und eine große Hürde zu sein scheint, wie dies zu tun, ohne vorher das Dokument zu speichern, geschweige denn, ohne vorher Anhängen der Datei. Ohne die alle Gründe, warum dies ist eine Herausforderung, dachte ich, es könnte hilfreich sein, für mich zum Detail die Lösung, kam ich mit nach dem Lesen mehrerer Beiträge in diesem Forum und Nähen alles zusammen.

Entwurfsziele:

1 - Begrenzen Sie die zulässige Größe von Anhängen (Gesamtgröße in diesem Fall nicht von Datei zu Datei) auf eine bestimmte Dokument
2 - Da es eine Ewigkeit dauern kann, um eine Datei, die letztlich möglicherweise nicht erlaubt (je länger die Ewigkeit, desto größer ist die liklihood wird es verweigert werden) zu befestigen, sind wir optimal wollen die Größe einer Datei zu überprüfen, bevor sie an ein Dokument angehängt . Dies führt zu der Notwendigkeit, die Dateigröße einer Datei auf der Ebene des Dateisystems zu überprüfen.
3 - Preserve, was Benutzerfreundlichkeit, die bereits in der Anlage verarbeiten (ich weiß, "Was Benutzerfreundlichkeit?"). Kurz gesagt, wenn wir Dateien anzuhängen, sollte die Datei öffnen Dialog weiterhin auf das Verzeichnis haben wir letzten Zugriffs zu öffnen, und nicht immer wieder auf die Notes Data-Verzeichnis.

Steps:
1 - Erstellen eines Unterformulars genannten "Attachments"
2 - Setzen Sie den folgenden Code in das Globale Erklärungen:

Dim ws As NotesUIWorkspace
Dim Session As NotesSession
Dim db As NotesDatabase
Dim uidoc Als NotesUIDocument
Dim doc Als NotesDocument
Dim GlobalSaveFlag As Integer 'wird verwendet, um zu prüfen, ob Dokument tatsächlich gespeichert wurde später auf

Declare Function NEMGetFile Lib "NNOTESWS" Alias ​​"NEMGetFile" _
(Null As Integer, ByVal filename As String, ByVal Filter As String, ByVal Titel As String) As Integer

3 - Setzen Sie diese Funktion in dem Unterformular globals:

Function LocalBrowse (Titel As String, default As String, Filter As String) As String
Dim filename As String * 1024
filename = default
Wenn filter = "" Then Filter = "Alle Dateien |*.*|"
Status% = NEMGetFile (0, Dateiname, Filter, Titel)

Select Case Status%
Case 0: LocalBrowse = "" 'abgesagt
Fall 1: LocalBrowse = Trim $ (Dateiname)
Case Else: Fehler 1000, "Error & H" & Hex $ (Status%) & "in LocalBrowse"
End Select
End Function

4 - PostOpen Event:

"Müssen Sie mehrere globale Variablen zu initialisieren
Set ws = New NotesUIWorkspace
Set Session = New NotesSession
Set db = Session.currentdatabase
Set uidoc = Source
Set doc = uidoc.document

5 - PostRecalc (@ Funktionen anstelle von script)

@ If (AttachFileName = ""; @ Return (""); "");
@ Command ([EditGotoField]; "Attachments");
@ Command ([EditInsertFileAttachment]; AttachFileName; "0");
FIELD AttachFileName: = "";

6 - QuerySave:

Dim DBProfile Als NotesDocument "optional - wenn Sie möchten, können Sie Ihre maximale Größe konfigurieren
Dim Maximalgröße als Long

GlobalSaveFlag = Continue "So dass, wenn nichts anderes modifiziert weiter, es erkannt wird.

Set DBProfile = db.GetProfileDocument ("DBSettings") "Das ist mein generischen DB Profil, aber Sie können was Sie wollen hier

"Entweder mit diesem Profil Document irgendwie an die Grenze zu speichern, oder hart codieren die Grenze (in Bytes) hier
Maximalgröße = DBProfile.AttachSizeLimit (0)
"Maximalgröße = 1048576 '1 MB

"Addieren Sie die Gesamtgröße der bestehenden Anlagen zu sehen, ob es unsere Grenze überschreitet
'Dieses Skript ist nur notwendig, wenn ein Benutzer sneeky und verwendet ein traditionelles "Attach"
"Befehl aus dem Datei-Menü statt der Schaltflächen für die Auswahl einer Datei
Wenn doc.AttachmentSizeTotal (0)> Maximalgröße Dann
Msgbox "Sie haben die 1 MB Grenze für Anhänge überschritten. "& Chr (10) & Chr (10) & _
"Bitte entfernen Sie Anhänge oder komprimieren Sie Ihre Datei (en).", 16, "Attachment Error"
Continue = False
Exit Sub
Sonst
Weiter = True
End If

7 - QueryClose:

'Reset der AttachFileName Feld, wenn wir es verlassen haben ausgefüllt haben und haben das Dokument gespeichert
"Wahrscheinlich redundant, sondern nur für den Fall
Wenn GlobalSaveFlag = True And doc.AttachFileName (0) <> "" Then
doc.AttachFileName = ""
Rufen doc.Save (True, False)
End If

8 - Erstellen Sie einen Button mit der Aufschrift "Attach File" mit den folgenden lotuscript:

Sub Click (Source As Button)
Dim NeuerDateiname As String
Dim currentpath As String
Dim DBProfile Als NotesDocument
Dim Verlen As Long
Dim Maximalgröße als Long

Set DBProfile = db.GetProfileDocument ("DBSettings") "Das ist mein generischen DB Profil, aber Sie können was Sie wollen hier

"Entweder schaffen dieses Profil Document irgendwie an die Grenze zu speichern, oder hart codieren die Grenze (in Bytes) hier
Maximalgröße = DBProfile.AttachSizeLimit (0)
"Maximalgröße = 1048576 '1 MB

NeuerDateiname = LocalBrowse ("Datei anhängen", "", "")
doc.AttachFileName = NewFileName
currentpath = Strleftback (NeuerDateiname, "\")

"Damit wird die Standard-Verzeichnis durchsuchen, die man gerade gesucht
Rufen Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)

Verlen & = FileLen (doc.AttachFileName (0)) "die FileLen Funktion ist der eigentliche Trick, um alle diese

"Addieren Sie die Gesamtgröße der bestehenden Anlagen und die neue Datei ausgewählt, um zu sehen, ob es unsere Grenze überschreitet
Wenn (Verlen & + doc.AttachmentSizeTotal (0))> Maximalgröße Dann
Msgbox "Diese Datei wird mehr als die 1 MB Grenze für Anhänge. "& Chr (10) & Chr (10) & _
"Bitte entfernen Sie Anhänge oder komprimieren Sie Ihre Datei (en).", 16, "Attachment Error"
doc.AttachFileName = ""
Sonst
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + Verlen &
End If

Rufen uidoc.Refresh 'löst den postrecalc Ereignis, das die Anlage abgeschlossen werden

End Sub

9 - Erstellen Sie eine editierbare Textfeld mit der Bezeichnung "AttachFileName". Geben Sie keine Formeln, und blenden Sie das Feld aus zu sehen.

10 - Erstellen Sie eine versteckte, berechnete Anzahl Feld namens "AttachmentSizeTotal" mit folgender Formel:

REM "nicht wirklich neu berechnen dieses Feld, wenn wir \ 're in der Mitte der Anlage-Prozess";
tmp: = @ If (AttachFileName = ""; @ Sum (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ IsError (tmp); 0; tmp)

11 - Erstellen Sie nun die tatsächlichen Rich Text-Feld, dass die Anhänge gespeichert werden. Rufen Sie diese editierbare Feld "Attachments", und deaktivieren Sie die "Show Feldtrennern" checkbox (dies können Sie es "Look" wie ein berechnetes Feld, um Benutzer zu machen und helfen, sie daran hindern das normale "Datei - Bringen Sie ..."-Routine, die würden unsere Ziele zu unterwandern.

Das ist alles, was Sie tun müssen. Einfache huh? :-) . Angenommen, Sie haben alles richtig (und ich habe es richtig beschrieben) durchgeführt, sollte der Benutzer in der Lage sein, unsere Taste verwenden, um eine Datei für die Befestigung auszuwählen, und weiterhin darauf klicken, bis sie eine Datei, wird deren Auswahl haben sie über die Grenze. An diesem Punkt wird die Anlage den Betrieb zu stoppen und sie wird eine Warnmeldung zu sehen. Also, das nächste Mal, Ihre Benutzer versuchen, eine 100MB-Datei anhängen, werden sie nicht bis nach dem Mittagessen, um herauszufinden, sie haben eine schlechte Sache zu warten. Wenn sie es irgendwie schaffen, um Dateien, die die Grenze mit dem normalen überschreiten attach "File - Bringen Sie ..."-Ansatz wird die QuerySave fangen, die Situation. So zu rekapitulieren, sind die drei wichtigsten "Durchbrüche" in diesem Ansatz wie folgt:

1 - der NEMGetFile API-Funktion verwenden, um eine normale Datei öffnen aufrufen
2 - Schreiben Sie einen Wert für die jüngsten Verzeichnis der FileDlgDirectory Umgebungsvariablen in der Notes.ini
3 - Mit dem FileLen Funktion, um die Größe einer Datei in der Benutzer das Dateisystem zu überprüfen, da der Dateipfad als Eingabe

Mehrere Themen decken das Thema der Verhinderung der Anlagerung von übermäßig große Dateien an ein Notes-Dokument, und eine große Hürde zu sein scheint, wie dies zu tun, ohne vorher das Dokument zu speichern, geschweige denn, ohne vorher Anhängen der Datei. Ohne die alle Gründe, warum dies ist eine Herausforderung, dachte ich, es könnte hilfreich sein, für mich zum Detail die Lösung, kam ich mit nach dem Lesen mehrerer Beiträge in diesem Forum und Nähen alles zusammen.

Entwurfsziele:

1 - Begrenzen Sie die zulässige Größe von Anhängen (Gesamtgröße in diesem Fall nicht von Datei zu Datei) auf eine bestimmte Dokument
2 - Da es eine Ewigkeit dauern kann, um eine Datei, die letztlich möglicherweise nicht erlaubt (je länger die Ewigkeit, desto größer ist die liklihood wird es verweigert werden) zu befestigen, sind wir optimal wollen die Größe einer Datei zu überprüfen, bevor sie an ein Dokument angehängt . Dies führt zu der Notwendigkeit, die Dateigröße einer Datei auf der Ebene des Dateisystems zu überprüfen.
3 - Preserve, was Benutzerfreundlichkeit, die bereits in der Anlage verarbeiten (ich weiß, "Was Benutzerfreundlichkeit?"). Kurz gesagt, wenn wir Dateien anzuhängen, sollte die Datei öffnen Dialog weiterhin auf das Verzeichnis haben wir letzten Zugriffs zu öffnen, und nicht immer wieder auf die Notes Data-Verzeichnis.

Steps:
1 - Erstellen eines Unterformulars genannten "Attachments"
2 - Setzen Sie den folgenden Code in das Globale Erklärungen:

Dim ws As NotesUIWorkspace
Dim Session As NotesSession
Dim db As NotesDatabase
Dim uidoc Als NotesUIDocument
Dim doc Als NotesDocument
Dim GlobalSaveFlag As Integer 'wird verwendet, um zu prüfen, ob Dokument tatsächlich gespeichert wurde später auf

Declare Function NEMGetFile Lib "NNOTESWS" Alias ​​"NEMGetFile" _
(Null As Integer, ByVal filename As String, ByVal Filter As String, ByVal Titel As String) As Integer

3 - Setzen Sie diese Funktion in dem Unterformular globals:

Function LocalBrowse (Titel As String, default As String, Filter As String) As String
Dim filename As String * 1024
filename = default
Wenn filter = "" Then Filter = "Alle Dateien |*.*|"
Status% = NEMGetFile (0, Dateiname, Filter, Titel)

Select Case Status%
Case 0: LocalBrowse = "" 'abgesagt
Fall 1: LocalBrowse = Trim $ (Dateiname)
Case Else: Fehler 1000, "Error & H" & Hex $ (Status%) & "in LocalBrowse"
End Select
End Function

4 - PostOpen Event:

"Müssen Sie mehrere globale Variablen zu initialisieren
Set ws = New NotesUIWorkspace
Set Session = New NotesSession
Set db = Session.currentdatabase
Set uidoc = Source
Set doc = uidoc.document

5 - PostRecalc (@ Funktionen anstelle von script)

@ If (AttachFileName = ""; @ Return (""); "");
@ Command ([EditGotoField]; "Attachments");
@ Command ([EditInsertFileAttachment]; AttachFileName; "0");
FIELD AttachFileName: = "";

6 - QuerySave:

Dim DBProfile Als NotesDocument "optional - wenn Sie möchten, können Sie Ihre maximale Größe konfigurieren
Dim Maximalgröße als Long

GlobalSaveFlag = Continue "So dass, wenn nichts anderes modifiziert weiter, es erkannt wird.

Set DBProfile = db.GetProfileDocument ("DBSettings") "Das ist mein generischen DB Profil, aber Sie können was Sie wollen hier

"Entweder mit diesem Profil Document irgendwie an die Grenze zu speichern, oder hart codieren die Grenze (in Bytes) hier
Maximalgröße = DBProfile.AttachSizeLimit (0)
"Maximalgröße = 1048576 '1 MB

"Addieren Sie die Gesamtgröße der bestehenden Anlagen zu sehen, ob es unsere Grenze überschreitet
'Dieses Skript ist nur notwendig, wenn ein Benutzer sneeky und verwendet ein traditionelles "Attach"
"Befehl aus dem Datei-Menü statt der Schaltflächen für die Auswahl einer Datei
Wenn doc.AttachmentSizeTotal (0)> Maximalgröße Dann
Msgbox "Sie haben die 1 MB Grenze für Anhänge überschritten. "& Chr (10) & Chr (10) & _
"Bitte entfernen Sie Anhänge oder komprimieren Sie Ihre Datei (en).", 16, "Attachment Error"
Continue = False
Exit Sub
Sonst
Weiter = True
End If

7 - QueryClose:

'Reset der AttachFileName Feld, wenn wir es verlassen haben ausgefüllt haben und haben das Dokument gespeichert
"Wahrscheinlich redundant, sondern nur für den Fall
Wenn GlobalSaveFlag = True And doc.AttachFileName (0) <> "" Then
doc.AttachFileName = ""
Rufen doc.Save (True, False)
End If

8 - Erstellen Sie einen Button mit der Aufschrift "Attach File" mit den folgenden lotuscript:

Sub Click (Source As Button)
Dim NeuerDateiname As String
Dim currentpath As String
Dim DBProfile Als NotesDocument
Dim Verlen As Long
Dim Maximalgröße als Long

Set DBProfile = db.GetProfileDocument ("DBSettings") "Das ist mein generischen DB Profil, aber Sie können was Sie wollen hier

"Entweder schaffen dieses Profil Document irgendwie an die Grenze zu speichern, oder hart codieren die Grenze (in Bytes) hier
Maximalgröße = DBProfile.AttachSizeLimit (0)
"Maximalgröße = 1048576 '1 MB

NeuerDateiname = LocalBrowse ("Datei anhängen", "", "")
doc.AttachFileName = NewFileName
currentpath = Strleftback (NeuerDateiname, "\")

"Damit wird die Standard-Verzeichnis durchsuchen, die man gerade gesucht
Rufen Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)

Verlen & = FileLen (doc.AttachFileName (0)) "die FileLen Funktion ist der eigentliche Trick, um alle diese

"Addieren Sie die Gesamtgröße der bestehenden Anlagen und die neue Datei ausgewählt, um zu sehen, ob es unsere Grenze überschreitet
Wenn (Verlen & + doc.AttachmentSizeTotal (0))> Maximalgröße Dann
Msgbox "Diese Datei wird mehr als die 1 MB Grenze für Anhänge. "& Chr (10) & Chr (10) & _
"Bitte entfernen Sie Anhänge oder komprimieren Sie Ihre Datei (en).", 16, "Attachment Error"
doc.AttachFileName = ""
Sonst
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + Verlen &
End If

Rufen uidoc.Refresh 'löst den postrecalc Ereignis, das die Anlage abgeschlossen werden

End Sub

9 - Erstellen Sie eine editierbare Textfeld mit der Bezeichnung "AttachFileName". Geben Sie keine Formeln, und blenden Sie das Feld aus zu sehen.

10 - Erstellen Sie eine versteckte, berechnete Anzahl Feld namens "AttachmentSizeTotal" mit folgender Formel:

REM "nicht wirklich neu berechnen dieses Feld, wenn wir \ 're in der Mitte der Anlage-Prozess";
tmp: = @ If (AttachFileName = ""; @ Sum (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ IsError (tmp); 0; tmp)

11 - Erstellen Sie nun die tatsächlichen Rich Text-Feld, dass die Anhänge gespeichert werden. Rufen Sie diese editierbare Feld "Attachments", und deaktivieren Sie die "Show Feldtrennern" checkbox (dies können Sie es "Look" wie ein berechnetes Feld, um Benutzer zu machen und helfen, sie daran hindern das normale "Datei - Bringen Sie ..."-Routine, die würden unsere Ziele zu unterwandern.

Das ist alles, was Sie tun müssen. Einfache huh? :-) . Angenommen, Sie haben alles richtig (und ich habe es richtig beschrieben) durchgeführt, sollte der Benutzer in der Lage sein, unsere Taste verwenden, um eine Datei für die Befestigung auszuwählen, und weiterhin darauf klicken, bis sie eine Datei, wird deren Auswahl haben sie über die Grenze. An diesem Punkt wird die Anlage den Betrieb zu stoppen und sie wird eine Warnmeldung zu sehen. Also, das nächste Mal, Ihre Benutzer versuchen, eine 100MB-Datei anhängen, werden sie nicht bis nach dem Mittagessen, um herauszufinden, sie haben eine schlechte Sache zu warten. Wenn sie es irgendwie schaffen, um Dateien, die die Grenze mit dem normalen überschreiten attach "File - Bringen Sie ..."-Ansatz wird die QuerySave fangen, die Situation. So zu rekapitulieren, sind die drei wichtigsten "Durchbrüche" in diesem Ansatz wie folgt:

1 - der NEMGetFile API-Funktion verwenden, um eine normale Datei öffnen aufrufen
2 - Schreiben Sie einen Wert für die jüngsten Verzeichnis der FileDlgDirectory Umgebungsvariablen in der Notes.ini
3 - Mit dem FileLen Funktion, um die Größe einer Datei in der Benutzer das Dateisystem zu überprüfen, da der Dateipfad als Eingabe

Betrachtet 7676 mal von 2610 Zuschauern

  1. ed
    26. August 2010 um 10:53 | # 1

    Good one. Dieser Beitrag ist sehr hilfreich. Vielen Dank!

  2. Jon
    22. November 2010 um 05.41 Uhr | # 2

    Egal was ich versuche, mich auf die mehrere "-Variante enthält nicht den Wert" Fehlermeldungen zu halten. Es scheint, wie ich einige variabels mehrfach erklärt haben. Was kann ich tun. Bitte beraten. Thanks.

  3. Jon
    22. November 2010 um 06:35 | # 3

    Sorry, bereits gelöst. Die Post ist groß. Thnx

  1. Bisher keine Trackbacks.