Páginas filhas
  • LGX - Acionar e capturar dados de zoom multi-seleção


Para acionar a abertura de um zoom registrado no metadado no formulário FRM1008 e capturar a lista de itens selecionados, quando estiver no modo multi-seleção, você pode usar o código abaixo como um exemplo prático, sem que este zoom esteja registrado em um formulário CRUD (FRM1002) ou formulário de Processamento (FRM1003).

Inicialmente, para acionar um zoom registrado no metadado (FRM1008), você fará uso do componente LZoomMetaData e com base na referência do componente de zoom, poderá ajustar algumas propriedades do zoom para ajustar o comportamento do zoom durante o uso. Ao final basta acionar a sua ativação através da propriedade ACTIVATE.


Exemplo
DEFINE ma_record_return ARRAY[] OF RECORD
                                   coluna1_zoom CHAR(10),
                                   coluna2_zoom CHAR(50)
                                   END RECORD
DEFINE m_count_return INTEGER

#----------------------------#
FUNCTION zoom_activate_test()
#----------------------------#
  DEFINE l_zoom_reference  VARCHAR(10) 

  # Instanciar o componente de zoom metadado
  LET l_zoom_reference = _ADVPL_create_component(NULL,"LZOOMMETADATA")

  #Indicar que o zoom será do tipo multi-seleção, caso o formulário do zoom no metadado não esteja registrado como multi-seleção
  CALL _ADVPL_set_property(l_zoom_reference,"ZOOM_TYPE",1)

  # Não apresentar o filtro de pesquisa na abertura inicial da tela de zoom
  CALL _ADVPL_set_property(l_zoom_reference,'ALWAYS_SHOW_FILTER',FALSE)

  IF NOT _ADVPL_get_property(l_zoom_reference,"ZOOM","<nome_do_zoom>") THEN
     CALL LOG_message("Falha ao acionar o zoom."","ERROR",",l_type,"Ocorreu problema na leitura de informações do zoom metadado.","Verifique se o zoom está corretamente cadastrado.",0)
     CALL _ADVPL_destroy_component(l_zoom_reference)
     RETURN FALSE
  END IF

  CALL _ADVPL_set_property(l_zoom_reference,'ARRAY_RECORD_RETURN',ma_record_return)

  #Indicar a quantidade de linhas já selecionadas em algum acionamento anterior do mesmo zoom de multi-seleção.
  #Quando houver necessidade de sempre abrir o zoom com nenhum item marcado, a propriedade SELECTED não deve ser inicializada 
  CALL _ADVPL_set_property(l_zoom_reference,"SELECTED",m_count_return)

  LET m_count_return = _ADVPL_get_property(l_zoom_reference,'ACTIVATE')

  CALL _ADVPL_destroy_component(l_zoom_reference)

  CALL conout("Número de itens selecionaos no zoom = "||m_count_return)

  #Aqui neste ponto, a leitura dos itens selecionados estarão disponíveis na variável MA_RECORD_RETURN, da linha 1 até o total de itens selecionados indicados na variável M_COUNT_RETURN.
END FUNCTION


O exemplo acima demostrou o uso da propriedade ARRAY_RECORD_RETURN para indicar a variável ARRAY OF RECORD que conterá a lista dos valores dos itens selecionados no array. Esta variável ARRAY OF RECORD deverá conter os elementos (campos) registrados no zoom (FRM1008) na aba 3 - Tabelas e Colunas onde a coluna Retorna Valor? estiver marcada, ou seja, as colunas do zoom marcadas para serem retornadas para a aplicação com os itens selecionados pelo usuário.