Páginas filhas
  • LGX - LCHOICE

Componente com duas listas de seleção que permite realizar operações de transferência de itens entre as listas.


Hierarquia



Métodos GET


Métodos acessíveis através da função _ADVPL_get_property que permite recuperar os valores do componente.


Método GET: LEFT_LABEL_TEXT

Retorna o conteúdo to título da lista apresentada do lado esquerdo da tela.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "LEFT_LABEL_TEXT" ) => CHAR

Retorno



TipoDescrição
CHAR

Texto do título da lista apresentada do lado esquerdo.


Exemplo



DEFINE l_label CHAR(100)

LET l_label = _ADVPL_get_property( l_choice_reference ,"LEFT_LABEL_TEXT")



Método GET: RIGHT_LABEL_TEXT

Retorna o conteúdo to título da lista apresentada do lado direito da tela.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "RIGHT_LABEL_TEXT" ) => CHAR

Retorno



TipoDescrição
CHAR

Texto do título da lista apresentada do lado direito.


Exemplo



DEFINE l_label CHAR(100)

LET l_label = _ADVPL_get_property( l_choice_reference ,"RIGHT_LABEL_TEXT")



Método GET: LEFT_INDEX_SELECTED

Retorna a ordem do índice selecionado na lista localizada do lado esquerdo da tela.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "LEFT_INDEX_SELECTED" ) => INTEGER

Retorno



TipoDescrição
INTEGER

Índice do item selecionado na lista da esquerda.


Exemplo



DEFINE l_index_selected SMALLINT

LET l_index_selected = _ADVPL_get_property( l_choice_reference ,"LEFT_INDEX_SELECTED")



Método GET: RIGHT_INDEX_SELECTED

Retorna a ordem do índice selecionado na lista localizada do lado direito da tela.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "RIGHT_INDEX_SELECTED" ) => INTEGER

Retorno



TipoDescrição
INTEGER

Índice do item selecionado na lista da direita.


Exemplo



DEFINE l_index_selected SMALLINT

LET l_index_selected = _ADVPL_get_property( l_choice_reference ,"RIGHT_INDEX_SELECTED")



Método GET: LEFT_TEM_AT

Retorna o valor do texto de um determinado item da lista localizada do lado esquerdo.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "LEFT_ITEM_AT", < nIndex > ) => INTEGER

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGER

Número do índice da lista da esquerda que deseja retornar o conteúdo de texto.

(informação) Quando não for informado o número do índice, irá considerar o índice do item atual selecionado da lista.

Não

Retorno



TipoDescrição
CHAR

Conteúdo do texto registrado para o índice informado da lista da esquerda.


Exemplo



DEFINE l_index_value CHAR(50)

#Retornar o texto do item 2 da lista da esquerda
LET l_index_value = _ADVPL_get_property( l_choice_reference ,"LEFT_ITEM_AT",2)



Método GET: RIGHT_TEM_AT

Retorna o valor do texto de um determinado item da lista localizada do lado direito.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "RIGHT_ITEM_AT", < nIndex > ) => INTEGER

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGER

Número do índice da lista da direita que deseja retornar o conteúdo de texto.

(informação) Quando não for informado o número do índice, irá considerar o índice do item atual selecionado da lista.

Não

Retorno



TipoDescrição
CHAR

Conteúdo do texto registrado para o índice informado da lista da direita.


Exemplo



DEFINE l_index_value CHAR(50)

#Retornar o texto do item 2 da lista da direita
LET l_index_value = _ADVPL_get_property( l_choice_reference ,"RIGHT_ITEM_AT",2)



Método GET: LEFT_TEM_COUNT

Retorna a quantidade total de itens contidos na lista localizada no lado esquerdo.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "LEFT_ITEM_COUNT") => INTEGER


Retorno



TipoDescrição
INTEGER

Quantidade total de itens contidos na lista da esquerda.


Exemplo



DEFINE l_index_count INTEGER

