Inicio > Software Lotus Notes , Lotus Notas solución , Lotus Notes Tutorial , LotusScript , Notas del diseñador > Lotus Notes enriquecido el campo de cheques o Attachmentment Tamaño sin guardar el documento

Lotus Notes campo enriquecido comprobar Attachmentment o Tamaño sin guardar el documento

Varios hilos de cubrir el tema de la prevención de la unión de archivos demasiado grandes para un documento de Notes, y un gran obstáculo parece ser la forma de hacerlo sin guardar primero el documento, y mucho menos sin adjuntar el archivo. Sin cubrir todas las razones por las que esto es un reto, pensé que podría ser útil para mí a los detalles de la solución que se me ocurrió después de leer varios posts en este foro y recomponer todo junto.

Objetivos de diseño:

1 - Limitar el tamaño permitido de los archivos adjuntos (de tamaño total, en este caso no, archivo por archivo) a un documento específico
2 - Dado que puede tomar una eternidad para adjuntar un archivo que en última instancia, puede ser rechazado (el más largo de la eternidad, cuanto mayor sea la verosimilitud será rechazada), lo ideal sería que desee comprobar el tamaño de un archivo antes de que se adjunta a un documento . Esto se traduce en la necesidad de comprobar el tamaño del archivo de un archivo a nivel de sistema de archivos.
3 - Mantener todo lo que la facilidad de uso que ya existe en el proceso de colocación (lo sé "Lo que la facilidad de uso?"). En resumen, cuando adjuntar archivos, el cuadro de diálogo de archivos abiertos deben seguir para abrir el directorio de la última vez que accede, y no siempre de nuevo en el directorio de datos de Notes.

Pasos a seguir:
1 - Crear un subformulario llamado "Archivos adjuntos"
2 - Coloque el siguiente código en las declaraciones globales:

Dim ws As NotesUIWorkspace
Sesión As NotesSession
Dim db como NotesDatabase
Uidoc As NotesUIDocument
Dim doc NotesDocument
GlobalSaveFlag As Integer 'se utiliza para comprobar si se ha guardado el documento en realidad más tarde

Declare Function NEMGetFile Lib "NNOTESWS" Alias ​​"NEMGetFile" _
(Cero como nombre de archivo Integer, ByVal As String, ByVal filtro As String, ByVal título As String) As Integer

3 - Colocar esta función en el subformulario globales:

Función LocalBrowse (título As String, por defecto As String, filtro As String) As String
Dim nombre As String * 1024
nombre = por defecto
Si el filtro = "" Then filtro = "Todos los archivos |*.*|"
estado =% NEMGetFile (0, nombre de archivo, filtrado, el título)

Seleccione% de casos de estado
Case 0: LocalBrowse = "" 'cancelado
Caso 1: LocalBrowse = Trim $ (archivo)
Case Else: Error 1000, "Error & H" & Hex $ (% de estado) y "en LocalBrowse"
End Select
End Function

4 - Evento PostOpen:

"Necesita inicializar varias variables globales
Set era = Nueva NotesUIWorkspace
Sesión de juego = NotesSession Nueva
Set db = Session.currentdatabase
Establecer uidoc = Fuente
Set doc = uidoc.document

5 - PostRecalc (@ funciones en lugar de guión)

@ Si (AttachFileName = ""; @ Return (""); "");
@ Command ([EditGotoField], "Anexos");
@ Command ([EditInsertFileAttachment]; AttachFileName, "0");
AttachFileName CAMPO: = "";

6 - QuerySave:

DBProfile As NotesDocument 'opcional - si usted quiere ser capaz de configurar el límite de tamaño
LímiteDeTamaño tenue como a largo

GlobalSaveFlag = Continuar "Así que si todo lo demás modifica Continuar, que se detecta.

Establecer DBProfile = db.GetProfileDocument ("DBSettings"): Este es mi perfil DB genérico, pero usted puede utilizar lo que quieras aquí

"O bien utilizar este documento de perfil de alguna manera para almacenar el límite, o codificar el límite (en bytes) aquí
LímiteDeTamaño = DBProfile.AttachSizeLimit (0)
"LímiteDeTamaño = 1048576 '1 MB

"Vamos a añadir el tamaño total de archivos adjuntos existentes para ver si se excede nuestro límite
'Este script sólo debería ser necesario si el usuario se sneeky y se utiliza un tradicional "Adjuntar"
"Comando en el menú archivo, en lugar de los botones para seleccionar un archivo
Si doc.AttachmentSizeTotal (0)> Luego límiteDeTamaño
MsgBox "Se ha superado el límite de 1 MB en archivos adjuntos. "& Chr (10) & Chr (10) & _
"Por favor, elimine los archivos adjuntos o comprimir el archivo (s)." 16, "Error al Anexo"
Continuar = false
Exit Sub
Más
Continuar = true
End If

