Extracion de documentos en Oracle text


Oracle incorpora un tipo de datos llamado BLOB que permite almacenar documentos de cualquier tipo (imágenes, excel, word, access, comprimidos, vídeos, música, etc). En principio admite cualquier tipo de documento y de cualquier tamaño aunque aún sigue manteniendo el tipo de datos LONG RAW que está obsoleto, sustituido por BLOB. Las instrucciones que os mostramos a continuación admiten ambos tipos de datos: BLOB y LOB RAW.

 

Insertar o extraer documentos  desde Visual Basic

Para poder insertar documentos en un campo BLOB de Oracle con Visual Basic necesitaremos una librería (dll) llamada SAFileMgr Module (SAFileMgr.dll), esta librería está disponible de forma gratuita en la web http://www.softartisans.com. Tras descargar este fichero, deberemos copiarlo a la carpeta del sistema (normalmente C:/Windows/System32) y registrarlo con el comando:  regsvr32 C:/Windows/System32/SAFileMgr.dll .  Tras copiar y registrar el fichero SAFileMgr.dll, también necesitaremos disponer de una base de datos Oracle activa

Tras tener la tabla creada con el campo BLOB, procederemos a abrir Visual Basic y a crear un nuevo proyecto para insertar y extraer documentos en Oracle. En la ventana de «Nuevo proyecto» seleccionaremos «EXE estándar» y pulsaremos «Abrir»:Para que la aplicación funcione correctamente deberemos agregar las referencias necesarias. Para ello pulsaremos en el menú «Proyecto » – «Referencias» de Visual Basic:Seleccionaremos la referencia FileMgr 1.1:Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero .dll copiado y registrado anteriormente:C:/Windows/System32/SAFileMgr.dll y seleccionaremos también Microsoft ActiveX Data Objects 2.6 Library: Si no aparece en la lista, pulsaremos en Examinar y seleccionaremos el fichero ubicado en: C:/Archivos de programa/Archivos comunes/system/ado/msado26.tlb

 

Ahora veamos el código de cada uno de los tres  botones de un  formulario tipo para lanzar una consulta de inserción o extracción de un documento :

  • Para el botón «Insertar documento«:

Private Sub btInsertarDocumento_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

Dim FileMgr As New FileManager

Dim SQL As String

On Error GoTo cError

‘ Conexión mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text, _

txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos una consulta SQL sobre la tabla  para activar el recordset

SQL = «Select * from » + txtTabla.Text + » where 1=2″

Rs.Open SQL, Conn, 2, 3

‘ Añadimos un nuevo registro con los datos indicados

Rs.AddNew

Rs(txtCampoTitulo.Text).Value = txtDocumentoTitulo.Text

Rs(txtCampoRutaDocumento.Text).Value = txtDocumento.Text

‘ Insertamos el documento en el campo BLOB/RAW

FileMgr.ExportToBlob txtDocumento.Text, Rs(txtCampoBLOB.Text)

Rs.Update

Rs.Close

Conn.Close

Set Conn = Nothing

MsgBox «Documento insertado correctamente en » + «la base de datos: » + vbCrLf + vbCrLf + txtDocumento.Text, vbOKOnly + vbInformation

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

  • Para el botón «Ejecutar«:

Private Sub btEjecutar_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

On Error GoTo cError

‘ Conexión a Oracle mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text,  txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos consulta SQL introducida por el usuario

Rs.Open txtSQL.Text, Conn, 0, 1

txtExtraerTitulo.Text = Rs(txtCampoTitulo.Text)

txtDestino.Text = Rs(txtCampoRutaDocumento.Text)

Rs.Close

Conn.Close

Set Conn = Nothing

MsgBox «Consulta SQL ejecutada correctamente.»,  vbOKOnly + vbInformation

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

  • Para el botón «Ejecutar«:

Private Sub btExtraer_Click()

Dim Conn As New ADODB.Connection

Dim Rs As New ADODB.Recordset

Dim FileMgr As New FileManager

