-
-
Notifications
You must be signed in to change notification settings - Fork 41
Inicializar y finalizar SDK
Lo primero que debemos hacer para trabajar con el SDK es iniciarlo.
Existen tres maneras de iniciar el SDK:
- Sin parámetros
- Con parámetros
- Con parámetros de CONTPAQi Contabilidad
Flujo de trabajo:
- Establecer el directorio de trabajo actual de la aplicación en el directorio donde se encuentra el SDK
- Autenticarse con el sistema
- Iniciar el SDK
Para que nuestra aplicación pueda encontrar y cargar el archivo del SDK y así poder inicializarlo debemos primero establecer el directorio de trabajo actual de la aplicación en la ruta donde se encuentra el SDK. Hacemos esto invocando la función Directory.SetCurrentDirectory.
Normalmente, si instalamos el sistema de CONTPAQi Comercial en una computadora x86 (32 bits), la ruta del archivo del SDK es "C:\Program Files\Compac\COMERCIAL\MGWServicios.dll".
Ejemplo:
Directory.SetCurrentDirectory(@"C:\Program Files\Compac\COMERCIAL")
¿Por qué no debemos utilizar siempre esta ruta?
- El sistema puede estar instalado en una computadora x64 (64 bits)
- El sistema puede estar instalado en una ruta diferente a la convención, por ejemplo, en el disco "D:".
En mi caso, que tengo instalado el sistema en una computadora x64, la ruta seria "C:\Program Files (x86)\Compac\COMERCIAL\MGWServicios.dll".
Ejemplo:
Directory.SetCurrentDirectory(@"C:\Program Files (x86)\Compac\COMERCIAL)
CONTPAQi Comercial guarda la ruta a la carpeta donde se encuentra el SDK en el Windows Registry. Si queremos asignar la ruta de trabajo correctamente podemos ir y buscar esta ruta en "SOFTWARE\\Computación en Acción, SA CV\\CONTPAQ I COMERCIAL"
y leer el valor del dato DirectorioBase
.
Ejemplo de cómo establecer el directorio de trabajo actual:
/// <summary>
/// Establece el directorio de trabajo en el directorio donde se encuentra el SDK.
/// </summary>
private static void EstablecerElDirectorioDeTrabajo()
{
// Buscar el directorio donde se encuentra el SDK
string rutaSdk = BuscarDirectorioDelSdk(LlavesRegistroWindowsSdk.Comercial);
// Establecer el directorio de trabajo en el directorio donde se encuentra el SDK
Directory.SetCurrentDirectory(rutaSdk);
}
/// <summary>
/// Busca el directorio donde se encuentra el SDK en el registro de Windows.
/// </summary>
/// <param name="nombreLlaveRegistro">La llave del registro de Windows.</param>
/// <returns>La ruta del directorio donde se encuentra el SDK.</returns>
private static string BuscarDirectorioDelSdk(string nombreLlaveRegistro)
{
// Buscar registro de windows
RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
// Buscar la llave de CONTPAQi
RegistryKey keySitema = registryKey.OpenSubKey(nombreLlaveRegistro, false);
if (keySitema is null)
// No se encontró la llave
throw new ContpaqiSdkInvalidOperationException($"No se encontró la llave del registro {nombreLlaveRegistro}");
// Leer el valor del campo DIRECTORIOBASE donde se encuentra la ruta del SDK
object directorioBaseKey = keySitema.GetValue(LlavesRegistroWindowsSdk.NombreCampoRutaSdk);
if (directorioBaseKey is null)
throw new ContpaqiSdkInvalidOperationException(
$"No se encontró el valor del campo {LlavesRegistroWindowsSdk.NombreCampoRutaSdk} del registro {nombreLlaveRegistro}");
return directorioBaseKey.ToString();
}
Constantes:
-
LlavesRegistroWindowsSdk.Comercial
- Llave del Registry en Windows que utilizaremos para encontrar la ruta donde se encuentra el SDK.- El valor para Comercial es
@"SOFTWARE\\Computación en Acción, SA CV\\CONTPAQ I COMERCIAL"
- El valor para Comercial es
Funciones:
-
BuscarDirectorioDelSdk
- Busca la llave del registro del parametronombreLlaveRegistro
y regresa la ruta del directorio donde se encuentra el SDK. -
EstablecerElDirectorioDeTrabajo
- Establece el directorio de trabajo actual de la aplicación en la ruta donde se encuentra el SDK para poder encontrar el archivo del SDK.
Una vez establecido el directorio de trabajo actual de la aplicación podemos continuar a iniciar el SDK.
Para iniciar el SDK hacemos uso de la función fSetNombrePAQ
. Esta función inicia la conexión con el sistema y muestra una ventana de autenticación donde el usuario podrá ingresar su nombre de usuario y contraseña. La función fSetNombrePAQ
toma como parámetro el nombre del sistema con el que vamos a trabajar que para Comercial seria "CONTPAQ I Comercial"
.
La función fSetNombrePAQ
retorna un valor de tipo int
:
- Si el valor es
0
el SDK se inicializo exitosamente. - Otro valor sería un código de error donde no se pudo establecer una conexión al SDK o las credenciales ingresadas por el usuario no son válidas.
Ejemplo de cómo iniciar el SDK sin parámetros:
/// <summary>
/// Inicia la conexión con el sistema y muestra una ventana de autenticación donde el usuario podrá ingresar su nombre
/// de usuario y contraseña.
/// </summary>
public static void IniciarSdk()
{
// Establecer el directorio de trabajo en el directorio donde se encuentra el SDK
EstablecerElDirectorioDeTrabajo();
// Iniciar conexión
ComercialSdk.fSetNombrePAQ(NombresPaqSdk.Comercial).TirarSiEsError();
}
Si queremos iniciar el SDK y pasarle programáticamente el nombre de usuario y contraseña para que el sistema no muestre la ventana de autenticacion y no se requiera que un usuario ingrese sus credenciales manualmente, podemos hacer uso de la función fInicioSesionSDK
antes de llamar la función fSetNombrePAQ
.
La función fInicioSesionSDK
toma como parámetros el nombre de usuario y contraseña del sistema de CONTPAQi Comercial.
Si las credenciales pasadas como parámetros a la función fInicioSesionSDK
son correctas, la función fSetNombrePAQ
retorna el valor 0
, de lo contrario el valor de retorno sera un código de error.
Ejemplo de cómo iniciar el SDK con parámetros:
/// <summary>
/// Inicia la conexión con el sistema e ingresa el usuario y contraseña programáticamente para que no se muestre la
/// ventana de autenticación de Comercial.
/// </summary>
/// <param name="nombreUsuario">Nombre de usuario del sistema de Comercial.</param>
/// <param name="contrasena">Contraseña del sistema de Comercial.</param>
public static void IniciarSdk(string nombreUsuario, string contrasena)
{
// Establecer el directorio de trabajo en el directorio donde se encuentra el SDK
EstablecerElDirectorioDeTrabajo();
// Ingresar programáticamente el usuario y contraseña del sistema de Comercial
ComercialSdk.fInicioSesionSDK(nombreUsuario, contrasena);
// Iniciar conexión
ComercialSdk.fSetNombrePAQ(NombresPaqSdk.Comercial).TirarSiEsError();
}
Hay empresas en CONTPAQi Comercial que hacen interface con el sistema de CONTPAQi Contabilidad. Al momento de abrir la empresa el SDK muestra una ventana de autenticación donde el usuario deberá ingresar el nombre de usuario y contraseña del sistema de CONTPAQi Contabilidad. Si estamos desarrollando sistemas automatizados sin intervención de un usuario, esto puede ser un inconveniente.
Para inicializar el SDK y que al momento de abrir la empresa no se muestre la ventana de autenticación hacemos uso de la función fInicioSesionSDKCONTPAQi
después de inicializar el SDK.
La funcion fInicioSesionSDKCONTPAQi
toma como parámetros el nombre de usuario y contraseña del sistema de Contabilidad.
Ejemplo de cómo iniciar el SDK con parámetros de CONTPAQi Contabilidad:
/// <summary>
/// Inicia la conexión con el sistema e ingresa el usuario y contraseña programáticamente para que no se muestre la
/// ventana de autenticación de Comercial y Contabilidad.
/// </summary>
/// <param name="nombreUsuarioComercial">Nombre de usuario del sistema de Comercial.</param>
/// <param name="contrasenaComercial">Contraseña del sistema de Comercial.</param>
/// <param name="nombreUsuarioContabilidad">Nombre de usuario del sistema de Contabilidad.</param>
/// <param name="contrasenaContabilidad">Contraseña del sistema de Contabilidad.</param>
public static void IniciarSdk(string nombreUsuarioComercial,
string contrasenaComercial,
string nombreUsuarioContabilidad,
string contrasenaContabilidad)
{
// Iniciar conexión con el sistema
IniciarSdk(nombreUsuarioComercial, contrasenaComercial);
// Ingresar programáticamente el usuario y contraseña del sistema de Contabilidad
ComercialSdk.fInicioSesionSDKCONTPAQi(nombreUsuarioContabilidad, contrasenaContabilidad);
}
Al terminar de utilizar el SDK y antes de cerrar nuestra aplicacion es necesario siempre terminar la conexión con el SDK para liberar todos los recursos que el SDK haya utilizado.
Para terminar el SDK hacemos uso de la función fTerminaSDK
.
Ejemplo de cómo terminar el SDK:
/// <summary>
/// Termina la conexión con el sistema y libera recursos.
/// </summary>
public static void TerminarSdk()
{
ComercialSdk.fTerminaSDK();
}
Después de inicializar el SDK el siguiente paso es abrir la empresa con la que el SDK va a trabajar. Para abrir una empresa hacemos uso de la función fAbreEmpresa
que toma como parámetro la ruta del directorio donde se encuentra la empresa.
Ejemplo de cómo abrir una empresa:
/// <summary>
/// Abre la empresa de trabajo.
/// </summary>
/// <param name="rutaEmpresa">Ruta del directorio de la empresa.</param>
public static void AbrirEmpresa(string rutaEmpresa)
{
ComercialSdk.fAbreEmpresa(rutaEmpresa).TirarSiEsError();
}
Después de haber trabajado con el SDK y antes de terminar el SDK es necesario cerrar la empresa abierta. Para cerrar la empresa hacemos uso de la función fCierraEmpresa
.
Ejemplo de cómo cerrar una empresa:
/// <summary>
/// Cierra la empresa de trabajo.
/// </summary>
public static void CerrarEmpresa()
{
ComercialSdk.fCierraEmpresa();
}