Página 1 de 1

WebdataSource, sugerencias

Publicado: Lun Oct 30, 2023 1:58 pm
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;
}

Re: WebdataSource, sugerencias

Publicado: Lun Oct 30, 2023 3:58 pm
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

Re: WebdataSource, sugerencias

Publicado: Lun Oct 30, 2023 5:47 pm
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..

Re: WebdataSource, sugerencias

Publicado: Lun Oct 30, 2023 8:53 pm
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

Re: WebdataSource, sugerencias

Publicado: Mar Oct 31, 2023 1:05 pm
por Jose Lopez
Buenas,
Yo lo que uso es lo siguiente:
::oWebDataSource1:UploadFile("../HIPERCALZADO/Datos.CSV",cDatoCsv)