então seguinte duvida, eu tenho uma tela onde o cara informa a SELECT que ele deseja aí esse SELECT terá que ser jogada dentro de um record group e esse mesmo será adicionado a uma LOV ..
PROCEDURE populate_query IS
rg_id RecordGroup;
popula_rg NUMBER;
v_label VARCHAR2(100);
v_query VARCHAR2(4000) := NULL;
v_item ITEM;
rg_name VARCHAR2(50) := 'LOV_padrão';
errcode NUMBER;
BEGIN
break;
v_item := find_item(:SYSTEM.CURSOR_ITEM);
rg_id := Find_Group(rg_name);
v_label := get_item_property(v_item,prompt_text);
SELECT qry_lov
INTO v_query
FROM parametro_relatorio
WHERE label_item = v_label
AND relatorio = :GERA_RELATORIO.TXT_COD_RELATORIO;
IF v_query IS NOT NULL THEN
rg_id := Create_Group_From_Query(rg_name,v_query,FORM_SCOPE,15);
errcode := Populate_Group(rg_id);
Set_Lov_Property('LOV_padrão',GROUP_NAME,rg_id);
Set_Lov_Property('LOV_padrão',title,'Busca por '||v_label);
Set_Item_property(v_item,lov_name,'LOV_padrão');
ELSE
message('Query não Informada para este Relatório');
message('Query não Informada para este Relatório');
raise form_trigger_failure;
END IF;
END;
fo*a que nem nos Helps do Forms consegui achar algo concreto.... não entendi direito como faz...
DECLARE
rg_id recordgroup;
rg_errcode NUMBER;
BEGIN
rg_id := find_group('GRUPO');
IF id_null(rg_id) THEN
rg_id := create_group_from_query('GRUPO','SELECT nm_responsavel_empresa FROM qs_empresa WHERE cd_pessoa_empresa = 1');
rg_errcode := populate_group(rg_id);
IF rg_errcode <> 0 THEN
message('não FOI POSSIVEL PREENCHER O GRUPO'); pause;
ELSE
message('GRUPO CRIADO'); pause;
END IF;
END IF;
END;
Segue código novamente, agora ele não dá erro algum mas simplesmente não aparece a LOV cara... não sei o que é.. eu aperto F9 e dá um tempo mas não aparece a janelinha da LOV...
PROCEDURE populate_query IS
rg_id RecordGroup;
popula_rg NUMBER;
v_label VARCHAR2(100);
v_query VARCHAR2(4000) := NULL;
v_item ITEM;
rg_name VARCHAR2(50) := 'LOV_TESTE';
name_lov VARCHAR2(50) := 'LOV_padrão';
id_lov Lov;
v_teste varchar2(1000);
BEGIN
break;
v_item := find_item(:SYSTEM.CURSOR_ITEM);
rg_id := Find_Group(rg_name);
id_lov := Find_Lov(name_lov);
v_label := get_item_property(v_item,prompt_text);
SELECT qry_lov
INTO v_query
FROM parametro_relatorio
WHERE label_item = v_label
AND relatorio = :GERA_RELATORIO.TXT_COD_RELATORIO;
IF id_null(rg_id) THEN
rg_id := create_group_from_query(rg_name,v_query);
IF v_query IS NOT NULL THEN
popula_rg := populate_group(rg_id);
IF popula_rg <> 0 THEN
message('não FOI POSSIVEL PREENCHER O GRUPO');
raise form_trigger_failure;
ELSE
Set_Lov_Property (name_lov,GROUP_NAME,rg_id);
Set_Lov_Property(name_lov,title,'Busca por '||v_label);
Set_Item_property(v_item,lov_name,name_lov);
END IF;
ELSE
message('Query não Informada para este Relatório');
message('Query não Informada para este Relatório');
raise form_trigger_failure;
END IF;
END IF;
END;
Junior, veja esse fmb, fiz um exemplo para mudar o record group em tempo de execução, acho que é isso que você quer né...
veja a lov do campo e depois clique no botão para mudar e veja novamente a lov....
outra dica... o record group que você está mudando deve ter as mesmas colunas do record group que a lov já possui, os mesmos tipos e quantidades....
pois é... esse erro ai é exatamente as colunas das queries... tua query inicial deve ter um número x de colunas e a query que você ta criando tem um número y de colunas... por isso dá o erro...
em tempo de execução você não vai conseguir excluir ou adicionar colunas na estrutura da lov, você vai ter que garantir que as colunas das duas queries sejam identicas...
Estou tentando utilizar este código, mudei apenas o nome de algumas variaveis. Coloquei a chamada para popular um LISTitem na trigger WHEN-NEW-FORM-INSTANCE porém, quando vai me executar este código me da o seguinte erro:
Posso estar enganado, mas que eu saiba, os RECORD GROUPS criado dinamicamente (com create) não podem ser usados nas LOVS. Só podem ser usados pra popular list_itens, etc... (como eu disse, eu ACHO isso... Não tive tempo de pesquisar)...