Software Lab

SageCRM v7.1 – Consultar una Procedure de SQL con JavaScript (server-side)

Feb
17

En este ejemplo vamos a analizar cómo lanzar una query de SQL, perteneciente a un procedimiento almacenado de Sage CRM, sirviéndonos de una función JavaScript que se ejecuta automáticamente al acceder a un formulario.

Esta función, que solo se puede ejecutar del lado del server (server-side), nos va a servir para devolvernos los valores de los campos que necesitamos incorporar en el formulario.

El jScript se puede insertar como código en una función ‘OnChange’ o en una función ‘OnCreate’ de html:

<script language=»JavaScript»>
window.attachEvent(«onload», seed);
// cuando se entra al formulario y al modificar el campo de seleccion
function grab(){
var dato;
dato = document.getElementById(«_HIDDENquot_comisionistaTEXT»).value;
return dato;
}
function getComiAddr(){
var strSQL,myQuery,dato1,CRM;
strSQL = «USE [CRM] GO «;
strSQL += «DECLARE    @return_value int,»;
strSQL += »        @xaddr_address1 varchar(100), «;
strSQL += »        @xaddr_address2 varchar(100), «;
strSQL += »        @xaddr_address3 varchar(100), «;
strSQL += »        @xaddr_address4 varchar(100), «;
strSQL += »        @xaddr_address5 varchar(100), «;
strSQL += »        @xaddr_city varchar(100), «;
strSQL += »        @xaddr_country varchar(100), «;
strSQL += »        @xaddr_postcode varchar(100), «;
strSQL += »        @xaddr_state varchar(100) «;
strSQL += «EXEC    @return_value = [dbo].[getCOMP_ADDRESS] «;
strSQL += »     @xprod_comisionista = » + document.getElementById(«quot_comisionista»).value + «, «;
strSQL += »        @xaddr_address1 = @xaddr_address1 OUTPUT, «;
strSQL += »        @xaddr_address2 = @xaddr_address2 OUTPUT, «;
strSQL += »        @xaddr_address3 = @xaddr_address3 OUTPUT, «;
strSQL += »        @xaddr_address4 = @xaddr_address4 OUTPUT, «;
strSQL += »        @xaddr_address5 = @xaddr_address5 OUTPUT, «;
strSQL += »        @xaddr_city = @xaddr_city OUTPUT, «;
strSQL += »        @xaddr_country = @xaddr_country OUTPUT, «;
strSQL += »        @xaddr_postcode = @xaddr_postcode OUTPUT, «;
strSQL += »        @xaddr_state = @xaddr_state OUTPUT «;
strSQL += «SELECT    @xaddr_address1 as N’@xaddr_address1′, «;
strSQL += »        @xaddr_address2 as N’@xaddr_address2′, «;
strSQL += »        @xaddr_address3 as N’@xaddr_address3′, «;
strSQL += »        @xaddr_address4 as N’@xaddr_address4′, «;
strSQL += »        @xaddr_address5 as N’@xaddr_address5′, «;
strSQL += »        @xaddr_city as N’@xaddr_city’, «;
strSQL += »        @xaddr_country as N’@xaddr_country’, «;
strSQL += »        @xaddr_postcode as N’@xaddr_postcode’, «;
strSQL += »        @xaddr_state as N’@xaddr_state’ «;
strSQL += «SELECT    ‘Return Value’ = @return_value «;
strSQL += «GO»;
myQuery = CRM.CreateQueryObj(strSQL,»»);
myQuery.ExecSQL();
dato1 = myQuery.FieldValue(«@xaddr_address1»);
//alert(dato1);
return dato1;
}
function seed(){
EntryForm.quot_comis_emp.value = grab();
EntryForm.quot_comis_addr1.value = getComiAddr();
}
</script>

Y el procedimiento almacenado que crearemos en MsSqlServer:

//STORED PROCEDURE

USE CRM
GO

CREATE PROCEDURE getCOMP_ADDRESS
        @xprod_comisionista INT,
        @xaddr_address1 varchar(100) OUTPUT,
        @xaddr_address2 varchar(100) OUTPUT,
        @xaddr_address3 varchar(100) OUTPUT,
        @xaddr_address4 varchar(100) OUTPUT,
        @xaddr_address5 varchar(100) OUTPUT,
        @xaddr_city varchar(100) OUTPUT,
        @xaddr_country varchar(100) OUTPUT,
        @xaddr_postcode varchar(100) OUTPUT,
        @xaddr_state varchar(100) OUTPUT
    AS
    BEGIN
        select top 1 @xaddr_address1 = a.addr_address1
        , @xaddr_address2 = a.addr_address2
        , @xaddr_address3 = a.addr_address3
        , @xaddr_address4 = a.addr_address4
        , @xaddr_address5 = a.addr_address5
        , @xaddr_city = a.addr_city
        , @xaddr_country = a.addr_country
        , @xaddr_state = a.addr_state
        , @xaddr_postcode = a.addr_postcode
        from address a, address_link ali
        where ali.adli_companyid = @xprod_comisionista
        and a.addr_addressid = ali.adli_addressid
        and ali.adli_personid is null and a.addr_deleted is null
    END
  
Para concluir, solo recordar que estas funciones solo se pueden ejecutar del lado del server; no funcionan del lado del cliente. Para ejecutar funciones del lado del cliente que accedan desde html directamente a base de datos podemos utilizar Ajax. Pero eso lo veremos en otro artículo.

Gracias por dejar tu comentario.