#Retornar o total de itens da lista da esquerda
LET l_index_count = _ADVPL_get_property( l_choice_reference ,"LEFT_ITEM_COUNT")



Método GET: RIGHT_TEM_COUNT

Retorna a quantidade total de itens contidos na lista localizada no lado direito.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "RIGHT_ITEM_COUNT") => INTEGER


Retorno



TipoDescrição
INTEGER

Quantidade total de itens contidos na lista da direita.


Exemplo



DEFINE l_index_count INTEGER

#Retornar o total de itens da lista da direita
LET l_index_count = _ADVPL_get_property( l_choice_reference,"RIGHT_ITEM_COUNT")



Método GET: SHOW_MOVE_BUTTONS

Retorna indicador de exibição dos botões de movimentação de itens entre as duas listas de seleção.

Sintaxe



_ADVPL_get_property( < l_choice_reference >, "SHOW_MOVE_BUTTONS") => SMALLINT


Retorno



TipoDescrição
SMALLINT

TRUE - Botões de movimentação de itens entre lista estão sendo exibidos.

FALSE - Botões de movimentação de itens entre lista não estão sendo exibidos. 


Exemplo



DEFINE l_show_buttons SMALLINT

#Retornar se os botões de movimentação de itens entre as listas estão disponíveis para uso 
LET l_show_buttons = _ADVPL_get_property( l_choice_reference,"SHOW_MOVE_BUTTONS")




Métodos SET


Métodos acessíveis utilizando a função _ADVPL_set_property que permite alterar e manipular os valores do componente.


Método SET: LEFT_ADD_ITEM

Adiciona um item na lista de seleção localizada do lado esquerdo.

Sintaxe



_ADVPL_set_property( < l_choice_reference >, "LEFT_ADD_ITEM" , < cDescription > , [ < uValue > ] ) =>

Parâmetros



NomeTipoDescriçãoObrigatório?
cDescription
CHAR

Conteúdo texto a ser exibido para o item na lista de seleção do lado esquerdo

Sim
uValue
QUALQUER
Valor a ser assumido quando este item estiver selecionado. 

(informação) Este valor não é obrigatório, mas é o valor que é atribuído para a variável associada ao componente através da propriedade LEFT_VARIABLE.  Quando não informado assume o mesmo valor definido no parâmetro cDescription.
Não


Exemplo



#Adicionar o item de valor "C" que apresenta o texto na lista como "Cancelado"
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_ADD_ITEM","Cancelado","C")



Método SET: RIGHT_ADD_ITEM

Adiciona um item na lista de seleção localizada do lado direito.

Sintaxe



_ADVPL_set_property( < l_choice_reference >, "RIGHT_ADD_ITEM" , < cDescription > , [ < uValue > ] ) =>

Parâmetros



NomeTipoDescriçãoObrigatório?
cDescription
CHAR

Conteúdo texto a ser exibido para o item na lista de seleção do lado esquerdo

Sim
uValue
QUALQUER
Valor a ser assumido quando este item estiver selecionado. 

(informação) Este valor não é obrigatório, mas é o valor que é atribuído para a variável associada ao componente através da propriedade VARIABLE.  Quando não informado assume o mesmo valor definido no parâmetro cDescription.
Não


Exemplo



#Adicionar o item de valor "C" que apresenta o texto na lista como "Cancelado"
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_ADD_ITEM","Cancelado","C")



Método SET: SHOW_MOVE_BUTTONS

Permite exibir ou ocultar os botões de movimentação de itens entre as 2 listas de seleção.

Sintaxe



_ADVPL_set_property( < l_choice_reference >, "SHOW_MOVE_BUTTONS", <nShow> )


Parâmetros



NomeTipoDescriçãoObrigatório?
nShow
SMALLINT

Indicador para exibir ou ocultar os botões de movimentação de itens entre as duas listas de seleção.

TRUE   - Exibir os botões de movimentação de itens.