7 - QueryClose:

"Perdí el campo AttachFileName si nos hemos dejado lleno y ha guardado el documento
"Probablemente redundante, pero por si acaso
Si GlobalSaveFlag = True y doc.AttachFileName (0) <> "" Entonces,
doc.AttachFileName = ""
Llame doc.Save (verdadero, falso)
End If

8 - Creación de un botón "Adjuntar archivo" con el lotuscript siguientes:

Haga clic en Sub (Source As Button)
Newfilename Dim As String
Currentpath Dim As String
DBProfile As NotesDocument
Verlen As largo
LímiteDeTamaño tenue como a largo

Establecer DBProfile = db.GetProfileDocument ("DBSettings"): Este es mi perfil DB genérico, pero usted puede utilizar lo que quieras aquí

"O bien crear este documento de perfil de alguna manera para almacenar el límite, o codificar el límite (en bytes) aquí
LímiteDeTamaño = DBProfile.AttachSizeLimit (0)
"LímiteDeTamaño = 1048576 '1 MB

Newfilename = LocalBrowse ("Adjuntar archivos", "", "")
doc.AttachFileName = NuevoNombreDeArchivo
currentpath = Strleftback (newfilename, "\")

"Esto va a restablecer la navegación por el directorio por defecto a la que se acaba de buscar
Llame Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)

Verlen y FileLen = (doc.AttachFileName (0)) 'la función FileLen es el verdadero truco de todo esto

"Vamos a añadir el tamaño total de archivos adjuntos existentes y el nuevo archivo seleccionado para ver si se excede nuestro límite
Si (y + Verlen doc.AttachmentSizeTotal (0))> Luego límiteDeTamaño
MsgBox "Este archivo se exceda el límite de 1 MB en archivos adjuntos. "& Chr (10) & Chr (10) & _
"Por favor, elimine los archivos adjuntos o comprimir el archivo (s)." 16, "Error al Anexo"
doc.AttachFileName = ""
Más
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + Verlen y
End If

Llame uidoc.Refresh 'activa el evento postrecalc que se completa el proceso de colocación

End Sub

9 - Crear un campo de texto editable denominado "AttachFileName". No entre en ninguna fórmula, y ocultar el campo de la vista.

10 - Crear un campo oculto, número calculado llamado "AttachmentSizeTotal" con la siguiente fórmula:

