Skip to content

Inicializar y finalizar SDK

Andres Ramos edited this page Dec 19, 2022 · 7 revisions

Inicializar el 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:

  1. Establecer el directorio de trabajo actual de la aplicación en el directorio donde se encuentra el SDK
  2. Autenticarse con el sistema
  3. Iniciar el SDK

Establecer el directorio de trabajo actual

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"

Funciones:

  • BuscarDirectorioDelSdk - Busca la llave del registro del parametro nombreLlaveRegistro 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.

Inicializar SDK sin parámetros

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();
}

Inicializar SDK Con Parámetros

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();
}

Inicializar SDK Con Parámetros Contabilidad

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);
}

Terminar el SDK

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();
}

Abrir empresa

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();
}

Cerrar empresa

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();
}