FALSE  - Nâo exibir os botões de movimentação de itens.

Sim


Exemplo



#Ocultar os botões de movimentação entre os itens das duas listas de seleção.
CALL _ADVPL_set_property( l_choice_reference,"SHOW_MOVE_BUTTONS", FALSE)



Método SET: LEFT_CLEAR 

Remove todos os itens da lista de seleção localizada do lado esquerdo.

Sintaxe



_ADVPL_set_property(< l_choice_reference >,"LEFT_CLEAR")


Exemplo



#Remove todos itens da lista de seleção do lado esquerdo
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_CLEAR")




Método SET: RIGHT_CLEAR 

Remove todos os itens da lista de seleção localizada do lado direito.


Sintaxe



_ADVPL_set_property(< l_choice_reference >,"RIGHT_CLEAR")


Exemplo



#Remove todos itens da lista de seleção do lado direito
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_CLEAR")




Método SET: LEFT_REMOVE_ITEM

Remove um item da lista de seleção localizada do lado esquerdo da tela.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "LEFT_REMOVE_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGERÍndice do item que será removido na lista da esquerda.Sim


Exemplo



#Remove o item 3 da lista de seleção localizada a esquerda
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_REMOVE_ITEM",3)




Método SET: RIGHT_REMOVE_ITEM

Remove um item da lista de seleção localizada do lado direito da tela.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "RIGHT_REMOVE_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndex
INTEGERÍndice do item que será removido na lista da direita.Sim


Exemplo



#Remove o item 3 da lista de seleção localizada a direita
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_REMOVE_ITEM",3)




Método SET: LEFT_SELECT_ITEM 

Seleciona um determinado item da lista de seleção localizada do lado esquerdo, através do índice informado.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "LEFT_SELECT_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndexINTEGERÍndice do item da lista de seleção da esquerda que deverá ser selecionado.Sim

Exemplo



#Seleciona o 1o item da lista de seleção da esquerda
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_SELECT_ITEM",1)    




Método SET: RIGHT_SELECT_ITEM 

Seleciona um determinado item da lista de seleção localizada do lado direito, através do índice informado.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "RIGHT_SELECT_ITEM" , < nIndex > )

Parâmetros



NomeTipoDescriçãoObrigatório?
nIndexINTEGERÍndice do item da lista de seleção da direita que deverá ser selecionado.Sim

Exemplo



#Seleciona o 1o item da lista de seleção da direita
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_SELECT_ITEM",1)    




Método SET: LEFT_ORDER

Indica a ordenação dos valores na lista de seleção localizada do lado esquerdo.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "LEFT_ORDER" , < cORDER > )

Parâmetros



NomeTipoDescriçãoObrigatório?
cORDERCHAR

Ordenação dos itens na lista da esquerda conforme o conteúdo de texto exibido em cada item.

    ASC - Ordem Ascendente

    DESC - Ordem Descendente

Sim

Exemplo



#Ordenar a lista da esquerda pelo conteúdo apresentado em ordem ascendente
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_ORDER","ASC")  




Método SET: RIGHT_ORDER

Indica a ordenação dos valores na lista de seleção localizada do lado direito.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "RIGHT_ORDER" , < cORDER > )

Parâmetros



NomeTipoDescriçãoObrigatório?
cORDERCHAR

Ordenação dos itens na lista da esquerda conforme o conteúdo de texto exibido em cada item.

    ASC - Ordem Ascendente

    DESC - Ordem Descendente

Sim

Exemplo



#Ordenar a lista da esquerda pelo conteúdo apresentado em ordem ascendente
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_ORDER","ASC")  




Método SET: LEFT_VARIABLE

Definir o elemento de uma variável ARRAY OF RECORD 4GL que irá assumir o valor do item selecionado na lista de seleção localizada a esquerda.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "LEFT_VARIABLE" , < record4GL_variable > , < l_element_record4GL_variable > )


Parâmetros