REM "No realmente calcular este campo si \ 're en medio de un proceso de unión";
tmp: = @ If (AttachFileName = ""; @ Suma (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ ESERROR (tmp); 0; tmp)

11 - Ahora crea el campo real de texto enriquecido que se almacenarán los archivos adjuntos. Llame a este campo editable "Archivos adjuntos", y desactive la "delimitadores de mostrar el campo" casilla de verificación (esto le permitirá hacerlo "look" como un campo calculado para los usuarios y ayudar a impedir que hagan lo normal "Archivo - Colocar ..." de rutina que sería subvertir nuestros objetivos.

Eso es todo lo que tiene que hacer. Sencillo ¿no? :-) . Si ya te has hecho todo correctamente (y que yo he descrito correctamente), el usuario debe ser capaz de utilizar nuestro botón para seleccionar un archivo de datos adjuntos y haga clic en él para continuar hasta que haya seleccionado un archivo que va a poner ellos por encima del límite. En ese momento, la operación de unión se detendrá y se mostrará un mensaje de advertencia. Por lo tanto, la próxima vez, los usuarios intentan adjuntar un archivo de 100 MB, que no tendrá que esperar hasta después del almuerzo para saber que hicieron algo malo. Si se las arreglan para adjuntar archivos que superen el límite con la normalidad "Archivo - Colocar ..." enfoque, el QuerySave alcanzará esa situación. Así que para recapitular, los tres principales "avances" en este enfoque son los siguientes:

1 - Uso de la función NEMGetFile API para llamar a un diálogo normal Abrir archivo
2 - Escribir un valor para el directorio de más reciente a la variable de entorno FileDlgDirectory en el Notes.ini
3 - Uso de la función FileLen para comprobar el tamaño de un archivo en el sistema de archivos del usuario, teniendo en cuenta la ruta de archivo como entrada

Varios hilos de cubrir el tema de la prevención de la unión de archivos demasiado grandes para un documento de Notes, y un gran obstáculo parece ser la forma de hacerlo sin guardar primero el documento, y mucho menos sin adjuntar el archivo. Sin cubrir todas las razones por las que esto es un reto, pensé que podría ser útil para mí a los detalles de la solución que se me ocurrió después de leer varios posts en este foro y recomponer todo junto.

Objetivos de diseño:

1 - Limitar el tamaño permitido de los archivos adjuntos (de tamaño total, en este caso no, archivo por archivo) a un documento específico
2 - Dado que puede tomar una eternidad para adjuntar un archivo que en última instancia, puede ser rechazado (el más largo de la eternidad, cuanto mayor sea la verosimilitud será rechazada), lo ideal sería que desee comprobar el tamaño de un archivo antes de que se adjunta a un documento . Esto se traduce en la necesidad de comprobar el tamaño del archivo de un archivo a nivel de sistema de archivos.
3 - Mantener todo lo que la facilidad de uso que ya existe en el proceso de colocación (lo sé "Lo que la facilidad de uso?"). En resumen, cuando adjuntar archivos, el cuadro de diálogo de archivos abiertos deben seguir para abrir el directorio de la última vez que accede, y no siempre de nuevo en el directorio de datos de Notes.

Pasos a seguir:
1 - Crear un subformulario llamado "Archivos adjuntos"
2 - Coloque el siguiente código en las declaraciones globales:

Dim ws As NotesUIWorkspace
Sesión As NotesSession
Dim db como NotesDatabase
Uidoc As NotesUIDocument
Dim doc NotesDocument
GlobalSaveFlag As Integer 'se utiliza para comprobar si se ha guardado el documento en realidad más tarde

Declare Function NEMGetFile Lib "NNOTESWS" Alias ​​"NEMGetFile" _
(Cero como nombre de archivo Integer, ByVal As String, ByVal filtro As String, ByVal título As String) As Integer

3 - Colocar esta función en el subformulario globales:

Función LocalBrowse (título As String, por defecto As String, filtro As String) As String
Dim nombre As String * 1024
nombre = por defecto
Si el filtro = "" Then filtro = "Todos los archivos |*.*|"
estado =% NEMGetFile (0, nombre de archivo, filtrado, el título)

Seleccione% de casos de estado
Case 0: LocalBrowse = "" 'cancelado
Caso 1: LocalBrowse = Trim $ (archivo)
Case Else: Error 1000, "Error & H" & Hex $ (% de estado) y "en LocalBrowse"
End Select
End Function

4 - Evento PostOpen:

"Necesita inicializar varias variables globales
Set era = Nueva NotesUIWorkspace
Sesión de juego = NotesSession Nueva
Set db = Session.currentdatabase
Establecer uidoc = Fuente
Set doc = uidoc.document

5 - PostRecalc (@ funciones en lugar de guión)

@ Si (AttachFileName = ""; @ Return (""); "");
@ Command ([EditGotoField], "Anexos");
@ Command ([EditInsertFileAttachment]; AttachFileName, "0");
AttachFileName CAMPO: = "";

6 - QuerySave:

DBProfile As NotesDocument 'opcional - si usted quiere ser capaz de configurar el límite de tamaño
LímiteDeTamaño tenue como a largo

GlobalSaveFlag = Continuar "Así que si todo lo demás modifica Continuar, que se detecta.

Establecer DBProfile = db.GetProfileDocument ("DBSettings"): Este es mi perfil DB genérico, pero usted puede utilizar lo que quieras aquí

"O bien utilizar este documento de perfil de alguna manera para almacenar el límite, o codificar el límite (en bytes) aquí
LímiteDeTamaño = DBProfile.AttachSizeLimit (0)
"LímiteDeTamaño = 1048576 '1 MB

"Vamos a añadir el tamaño total de archivos adjuntos existentes para ver si se excede nuestro límite
'Este script sólo debería ser necesario si el usuario se sneeky y se utiliza un tradicional "Adjuntar"
"Comando en el menú archivo, en lugar de los botones para seleccionar un archivo
Si doc.AttachmentSizeTotal (0)> Luego límiteDeTamaño
MsgBox "Se ha superado el límite de 1 MB en archivos adjuntos. "& Chr (10) & Chr (10) & _
"Por favor, elimine los archivos adjuntos o comprimir el archivo (s)." 16, "Error al Anexo"
Continuar = false
Exit Sub
Más
Continuar = true
End If

7 - QueryClose:

"Perdí el campo AttachFileName si nos hemos dejado lleno y ha guardado el documento
"Probablemente redundante, pero por si acaso
Si GlobalSaveFlag = True y doc.AttachFileName (0) <> "" Entonces,
doc.AttachFileName = ""
Llame doc.Save (verdadero, falso)
End If

8 - Creación de un botón "Adjuntar archivo" con el lotuscript siguientes:

Haga clic en Sub (Source As Button)
Newfilename Dim As String
Currentpath Dim As String
DBProfile As NotesDocument
Verlen As largo
LímiteDeTamaño tenue como a largo

Establecer DBProfile = db.GetProfileDocument ("DBSettings"): Este es mi perfil DB genérico, pero usted puede utilizar lo que quieras aquí

"O bien crear este documento de perfil de alguna manera para almacenar el límite, o codificar el límite (en bytes) aquí
LímiteDeTamaño = DBProfile.AttachSizeLimit (0)
"LímiteDeTamaño = 1048576 '1 MB

Newfilename = LocalBrowse ("Adjuntar archivos", "", "")
doc.AttachFileName = NuevoNombreDeArchivo
currentpath = Strleftback (newfilename, "\")

"Esto va a restablecer la navegación por el directorio por defecto a la que se acaba de buscar
Llame Session.SetEnvironmentVar ("FileDlgDirectory", currentpath)

Verlen y FileLen = (doc.AttachFileName (0)) 'la función FileLen es el verdadero truco de todo esto

"Vamos a añadir el tamaño total de archivos adjuntos existentes y el nuevo archivo seleccionado para ver si se excede nuestro límite
Si (y + Verlen doc.AttachmentSizeTotal (0))> Luego límiteDeTamaño
MsgBox "Este archivo se exceda el límite de 1 MB en archivos adjuntos. "& Chr (10) & Chr (10) & _
"Por favor, elimine los archivos adjuntos o comprimir el archivo (s)." 16, "Error al Anexo"
doc.AttachFileName = ""
Más
doc.AttachmentSizeTotal = doc.AttachmentSizeTotal (0) + Verlen y
End If

Llame uidoc.Refresh 'activa el evento postrecalc que se completa el proceso de colocación

End Sub

9 - Crear un campo de texto editable denominado "AttachFileName". No entre en ninguna fórmula, y ocultar el campo de la vista.

10 - Crear un campo oculto, número calculado llamado "AttachmentSizeTotal" con la siguiente fórmula:

REM "No realmente calcular este campo si \ 're en medio de un proceso de unión";
tmp: = @ If (AttachFileName = ""; @ Suma (@ AttachmentLengths); AttachmentSizeTotal);
@ If (@ ESERROR (tmp); 0; tmp)

11 - Ahora crea el campo real de texto enriquecido que se almacenarán los archivos adjuntos. Llame a este campo editable "Archivos adjuntos", y desactive la "delimitadores de mostrar el campo" casilla de verificación (esto le permitirá hacerlo "look" como un campo calculado para los usuarios y ayudar a impedir que hagan lo normal "Archivo - Colocar ..." de rutina que sería subvertir nuestros objetivos.

Eso es todo lo que tiene que hacer. Sencillo ¿no? :-) . Si ya te has hecho todo correctamente (y que yo he descrito correctamente), el usuario debe ser capaz de utilizar nuestro botón para seleccionar un archivo de datos adjuntos y haga clic en él para continuar hasta que haya seleccionado un archivo que va a poner ellos por encima del límite. En ese momento, la operación de unión se detendrá y se mostrará un mensaje de advertencia. Por lo tanto, la próxima vez, los usuarios intentan adjuntar un archivo de 100 MB, que no tendrá que esperar hasta después del almuerzo para saber que hicieron algo malo. Si se las arreglan para adjuntar archivos que superen el límite con la normalidad "Archivo - Colocar ..." enfoque, el QuerySave alcanzará esa situación. Así que para recapitular, los tres principales "avances" en este enfoque son los siguientes:

1 - Uso de la función NEMGetFile API para llamar a un diálogo normal Abrir archivo
2 - Escribir un valor para el directorio de más reciente a la variable de entorno FileDlgDirectory en el Notes.ini
3 - Uso de la función FileLen para comprobar el tamaño de un archivo en el sistema de archivos del usuario, teniendo en cuenta la ruta de archivo como entrada

Visto 7680 veces por 2611 espectadores

  1. ed
    26 de agosto 2010 a las 10:53 | # 1

    Una buena. Este post es muy útil. Gracias!

  2. Jon
    22 de noviembre 2010 a las 05:41 | # 2

    No importa lo que yo trato, yo sigo teniendo varios "variante no contiene un valor de" mensajes de error. Parece que tengo que declarar varias veces algunos variabels. ¿Qué puedo hacer. Por favor avise. Gracias.

  3. Jon
    22 de noviembre 2010 a las 06:35 | # 3

    Lo sentimos, ya está resuelto. El mensaje es muy grande. Thnx

  1. Aún no hay trackbacks.