Dim continuar As Boolean

On Error GoTo cError

‘ Conexión a Oracle mediante OLEDB

Conn.Provider = «OraOLEDB.Oracle»

Conn.Open txtServicio.Text, _

txtUsuario.Text, txtContrasena.Text

‘ Ejecutamos consulta SQL introducida por el usuario 

Rs.Open txtSQL.Text, Conn, 0, 1

‘ Comprobamos si existe ya un fichero destino

‘ con el mismo nombre

continuar = False

If Dir(txtDestino.Text) <> «» Then

continuar = MsgBox(«Ya existe un documento » + «con este nombre ¿desea reemplazarlo?», vbYesNo + vbQuestion) = vbYes

Else

continuar = True

End If

‘ Extraemos el documento del primer   registro de la consulta SQL  en el destino especificado por el usuario

If continuar Then

FileMgr.ImportFromBlob Rs(txtCampoBLOB.Text), txtDestino.Text

MsgBox «Fichero extraído correctamente en: » + vbCrLf + vbCrLf +  txtDestino.Text, vbOKOnly + vbInformation

End If

Rs.Close

Conn.Close

Set Conn = Nothing

cSalir:

Exit Sub

cError:

MsgBox Err.Description

GoTo cSalir

End Sub

 

Extracción desde java

 

Ahora  veamos  usando el lenguaje   Java un ejemplo de como podemos extraer  documentos almacenados en  CLOB’s   en una base de Datos Oracle Text 9 en Java

Necesitaremos tener instalado el cliente Oracle instalado en la maquina, las credenciales de acceso  ,    asi como referenciar en el proyecto desde el Eclipse las siguientes librerías

 

 

 

Y ahora veamos  un ejemplo de una clase de extracción de campos clob’s

La clase principal es Main , la cual debería seleccionarse al exportar el proyecto desde Eclipse

Se puede ejecutar en local  o crear un pequeño script para invocar el java

En este ejemplo es  obligatorio usar tres argumentos y en este orden  para llamar al programa:

  • nodo= número del nodo a exportar
  • tope = numero de orden donde se quedo la última exportación empezando por cero
  • topefinal= umbral donde termina

 

