Olá pessoal…
Hoje vou mostrar uma função desenvolvida que retorna a descrição da opção de um campo Combo em AdvPL (por exemplo, S=Sim, ele retorna Sim).
A função recebe 3 parâmetros, o primeiro é a chave de pesquisa (por exemplo ‘S’, ‘N’, ‘1’, etc), o segundo parâmetro é o campo do configurador (por exemplo ‘A1_TIPO’, ‘C5_TIPO’, ‘B1_RASTRO’, etc), e o terceiro parâmetro é o conteúdo do combo (essa opção só é utilizada, caso você não use o campo).
Abaixo um exemplo utilizando o campo:
u_zCmbDesc( "D",; //Chave Pesquisada "C5_TIPO",; //Campo "") //Conteúdo
Abaixo um exemplo utilizando o conteúdo:
u_zCmbDesc( "S",; //Chave Pesquisada "",; //Campo "S=Sim;N=Nao") //Conteúdo
Abaixo o fonte completo da rotina.
//Bibliotecas #Include "Protheus.ch" /*/{Protheus.doc} zCmbDesc Função que retorna a descrição da opção do Combo selecionada @type function @author Atilio @since 28/08/2016 @version 1.0 @param cChave, character, Chave de pesquisa dentro do combo @param cCampo, character, Campo do tipo combo @param cConteudo, character, Conteúdo no formato de combo @return cDescri, Descrição da opção do combo @example u_zCmbDesc("D", "C5_TIPO", "") //Utilizando por Campo u_zCmbDesc("S", "", "S=Sim;N=Não;A=Ambos;") //Utilizando por Conteúdo /*/ User Function zCmbDesc(cChave, cCampo, cConteudo) Local aArea := GetArea() Local aCombo := {} Local nAtual := 1 Local cDescri := "" Default cChave := "" Default cCampo := "" Default cConteudo := "" //Se o campo e o conteúdo estiverem em branco, ou a chave estiver em branco, não há descrição a retornar If (Empty(cCampo) .And. Empty(cConteudo)) .Or. Empty(cChave) cDescri := "" Else //Se tiver campo If !Empty(cCampo) aCombo := RetSX3Box(GetSX3Cache(cCampo, "X3_CBOX"),,,1) //Percorre as posições do combo For nAtual := 1 To Len(aCombo) //Se for a mesma chave, seta a descrição If cChave == aCombo[nAtual][2] cDescri := aCombo[nAtual][3] EndIf Next //Se tiver conteúdo ElseIf !Empty(cConteudo) aCombo := StrTokArr(cConteudo, ';') //Percorre as posições do combo For nAtual := 1 To Len(aCombo) //Se for a mesma chave, seta a descrição If cChave == SubStr(aCombo[nAtual], 1, At('=', aCombo[nAtual])-1) cDescri := SubStr(aCombo[nAtual], At('=', aCombo[nAtual])+1, Len(aCombo[nAtual])) EndIf Next EndIf EndIf RestArea(aArea) Return cDescri
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Olá Danilo..
Parabéns pelos artigos. Ajudam bastante a comunidade.
Há também a função não documentada chamada X3COMBO(“campo”,conteudo)
Exemplo
X3COMBO(“A1_PESSOA”,”F”) – Retorna Física.
Toda vez que preciso dela, esqueço o nome da função.
E quando pesquiso sempre aparece este seu post nos resultados.
Agora fica mais fácil lembrar através do seu post
Abraços e sucesso.
Obrigado pelo comentário Rodrigo.
Depois irei adicionar na base de conhecimento.
Um grande abraço.
Boa tarde , alguém tem um exemplo de MODEL_FIELD_VALUES
Boa tarde Paulo, tudo joia?
Nos perguntaram recentemente no nosso grupo do WhatsApp, até enviamos um prw de exemplo, segue a resposta que enviamos na época:
[…]
Montamos um exemplo, que vai ao ar daqui uns meses no Terminal de Informação (após acabar a série de Maratona no YouTube).
Nele nós mostramos como manipular o MODEL_FIELD_VALUES junto com o COMBOVALUES, segue o código prw completo, veja o trecho das linhas 126 a 162.
Mas basicamente, seria o seguinte, crie um SetAfterViewActivate acionando uma função estática (no nosso exemplo está como fAtuCombo), depois disso, dentro dessa função, ai você manipula um array para ser as opções do combo e atualiza na Model e na View (abaixo um resumo do trecho citado acima):
//Define as opções do campo
aOpcoes := {}
aAdd(aOpcoes, “1=Novo Registro”)
aAdd(aOpcoes, “2=Inclusão Teste”)
//Define direto no Model
oModelZD1:GetStruct():SetProperty(“ZD1_TIPO”, MODEL_FIELD_VALUES, aOpcoes)
//E agora define na View
oView:SetFieldProperty(“ZD1MASTER”, “ZD1_TIPO”, “COMBOVALUES”, { aOpcoes })
//Atualiza a tela
oView:Refresh()
[…]
Um grande abraço.