Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/01/2012, 13:38
jsmaira
 
Fecha de Ingreso: enero-2012
Mensajes: 29
Antigüedad: 12 años, 10 meses
Puntos: 0
consulta: nombre de salida del type del procedimiento no sea fijo

Hola muchachos mi consulta es la siguiente:

esta es mi salida de type:

create type ejemplo as
(id_tabla text,
nombre text)

en este create salen valores fijos o sea en el codigo en mi caso php para que tomen los valores deben ser los mismos, me explico...

en php si sale lo siguiente

$param = $Result['id_tabla'] . "/" . $pasaValor;

id_tabla automaticamente toma los valores del procedimiento o el type en cuestion..

pero que pasa si en php fuera asi:

$Value[$i]['nombre_atributo'] = $campo_look;

$campo_look viene de otro procedimiento y esta bien, trae el nombre de un atributo en particular...en este ejemplo: nombre_pelicula.....pero se necesita que tome los valores del atributo en cuestion el $Value[$i]['nombre_atributo']...para que eso pase deberia tener el mismo nombre lo que trae $campo_look y el nombre del type que esta mas arriba..o sea seria asi..


create type ejemplo as
(id_tabla text,
nombre_pelicula text)

ahy funciona perfecto...pero si hago lo mismo con tro atributo tendria que cambiar nuevamente uno de los tipos....

entonces como lo puedo hacer para no estar cambiando a cada rato eso por q el sistema funciona con varios de estos tipos..


este es el codigo en php:

switch ($pIntIdTipoAtt) {

case "13": //LOOKUP



unset($Datos);

$Datos = LocalQueryHandler("DOMO_getLookup", $pIntIdAttLookup, "");


if ($Datos) {

$filtro = $Datos[0]['filtro'];

$id_atributo_filtro = $Datos[0]['id_atributo_filtro'];

$id_domo_atributolookup = $Datos[0]['id_domo_atributolookup'];

$id_domo_atributo = $Datos[0]['id_domo_atributo'];

$id_tabla = "id_" . $Datos[0]['nombre_tabla'];

$id_domo_tabla = $Datos[0]['id_domo_tabla'];

$campo_look = $Datos[0]['campo_lookup'];

$tabla = $Datos[0]['nombre_tabla'];

$id_filtro = $Datos[0]['id_domo_atributo_filtro'];

$NmAttLookup = $Datos[0]['nombre_atributo'];




}


if ($filtro == 0) {

unset($Datos);

$Datos = LocalQueryHandler("BUILDER_getAttribute", $id_atributo_filtro, "");


$sig_combo = "";

if ($Datos) {

$sig_combo = $Datos[0]['nombre_atributo']; // es el siguiente lookup

$sig_tipo = $Datos[0]['id_domo_tipoatributo'];

$sig_id = $Datos[0]['id_domo_atributo'];

}




//************************ filtro de lookup por builder, RCAZENAV **********************/

//$filtroLookupForm2 = ' and activo = 1';

//************************************************** ***********************************//

$pasaValor = $tabla . "/" . $id_filtro;

unset($pParams);

$pParams = "'".$tabla . "','" . $campo_look . "','0'";



unset($Datos);

$Datos = LocalQueryHandler("DOMO_getLookupData", $pParams, "");

// unset($campo_look);



$i = 0;


if ($Datos) {


foreach ($Datos as $Result) {


$param = $Result['id_tabla'] . "/" . $pasaValor;
$Value[$i] = $Result;


$Value[$i]['nombre_atributo'] = $campo_look;

$Value[$i]['PasaValor'] = $param;

$Value[$i]['SigCombo'] = "\"" . $sig_combo . "\"";


$i++;


}


este es el procedimiento y el type:


CREATE OR REPLACE FUNCTION domo_getlookupdata(pstrtabla character varying, pstrcampolookup character varying, pintidregistro character varying)
RETURNS SETOF getlookupdata AS
$BODY$
DECLARE
res getlookupdata%rowtype;
pintIdRegistro VARCHAR(100) = 0;
vsql VARCHAR(4000);

BEGIN

IF pintIdRegistro <> 0 then
vsql := 'SELECT id_' || pstrTabla || ' , '
|| pstrCampoLookup || ' FROM ' || pstrTabla
|| ' WHERE id_'||pstrTabla||' = ' || pintIdRegistro :: VARCHAR(30)
|| ' ORDER BY ' || pstrCampoLookup || ' ';



ELSE
vsql := 'SELECT id_' || pstrTabla || ' , '
|| pstrCampoLookup || ' FROM ' || pstrTabla
|| ' ORDER BY ' || pstrCampoLookup || ' ';

END IF;
FOR res IN
execute vsql
LOOP
RETURN NEXT res;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION domo_getlookupdata(character varying, character varying, character varying) OWNER TO sa;


type:

create type getlookupdata as
(id_tabla text, nombre_pelicula text)


desde ya gracias