Como abrir carpetas?

Discute sobre las herramientas de la base de datos
Responder
Avatar de Usuario
Milor
Mensajes: 60
Registrado: Sab Ago 14, 2010 5:37 pm

Como abrir carpetas?

Mensaje por Milor »

He probado varios códigos pero sin éxito.

Tengo un formulario que se asocia a varias tablas (relacionadas) uno de esos campo es el ID (que se genera automáticamente), la idea sería que al pulsarlo abriera un carpeta (la creara en caso de no estar) que tiene el mismo nombre que el ID.

Cual sería el directorio donde estaría ese carpeta? En el mismo que esta la base de datos...
Actualmente el código que tengo es:

Código: Seleccionar todo

REM  *****  BASIC  *****

Sub OpenSpecificFolder(Event As Object)

	Dim oForm As Object
	Dim idExpediente as string	
	Dim directorio

	idExpediente = Event.Source.Model.Parent.Parent.getByName("fmtID").CurrentValue
	directorio = DirectoryNameoutofPath(ThisComponent.Parent.getURL(), "/")
	
	If NOT FileExists(directorio & "/"  & idExpediente) Then
		print "No existe"
		MkDir (directorio & "/"  & idExpediente)
	Else
		print "Existe"
	End If
	print directorio & "/" & idExpediente
	
End Sub
El ultimo print tendría que cambiarlo por el "comando" para la carpeta (en principio solo estará en windows pero que fuera compatible con linux tambien). No existe el OpDir no? :lol:
LibreOffice 4.2.4.2 en Windows 7 y Ubuntu
El OLMO no da PERAS, usa los PROGRAMAS para lo que están DISEÑADOS
Te ofrecemos nuestro tiempo y ofreces tu tiempo, no lo desperdiciemos. Explicarse y Comprenderse es necesario.
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Como abrir carpetas?

Mensaje por Longi »

Buenas!

Mira estos códigos que he recogido de algunas de mis rutinas...
Como es de suponer tendrás que probarlos en tu entorno de trabajo (soy muy dado a meter la pata), pero en un principio debieran funcionar.
Con más florituras los uso para guardar documentos o para luego mostrarlos, pero en general así debiera funcionar.

Si quieres hacer una carpeta en el caso de que no la tengas hecha:

Código: Seleccionar todo

        CARPETA= directorio & "/"  & idExpediente
        oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )       ' Servicio para acceso a archivos
        If Not FileExists(CARPETA) Then                                                   ' Si la carpeta no existe
        oSimpleFileAccess.createFolder(CARPETA)                                           ' La creamos
        End if                                                                            ' Acabamos la condición
Si quieres abrir una carpeta existente:

Código: Seleccionar todo

 CARPETA= directorio & "/"  & idExpediente
oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.OfficeFilePicker")                      ' Creamos el servicio FilePicker
oDialFP.setDisplayDirectory (ConvertToURL(CARPETA))        ' Carpeta en la que recogemos el documento escaneado
oDialFP.Title="Escoja un documento"                                                       ' Título del cuadro de diálogo
oDialFP.Execute 
Este filepicker es algo más feo, pero el que estamos acostumbrados a ver no funciona (o no funcionaba), abriendo siempre en forma genérica. Éste abre la carpeta que le mandas que abra.

También es posible utilizar cualquier otro directorio: el temporal en C, el escritorio o algo que tengas por ahí muy escondido.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Avatar de Usuario
Milor
Mensajes: 60
Registrado: Sab Ago 14, 2010 5:37 pm

Re: Como abrir carpetas?

Mensaje por Milor »

El problema que tiene este es que sino me equivoco a la que coges un archivo se cierra.

Al final el código que estoy usando es:

Código: Seleccionar todo

REM  *****  BASIC  *****

