Páginas filhas
  • LGX - LWIZARD

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Pagetitle
LTHREADLWIZARDLTHREAD
LWIZARD

Cria programas do tipo WizardExecuta funções 4GL a partir de uma nova THREAD de forma assíncrona.

Hierarquia

Métodos GET

Inclusão de trecho
LTHREAD - Métodos GET
LTHREAD - Métodos GET
nopaneltrue

Métodos SET

Inclusão de trecho
LTHREAD - Métodos SET
LTHREAD - Métodos SET
nopaneltrue

Sintaxe

Bloco de código
LET m_threadwiz_reference = _ADVPL_create_component(NULL,"LTHREADLWIZARD")

Exemplo

Bloco de código
linenumberstrue
DATABASE logix

GLOBALSDEFINE mr_wizard RECORD
    DEFINE p_user LIKE usuarios.cod_usuario
          DEFINE p_cod_empresa LIKE empresa.cod_empresa
END GLOBALS

#------------------------------------------------------------------------------#
FUNCTION LTHREAD_test()
#--------------------------------    terms CHAR(999),
                     agree CHAR(001),
                     steps CHAR(050)
                 END RECORD


DEFINE m_wiz_reference VARCHAR(10)
DEFINE m_prg_reference VARCHAR(10)


#----------------------------------------------#
    DEFINE l_thread_reference VARCHAR(10)
 
    DEFINE l_status   SMALLINT
    DEFINE l_is_alive SMALLINT
    DEFINE l_message  CHAR(200)

    IF  LOG_initApp("PADRAO") <> 0 THEN
        RETURN
    END IF--------------------------------#
FUNCTION wiz0001()
#------------------------------------------------------------------------------#
    INITIALIZE mr_wizard.* TO NULL


    # Cria o componente para requisições REST.
    LET l_thread_reference LET m_wiz_reference = _ADVPL_create_component(NULL,"LTHREADLWIZARD")

    # Define a função que será executada numa nova THREAD.
    CALL _ADVPL_set_property(lm_threadwiz_reference,"FUNCTIONTITLE","LTHREAD_testFunctionWizard de Exemplo")

    # Adiciona os parâmetros que serão enviados para a função.
    CALL CALL _ADVPL_set_property(lm_threadwiz_reference,"CLEAR_PARAMETERS"CANCEL_EVENT","wiz0001_cancel")
    CALL _ADVPL_set_property(lm_threadwiz_reference,"ADD_PARAMETERACTION","Ação 1",p_user CLIPPED"wiz0001_action1")
    CALL _ADVPL_set_property(lm_threadwiz_reference,"ADD_PARAMETERACTION",p_cod_empresa CLIPPED)"Ação 2","wiz0001_action2")


    # IniciaEtapa ade execução da função em uma nova THREADboas vindas.
    LETCALL l_status = _ADVPL_getset_property(lm_threadwiz_reference,"START")

    IF  l_status THEN
        # Verifica se a THREAD está em execução.ADD_STEP","WELCOME","Componente LWIZARD","Este é um exemplo de uso do componente para criação de Wizards.","wiz0001_stepWelcome")
        LETCALL l_is_alive = _ADVPL_getset_property(lm_threadwiz_reference,"ISSTEP_ALIVE")