En el proyecto se han referenciado dos versiones de la MV Java porque puede ocurrir que la MV usada en local ( 1.6 ) sea diferente a la del host  donde se ejecute ( por ejemplo  la 1.4.2_08, razon por la habria que copiar tambien esa version 1.4.2.08  dedseel host  a una ruta local

También se hace referencia al driver de oracle classes12.jar , ruta que también existe en la maquina

 

 

Este proyecto debería exportarse situándose en la raiz del proyecto como un jar sin incluir tanto los ficheros .classspath como el de .project

Antes de compilar debe eliminar manualmente el war existente desde el propio eclipse asi como el log de ejecución (manualmente habría que ubicarse en c:\ users\xxx\workspace\application)

Asimismo por ultimo , al   compilarlo  no debemos incluir el classpath

 

Veamos el código completo;

 

/*
Main.java
*
* Created on 20 de Marzo de 20174, 11:43
*

*/

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import oracle.jdbc.driver.OracleDriver;

/**
* @author CRN
*
* EXTRACTOR DOCUMENTOS
*/

public class Main {

private static int nodo;

private static int tope;

private static int topefinal;

public static void main(final String[] args) {

System.out.println(«Inicializando programa …»);

Connection conn = null;

GestorDeConexiones gc = null;

try{

gc = new GestorDeConexiones(«xxxx», «yyyyyy»); // credenciales de  acceso a la BBDD con el user y pwd de acceso 

conn = gc.getConnection();

// Comprueba si hay argumentos en la linea de comandos

final int nnodo=1;

if(args.length != 0)
//CON ARGUMENTOS

{
for(int counter = 0; counter < args.length; counter++)
{
System.out.println(«Argument index » + counter + «: » + args[counter]);
}

System.out.println(» fin argumentos»);

nodo = Integer.parseInt(args[0]); // primer argumento ( el nodo)

tope = Integer.parseInt(args[1]); //segundo argumento (inicio

topefinal = Integer.parseInt(args[2]); //tercer argumento ( tope)

System.out.println(«Argumento nodo= » + nodo);
System.out.println(«Argumento conteo incial= » + tope);
System.out.println(«Argumento numero de documentos= » + topefinal);

}

else

//SIN ARGUMENTOS

{
System.out.println («No se ha incluido ningún argumento»);
System.exit(0);
}

System.out.println(«NODO» + nodo);
System.out.println(«Valor inicial= » + tope);
System.out.println(«Valor final= » + topefinal);

final String path1 =»d:\»;

final String nfichero= path1+»previa_carga_jd_»+nodo+»tope«+tope+»topefinal_»+ topefinal;

//generacion del fichero de salida

File theDir = new File(nfichero);

if (!theDir.exists())
{
System.out.println(«..creando directorio: » + theDir.getName()); // SI EL DIRECTORIO NO EXISTE ,. SE CREA
boolean result = false;
try{
theDir.mkdir();

result = true;
}
catch(SecurityException se){   //handle it
}
if(result) {
System.out.println(«Directorio creado»);
}
}

//Intentamos cambiar los permisos al directorio creado
System.out.println(«Cambiamos permisos 777 a «+nfichero);
Process theProcess = null;
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ nfichero);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}

//creacion fichero de log

final String log1=path1;

final String nfichero1= log1+»directorio_»+nodo+»tope«+tope+»topefinal_»+ topefinal+».log»;

System.out.println(«Fichero Log de proceso :[» +nfichero1+»]»);
System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);

//generación del fichero de salida

File fichero = new File(nfichero1);

 

if (!fichero.exists())
{

// SI NO EXISTE , SE CREA
System.out.println(«..creando fichero de log: » + fichero.getName());
boolean result = false;
try{
fichero.createNewFile();

result = true;
}
catch(SecurityException se){ //handle it
}
if(result) {
System.out.println(«Fichero creado»);
}
}

//abre fichero de log
File TextFile = new File(nfichero1);
FileWriter TextOut = new FileWriter(TextFile, true);
TextOut.write(«********************************************************************\r\n»);
TextOut.write(«INICIANDO PROCESO DE EXTRACCIÓN DE DOCUMENTOS r\n»);
TextOut.write(«Fichero Log de proceso :[» +nfichero1+»]\r\n»);
TextOut.close();

String path=nfichero +»/»;

System.out.println («RUTA DESTINO FINAL»+ path);

//extraemos los objetos de texto
RecuperadorBD2.RecuperarBD2(conn,path, tope,topefinal,nodo,nfichero1);

}
catch (final SQLException sqle) {
System.out.println
(«Error de acceso a BD:» + sqle.getMessage());
sqle.printStackTrace();
}
catch (final IOException ioe){
System.out.println
(«Error de acceso a disco:» + ioe.getMessage());
ioe.printStackTrace();
}

try{
if (gc != null && conn != null)
gc.closeConnection();
}

catch (final SQLException sqle)
{
System.out.println
(«Error de acceso a BD:» + sqle.getMessage());
sqle.printStackTrace();
conn = null;
gc = null;
}
System.out.println(» **** Fin extraccion ****»);
}
}