Sub OpenSpecificFolder(Event As Object)
	GlobalScope.BasicLibraries.loadLibrary("Tools")

	Dim oForm As Object
	Dim idExpediente as string   
	Dim directorio

	idExpediente = Event.Source.Model.Parent.Parent.getByName("fmtID").CurrentValue
	directorio = DirectoryNameoutofPath(ThisComponent.Parent.getURL(), "/")
   
	If NOT FileExists(directorio & "/"  & idExpediente) Then
		'print "No existe"
	MkDir (directorio & "/"  & idExpediente)
	Else
		'print "Existe"
	End If
	'print directorio & "/" & idExpediente
	if GetGUIType() = 4 Then
		Shell("pcmanfm",2, directorio & "/" & idExpediente)
	Else
		print GetGUIType() & "No es linux"
		Shell("explorer.exe",2, directorio & "/" & idExpediente)
	End If
   
End Sub
De momento parece funcionar en windows y en lubuntu. Aunque tendré en cuenta tu codigo. El único fallo que le veo es que en windows al menos no me pilla focus, pero tengo que repasar el segundo parametro del comando shell
LibreOffice 4.2.4.2 en Windows 7 y Ubuntu
El OLMO no da PERAS, usa los PROGRAMAS para lo que están DISEÑADOS
Te ofrecemos nuestro tiempo y ofreces tu tiempo, no lo desperdiciemos. Explicarse y Comprenderse es necesario.
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Como abrir carpetas?

Mensaje por Longi »

Buenas!
Sobre tu código he hecho variaciones (y he probado) en Windows:
Si la carpeta no existe, la genera.
Después abre un navegador en la carpeta que habríamos hecho (no aparecería nada), o bien si ya estaba hecha, mostraría documentos Writer, calc, excel y csv (me olvidé poner pdf).
Al seleccionar el documento, lo abre, aunque se pueden variar las opciones, como abrir otra carpeta, escoger un documento y asignarle otra ruta para copiarlo o para cambiarlo de carpeta hacia la seleccionad inicialmente (cosa muy útil en el caso de tener una carpeta de escaneos y quieres asignar una carpeta para cada ID de cada registro del formulario principal, por ejemplo):

Código: Seleccionar todo

Sub OpenSpecificFolder(Event As Object)
   GlobalScope.BasicLibraries.loadLibrary("Tools")

   Dim oForm As Object
   Dim idExpediente as string   
   Dim directorio

   idExpediente = Event.Source.Model.Parent.getByName("ID").CurrentValue
   directorio = DirectoryNameoutofPath(ThisComponent.Parent.getURL(), "/")
   CARPETA= directorio & "/"  & idExpediente   
   oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )       ' Servicio para acceso a archivos
   If Not FileExists(CARPETA) Then                                                   ' Si la carpeta no existe
   oSimpleFileAccess.createFolder(CARPETA)                                           ' La creamos
   End if                                                                            ' Acabamos la condición
        
   if GetGUIType() = 4 Then
      Shell("pcmanfm",2, directorio & "/" & idExpediente)
   Else
     ' print GetGUIType() & "No es linux"
     ' oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")                ' Creamos el servicio FilePicker      
      oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.OfficeFilePicker")          ' Creamos el servicio FilePicker
      oDialFP.setDisplayDirectory (ConvertToURL(CARPETA))                            ' Carpeta
      oDialFP.appendFilter( "Documentos","*.ods;*.xls*;*.csv;*.odb;*.odt")           ' Filtro
      oDialFP.Title="Escoja un documento"                                            ' Título del cuadro de diálogo
      oDialFP.Execute       
    Dim opt(0) As New "com.sun.star.beans.PropertyValue"                             ' Array de propiedades
    Dim doc As Object                                                                ' Documento
    opt(0).Name = "Hidden"                                                           ' No será en segundo plano
    opt(0).Value = False                                                             ' Ciertamente, en segundo plano
    StarDesktop.loadComponentFromURL(oDialFP.Files(0), "_blank", 0, opt())           ' Abre el documento como plantilla	
   End If
   
End Sub
Quizá te sirva!

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Responder