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