class RecuperadorBD2
{
public static void RecuperarBD2 (final Connection cn, final String path , final int topec, final int topex, final int nodo ,final String path1)
throws SQLException, IOException
{

 

String topex1= String.valueOf(topex);

String topec1= String.valueOf(topec);

String nnodo= String.valueOf(nodo);

int contador=0;
FileOutputStream fos = null;

Statement st = null;
ResultSet rs = null;

 

final String sql=» SELECT «+
«FROM(SELECT to_number (rownum) cuenta,»+
» p.
«+
» FROM «+
» ( «+
«SELECT c.nodo_co_nodo, «+
» c.infi_nu_infi, «+
» c.docu_co_documento, «+
» d.docu_no_documento, «+
» d.docu_no_extension ,»+
» d.docu_nu_version, «+
» d.DOCU_FX_MODIFICACION fecha,»+
» e.doct_do_documento doc «+
» FROM tablametadatos c, «+
» tablaauxiliar d, «+
» tabladocumentos e «+
» WHERE c.nodo_co_nodo = » + nnodo +
» AND c.docu_co_documento =d.docu_co_documento «+
» AND d.docu_co_documento =e.docu_co_documento «+
» AND e.docu_nu_version =d.docu_nu_version «+
» AND c.docu_nu_version =e.docu_nu_version «+
» ) «+
» where (cuenta >»+topec1 + » and cuenta <» +topex1 +» )»;

 

//abre fichero de log
File TextFile = new File(path1);
FileWriter TextOut = new FileWriter(TextFile, true);

System.out.println(«»);
System.out.println(«********************************************************************»);
System.out.println(«COMENZANDO PROCESO INICIAL») ;
System.out.println(«sql general=»+sql);
System.out.println(«»);

TextOut.write(«********************************************************************\r\n»);
TextOut.write(«COMENZANDO PROCESO INICIAL\r\n»);
TextOut.write(«sql general=»+sql+»\r\n»);

try
{

st = cn.createStatement();
rs = st.executeQuery(sql);

while (rs.next())
{
++contador;
//para blobs
final String verdocu= rs.getString(«docu_no_documento») ;
System.out.println(«Ndocu =» + verdocu );

final String verinfi =rs.getString(«infi_nu_infi»);
System.out.println(«Infi =» + verinfi );

final String verloc = rs.getString(«docu_co_documento»);
System.out.println(«Cdocc =» + verloc );

final String vernombre= verinfi+»«+verloc + ««+ verdocu;

System.out.println(«Nombre =» + vernombre );

System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);
System.out.println(«Numero fichero a extraer =» + contador );

TextOut.write(«Numero fichero a extraer =» + contador+»\r\n»);

final String nfichero =vernombre; //LE PASAMOS COMO ARGUMENTO EL NOMBRE YA MONTADO:INFI_DOCU+LOC

System.out.println(» Fichero a extraer: » +nfichero);
TextOut.write(«Fichero a extraer =» + nfichero+»\r\n»);

final String pathname= path + nfichero ;
System.out.println(» Extrayendo fichero multimedia : «+pathname);
TextOut.write(«Extrayendo fichero multimedia =» + pathname +»\r\n»);

//deberíamos comprobar si existe ese fichero
final File file = new File(pathname);

fos = new FileOutputStream(file);
final Blob bin = rs.getBlob(«doc»);
System.out.println(«…Extrayendo BLOB»);
TextOut.write(«Extrayendo BLOB \r\n»);

final InputStream inStream = bin.getBinaryStream();
final int size = (int)bin.length();
System.out.println(«Tamaño: «+size);
TextOut.write(«Tamaño =» + size+»\r\n»);

final byte[] buffer = new byte[size];
int length = -1;

while ((length = inStream.read(buffer)) != -1)
{
fos.write(buffer, 0, length);
}

if (fos != null)

{

//Intentamos cambiar los permisos al directorio creado
TextOut.write(«Fichero extraido ok \r\n»);

permisos777(pathname);
fos.close();
System.out.println(» Fichero extraido ok.»);
System.out.println(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++»);
TextOut.write(«+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n»);

}
}
}
catch (final IOException ioe)
{
throw new IOException(ioe.getMessage());

}
finally
{
if (fos !=null)
{
fos.close();
TextOut.write(«FIN DEL PROCESO \r\n»);
TextOut.close();

}
if (rs !=null)
{
rs.close();

TextOut.close();
}
rs=null;
st=null;

 

 

System.out.println(«Fin RecuperaBD2»);

System.out.println(«FIN PROCESO») ;

TextOut.close();

}
}

 

//funcion para añadir permisos 777 a los ficheros extraidos 
public static void permisos777 (final String pathname)
{

Process theProcess = null;

//intentamos cambiar los permisos del fichero recién creeado
System.out.println(«Cambiamos permisos 777 a «+pathname);
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ pathname);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}
//fin de cambio de permisos

}

}

