Strona główna > Lotus Software Uwagi , Lotus Notes Rozwiązanie , Lotus Notes samouczek , LotusScript , Uwagi Designer > Lotus Notes dziedzinie Richtext sprawdzania Attachmentment lub Rozmiar bez zapisywania dokumentu

Lotus Notes dziedzinie Richtext sprawdzania Attachmentment lub Rozmiar bez zapisywania dokumentu

Kilka wątków pokrycie temat zapobiegania dołączanie plików zbyt duże do dokumentu programu Notes, a jednym z głównych przeszkoda wydaje się być, jak to zrobić bez wcześniejszego zapisywania dokumentu, nie mówiąc już bez dołączania pliku. Bez obejmujące wszystkie powody, dla których jest to wyzwanie, myślałem, że może to być pomocne dla mnie szczegółowo rozwiązanie wpadłem po przeczytaniu kilku postów na tym forum i składając wszystko razem.

Cele projektu:

1 - limit dopuszczalny rozmiar załączników (całkowity rozmiar w tym przypadku nie, plik po pliku) do konkretnego dokumentu
2 - Od może zająć wieczność, aby dołączyć plik, który może ostatecznie być zabronione (już wieczność, tym większe znaczeniach będzie można odmówić), to idealnie chcesz sprawdzić rozmiar pliku przed jego dołączony do dokumentu . To przekłada się na potrzebę, by sprawdzić rozmiar pliku do pliku na poziomie systemu plików.
3 - Zachowaj cokolwiek łatwość obsługi, która już istnieje w procesie załącznik (wiem "Co łatwość obsługi?"). Krótko mówiąc, kiedy dołączać pliki, otwarte okno dialogowe pliku powinna kontynuować otwieranie do katalogu my ostatniego dostępu, i nie zawsze z powrotem do katalogu danych programu Notes.

Czynności:
1 - Tworzenie podformularza zwane "Załączniki"
2 - Put następujący kod w Global deklaracje:

Dim był NotesUIWorkspace
Dim Session W NotesSession
Dim db As NotesDatabase
Dim uidoc Jak NotesUIDocument
Dim doc Jak NotesDocument
Dim GlobalSaveFlag As Integer 'będą wykorzystywane do sprawdzenia, czy dokument rzeczywiście został zapisany później

Declare Function NEMGetFile Lib "NNOTESWS" Alias ​​"NEMGetFile" _
(Zero As Integer, ByVal nazwa_pliku As String, ByVal filtr As String, ByVal tytuł As String) As Integer

3 - Umieść tę funkcję w globalnych podformularz:

Funkcja LocalBrowse (tytuł As String, domyślnie As String, filtr As String) As String
Dim nazwa_pliku As String * 1024
filename = default
Jeśli filtr = "" Then filtr = "Wszystkie pliki |*.*|"
Status% = NEMGetFile (0, nazwa pliku, filtr, tytuł)

Wybierz% stanu Case
Case 0: LocalBrowse = "" 'anulowane
Przypadek 1: LocalBrowse = Trim $ (filename)
Case Else: Error 1000, "Błąd & H" & Hex $ (% stanu) i "w LocalBrowse"
End Select
End Function

4 - Wydarzenie PostOpen:

"Potrzebujesz zainicjować kilka zmiennych globalnych
Set = New NotesUIWorkspace
Sesja Set = New NotesSession
Set db = Session.currentdatabase
Ustaw uidoc = Źródło
Set doc = uidoc.document

5 - PostRecalc (@ Funkcje zamiast skryptu)

@ Jeśli (AttachFileName = ""; @ Powrót (""); "");
@ Command ([EditGotoField]; "Załączniki");
@ Command ([EditInsertFileAttachment]; AttachFileName; "0");
AttachFileName ZAKRES: = "";

6 - QuerySave:

Dim DBProfile Jak NotesDocument "opcja - jeśli chcesz być w stanie skonfigurować limit rozmiaru
Dim SizeLimit jak Long

