20/01/2012, 13:38
|
| | 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 |