In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

WebdataSource, sugerencias

Foro de Xailer profesional en español
Responder
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

WebdataSource, sugerencias

Mensaje por bingen »

Buenas Ignacio, tengo que hacerte unas sugerencias/peticiones sobre WebDataSource.

Hace tiempo que usamos esta joya WebDataSource, creo que es de las mejores cosas que tiene Xailer ya que nos permite conectar 2 mundos escritorio y Web de forma extraordinaria.

Nosotros hicimos algunas ampliaciones a WebDataSource hace un par de años y empezamos a usar nuestro propio WebDataSource y ahora veo que estamos “separados” del canónico y queremos volver al redil, arrepentidos quiere el Señor……

Revisando el último WebDataSource de la versión 8.2.3 veo que algunas cosas que hicimos ya están en la versión oficial, pero hecho en falta alguna, te cuento….

Hay 3 métodos que hicimos y que la versión original no tiene que son Directory(), CurDir() y ChhDir() y que puedo sobrecargar pero que si tienes a bien puedes implementar puesto que me parecen muy útiles. Te dejo nuestro código fuente por si te interesa ver como lo hacemos, aunque supongo que preferirás en caso de implementarlo hacer el tuyo propio. Gracias.

METHOD Directory( cDir ) // --> aDir
*Código PRG*************************************
METHOD Directory( cDir ) CLASS XWebDataSource
LOCAL aDir:={}, cData := ""
IF !::Ready( .t. )
RETURN .f.
Endif
cData := cDir
If ::Request( "directory", @cData )
::XmlLoad( cData )
RETURN ::XmlData()
Endif
RETURN cData
*Código PHP*************************************
function XA_Directory( $cDir ) {
$aDir = array();
if (is_dir($cDir)){
if ($dh = opendir($cDir)){
while (($file = readdir($dh)) !== false){
$aLin = array();
$aLin[] = $file;
$aLin[] = is_dir($cDir.'/'.$file);
if ( is_file($cDir.'/'.$file) )
$aLin[] = filesize($cDir.'/'.$file) ;
else
$aLin[] = 0 ;

$aLin[] = date("Y-m-d H:i:s", filectime($cDir.'/'.$file));
$aLin[] = $cDir.'/'.$file;
$aDir[] = $aLin;
}
closedir($dh);
}
}
XA_AddData( 'Data', $aDir );
return;
}
//------------------------------------------------------------------------------

METHOD CurDir( ) // --> Current directory
*Código PRG*************************************
METHOD CurDir( ) CLASS XWebDataSource
LOCAL cData := "Nil", cDir := ""
IF !::Ready( .t. )
RETURN ""
Endif

IF ::Request( "Curdir", @cData )
::XmlLoad( cData )
cDir := ::XmlTag( "curdir" )
Endif
RETURN cDir
*Código PHP*************************************
function XA_Curdir( ) {

$cDir = getcwd( );
XA_AddData( 'curdir', $cDir );
return;
}

METHOD ChDir( cDir ) // --> lSuccess
*Código PRG*************************************
METHOD ChDir( cDir ) CLASS XWebDataSource
LOCAL cData := "", lOk:=.F.
cData := cDir
IF !::Ready( .t. )
RETURN ""
Endif
IF ::Request( "Chdir", @cData )
::XmlLoad( cData )
lOk := ::XmlTag( "chdir" )
Endif
RETURN lOk
*Código PHP*************************************
function XA_Chdir( $cDir ) {
If( file_exists($cDir) ) {
$cDir = chdir( $cDir );
XA_AddData( 'chdir', $cDir );
} else {
XA_AddError( 'Error: directory not exists chdir failed'.$cDir );
}
return;
}
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: WebdataSource, sugerencias

Mensaje por ignacio »

Hola,

Ya tenemos esos métodos:
  • CurrentDir()
  • Adirs()
  • Afiles()
  • ForceDir()
SI no quieres retocar tu código, siempre puedes crear los métodos nuevos en la clase T y NUNCA en la clase X.

Un saludo

Nota: Desaconsejo el uso de ChDir(). Tiene más sentido poner el path RELATIVO desde la ubicación del PHP
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: WebdataSource, sugerencias

Mensaje por bingen »

Pues ahora si que quedo como un tonto :o

Otros métodos que yo llamé diferente ya me he dado cuenta de cuales eran, se ve que no he mirado bien.

Pero por ejemplo Adirs y Afiles supongo que diferencia han de tener, en el manual ni aparecen.

ForceDir si que aparece y veo que es parta crear un directorio recurrente, pero que he de usar para cambiar a un directorio que ya existe, ese mismo método?

Gracias..
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9253
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: WebdataSource, sugerencias

Mensaje por ignacio »

Veo que efectivamente no están documentados. No obstante son bien sencillos. Una matriz con la lista y punto.
ForceDir si que aparece y veo que es parta crear un directorio recurrente, pero que he de usar para cambiar a un directorio que ya existe, ese mismo método?
Ya he comentado que no soy partidario de cambiar de directorio. ChDir() no se ha hecho.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Jose Lopez
Mensajes: 123
Registrado: Mié Jun 16, 2010 2:33 pm

Re: WebdataSource, sugerencias

Mensaje por Jose Lopez »

Buenas,
Yo lo que uso es lo siguiente:
::oWebDataSource1:UploadFile("../HIPERCALZADO/Datos.CSV",cDatoCsv)
Responder