NomeTipoDescriçãoObrigatório?
record4GL_variableARRAY OF RECORD 4GL

Nome da variável ARRAY OF RECORD 4GL que irá armazenar a lista de valores da lista de seleção localizada do lado esquerdo.

Sim
l_element_record4GL_variableCHAR

Nome do elemento da variável ARRAY OF RECORD 4GL que armazena o valor apresentado  na lista de seleção do lado esquerdo.

Sim

Exemplo



DEFINE ma_list ARRAY[10] OF RECORD
                            item_value CHAR(40)
                            END RECORD

#Definie o nome do record4GL e elemento que irá armazenar o valor do item selecionado na lista de seleção da esquerda
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_VARIABLE", ma_list , "item_value" )




Método SET: VARIABLE

Definir o elemento de uma variável ARRAY OF RECORD 4GL que irá assumir o valor do item selecionado na lista de seleção localizada a direita.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "VARIABLE" , < record4GL_variable > , < element_record4GL_variable > )

Parâmetros



NomeTipoDescriçãoObrigatório?
record4GL_variableARRAY OF RECORD 4GL

Nome da variável ARRAY OF RECORD 4GL que irá armazenar a lista de valores da lista de seleção localizada do lado esquerdo.

Sim
l_element_record4GL_variable
CHAR

Nome do elemento da variável ARRAY OF RECORD 4GL que armazena o valor apresentado  na lista de seleção do lado esquerdo.

Sim

Exemplo



DEFINE ma_list ARRAY[10] OF RECORD
                            item_value CHAR(40)
                            END RECORD

#Definie o nome do record4GL e elemento que irá armazenar o valor do item selecionado na lista de seleção da esquerda
CALL _ADVPL_set_property( l_choice_reference , "VARIABLE" , ma_list , "item_value" )




Método SET: LEFT_MOVE_EVENT

Determina o nome da função 4GL que será acionada quando ocorrer uma movimentação de item selecionado na lista do lado direito para o lado esquerdo. Esta função permitirá ou não concluir a movimentação do item selecionado.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "LEFT_MOVE_EVENT" , < l_4GLfunction_name > )


Parâmetros



NomeTipoDescriçãoObrigatório?
l_4GLfunction_name
CHAR

Nome da função 4GL que será acionada toda vez que ocorrer movimentação de um item da lista da direita pra esquerda.

Sim

Exemplo



#Acionar a função 4GL lchoice_checkCanMoveItemLeft() quando ocorrer o evento de movimentação de um item da lista da direita para a esquerda.
CALL _ADVPL_set_property( l_choice_reference ,"LEFT_MOVE_EVENT", "lchoice_checkCanMoveItemLeft")  




Método SET: RIGHT_MOVE_EVENT

Determina o nome da função 4GL que será acionada quando ocorrer uma movimentação de item selecionado na lista do lado esquerdo para o lado direito. Esta função permitirá ou não concluir a movimentação do item selecionado.

Sintaxe



_ADVPL_set_property( < l_choice_reference > , "RIGHT_MOVE_EVENT" , < l_4GLfunction_name > )


Parâmetros



NomeTipoDescriçãoObrigatório?
l_4GLfunction_name
CHAR

Nome da função 4GL que será acionada toda vez que ocorrer movimentação de um item da lista da esquerda pra direita.

Sim

Exemplo



#Acionar a função 4GL lchoice_checkCanMoveItemRight() quando ocorrer o evento de movimentação de um item da lista da esquerda para a direita.
CALL _ADVPL_set_property( l_choice_reference ,"RIGHT_MOVE_EVENT", "lchoice_checkCanMoveItemRight")  




Método SET: REORGANIZE_RECORD

Indicador para reorganizar os dados das variáveis ARRAY OF RECORD definidas para as listas pelos métodos SET VARIABLE ou SET LEFT_VARIABLE todas vez que ocorrer uma movimentação de itens de uma lista para outra.