//clase para gestionar las conexiones con la BBDD

class GestorDeConexiones
{
private final String user;
private final String password;
private Connection conn = null;
private boolean conectado = false;

public GestorDeConexiones(final String usr, final String pwd){
user = usr;
password = pwd;
}

public void closeConnection() throws SQLException{
if (conectado)
conn.close();
}

private void conectar() throws SQLException {

String url;
DriverManager.registerDriver(new OracleDriver());

url = «jdbc:oracle:thin:@x.x.x.x:yyy:cadena»; ///ojo PROD

 

conn = DriverManager.getConnection(url,user, password);
System.out.println(«Conexion correcta»);
conectado = true;

}

public Connection getConnection() throws SQLException
{
if (!conectado)
conectar();
return conn;
}
}

 

 

 

 

Resolucion de problemas al ejecutar archivos con extension .ica


 Citrix es  una famosa  empresa  fundada en 1989 por el antiguo desarrollador de IBM Ed Iacobucci   y que acogio a muchos de los fundadores originales que habían participado en el proyecto OS/2 de IBM

Es ademas  una de las empresas pioneras, junto a Vmware, en virtualización de escritorios y aplicaciones . Ademas ha estado  muy unida a Microsoft desde sus orígenes.

Dispone de 3 familias de productos: 

  • Citrix Delivery Center (XenApp, XenDesktop, XenServer y Netscaler)
  •  Citrix Cloud Center: Permite crear nubes híbridas con soluciones en la nube,
  • Citrix Online Services: Que está unido a la aplicación GoToMeeting (herramienta videoconferencias) 

Citrix XenDesktop es  su producto estrella y en la versión 7 une en una suite XenApp (Aplicaciones) y XenDesktop (VDI).   Los componentes básicos de un sistema de este tipo   son los siguintes :

  • RECEIVER : Citrix Receiver el software cliente necesario para que se puedan entregar aplicaciones o escritorios . Es un elemento multiplataforma y multidispositivo, ya que existen clientes para Windows, Linux, Mac, Android o IOS entre otros.En este post vamos a hablar precisamente de los  problemas que puede dar
  • STOREFRONT :se comporta, como su propio nombre indica, como una tienda online que pone a disposición de los clientes aplicaciones y escritorios.  Básicamente es el frontal web que los usuarios ven y donde introducen sus credenciales.  Si surgen modificaciones, se actualiza automáticamente (se puede comprobar pulsando F5 en el navegador)
  • DELIVERY CONTROLLER : gestiona los accesos de los usuarios, optimiza las conexiones, hace de intermediario entre el resto de componentes y proporciona los servicios necesarios para la creación de máquinas.  Debe existir al menos un DC en la infraestructura, siendo recomendado tener más de uno (redundancia), ya que marcará la capacidad de gestionar más usuarios y aplicaciones.  Un DC saturado (normalmente CPU) puede provocar problemas en la plataforma y la base de datos.
  • BBDD: Tradicionalmente se monta sobre SQL Server (no todos los componentes admiten SQL Express) . Existen 3 bases de datos en toda instalación XenApp / XenDesktop:
    • Site: Configuración Site en ejecución y estado
    • Configuration Logging: Registro de la actividad administrativa
    • Monitoring: Almacena los datos de Director (inicio sesión y conexión).Sólo los DCs se conectan con la Base de Datos
  •  STUDIO : es la consola de administración tanto para escritorios como para aplicaciones .En Studio se pueden gestionar otros componentes como las licencias o storefront. .Adicionalmente, desde Studio se gestiona la publicación de aplicaciones y escritorios.  También se gestionan las sesiones conectadas en vivo y se pueden lanzar acciones sobre ellas.
  •  LICENSE SERVER  Componente que gestiona las licencias de los productos, al que consulta Citrix Delivery Controller para validar las sesiones . Consola web, que puede gestionarse desde Citrix Studio
  •  DIRECTOR : Es un componente WEB que permite monitorizar en tiempo real sesiones de Citrix.  Es posible extraer informes históricos de tiempos de sesión de un grupo o usuario.
  •  VIRTUAL DELIVERY AGENT  o VDA es el agente necesario en la infraestructura servidora o clientes de escritorio para que exista la comunicación con los Delivery Controller y poder ofrecer esos recursos (aplicaciones o VDI) a los usuarios finales.  En un servidor Windows permite que varios usuarios se conecten a la vez. En un escritorio Windows permite la conexión de un solo usuario.
  •  ACTIVE DIRECTORY:aunque no es un componente directo en la instalación de Citrix, sí se convierte en un requisito.  En directorio activo se configuran los usuarios y contraseñas que tendrán acceso. Así como las GPOs necesarias para implementar con seguridad y optimización la plataforma.
  • OTROS COMPONENTES 
    • Netscaler: Cortafuegos, balanceo de carga, entrega de aplicaciones a través de la red y optimización de aplicaciones 
    • Branch Repeater: Optimiza la entrega de las aplicaciones a los usuarios ubicados en sucursales (Appliance) 
    • EdgeSight: Monitoriza el rendimiento de las aplicaciones (integrado en Director) 
    • Sharefile: Herramienta para compartir archivos de forma segura 
    • Citrix WEM: Gestor de directivas que sustituye ciertas funciones de Active Directory para acelerar el logon. 
    • Netscaler Insight Center: Dispositivo virtual para el seguimiento, análisis y generación de informes sobre aplicaciones.
    • etc

 