GlobalSaveFlag = Kontynuuj "Tak, że jeśli cokolwiek innego modyfikuje Kontynuuj, zostało to stwierdzone.

Ustaw DBProfile = db.GetProfileDocument ("DBSettings") "To jest mój ogólny profil DB, ale można użyć, co chcesz tutaj

"Albo skorzystać z tego dokumentu Profil jakoś zapisać, ograniczenia lub ciężko kod limitu (w bajtach) tutaj
SizeLimit = DBProfile.AttachSizeLimit (0)
"SizeLimit = 1048576 '1 MB

"Dodajmy do łącznej wielkości istniejących załączników, czy to przekracza nasze ograniczenia
"Ten skrypt powinien być konieczne, jeśli użytkownik był sneeky i używane tradycyjne" Dołącz "
"Polecenie z menu Plik zamiast przycisków wyboru pliku
Jeśli doc.AttachmentSizeTotal (0)> SizeLimit Następnie
Msgbox "Została przekroczona granica 1 MB na załączniki. "& Chr (10) & Chr (10) & _
"Proszę usunąć załączniki lub kompresji pliku (s).", 16, "Błąd Załącznik"
Continue = False
Exit Sub
Więcej
Continue = True
End If

7 - QueryClose:

"Reset dziedzinie AttachFileName jeśli mamy zostawił wypełnione i zostały zapisane w dokumencie
"Prawdopodobnie zbędny ale tylko w przypadku
Jeśli GlobalSaveFlag = true i doc.AttachFileName (0) <> "" Then
doc.AttachFileName = ""
Zadzwoń doc.Save (True, False)
End If

8 - Utwórz przycisk "Dołącz plik" z następującymi lotuscript:

Kliknij Sub (źródło jak Button)
Dim nowa_nazwa_pliku As String
Dim currentpath As String
Dim DBProfile Jak NotesDocument
Dim verLen As Long
Dim SizeLimit jak Long

Ustaw DBProfile = db.GetProfileDocument ("DBSettings") "To jest mój ogólny profil DB, ale można użyć, co chcesz tutaj

"Albo stworzenia tego dokumentu Profil jakoś zapisać, ograniczenia lub ciężko kod limitu (w bajtach) tutaj
SizeLimit = DBProfile.AttachSizeLimit (0)
"SizeLimit = 1048576 '1 MB

Nowa_nazwa_pliku = LocalBrowse ("Dołącz plik", "", "")
doc.AttachFileName = nowa_nazwa_pliku
currentpath = Strleftback (nowa_nazwa_pliku, "\")

"Spowoduje to przywrócenie domyślnych przejdź do katalogu, który właśnie szukał
Zadzwoń Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)

verLen & = FileLen (doc.AttachFileName (0)) "funkcja FileLen jest prawdziwy podstęp wszystko

"Dodajmy do łącznej wielkości istniejących załączników I nowy plik wybrany, aby zobaczyć, jeśli przekracza nasze ograniczenia
Jeśli (verLen i + doc.AttachmentSizeTotal (0))> SizeLimit Następnie
Msgbox "Plik ten będzie przekraczać 1 MB limitu na załączniki. "& Chr (10) & Chr (10) & _
"Proszę usunąć załączniki lub kompresji pliku (s).", 16, "Błąd Załącznik"
doc.AttachFileName = ""
Więcej
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + verLen i
End If

Zadzwoń uidoc.Refresh "wyzwala PostRecalc zdarzenie, które zakończy proces załącznik

End Sub

9 - Tworzenie edytowalnego pola tekstowego o nazwie "AttachFileName". Nie wprowadzaj żadnych wzorów i ukryć pola widzenia.

10 - Tworzenie ukrytego, obliczone pole numer zwany "AttachmentSizeTotal" z następującym wzorem:

