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.


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




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