Sintaxe



_ADVPL_set_property(< l_choice_reference >,"REORGANIZE_RECORD", < nReorganize > )


Parâmetros



NomeTipoDescriçãoObrigatório?
nReorganize
SMALLINT

Indicador para reorganizar dados das variáveis 4GL que armazenam os valores apresentados nas listas, quando ocorrer movimentação de itens entre as listas. 

   TRUE - Reorganizar automaticamente os dados nas variáveis 4GL com os dados das listas.

   FALSE - Não reorganizar os dados nas variáveis 4GL com os dados das listas.

Sim

Exemplo



#Reorganizar a lista de dados nas variáveis ARRAY OF RECORD indicadas para as listas toda vez que ocorrer movimentação de itens entre as listas
CALL _ADVPL_set_property( l_choice_reference ,"REORGANIZE_RECORD", TRUE)  





Exemplo



DEFINE m_dialog_reference VARCHAR(10)
DEFINE m_choice_reference VARCHAR(10)

DEFINE ma_left, ma_right ARRAY [10] OF RECORD
                         item_value CHAR(30)
                         END RECORD

#------------------------#
 FUNCTION lchoice_test()
#------------------------#
   DEFINE l_layoutmanager_reference VARCHAR(10)
   DEFINE l_statusbar_reference     VARCHAR(10)
   DEFINE l_menubar_reference       VARCHAR(10)
   DEFINE l_confirm_button          VARCHAR(10)
   DEFINE l_panel                   VARCHAR(10)
   DEFINE l_index                   SMALLINT

   CALL fgl_setenv("ADVPL","1")

   #Instancia janela de diálogo
   LET m_dialog_reference = _ADVPL_create_component(NULL,"LDIALOG")
   CALL _ADVPL_set_property(m_dialog_reference,"ENABLE_ESC_CLOSE",FALSE)
   CALL _ADVPL_set_property(m_dialog_reference,"TITLE","Ordem das Divisões")

   #Instancia barra de status/mensagens na janela de diálogo
   LET l_statusbar_reference = _ADVPL_create_component(NULL,"LSTATUSBAR",m_dialog_reference)

   #Instancia componente para renderização de componentes em relação ao posicionamento em tela
   LET l_layoutmanager_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",m_dialog_reference)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"MARGIN",FALSE)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"COLUMNS_COUNT",1)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"MIN_WIDTH",600)
   CALL _ADVPL_set_property(l_layoutmanager_reference,"MIN_HEIGHT",340)

   #Instancia uma barra de menu na janela de diálogo
   LET l_menubar_reference = _ADVPL_create_component(NULL,"LMENUBAR",l_layoutmanager_reference)

   #Adiciona um botão CONFIRMAR na barra de menu
   LET l_confirm_button = _ADVPL_create_component(NULL,"LMENUBUTTON",l_menubar_reference)
   CALL _ADVPL_set_property(l_confirm_button,"IMAGE","CONFIRM_EX")
   CALL _ADVPL_set_property(l_confirm_button,"EVENT","lchoice_exit")

   #Adiciona um painel logo a seguir do menu para que possa incluir o componente LChoice
   LET l_panel = _ADVPL_create_component(NULL,"LPANEL",l_layoutmanager_reference)
   CALL _ADVPL_set_property(l_panel,"ALIGN","CENTER")
   CALL _ADVPL_set_property(l_panel,"SIZE",540,280)

   #Cria o componente LChoice de multipla escolha
   LET m_choice_reference = _ADVPL_create_component(NULL,"LCHOICE",l_panel)

   #Determina que os itens devem sempre ser reorganizados na lista quando forem movimentados
   CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)

   #Dimensiona o componente
   CALL _ADVPL_set_property(m_choice_reference,"SIZE",540,280)
   CALL _ADVPL_set_property(m_choice_reference,"ALIGN","CENTER")

   #Esconde os botões para trocar os itens de posição no choice direito
   CALL _ADVPL_set_property(m_choice_reference,"SHOW_MOVE_BUTTONS",TRUE)

   #Define a descrição (texto) do label esquerdo
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_LABEL_TEXT","Titulo ESQUERDA")

   #Define a descrição (texto) do label direito
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_LABEL_TEXT","Título DIREITA")

   #Habilita o componente LChoice
   CALL _ADVPL_set_property(m_choice_reference,"ENABLE",TRUE)

   #Determina as funções de controle de movimentação de itens entre as listas para identificar movimentos não permitidos.
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_MOVE_EVENT","lchoice_checkCanMoveLeft")
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_MOVE_EVENT","lchoice_checkCanMoveRight")

   LET ma_left[01].item_value = 'valor 01'
   LET ma_left[02].item_value = 'valor 02'
   LET ma_left[03].item_value = 'valor 03'
   LET ma_left[04].item_value = 'valor 04'
   LET ma_left[05].item_value = 'valor 05'
   LET ma_left[06].item_value = 'valor 06'
   LET ma_left[07].item_value = 'valor 07'
   LET ma_left[08].item_value = 'valor 08'
   LET ma_left[09].item_value = 'valor 09'
   LET ma_left[10].item_value = 'valor 10'

   #Determinar as variaveis que irão armazenar o conteúdo das listas da direita e esquerda, indicando o total de linhas preenchidas em cada lista.
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_VARIABLE",ma_left,"item_value",10)
   CALL _ADVPL_set_property(m_choice_reference,"VARIABLE",ma_right,"item_value",0)

   #Ativar a janela de diálogo
   CALL _ADVPL_set_property(m_dialog_reference,"ACTIVATE",TRUE)
 END FUNCTION

