Hola, una de las ventajas de powerbuilder es el soporte nativo con las principales bases de datos, sin embargo muchos desconocen el poder que tiene el objeto transaction en este ejemplo veremos como aprovechar sus bondades para aplicarlas en nuestros desarrollos:
DECLARE P_COPIAR_ORDEN_PEDIDO PROCEDURE FOR TSS.P_COPIAR_ORDEN_PEDIDO
(
P_ID => :idb_id,
P_COPY_CANT_R => :ii_copiar_cant_recibidas
) ;
execute P_COPIAR_ORDEN_PEDIDO;
If SQLCA.SQLCode = -1 Then
Error.of_Mensaje()
Rollback;
Return
End If
FETCH P_COPIAR_ORDEN_PEDIDO INTO :ldb_return;
if SQLCA.SqlCode <> 0 then
Error.of_Mensaje()
Rollback;
CLOSE P_COPIAR_ORDEN_PEDIDO;
RETURN
end if
CLOSE P_COPIAR_ORDEN_PEDIDO;
COMMIT;
IF ldb_return .....
Esta sentencia es la mas comun utilizada sin embargo esto supone ciertas restricciones, dependencia con el motor y afecta el rendimiento al manipular codigo combinado entre el motor de base de datos y la aplicacion.
una solución elegante seria utilizar
los Remote Store Procedure, lo cual generaría un codigo como este
li_return = SQLCA. P_COPIAR_ORDEN_PEDIDO(:idb_id, ii_copiar_cant_recibidas)
Como vera la sintaxis es mas simple y eficiente.
Para utilizar esta tecnica deberan hacer lo siguiente:
DECLARE P_COPIAR_ORDEN_PEDIDO PROCEDURE FOR TSS.P_COPIAR_ORDEN_PEDIDO
(
P_ID => :idb_id,
P_COPY_CANT_R => :ii_copiar_cant_recibidas
) ;
execute P_COPIAR_ORDEN_PEDIDO;
If SQLCA.SQLCode = -1 Then
Error.of_Mensaje()
Rollback;
Return
End If
FETCH P_COPIAR_ORDEN_PEDIDO INTO :ldb_return;
if SQLCA.SqlCode <> 0 then
Error.of_Mensaje()
Rollback;
CLOSE P_COPIAR_ORDEN_PEDIDO;
RETURN
end if
CLOSE P_COPIAR_ORDEN_PEDIDO;
COMMIT;
IF ldb_return .....
Esta sentencia es la mas comun utilizada sin embargo esto supone ciertas restricciones, dependencia con el motor y afecta el rendimiento al manipular codigo combinado entre el motor de base de datos y la aplicacion.
una solución elegante seria utilizar
los Remote Store Procedure, lo cual generaría un codigo como este
li_return = SQLCA. P_COPIAR_ORDEN_PEDIDO(:idb_id, ii_copiar_cant_recibidas)
Como vera la sintaxis es mas simple y eficiente.
Para utilizar esta tecnica deberan hacer lo siguiente:
- Crear una Clase Transaction y mapear el objeto SQLCA con ella, para hacerlo solo deben ir a las Additional Properties del Objeto Application, seleccionar la pestaña Variable Types y en el campo SQLCA escribir el nombre de la clase que crearon.
- Abrir la Clase transaction e ir a la vista Local External Function y en esa vista click derecho seleccionar la opcion PasteSpecial/SQL/Remote Stored Procedure(s) y seleccionar las funciones o procedimientos de la base de datos que quieren mapear con la transaccion, incluso pueden seleccionar metodos de los paquetes, para realizar deben ir a la conexion y editar ir a la pestaña System y marcar la casilla List Package Subprogram.
Hola que tal, dime los remote store procedure los has podido usar en Windows de 64 bits, yo he tenido problemas con con Windows de 64 bits (W7 o W8) para evitar modificar el código y hacerlo mas extenso solo le cambie el Windows a 32 bits. Dime tu has podido hacer correr esos remote store procedure en 64 bits. Saludos
ResponderEliminar