EVENT","WELCOME","wiz0001_stepWelcomeEvent")
        IF  l_is_alive THENCALL _ADVPL_set_property(m_wiz_reference,"STEP_VALID","WELCOME","wiz0001_stepWelcomeValid")


    # Etapa de  seleção.
    CALL log0030_mensagem("Is Alive? Sim!","info")
        ELSE
            CALL log0030_mensagem("Is Alive? Não!","excl_ADVPL_set_property(m_wiz_reference,"ADD_STEP","SELECT","Selecionar Etapa","O componente permite que você alterne entre as etapas existentes.","wiz0001_stepSelect")
        END IFCALL _ADVPL_set_property(m_wiz_reference,"STEP_NEXT","SELECT","wiz0001_stepSelectNext")


        # AguardaEtapa até o término da THREAD.
    de processamento.
    CALL _ADVPL_getset_property(lm_threadwiz_reference,"JOIN")
        CALL log0030_mensagem("THREAD finalizada","info")
    ELSE
        # Recupera a mensagem de erro.ADD_STEP","PROCESS","Processando","Etapa em processamento, não permite interações até que a etapa seja finalizada.","wiz0001_stepProcess")
        LETCALL l_message = _ADVPL_getset_property(lm_threadwiz_reference,"ERROR_MESSAGE")
        CALL log0030_mensagem(l_message,"stop")
    END IFSTEP_EVENT","PROCESS","wiz0001_stepProcessEvent")


    # AoEtapa finalizarde ofinalização.
 uso, libera o componente da memória.CALL _ADVPL_set_property(m_wiz_reference,"ADD_STEP","FINISH","Sucesso","Processo finalizado com sucesso.","wiz0001_stepFinish")
    CALL _ADVPL_destroyset_componentproperty(lm_threadwiz_reference,"STEP_BACK","FINISH","wiz0001_stepFinishBack")
END FUNCTION

    CALL _ADVPL_set_property(m_wiz_reference,"ACTIVATE",TRUE)
END FUNCTION


#------------------------------------------------------------------------------#
FUNCTION LTHREADwiz0001_testFunction(l_cod_usuario,l_cod_empresacancel()
#------------------------------------------------------------------------------#
    DEFINERETURN l_val_env     CHAR(50)
    DEFINE l_cod_usuario CHAR(08)
    DEFINE l_cod_empresa CHAR(02)

    IF  LOG_initApp("PADRAO") = 0 THEN
        LET l_val_env = LOG_getEnv("IPLOCAL_LGX")
        CALL CONOUT("IPLOCAL_LGX: "||l_val_env CLIPPED)

        LET l_val_env = LOG_getEnv("LTHREAD_CMP")
        CALL CONOUT("LTHREAD_CMP: "||l_val_env CLIPPED)

        CALL CONOUT("USUARIO....: "||l_cod_usuario CLIPPED)
        CALL CONOUT("EMPRESA....: "||l_cod_empresa CLIPPED)

        # Aguarda 5 segundos para que o teste do IS_ALIVE funcione.
        SLEEP 5
    END IFLOG_question("Confirma o cancelamento do Wizard?")
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_action1()
#------------------------------------------------------------------------------#
    CALL log0030_processa_mensagem("Clicou na ação 1","exclamation",0)
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_action2()
#------------------------------------------------------------------------------#
    CALL log0030_processa_mensagem("Clicou na ação 2","exclamation",0)
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepWelcome()
#------------------------------------------------------------------------------#
    DEFINE l_wiz_container VARCHAR(10)
    DEFINE l_pnl_reference VARCHAR(10)
    DEFINE l_ltm_reference VARCHAR(10)
    DEFINE l_lbl_reference VARCHAR(10)
    DEFINE l_cmp_reference VARCHAR(10)
    LET l_wiz_container = _ADVPL_get_property(m_wiz_reference,"WIZARD_CONTAINER_REFERENCE")
    LET l_pnl_reference = _ADVPL_create_component(NULL,"LPANEL",l_wiz_container)
    CALL _ADVPL_set_property(l_pnl_reference,"ALIGN","CENTER")
    LET l_ltm_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",l_pnl_reference)
    CALL _ADVPL_set_property(l_ltm_reference,"MARGIN",TRUE)
    CALL _ADVPL_set_property(l_ltm_reference,"COLUMNS_COUNT",1)
    LET l_lbl_reference = _ADVPL_create_component(NULL,"LLABEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_lbl_reference,"TEXT","Leia atentamente os termos de uso abaixo:")
    # Indica que o próximo componente será expansível.
    CALL _ADVPL_set_property(l_ltm_reference,"EXPANSIBLE",TRUE)
    LET l_cmp_reference = _ADVPL_create_component(NULL,"LTEXTAREA",l_ltm_reference)
    CALL _ADVPL_set_property(l_cmp_reference,"ALIGN","CENTER")
    CALL _ADVPL_set_property(l_cmp_reference,"ENABLE",TRUE)
    CALL _ADVPL_set_property(l_cmp_reference,"EDITABLE",FALSE)
    CALL _ADVPL_set_property(l_cmp_reference,"VARIABLE",mr_wizard,"terms")
    LET l_cmp_reference = _ADVPL_create_component(NULL,"LCHECKBOX",l_ltm_reference)
    CALL _ADVPL_set_property(l_cmp_reference,"TEXT","Eu li e concordo com os termos de uso")
    CALL _ADVPL_set_property(l_cmp_reference,"VALUE_CHECKED","S")
    CALL _ADVPL_set_property(l_cmp_reference,"VALUE_NCHECKED","N")
    CALL _ADVPL_set_property(l_cmp_reference,"ENABLE",TRUE)
    CALL _ADVPL_set_property(l_cmp_reference,"VARIABLE",mr_wizard,"agree")
    # Aplica o leiaute.
    CALL _ADVPL_set_property(l_ltm_reference,"APPLY_LAYOUT")
    RETURN l_pnl_reference
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepWelcomeEvent()
#------------------------------------------------------------------------------#
    IF  mr_wizard.terms IS NULL THEN
        LET mr_wizard.terms = "Lorem ipsum dolor sit amet, id odio suscipit mel. ",
                              "Alii nominati cu eos, dolor congue postulant sed in. ",
                              "Qui primis voluptaria in. Option timeam conceptam et mea. ",
                              "Sit cu quas facilis, partem cotidieque nam ut, te sea commune antiopam.\n\n",
                              "Minim veritus an eos, vim ad viris persius consulatu. ",
                              "Vis eruditi concludaturque ex, fuisset mentitum expetenda eum in. ",
                              "Pro quas ridens no, ea iudico veritus consetetur usu, dicit suscipit elaboraret at per. ",
                              "Per ad rebum appellantur, pro ne graeco consequuntur, cu vim viris persequeris eloquentiam.\n\n",
                              "Quis audire aliquam ad nam, virtute dolorum pri in, liber tempor sea ne. ",
                              "Sit ei saepe petentium, et pro tempor reprimique mediocritatem, eirmod nostrud scriptorem vix id. ",
                              "Ex nec lorem fugit, sea et integre platonem, ei sit putant utamur. ",
                              "Duo prompta feugait menandri eu, ex nonumy ignota usu, et cum mazim affert utinam."
    END IF
    IF  mr_wizard.agree IS NULL THEN
        LET mr_wizard.agree = "N"
    END IF
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepWelcomeValid()
#------------------------------------------------------------------------------#
    IF  mr_wizard.agree = "N" THEN
        CALL log0030_processa_mensagem("Para continuar é preciso que você leia e aceite os termos de uso.","exclamation",0)
        RETURN FALSE
    END IF
    RETURN TRUE
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepSelect()
#------------------------------------------------------------------------------#
    DEFINE l_wiz_container VARCHAR(10)
    DEFINE l_pnl_reference VARCHAR(10)
    DEFINE l_ltm_reference VARCHAR(10)
    DEFINE l_lbl_reference VARCHAR(10)
    DEFINE l_cmp_reference VARCHAR(10)
    LET l_wiz_container = _ADVPL_get_property(m_wiz_reference,"WIZARD_CONTAINER_REFERENCE")
    LET l_pnl_reference = _ADVPL_create_component(NULL,"LPANEL",l_wiz_container)
    CALL _ADVPL_set_property(l_pnl_reference,"ALIGN","CENTER")
    LET l_ltm_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",l_pnl_reference)
    CALL _ADVPL_set_property(l_ltm_reference,"MARGIN",TRUE)
    CALL _ADVPL_set_property(l_ltm_reference,"COLUMNS_COUNT",1)
    LET l_lbl_reference = _ADVPL_create_component(NULL,"LLABEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_lbl_reference,"TEXT","Selecione a próxima etapa:")
    LET l_cmp_reference = _ADVPL_create_component(NULL,"LRADIOGROUP",l_ltm_reference)
    CALL _ADVPL_set_property(l_cmp_reference,"ADD_ITEM","PROCESS","Etapa de Processamento")
    CALL _ADVPL_set_property(l_cmp_reference,"ADD_ITEM","FINISH","Etapa de Finalização")
    CALL _ADVPL_set_property(l_cmp_reference,"ENABLE",TRUE)
    CALL _ADVPL_set_property(l_cmp_reference,"VARIABLE",mr_wizard,"steps")
    # Aplica o leiaute.
    CALL _ADVPL_set_property(l_ltm_reference,"APPLY_LAYOUT")
    RETURN l_pnl_reference
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepSelectNext()
#------------------------------------------------------------------------------#
    RETURN mr_wizard.steps
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepProcess()
#------------------------------------------------------------------------------#
    DEFINE l_wiz_container VARCHAR(10)
    DEFINE l_pnl_reference VARCHAR(10)
    DEFINE l_ltm_reference VARCHAR(10)
    DEFINE l_lbl_reference VARCHAR(10)
    DEFINE l_cmp_reference VARCHAR(10)
    LET l_wiz_container = _ADVPL_get_property(m_wiz_reference,"WIZARD_CONTAINER_REFERENCE")
    LET l_pnl_reference = _ADVPL_create_component(NULL,"LPANEL",l_wiz_container)
    CALL _ADVPL_set_property(l_pnl_reference,"ALIGN","CENTER")
    LET l_ltm_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",l_pnl_reference)
    CALL _ADVPL_set_property(l_ltm_reference,"MARGIN",TRUE)
    CALL _ADVPL_set_property(l_ltm_reference,"COLUMNS_COUNT",1)
    LET l_lbl_reference = _ADVPL_create_component(NULL,"LLABEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_lbl_reference,"TEXT","Processando, por favor aguarde.")
    # Indica que o próximo componente será expansível.
    CALL _ADVPL_set_property(l_ltm_reference,"EXPANSIBLE",TRUE)
    LET l_cmp_reference = _ADVPL_create_component(NULL,"LPANEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_cmp_reference,"ALIGN","CENTER")
    LET m_prg_reference = _ADVPL_create_component(NULL,"LPROGRESSBAR",l_cmp_reference)
    CALL _ADVPL_set_property(m_prg_reference,"ALIGN","TOP")
    CALL _ADVPL_set_property(m_prg_reference,"HEIGHT",40)
    CALL _ADVPL_set_property(m_prg_reference,"MAX_VALUE",3)
    # Aplica o leiaute.
    CALL _ADVPL_set_property(l_ltm_reference,"APPLY_LAYOUT")
    RETURN l_pnl_reference
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepProcessEvent()
#------------------------------------------------------------------------------#
    DEFINE l_ind SMALLINT
    CALL _ADVPL_set_property(m_wiz_reference,"ENABLE_ALL_BUTTONS",FALSE)
    # Reinicializa a barra de progresso.
    CALL _ADVPL_set_property(m_prg_reference,"VALUE",0)
    FOR l_ind = 1 TO 3
        SLEEP 2
        CALL _ADVPL_set_property(m_prg_reference,"VALUE",l_ind)
        CALL _ADVPL_LOG_refreshDisplay()
    END FOR
    CALL _ADVPL_set_property(m_wiz_reference,"ENABLE_ALL_BUTTONS",TRUE)
END FUNCTION
#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepFinish()
#------------------------------------------------------------------------------#
    DEFINE l_wiz_container VARCHAR(10)
    DEFINE l_pnl_reference VARCHAR(10)
    DEFINE l_ltm_reference VARCHAR(10)
    DEFINE l_lbl_reference VARCHAR(10)
    LET l_wiz_container = _ADVPL_get_property(m_wiz_reference,"WIZARD_CONTAINER_REFERENCE")
    LET l_pnl_reference = _ADVPL_create_component(NULL,"LPANEL",l_wiz_container)
    CALL _ADVPL_set_property(l_pnl_reference,"ALIGN","CENTER")
    LET l_ltm_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",l_pnl_reference)
    CALL _ADVPL_set_property(l_ltm_reference,"MARGIN",TRUE)
    CALL _ADVPL_set_property(l_ltm_reference,"COLUMNS_COUNT",1)
    LET l_lbl_reference = _ADVPL_create_component(NULL,"LLABEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_lbl_reference,"TEXT","Mais informações sobre este componente você encontra na TDN em:")
    LET l_lbl_reference = _ADVPL_create_component(NULL,"LLABEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_lbl_reference,"TEXT","<a href='http://tdn.totvs.com.br/display/FRAMJOI/LGX+-+LWizardhttp://tdn.totvs.com.br/display/FRAMJOI/LGX+-+LWizard'>http://tdn.totvs.com.br/display/FRAMJOI/LGX+-+LWizard</a>")
    CALL _ADVPL_set_property(l_lbl_reference,"CLICK_EVENT","wiz0001_openTDN")
    CALL _ADVPL_set_property(l_ltm_reference,"ADD_EMPTY_ROW")
    LET l_lbl_reference = _ADVPL_create_component(NULL,"LLABEL",l_ltm_reference)
    CALL _ADVPL_set_property(l_lbl_reference,"TEXT","Obs.: você poderá clicar em ""Voltar"" para recomeçar o processamento.")
    # Aplica o leiaute.
    CALL _ADVPL_set_property(l_ltm_reference,"APPLY_LAYOUT")
    RETURN l_pnl_reference
END FUNCTION


#------------------------------------------------------------------------------#
FUNCTION wiz0001_stepFinishBack()
#------------------------------------------------------------------------------#
    RETURN "WELCOME"
END FUNCTION


#------------------------------------------------------------------------------#
FUNCTION wiz0001_openTDN()
#------------------------------------------------------------------------------#
    CALL LOG_previewInBrowser("http://tdn.totvs.com.br/display/FRAMJOI/LGX+-+LWizard")
END FUNCTION

Observações

  • É possível determinar a quantidade máxima de THREADs que serão executadas a partir de uma THREAD pai, para não sobrecarregar o servidor de aplicação, através da chave de PROFILE logix.threads.max.
  • É possível emitir mensagens de LOG específicas deste componente, auxiliando em testes ou em resoluções de problemas, para isso a chave de PROFILE logix.threads.debug precisa estar definida com o valor 1 (ligado).