#---------------------------------------#
 FUNCTION lchoice_checkCanMoveLeft()
#---------------------------------------#
   DEFINE l_idx_selected SMALLINT

   #Identificar o indice atual selecionado na lista da direita
   LET l_idx_selected = _ADVPL_get_property(m_choice_reference, "RIGHT_INDEX_SELECTED")

   IF ma_right[l_idx_selected].item_value = "valor 05" THEN
      CALL LOG_message("Movimentação não permitida.","WARNING","Este item nao pode ser retornado para esquerda.","",0)     
      
      #Cancela a movimentação       
      RETURN FALSE
   END IF

   #Desmarca item selecionado na lista da direita e reorganiza dados
   CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)   
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_SELECT_ITEM",l_idx_selected)
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_ORDER","ASC")   

   #Autoriza a movimentação 
   RETURN TRUE
 END FUNCTION

#---------------------------------------#
 FUNCTION lchoice_checkCanMoveRight()
#---------------------------------------#
   DEFINE l_idx_selected SMALLINT      
 
   #Identificar o indice atual selecionado na lista da esquerda
   LET l_idx_selected = _ADVPL_get_property(m_choice_reference, "LEFT_INDEX_SELECTED")

   IF ma_right[l_idx_selected].item_value = "valor 03" THEN
      CALL LOG_message("Movimentação não permitida.","WARNING","Este item nao pode ser movido para direita.","",0)
      #Cancela a movimentação
      RETURN FALSE
   END IF

   #Desmarca item selecionado na lista da esquerda e reorganiza dados
   CALL _ADVPL_set_property(m_choice_reference,"REORGANIZE_RECORD",TRUE)   
   CALL _ADVPL_set_property(m_choice_reference,"LEFT_SELECT_ITEM",l_idx_selected)
   CALL _ADVPL_set_property(m_choice_reference,"RIGHT_ORDER","ASC")   
   
   #Autoriza a movimentação
   RETURN TRUE
 END FUNCTION

#-------------------------#
 FUNCTION lchoice_exit()
#-------------------------#
   #Fecha a janela de diálogo
   CALL _ADVPL_set_property(m_dialog_reference,"ACTIVATE",FALSE)
 END FUNCTION