Lotus Notes campo Richtext controllo Attachmentment o Dimensione senza salvare documento
Diversi thread coprire l'argomento di prevenire l'attacco di file troppo grandi per un documento di Notes, e uno ostacolo principale sembra essere il modo di farlo senza salvare prima il documento, per non parlare senza prima collegare il file. Senza coprire tutte le ragioni per cui questa è una sfida, ho pensato che potrebbe essere utile per me per i dettagli la soluzione che mi è venuta dopo aver letto alcuni messaggi in questo forum e mettendo tutto insieme.
Obiettivi di progettazione:
1 - Limitare la dimensione consentita per gli allegati (dimensione totale in questo caso non, file dopo file) ad uno specifico documento
2 - Dal momento che si può prendere una eternità di allegare un file che può alla fine essere annullato (la più lunga l'eternità, maggiore è il liklihood sarà rifiutato), che idealmente vuole controllare la dimensione di un file prima che venga allegato a un documento . Questo si traduce nella necessità di controllare la dimensione del file di un file a livello di file system.
3 - Conserva qualsiasi facilità d'uso che già esiste nel processo di attaccamento (lo so "Cosa user-friendly?"). In breve, quando abbiamo allegare file, la finestra di dialogo file aperto deve continuare ad aprire la directory che l'ultimo accesso, e non sempre indietro nella directory Notes dati.
Passi:
1 - Creare una sottomaschera chiamata "Allegati"
2 - Inserire il codice seguente nelle dichiarazioni generali:
Dim Come era NotesUIWorkspace
Session As NotesSession
Db As NotesDatabase
Uidoc As NotesUIDocument
Doc As NotesDocument
GlobalSaveFlag As Integer 'saranno utilizzati per verificare se atto è stato effettivamente salvato più tardi
Declare Function NEMGetFile Lib "NNOTESWS" Alias "NEMGetFile" _
(Zero As Integer, ByVal filename As String, ByVal filtro As String, ByVal titolo As String) As Integer
3 - Mettete questa funzione nella globals sottomodulo:
Funzione LocalBrowse (titolo As String, di default come stringa, filtro As String) As String
Filename As String * 1024
predefinita nomefile =
Se filter = "" Allora filter = "Tutti i file |*.*|"
stato NEMGetFile% = (0, nome del file, filtro, titolo)
Selezionare lo status% Caso
Case 0: LocalBrowse = "" 'cancellato
Caso 1: LocalBrowse = Trim $ (filename)
Case Else: errore 1000, "Errore & H" & Hex $ (% di stato) e "in LocalBrowse"
End Select
End Function
4 - Evento PostOpen:
'Hai bisogno di inizializzare alcune variabili globali
Set è stato = New NotesUIWorkspace
Sessione set = NotesSession New
Set db = Session.currentdatabase
Set uidoc = Sorgente
Set doc = uidoc.document
5 - PostRecalc (Funzioni @ invece di script)
@ If (AttachFileName = ""; @ Return (""); "");
@ Command ([EditGotoField]; "Allegati");
@ Command ([EditInsertFileAttachment]; AttachFileName, "0");
AttachFileName CAMPO: = "";
6 - QuerySave:
DBProfile As NotesDocument 'opzionale - se si vuole essere in grado di configurare il limite di dimensione
Sizelimit As Long
GlobalSaveFlag = Continua 'In modo che, se ogni altra cosa modifica Continua, viene rilevato.
Set DBProfile = db.GetProfileDocument ("DBSettings") 'Questo è il mio profilo DB generico, ma si può usare quello che volete qui
'O utilizzare questo documento di profilo in qualche modo per memorizzare il limite, o codificare il limite (in byte) qui
Sizelimit = DBProfile.AttachSizeLimit (0)
'Sizelimit = 1048576 '1 MB
'Aggiungiamo la dimensione totale dei collegamenti esistenti per vedere se supera il nostro limite
'Questo script dovrebbe essere necessario solo se un utente è stato sneeky e usato un tradizionale "Allega"
'Comando dal menu file invece dei pulsanti per la selezione di un file
Se doc.AttachmentSizeTotal (0)> Poi sizelimit
Msgbox "È stato superato il limite di 1 MB di allegati. "& Chr (10) & Chr (10) & _
"Si prega di rimuovere gli allegati o comprimere i file (s).", 16, "Errore Allegato"
Continua = False
Exit Sub
Altro
Continua = True
End If
7 - QueryClose:
'Ripristinare il campo AttachFileName se abbiamo lasciato pieno e hanno salvato il documento
'Probabilmente ridondanti, ma solo nel caso in
Se GlobalSaveFlag = True E doc.AttachFileName (0) <> "" Then
doc.AttachFileName = ""
Chiamata doc.Save (Vero, Falso)
End If
8 - Creare un pulsante "Allega file" con il lotuscript seguenti:
Clicca Sub (Source As Button)
Nuovonomefile As String
Currentpath As String
DBProfile As NotesDocument
VerLen As Long
Sizelimit As Long
Set DBProfile = db.GetProfileDocument ("DBSettings") 'Questo è il mio profilo DB generico, ma si può usare quello che volete qui
'O creare questo documento di profilo in qualche modo per memorizzare il limite, o codificare il limite (in byte) qui
Sizelimit = DBProfile.AttachSizeLimit (0)
'Sizelimit = 1048576 '1 MB
NUOVONOMEFILE = LocalBrowse ("Allega file", "", "")
doc.AttachFileName = newfilename
currentpath = Strleftback (NUOVONOMEFILE, "\")
'Questo ripristinare l'impostazione predefinita sfogliare la directory a quella appena cercato
Chiamata Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)
verLen & = FileLen (doc.AttachFileName (0)) 'la funzione FileLen è il vero trucco per tutto questo
'Aggiungiamo la dimensione totale degli allegati esistenti e il nuovo file selezionato per vedere se supera il nostro limite
If (verLen & + doc.AttachmentSizeTotal (0))> Poi sizelimit
Msgbox "Il file supererà il limite di 1 MB per gli allegati. "& Chr (10) & Chr (10) & _
"Si prega di rimuovere gli allegati o comprimere i file (s).", 16, "Errore Allegato"
doc.AttachFileName = ""
Altro
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + verLen &
End If
Chiamata uidoc.Refresh 'attiva l'evento postrecalc che completeranno il processo di attaccamento
End Sub
9 - Creazione di un campo di testo modificabile chiamato "AttachFileName". Non entrate nelle formule, e nascondere il campo di vista.
10 - Creare una nascosta, campo calcolato numero chiamato "AttachmentSizeTotal" con la seguente formula:
REM "Non veramente ricalcolare questo campo se si \ 'nuovamente al centro di un processo di attaccamento";
tmp: = @ If (AttachFileName = ""; @ Sum (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ IsError (tmp); 0; tmp)
11 - Ora create il campo effettivo Rich Text che memorizzerà gli allegati. Chiamare questo campo editabile "Allegati" e deselezionare la casella di controllo "delimitatori di campo Show" (questo vi permetterà di fare lo "sguardo" come un campo calcolato per gli utenti e contribuire a impedire loro di fare il normale "File - Allega ..." routine che sarebbe sovvertire i nostri obiettivi.
Questo è tutto quello che dovete fare. Semplice no?
. Supponendo che hai fatto tutto correttamente (e che ho descritto correttamente), l'utente dovrebbe essere in grado di utilizzare il nostro pulsante per selezionare un file da allegare, e continuare a fare clic fino a quando hanno selezionato un file che metterà loro oltre il limite. A quel punto, l'operazione attacco si ferma e si vedrà un messaggio di avviso. Così, la prossima volta, gli utenti tenta di allegare un file di 100MB, non dovranno aspettare fino a dopo pranzo per scoprire che hanno fatto una brutta cosa. Se in qualche modo riescono a collegare i file che superano il limite con il normale "File - Allega ..." approccio, la QuerySave prenderà la situazione. Quindi, per ricapitolare, le tre principali "innovazioni" di questo approccio sono i seguenti:
1 - L'uso della funzione di NEMGetFile API per chiamare una normale finestra di dialogo Apri file
2 - Scrivere un valore per la directory più recente alla variabile d'ambiente FileDlgDirectory nel Notes.ini
3 - Usare la funzione FileLen per controllare la dimensione di un file nel file system dell'utente, dato il percorso del file in input
Obiettivi di progettazione:
1 - Limitare la dimensione consentita per gli allegati (dimensione totale in questo caso non, file dopo file) ad uno specifico documento
2 - Dal momento che si può prendere una eternità di allegare un file che può alla fine essere annullato (la più lunga l'eternità, maggiore è il liklihood sarà rifiutato), che idealmente vuole controllare la dimensione di un file prima che venga allegato a un documento . Questo si traduce nella necessità di controllare la dimensione del file di un file a livello di file system.
3 - Conserva qualsiasi facilità d'uso che già esiste nel processo di attaccamento (lo so "Cosa user-friendly?"). In breve, quando abbiamo allegare file, la finestra di dialogo file aperto deve continuare ad aprire la directory che l'ultimo accesso, e non sempre indietro nella directory Notes dati.
Passi:
1 - Creare una sottomaschera chiamata "Allegati"
2 - Inserire il codice seguente nelle dichiarazioni generali:
Dim Come era NotesUIWorkspace
Session As NotesSession
Db As NotesDatabase
Uidoc As NotesUIDocument
Doc As NotesDocument
GlobalSaveFlag As Integer 'saranno utilizzati per verificare se atto è stato effettivamente salvato più tardi
Declare Function NEMGetFile Lib "NNOTESWS" Alias "NEMGetFile" _
(Zero As Integer, ByVal filename As String, ByVal filtro As String, ByVal titolo As String) As Integer
3 - Mettete questa funzione nella globals sottomodulo:
Funzione LocalBrowse (titolo As String, di default come stringa, filtro As String) As String
Filename As String * 1024
predefinita nomefile =
Se filter = "" Allora filter = "Tutti i file |*.*|"
stato NEMGetFile% = (0, nome del file, filtro, titolo)
Selezionare lo status% Caso
Case 0: LocalBrowse = "" 'cancellato
Caso 1: LocalBrowse = Trim $ (filename)
Case Else: errore 1000, "Errore & H" & Hex $ (% di stato) e "in LocalBrowse"
End Select
End Function
4 - Evento PostOpen:
'Hai bisogno di inizializzare alcune variabili globali
Set è stato = New NotesUIWorkspace
Sessione set = NotesSession New
Set db = Session.currentdatabase
Set uidoc = Sorgente
Set doc = uidoc.document
5 - PostRecalc (Funzioni @ invece di script)
@ If (AttachFileName = ""; @ Return (""); "");
@ Command ([EditGotoField]; "Allegati");
@ Command ([EditInsertFileAttachment]; AttachFileName, "0");
AttachFileName CAMPO: = "";
6 - QuerySave:
DBProfile As NotesDocument 'opzionale - se si vuole essere in grado di configurare il limite di dimensione
Sizelimit As Long
GlobalSaveFlag = Continua 'In modo che, se ogni altra cosa modifica Continua, viene rilevato.
Set DBProfile = db.GetProfileDocument ("DBSettings") 'Questo è il mio profilo DB generico, ma si può usare quello che volete qui
'O utilizzare questo documento di profilo in qualche modo per memorizzare il limite, o codificare il limite (in byte) qui
Sizelimit = DBProfile.AttachSizeLimit (0)
'Sizelimit = 1048576 '1 MB
'Aggiungiamo la dimensione totale dei collegamenti esistenti per vedere se supera il nostro limite
'Questo script dovrebbe essere necessario solo se un utente è stato sneeky e usato un tradizionale "Allega"
'Comando dal menu file invece dei pulsanti per la selezione di un file
Se doc.AttachmentSizeTotal (0)> Poi sizelimit
Msgbox "È stato superato il limite di 1 MB di allegati. "& Chr (10) & Chr (10) & _
"Si prega di rimuovere gli allegati o comprimere i file (s).", 16, "Errore Allegato"
Continua = False
Exit Sub
Altro
Continua = True
End If
7 - QueryClose:
'Ripristinare il campo AttachFileName se abbiamo lasciato pieno e hanno salvato il documento
'Probabilmente ridondanti, ma solo nel caso in
Se GlobalSaveFlag = True E doc.AttachFileName (0) <> "" Then
doc.AttachFileName = ""
Chiamata doc.Save (Vero, Falso)
End If
8 - Creare un pulsante "Allega file" con il lotuscript seguenti:
Clicca Sub (Source As Button)
Nuovonomefile As String
Currentpath As String
DBProfile As NotesDocument
VerLen As Long
Sizelimit As Long
Set DBProfile = db.GetProfileDocument ("DBSettings") 'Questo è il mio profilo DB generico, ma si può usare quello che volete qui
'O creare questo documento di profilo in qualche modo per memorizzare il limite, o codificare il limite (in byte) qui
Sizelimit = DBProfile.AttachSizeLimit (0)
'Sizelimit = 1048576 '1 MB
NUOVONOMEFILE = LocalBrowse ("Allega file", "", "")
doc.AttachFileName = newfilename
currentpath = Strleftback (NUOVONOMEFILE, "\")
'Questo ripristinare l'impostazione predefinita sfogliare la directory a quella appena cercato
Chiamata Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)
verLen & = FileLen (doc.AttachFileName (0)) 'la funzione FileLen è il vero trucco per tutto questo
'Aggiungiamo la dimensione totale degli allegati esistenti e il nuovo file selezionato per vedere se supera il nostro limite
If (verLen & + doc.AttachmentSizeTotal (0))> Poi sizelimit
Msgbox "Il file supererà il limite di 1 MB per gli allegati. "& Chr (10) & Chr (10) & _
"Si prega di rimuovere gli allegati o comprimere i file (s).", 16, "Errore Allegato"
doc.AttachFileName = ""
Altro
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + verLen &
End If
Chiamata uidoc.Refresh 'attiva l'evento postrecalc che completeranno il processo di attaccamento
End Sub
9 - Creazione di un campo di testo modificabile chiamato "AttachFileName". Non entrate nelle formule, e nascondere il campo di vista.
10 - Creare una nascosta, campo calcolato numero chiamato "AttachmentSizeTotal" con la seguente formula:
REM "Non veramente ricalcolare questo campo se si \ 'nuovamente al centro di un processo di attaccamento";
tmp: = @ If (AttachFileName = ""; @ Sum (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ IsError (tmp); 0; tmp)
11 - Ora create il campo effettivo Rich Text che memorizzerà gli allegati. Chiamare questo campo editabile "Allegati" e deselezionare la casella di controllo "delimitatori di campo Show" (questo vi permetterà di fare lo "sguardo" come un campo calcolato per gli utenti e contribuire a impedire loro di fare il normale "File - Allega ..." routine che sarebbe sovvertire i nostri obiettivi.
Questo è tutto quello che dovete fare. Semplice no?
. Supponendo che hai fatto tutto correttamente (e che ho descritto correttamente), l'utente dovrebbe essere in grado di utilizzare il nostro pulsante per selezionare un file da allegare, e continuare a fare clic fino a quando hanno selezionato un file che metterà loro oltre il limite. A quel punto, l'operazione attacco si ferma e si vedrà un messaggio di avviso. Così, la prossima volta, gli utenti tenta di allegare un file di 100MB, non dovranno aspettare fino a dopo pranzo per scoprire che hanno fatto una brutta cosa. Se in qualche modo riescono a collegare i file che superano il limite con il normale "File - Allega ..." approccio, la QuerySave prenderà la situazione. Quindi, per ricapitolare, le tre principali "innovazioni" di questo approccio sono i seguenti:
1 - L'uso della funzione di NEMGetFile API per chiamare una normale finestra di dialogo Apri file
2 - Scrivere un valore per la directory più recente alla variabile d'ambiente FileDlgDirectory nel Notes.ini
3 - Usare la funzione FileLen per controllare la dimensione di un file nel file system dell'utente, dato il percorso del file in input
Visto 7655 volte da 2603 spettatori














Uno buono. Questo post è molto utile. Grazie!
Non importa quello che cerco, io continuo ad avere diversi "variante non contiene un valore" messaggi di errore. Mi sembra di dover dichiarare alcune volte variabels diverse. Cosa posso fare. Si prega di avvisare. Grazie.
Ci dispiace, già risolto. Il post è grande. Thnx