Citrix Virtual Apps es un software de virtualización de aplicaciones producido por la famosa empresa  Citrix Systems   que permite acceder a las aplicaciones de Windows a través de dispositivos individuales desde un servidor compartido o un sistema en la nube  (siendo lo mas típico en un ambiente empresarial que estas estén disponibles a través de un servicio VPN)

Dentro de esta estrategia propietarias  del fabricante Citrix , los archivos con con las extensiónes  .ica  de  Independent Computing Architectureson lo que los convierte  literalmente  en archivos de configuración de  siendo  exclusivamente  utilizados precisamente por  esos  programas de Citrix para invocarse en remoto ayudándose precisamente de la configuración que se haya hecho en estos archivos  que se descargan en local desde el portal empresarial .

Estos ficheros ,de hecho, se pueden abrir con un editor de texto ASCII para ver así su contenido, aunqu,  en realidad tiene poco sentido verlos  pues sólo se pueden iniciar en el otro extremo  del cloud  con una de las aplicaciones compatibles de Citrix.

Por tanto , precisamente mediante estos archivos ICA se lanzan las aplicaciones remotamente a utilizando Citrix XenClient , el programa Citrix XenApp o sobre todo  el conocido programa  Citrix Receiver.

Si tiene problemas a la hora de ejecutar algunos de estos ficheros .ica  lanzados  desde un ambiente corporativo o empresarial  (  como por ejemplo que no se pueden abrir las aplicaciones , solo deja guardar los archivos ica ,aparece una ventana que se cierrra en blanco, etc. ),  puede intentar  seguir los siguientes pasos para intentar ejecutar estas aplicaciones virtualizadas:

 

Paso 1: Descargue el nuevo cliente de Citrix

A fecha de agosto de 2018, Citrix Workspace app  es la la sustitutade   Citrix Receiver. Por lo tanto la aplicación Citrix Workspace App es el nuevo cliente de Citrix que actúa de forma similar a Citrix Receiver y es totalmente retrocompatible (o al menos en eso dice el fabricante)   con la infraestructura Citrix de su organización. La aplicación Citrix Workspace App proporciona las capacidades completas de Citrix Receiver, así como nuevas capacidades basadas en la implementación de Citrix de su organización razon por la que el fabricante Citrix  recomienda que se descargue la aplicación Citrix Workspace.

