martes, marzo 18, 2014

AX 2012: Utilizando clase estándar UserConnection

Algunas veces es necesario establecer un nuevo contexto en la transacción de la base de datos independiente al que se está utilizando dentro de Axapta. 

Dependiendo de las necesidades o problemas a resolver, en mi caso, necesito establecer un Log de errores de la información procesada, como buenas prácticas es recomendable establecer un ámbito de transacción cuando trabajos con datos de la base de datos.  ¿Que quiere decir esto? simplemente asegurar la consistencia de la información cuando manipulamos los datos para ingreso, eliminación y actualización de la información, para que cuando existe algún error dentro de nuestro ámbito de la transacción el motor de base de datos pueda realizar el rollback y de esta forma la consistencia de la información es manejada adecuadamente.

¿Que sucede cuando dentro de nuestro ámbito de la transacción tenemos el proceso para registrar el log de errores de nuestras transacciones?

Obviamente, cuando exista un rollback, toda la información ingresada, actualizada o eliminada también es desecha. 

Aquí es donde la clase UserConnection ayuda. Esta clase va permitir establecer un nuevo ámbito de transacción de base de datos, independiente al que maneja el Axapta, permitiendo mantener la información de la tabla con la información que se desea, sin importar si existe un rollback

La forma de utilizar la clase UserConnection para ingresar y actualizar información difiere.

- Para ingresar información:

  UserConnection   userConnection;
  TestTable testTable; //buffer Tabla

  ;
  ttsbegin;

  //instancia de la clase
  userConnection = new UserConnection();

  testTable.NoYesError = NoYesError::Error;
  testTable.LogText = strFmt("Error de parametrización");
  testTable.setConnection(userConnection); //establecer el nuevo ámbito de conexión base datos
  testTable.insert();

  ttscommit;

- Para actualizar información:

 UserConnection   userConnection;
  TestTable testTable; //buffer Tabla

  ;

  //instancia de la clase
  userConnection = new UserConnection();

  userConnection.ttsbegin(); //comienzo transacción

  testTable.setConnection(userConnection); //establecer el nuevo ámbito de conexión base datos

  select forUpdate testTable; //consulta del registro a actualizar
                       
  testTable.NoYesError = NoYesError::Error;
  testTable.LogText = strFmt("Error de parametrización");

  testTable.update();

  userConnection.ttscommit(); //transacción finaliza ok





No hay comentarios: