Header Web
Logo_PHC_Software
Manuais
Exemplos De Eventos

Vão ser apresentados alguns exemplos, onde se pretende dar a conhecer a funcionalidade dos eventos e o raciocínio que lhes está associado.
    AoIntroduzir AposCancelar AposCriarGrelha
    AposIntroduzir AposOnLoad AposPreRender BoAposActualizarRef e FtAposActualizarRef AposDefinirMenu AoPagarUnicre AposFechar /ul>

    Ao usufruir da aplicação PHC CS Web, com gama Advanced ou Enterprise, ainda tem disponíveis os seguintes eventos:

      BoAposAlterarValorEmLinha FoAposAlterarValorEmLinha e FtAposAlterarValorEmLinha /ul>


      AoIntroduzir
        No exemplo apresentado o evento utilizado é AoIntroduzir. Este vai fazer com que seja mostrada uma mensagem ao utilizador. No texto desta mensagem vai existir um link, feito em HTML, para o monitor do conhecimento técnico, que é uma das opções da aplicação PHC CS Suporte extranet web.
        Para isso, o evento deve ser configurado da seguinte forma:
        Ecrã: PAFORM
        Reação ao evento: Programa Interno
        Nome do evento: AoIntroduzir
        Ordem do evento: 1
        Expressão:



        dim mform as webcontrollib.mainform = mpage
        Mform.MetodoMensagem("Antes de introduzir o pedido de assistência por favor consulte o <a href=kbmon.aspx >monitor do conhecimento </a> para ter a certeza que o problema ainda não foi reportado.<br> Poderá já existir uma ou mais soluções para o problema. <br> Obrigado.")




      AposCancelar
        Este exemplo é dedicado às Encomendas (ecrã: encform). O evento envia um e-mail para determinada(s) pessoa(s) após um utilizador (cliente) ter cancelado uma encomenda.
        Para isso, o evento deve ser configurado da seguinte forma:
        Assunto: Cancelamento de encomenda via NET
        Conteúdo do e-mail (com a opção é um programa ativa):



        dim mnome as string = webcontrollib.xcuser.clnome()
        dim mcampo3 as webcontrollib.nossocampotextbox
        mcampo3=mpage.findcontrol("conteudo").findcontrol("campos").findcontrol("etotaldeb")
        dim retval as string =""
        retval="Encomenda para (Nome da sua empresa) via NET CANCELADA : <br /><br />"
        retval+="<b>Nome :</b>" + mnome +"<br />
        retval+="<b>Valor :</b>" + mcampo3.value + "<br />
        return retval




      AposCriarGrelha
        Para ecrãs com grelhas como por exemplo o ecrã de Procura de Artigos e Serviços (STVLIST) do Front Web, existe agora o evento AposCriarGrelha, que corre logo a seguir a ser criada a grelha nas páginas que possuem o objeto grelha. Este evento apenas corre se existirem Objetos internos adicionados na grelha.

        De notar, que caso a página para a qual se codifica este evento tiver mais do que uma grelha, este evento corre tantas vezes quantas as grelhas que a página tiver. Portanto o código do evento terá que ter isto em conta, isto é, estar preparado para testar quais das grelhas já está construída e quais das grelhas que já foram modificadas.

        Veja-se o seguinte exemplo, destinado ao ecrã "STVLIST".
        Assume-se que o utilizador já tenha criado na Framework um objecto interno para ser adicionado á grelha que aparece com os artigos na página "STVLIST" do Front Web.

        Supondo que esse objeto fica com o título "MinhaColuna" ele será adicionado automaticamente pela aplicação no último lugar (última coluna) da grelha.
        O que se pretende com este evento é Trocar a posição das colunas "Minhacoluna" e "Designação".
        O código do evento será o seguinte:



        ' Instanciar o objeto da grelha
        Dim MyGrid as WebControlLib.NossoGrid = mpage.Master.findcontrol("conteudo").FindControl("grid1")
        Dim ColunaParaRemover As Integer = -1
        For index As Integer = 0 To MyGrid.Columns.Count - 1
        If MyGrid.Columns(index).HeaderText = "Designação" Then
        ColunaParaRemover = index
        Exit For
        End If
        Next

        ' Procurar a coluna que desejamos mover pelo seu título
        Dim MyMoveColuna As Integer = -1
        For index As Integer = 0 To MyGrid.Columns.Count - 1
        If MyGrid.Columns(index).HeaderText = "Minhacoluna" Then
        MyMoveColuna = index
        Exit For
        End If
        Next

        ' Mover as colunas
        If MyMoveColuna <> -1 Then
        MyGrid.Columns.AddAt(ColunaParaRemover, MyGrid.Columns(MyMoveColuna))
        MyGrid.Columns.RemoveAt(MyMoveColuna + 1)
        MyGrid.Columns.AddAt(MyMoveColuna+1,MyGrid.Columns( ColunaParaRemover+1))
        MyGrid.Columns.RemoveAt(ColunaParaRemover + 1)
        End If




      AposIntroduzir
        Através de um evento "AposIntroduzir" poderá processar recibos C/C ao gravar. Este exemplo de "Processamento de recibos CC ao gravar" permite que o utilizador, ao clicar no botão gravar, seja direcionado automaticamente para o ecrã de "Processamento de Recibo".
        Para isso, o evento deve ser configurado da seguinte forma:
        Ecrã: REFORM
        Reação ao evento: Programa Interno
        Nome do evento: AposIntroduzir
        Ordem do evento: 1
        Expressão:



        Dim MyDTRE as DataRow
        MyDTRE = MAINFORMDATASET.TABLES("RE").rows(0)
        Dim MyDTRL as DataTable = MAINFORMDATASET.TABLES("rl")
        Dim sResult As String = ""
        sResult = bizlib.reclass.REEdit.REProcessar(MyDTRE, MyDTRL, TRUE, mpage)


        Package a incluir: Intranet



      AposOnLoad
        Através de um evento "AposOnLoad" poderá adicionar objetos a um determinado ecrã, por exemplo, no ecrã dos menus poderá acrescentar um link para uma página internet.
        Para isso, o evento deve ser configurado da seguinte forma:
        Ecrã: emeform (ecrã dos menus)
        Nome do Evento: AposOnLoad
        Reação ao evento: Programa Interno
        Package: Intranet
        Expressão:



        dim mp as webcontrollib.normalform=mpage
        dim x as new System.Web.UI.HtmlControls.HtmlAnchor
        x.href="../programs/gensel.aspx?pagina=produtos"
        x.innertext="Clique aqui para ver as condições de utilização do site."
        x.attributes.add("class","linkbutton")
        mp.findcontrol("conteudo").controls.add(x)




      AposPreRender
        No Evento AposPreRender pode alterar-se a visualização de determinado objeto. Veja-se o seguinte exemplo que retira o campo Zona do ecrã de "Clientes", ou seja, "Clform".



        ' criar uma variável do mesmo tipo de objeto
        dim mobj as nossocampotabprg
        ' criar uma referência para o tipo de objecto
        mobj=mpage.master.findcontrol("conteudo").findcontrol("zona")
        ' modificar as propriedades de visível
        mobj.visible=false
        mobj.invisivelsempre=true




      BoAposActualizarRef e FtAposActualizarRef
        Para os Dossiers Internos e Documentos de Faturação existem os seguintes eventos, que correm quando a referência de uma das linhas de um documento é atualizada:
        FtAposActualizarRef
        BoAposActualizarRef

        A atualização de uma linha num destes documentos acontece quando é introduzida uma nova linha com uma referência, se preenche uma referência numa linha que tinha esse campo em branco, ou se altera a referência de uma linha para outra referência diferente.

        O evento FtAposActualizarRef está disponível para as linhas de documentos de faturação, nomeadamente no Gestão Web no ecrã FTFORM.

        O evento BoAposActualizarRef está disponível para as linhas de dossiers internos, nos seguintes packages e ecrãs:
          Front Web - ecrã: BOFORM, ENCFORM;
          CRM Web - ecrã BOFORM;
          Suporte intranet web - ecrã BOFORM.

        Cada um deste eventos disponibiliza um objeto que dá pelo nome de ObjPara e que contém por sua vez 3 objetos que são apontadores para as linhas de diversas tabelas envolvidas na atualização de uma referência. Todos esses apontadores são do tipo DataRow ou seja representam uma linha de dados Registo de uma determinada tabela.

        No evento FtAposActualizarRef o objeto ObjPara terá a seguinte estrutura:
          FtLinha - Aponta para a linha da tabela de cabeçalhos do documento de faturação que se está a criar/alterar;
          FiLinha - Aponta para a linha que se está a criar/alterar da tabela de linhas do documento de faturação;
          TdLinha - Aponta para a linha da tabela de configuração de documentos de faturação correspondente ao documento atual.


        Exemplo para o ecrã FTFORM:
        Alterar o preço unitário de uma linha de um documento de faturação baseado na referência escolhida:



        Dim MeuDados as bizlib.ftclass.ftaddreg.ActRefEventoClass
        MeuDados = ctype(ObjPara,bizlib.ftclass.ftaddreg.ActRefEventoClass)

        if MeuDados.Filinha("ref").ToString.Trim.ToUpper = "REFXPTO"
        ' Alterar o preço unitário
        MeuDados.Filinha("epv") = 48.2
        ' Calcular os valores da Linha
        bizlib.ftclass.ftaddreg.u_ftiliq(MeuDados.ftlinha("moeda"), MeuDados.tdlinha, MeuDados.filinha, MeuDados.ftlinha)
        end if



        No evento BoAposActualizarRef o objeto ObjPara terá a seguinte estrutura:
          BoLinha - Aponta para a linha da tabela de cabeçalhos do dossier interno que se está a criar/alterar;
          BiLinha - Aponta para a linha que se está a criar/alterar da tabela de linhas do dossier interno;
          TsLinha - Aponta para a linha da tabela de configuração de dossiers internos correspondente ao dossier atual.


        Exemplo para o ecrã BOFORM:
        Alterar o preço unitário de uma linha de um dossier interno independente da referência escolhida:



        Dim MeuDados as bizlib.boclass.boaddreg.ActRefEventoClass
        MeuDados = ctype(ObjPara,bizlib.boclass.boaddreg.ActRefEventoClass)
        ' Alterar o preço unitário
        MeuDados.Bilinha("edebito") = 35.6
        ' Calcular os valores da Linha
        bizlib.boclass.boaddreg.u_bottdeb(MeuDados.bolinha("moeda"), MeuDados.tslinha, MeuDados.bilinha, MeuDados.bolinha)




      AposDefinirMenu
        Para os Menus (ecrã: opcoesdomenu) existe um evento chamado AposDefinirMenu.
        Com este evento é possível redesenhar as opções do menu das diversas aplicações, por exemplo, se pretender que na aplicação Suporte extranet web, os utilizadores não vejam o menu de equipamentos, poderá fazer o seguinte:
        Reação ao evento: Programa Interno
        Package: Extranet
        Expressão:



        dim f as system.int32
        dim a as system.int32
        for f=0 to mainformdataset.tables(0).rows.count-1
        if mainformdataset.tables(0).rows(a).item("menu")="Equipamento"
        mainformdataset.tables(0).rows(a).delete
        else
        a=a+1
        end if
        next




      AoPagarUnicre
        No pagamento de documentos existe o evento AoPagarUnicre e deverá ser associado ao ecrã ftview.
        Com o evento é possível impedir o pagamento caso algum detalhe falhe (Por exemplo: verificar se o cliente tem todos os dados corretamente preenchidos)
        Desta forma passa a ser possível a criação de eventos de utilizadores do tipo "Programa Interno" com o retorno lógico em que refere se deverá prosseguir para o pagamento via UNICRE ou não.
        Quando o evento retorna falso a aplicação apresenta uma mensagem ao utilizador referindo:
        "Não é possível efetuar o pagamento via UNICRE."
        Nota: O evento terá de ser do tipo "Programa interno" e retornar um campo lógico (true/false). Caso não retorno um campo lógico ou retorne um campo lógico e este seja verdadeiro a aplicação prosseguirá para o pagamento via UNICRE.



      AposFechar
        Para os Pedidos de Assistência (ecrã: paform) existe um evento chamado AposFechar.
        Poderá ser criado um evento que envie um e-mail para determinada (s) pessoa(s) após o técnico ter fechado o pedido de assistência, em que o assunto diz:
        Pedido de Assistência Fechado do Cliente "X" e em que o conteúdo do e-mail é o "Problema reportado" e a "Solução dada pelo técnico responsável".
        Para tal, pode configurar a página e-mail da seguinte forma:
        Assunto: (com a opção é um programa ativa)




        dim mcampo as webcontrollib.nossocampotextbox
        mcampo=mpage.findcontrol("conteudo").findcontrol("campos").findcontrol("nome")
        dim retval as string="Pedido de Assistência Fechado do Cliente "+mcampo.value
        return retval


        Conteúdo: (com a opção é um programa) %> ativa)



        dim mcampo as webcontrollib.nossocampotextbox
        mcampo=mpage.findcontrol("conteudo").findcontrol("campos").findcontrol("nopat")
        dim mcampo2 as webcontrollib.nossocampoeditbox
        mcampo2=mpage.findcontrol("conteudo").findcontrol("campos").findcontrol("problema")
        dim mcampo3 as webcontrollib.nossocampoeditbox
        mcampo3=mpage.findcontrol("conteudo").findcontrol("campos").findcontrol("solucao")
        dim mcampo4 as webcontrollib.nossocampotabprg
        mcampo4=mpage.findcontrol("conteudo").findcontrol("campos").findcontrol("tecnnm")
        dim retval as string =""
        retval="Fecho de pedido de assistência técnica nº "+mcampo.value+""
        retval+="Problema :"+""
        retval+=mcampo2.value+""
        retval+="Solução :"+""
        retval+=mcampo3.value+""
        retval+="Técnico(a) : "+mcampo4.value+""
        return retval




      AposFechar
        Para os Dossiers Internos, Documentos de Faturação, Compras e Encomendas existem os seguintes eventos, que são executados depois do utilizador alterar um dos campos que aparecem nas grelhas destes ecrãs:
          FTAposAlterarValorEmLinha para o FtForm - ecrã de "Documentos de Faturação";
          BoAposAlterarValorEmLinha para o BoForm e EncForm - ecrã de "Dossiers Internos e ecrã de Encomendas";
          FoAposAlterarValorEmLinha para o FoForm - "ecrã de Compras".

        Os campos que podem despoletar o evento são os seguintes, de acordo com os ecrãs:
          - Quantidade;
          - Preço Unitário;
          - Armazém;
          - Lote;
          - Cor;
          - Tamanho;
          - Descontos;
          - Quantidade Alternativa;
          - Unidade da Quantidade Alternativa;
          - Objetos Internos colocados nas grelhas do FtForm, Boform e EncForm.


        Cada um destes eventos disponibiliza um objeto com o nome de "ObjPara".
        No caso do evento FtAposAlterarValorEmLinha, o ObjPara contém:
          FtLinha - objeto do tipo DataRow que contém a linha da tabela de cabeçalhos de documentos de faturação;
          FiLinha - objeto do tipo DataRow que contém a linha da tabela de linhas de documentos de faturação;
          TdLinha - objeto do tipo DataRow que contém a linha para a tabela de configuração de documentos de faturação correspondente ao documento atual.


        No caso do evento BoAposAlterarValorEmLinha, o ObjPara contém:
          BoLinha - objeto do tipo DataRow que contém a linha da tabela de cabeçalhos de dossiers internos;
          BiLinha - objeto do tipo DataRow que contém a linha da tabela de linhas de dossiers internos;
          TsLinha - objeto do tipo DataRow que contém a linha para a tabela de configuração de dossiers internos correspondente ao documento atual.


        No caso do evento FoAposAlterarValorEmLinha, o ObjPara contém:
          FoLinha - objeto do tipo DataRow que contém a linha da tabela de cabeçalhos de compras;
          FnLinha - objeto do tipo DataRow que contém a linha da tabela de linhas de compras.

        Exemplo de evento para o ecrã de Documentos de Faturação que altera o valor de desconto quando a quantidade é igual ou superior a 2 para uma dada referência:



        Dim ftEventClass as bizlib.ftclass.ftaddreg.ActRefEventoClass = ctype(ObjPara,bizlib.ftclass.ftaddreg.ActRefEventoClass)
        if ftEventClass.filinha("ref") = "A001" AndAlso CType(ftEventClass.filinha("qtt"), Integer) >=2
        then
        ftEventClass.filinha("desconto") = 5
        end if
        ' Calcular os valores da Linha
        bizlib.ftclass.ftaddreg.u_ftiliq(ftEventClass.ftlinha("moeda"), ftEventClass.tdlinha, ftEventClass.filinha, ftEventClass.ftlinha)
        'Calcular totais
        bizlib.ftclass.ftaddreg.acttotais("", "", True, ftEventClass.filinha.table, ftEventClass.ftlinha, ftEventClass.tdlinha)



        Exemplo de evento para o ecrã de Dossiers Internos que preenche o campo armazém de acordo com uma dada configuração do dossier:



        Dim ftEventClass as bizlib.ftclass.ftaddreg.ActRefEventoClass = ctype(ObjPara,bizlib.ftclass.ftaddreg.ActRefEventoClass)
        if ftEventClass.filinha("ref") = "A001" AndAlso CType(ftEventClass.filinha("qtt"), Integer) >=2
        then
        ftEventClass.filinha("desconto") = 5
        end if
        ' Calcular os valores da Linha
        bizlib.ftclass.ftaddreg.u_ftiliq(ftEventClass.ftlinha("moeda"), ftEventClass.tdlinha, ftEventClass.filinha, ftEventClass.ftlinha)
        'Calcular totais
        bizlib.ftclass.ftaddreg.acttotais("", "", True, ftEventClass.filinha.table, ftEventClass.ftlinha, ftEventClass.tdlinha)



        Exemplo de evento para o ecrã de Compras que não deixa colocar descontos em documentos certificados:



        Dim foEventClass as bizlib.foclass.foaddreg.ActRefEventoClass = ctype(ObjPara,bizlib.foclass.foaddreg.ActRefEventoClass)

        if webcontrollib.xcutil.a_cm1tiposaft(foEventClass.folinha("doccode").ToString) isNot String.Empty
        foEventClass.fnlinha("desconto") = 0
        end if

        bizlib.foclass.foaddreg.foiliq(foEventClass.folinha.Item("moeda"), foEventClass.fnLinha, foEventClass.folinha)








      Criação de Eventos