La aplicación Citrix Workspace es el software de cliente fácil de instalar que ofrece un acceso seguro y sin inconvenientes a todo lo necesario para hacer todo lo que quiera. Con esta descarga gratuita, puede acceder de forma fácil y segura a todas las aplicaciones, escritorios y datos desde cualquier dispositivo, incluyendo teléfonos inteligentes, tabletas, PCs y Macs

.Descarga para Windows


La aplicación Citrix Workspace sustituye de forma automática muchas versiones anteriores de Citrix Receiver y los complementos en línea de Citrix; sin embargo, deben eliminarse manualmente algunas versiones antes de instalar la aplicación Citrix Workspace , siendo lo mejor que se haga con la utilidad especifica. de ReceiverCleanupUtility

Paso 2: Acceso desde el VPN a la url de su organización

En al mayoria de lso casos  necesitara  abrir una URL adecuada en su navegador para autenticar su espacio de trabajo digital Citrix con todas sus aplicaciones, escritorios y datos. En ocasiones incluso , puede que necesite configurar su cuenta indicando su correo electrónico o una dirección de servidor para autenticar con la aplicación Workspace para usar aplicaciones y escritorios virtuales. Puede preguntar a su administrador de sistemas qué pasos seguir en su situación pues no solo necesitara  esa url : tambien necesitara la instalación del cliente Citrix en la justa version que haya decidido su organizacion.

Paso 4-Fuerce la ejecución de los achivos

La aplicación Citrix Workspace App es un nuevo cliente de Citrix que actúa de forma similar a Citrix Receiver y es totalmente retrocompatible con la infraestructura Citrix de su organización  proporcionando las capacidades completas de Citrix Receiver, así como nuevas capacidades basadas en la implementación de Citrix de su organización.

Una vez instalado el cliente , cuando acceda desde su portal a la apliacion virualizada , haga clic derecho en el archivo ICA para abrir el menú contextual del archivo.Luego haga clic en la opción «Abrir con» y una lista de programas se abrirá.

Desplázese y haga clic en «Citrix XenApp» o «Citrix XenClient» :el programa Citrix debería  abrirse y lanzará la aplicación remota definida en el archivo ICA.

 

 

Paso 5; Instale  versiones anteriores

Puede que no siempre   estén al dia  en su organizacion con la ultima  version de Citrix en el lado servidor  , por lo que deberá  encontrar versiones anteriores de Receiver en el sitio web de descargas de Citrix.  por lo que debería confirmar con su administrador de sistemas que necesita una versión anterior de Citrix Receiver antes de continuar.

Antes de proceder,primero  debería desistalar  todo el sw de Citrix con  la herramientas especifica : ReceiverCleanupUtility

Una vez desistalado  todo si su aplicación  Citrix  no le funciona   con la  ultima version del cliente  entonces intente descargar alguna version anterior , por ejemplo Receiver 4.9 LTSR for Windows desde https://www.citrix.es/downloads/citrix-receiver/legacy-receiver-for-windows/receiver-for-windows-49LTSR.html

Instalar este cliente es bien sencillo  pues basta descargarlo  yen seguida   ya debería comenzar el asistente de  instalación 

Inmediatamente   simplemente le daremos al botón «Iniciar»

 

 

Una vez leída la licencia deberíamos darla a «Siguiente»

 

 

 

Finalmente  aparecerá la ventana de instalación completada junto al botón de Agregar cuenta , el cual la mayoría de los casos es completamente  innecesario

 

 

Como ve querido lector ,en el caso de tener el servicio  disponible si nos falla probablemente se deba a la version del cliente Citrix que tengamos instalados. Citrix  por su parte , si todo lo demas fallo , reconoce ciertos errores  a los que da  ademas un modo de solucionarlos   en la siguiente url   https://docs.citrix.com/es-es/citrix-workspace-app-for-linux/troubleshooting.html