REM: "Nie dobrze przeliczyć tej dziedzinie, jeśli \ 're w środku procesu załącznik";
tmp: = @ If (AttachFileName = ""; @ Sum (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ IsError (tmp); 0; tmp)

11 - Teraz należy stworzyć rzeczywiste Rich pole tekstowe w którym będzie przechowywany załączników. Nazwijmy to pole do edycji "Załączniki" i odznaczyć "separatory dziedzinie show" pole wyboru (pozwoli to, aby to "wygląda" jak pole obliczone dla użytkowników i zapobiegać ich od normalnych "Plik - Dołącz ..." procedura, że by obalić nasze cele.

To wszystko, co musisz zrobić. Proste prawda? :-) . Zakładając, że zrobiłeś wszystko poprawnie (i, że już opisany prawidłowo), użytkownik powinien mieć możliwość korzystania z naszych przycisk, aby wybrać plik do mocowania i nadal kliknij go, dopóki nie wybrałeś plik, który wprowadzi ich ponad limit. W tym momencie operacji załącznik zatrzyma się i będą się komunikat ostrzegawczy. Tak więc, następnym razem, użytkownicy starają się dołączyć 100MB, nie będą musieli czekać, aż po obiedzie, aby dowiedzieć się, że nie jest złą rzeczą. Jeśli jakimś cudem dołączać pliki, które przekraczają limit przy użyciu normalnych "Plik - Dołącz ..." podejścia, querysave złapie tej sytuacji. Reasumując, trzy główne "przełomy" w tym ujęciu są następujące:

1 - Korzystanie z funkcji API NEMGetFile wywołać normalne okno dialogowe Otwórz plik
2 - Pisanie wartość dla katalogu najnowszych do FileDlgDirectory zmiennych środowiskowych w Notes.ini
3 - Korzystanie z FileLen funkcji, aby sprawdzić rozmiar pliku w systemie plików użytkownika, biorąc pod uwagę filepath jako wejście

Kilka wątków pokrycie temat zapobiegania dołączanie plików zbyt duże do dokumentu programu Notes, a jednym z głównych przeszkoda wydaje się być, jak to zrobić bez wcześniejszego zapisywania dokumentu, nie mówiąc już bez dołączania pliku. Bez obejmujące wszystkie powody, dla których jest to wyzwanie, myślałem, że może to być pomocne dla mnie szczegółowo rozwiązanie wpadłem po przeczytaniu kilku postów na tym forum i składając wszystko razem.

Cele projektu:

1 - limit dopuszczalny rozmiar załączników (całkowity rozmiar w tym przypadku nie, plik po pliku) do konkretnego dokumentu
2 - Od może zająć wieczność, aby dołączyć plik, który może ostatecznie być zabronione (już wieczność, tym większe znaczeniach będzie można odmówić), to idealnie chcesz sprawdzić rozmiar pliku przed jego dołączony do dokumentu . To przekłada się na potrzebę, by sprawdzić rozmiar pliku do pliku na poziomie systemu plików.
3 - Zachowaj cokolwiek łatwość obsługi, która już istnieje w procesie załącznik (wiem "Co łatwość obsługi?"). W skrócie, gdy dołączać pliki, otwarte okno dialogowe pliku powinna kontynuować otwieranie do katalogu my ostatniego dostępu, i nie zawsze z powrotem do katalogu danych programu Notes.

Czynności:
1 - Tworzenie podformularza zwane "Załączniki"
2 - Put następujący kod w Global deklaracje:

Dim był NotesUIWorkspace
Dim Session W NotesSession
Dim db As NotesDatabase
Dim uidoc Jak NotesUIDocument
Dim doc Jak NotesDocument
Dim GlobalSaveFlag As Integer 'będą wykorzystywane do sprawdzenia, czy dokument rzeczywiście został zapisany później

Declare Function NEMGetFile Lib "NNOTESWS" Alias ​​"NEMGetFile" _
(Zero As Integer, ByVal nazwa_pliku As String, ByVal filtr As String, ByVal tytuł As String) As Integer

3 - Umieść tę funkcję w globalnych podformularz:

Funkcja LocalBrowse (tytuł As String, domyślnie As String, filtr As String) As String
Dim nazwa_pliku As String * 1024
filename = default
Jeśli filtr = "" Then filtr = "Wszystkie pliki |*.*|"
Status% = NEMGetFile (0, nazwa pliku, filtr, tytuł)

Wybierz% stanu Case
Case 0: LocalBrowse = "" 'anulowane
Przypadek 1: LocalBrowse = Trim $ (filename)
Case Else: Error 1000, "Błąd & H" & Hex $ (% stanu) i "w LocalBrowse"
End Select
End Function

4 - Wydarzenie PostOpen:

"Potrzebujesz zainicjować kilka zmiennych globalnych
Set = New NotesUIWorkspace
Sesja Set = New NotesSession
Set db = Session.currentdatabase
Ustaw uidoc = Źródło
Set doc = uidoc.document

5 - PostRecalc (@ Funkcje zamiast skryptu)

@ Jeśli (AttachFileName = ""; @ Powrót (""); "");
@ Command ([EditGotoField]; "Załączniki");
@ Command ([EditInsertFileAttachment]; AttachFileName; "0");
AttachFileName ZAKRES: = "";

6 - QuerySave:

Dim DBProfile Jak NotesDocument "opcja - jeśli chcesz być w stanie skonfigurować limit rozmiaru
Dim SizeLimit jak Long

GlobalSaveFlag = Kontynuuj "Tak, że jeśli cokolwiek innego modyfikuje Kontynuuj, zostało to stwierdzone.

Ustaw DBProfile = db.GetProfileDocument ("DBSettings") "To jest mój ogólny profil DB, ale można użyć, co chcesz tutaj

"Albo skorzystać z tego dokumentu Profil jakoś zapisać, ograniczenia lub ciężko kod limitu (w bajtach) tutaj
SizeLimit = DBProfile.AttachSizeLimit (0)
"SizeLimit = 1048576 '1 MB

"Dodajmy do łącznej wielkości istniejących załączników, czy to przekracza nasze ograniczenia
"Ten skrypt powinien być konieczne, jeśli użytkownik był sneeky i używane tradycyjne" Dołącz "
"Polecenie z menu Plik zamiast przycisków wyboru pliku
Jeśli doc.AttachmentSizeTotal (0)> SizeLimit Następnie
Msgbox "Została przekroczona granica 1 MB na załączniki. "& Chr (10) & Chr (10) & _
"Proszę usunąć załączniki lub kompresji pliku (s).", 16, "Błąd Załącznik"
Continue = False
Exit Sub
Więcej
Continue = True
End If

7 - QueryClose:

"Reset dziedzinie AttachFileName jeśli mamy zostawił wypełnione i zostały zapisane w dokumencie
"Prawdopodobnie zbędny ale tylko w przypadku
Jeśli GlobalSaveFlag = true i doc.AttachFileName (0) <> "" Then
doc.AttachFileName = ""
Zadzwoń doc.Save (True, False)
End If

8 - Utwórz przycisk "Dołącz plik" z następującymi lotuscript:

Kliknij Sub (źródło jak Button)
Dim nowa_nazwa_pliku As String
Dim currentpath As String
Dim DBProfile Jak NotesDocument
Dim verLen As Long
Dim SizeLimit jak Long

Ustaw DBProfile = db.GetProfileDocument ("DBSettings") "To jest mój ogólny profil DB, ale można użyć, co chcesz tutaj

"Albo stworzenia tego dokumentu Profil jakoś zapisać, ograniczenia lub ciężko kod limitu (w bajtach) tutaj
SizeLimit = DBProfile.AttachSizeLimit (0)
"SizeLimit = 1048576 '1 MB

Nowa_nazwa_pliku = LocalBrowse ("Dołącz plik", "", "")
doc.AttachFileName = nowa_nazwa_pliku
currentpath = Strleftback (nowa_nazwa_pliku, "\")

"Spowoduje to przywrócenie domyślnych przejdź do katalogu, który właśnie szukał
Zadzwoń Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)

verLen & = FileLen (doc.AttachFileName (0)) "funkcja FileLen jest prawdziwy podstęp wszystko

"Dodajmy do łącznej wielkości istniejących załączników I nowy plik wybrany, aby zobaczyć, jeśli przekracza nasze ograniczenia
Jeśli (verLen i + doc.AttachmentSizeTotal (0))> SizeLimit Następnie
Msgbox "Plik ten będzie przekraczać 1 MB limitu na załączniki. "& Chr (10) & Chr (10) & _
"Proszę usunąć załączniki lub kompresji pliku (s).", 16, "Błąd Załącznik"
doc.AttachFileName = ""
Więcej
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + verLen i
End If

Zadzwoń uidoc.Refresh "wyzwala PostRecalc zdarzenie, które zakończy proces załącznik

End Sub

9 - Tworzenie edytowalnego pola tekstowego o nazwie "AttachFileName". Nie wprowadzaj żadnych wzorów i ukryć pola widzenia.

10 - Tworzenie ukrytego, obliczone pole numer zwany "AttachmentSizeTotal" z następującym wzorem:

REM: "Nie dobrze przeliczyć tej dziedzinie, jeśli \ 're w środku procesu załącznik";
tmp: = @ If (AttachFileName = ""; @ Sum (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ IsError (tmp); 0; tmp)

11 - Teraz należy stworzyć rzeczywiste Rich pole tekstowe w którym będzie przechowywany załączników. Nazwijmy to pole do edycji "Załączniki" i odznaczyć "separatory dziedzinie show" pole wyboru (pozwoli to, aby to "wygląda" jak pole obliczone dla użytkowników i zapobiegać ich od normalnych "Plik - Dołącz ..." procedura, że by obalić nasze cele.

To wszystko, co musisz zrobić. Proste prawda? :-) . Zakładając, że zrobiłeś wszystko poprawnie (i, że już opisany prawidłowo), użytkownik powinien mieć możliwość korzystania z naszych przycisk, aby wybrać plik do mocowania i nadal kliknij go, dopóki nie wybrałeś plik, który wprowadzi ich ponad limit. W tym momencie operacji załącznik zatrzyma się i będą się komunikat ostrzegawczy. Tak więc, następnym razem, użytkownicy starają się dołączyć 100MB, nie będą musieli czekać, aż po obiedzie, aby dowiedzieć się, że nie jest złą rzeczą. Jeśli jakimś cudem dołączać pliki, które przekraczają limit przy użyciu normalnych "Plik - Dołącz ..." podejścia, querysave złapie tej sytuacji. Reasumując, trzy główne "przełomy" w tym ujęciu są następujące:

1 - Korzystanie z funkcji API NEMGetFile wywołać normalne okno dialogowe Otwórz plik
2 - Pisanie wartość dla katalogu najnowszych do FileDlgDirectory zmiennych środowiskowych w Notes.ini
3 - Korzystanie z FileLen funkcji, aby sprawdzić rozmiar pliku w systemie plików użytkownika, biorąc pod uwagę filepath jako wejście

Oglądane 7615 razy przez 2587 widzów

  1. ed
    26 sierpnia 2010 o 10:53 | # 1

    Dobry. Ten post jest bardzo pomocne. Dzięki!

  2. Jon
    22 listopada 2010 na 05:41 | # 2

    Bez względu na to, co próbuję, wciąż na posiadanie kilku "wariant nie zawiera wartości" komunikaty o błędach. Wydaje się, że muszę deklarować kilka variabels kilka razy. Co mogę zrobić. Proszę doradzić. Dzięki.

  3. Jon
    22 listopada 2010 na 06:35 | # 3

    Przykro nam, już rozwiązany. Ten post jest bardzo duża. Thnx

  1. Brak trackbacków.