Conforme mencionado anteriormente, as entradas para a lógica de negócios são os eventos do mecanismo e os eventos de dados brutos.
Os eventos de dados brutos recebidos pela lógica de negócios são determinados pela função de registro na qual o código solicita um conjunto específico de eventos de dados brutos definidos pelo tipo de evento e identificadores de recurso.
Na lógica de negócios, o registro também associa uma sub-rotina definida pelo usuário que é executada para lidar com o evento de dados brutos quando um evento for recebido. (Por padrão, é OnXXXEvent, que deve ser renomeado para algo mais significativo.)
Os eventos do mecanismo são acionados pelo mecanismo de acordo com o contrato e as definições de métrica associadas. Quando o evento do mecanismo é acionado e recebido, o mecanismo executa o manipulador de eventos pertinente. Cada evento do mecanismo tem um manipulador de eventos implícito. Esses manipuladores de eventos são as funções e os procedimentos definidos no VBScript. O manipulador de eventos que controla o registro e a função “Resultado” devem ser implementados no código. Todos os outros manipuladores de eventos são opcionais. No entanto, a lógica de negócios não lida com eventos do mecanismo para os quais manipuladores de eventos não estão implementados. Portanto, é uma boa prática mantê-los no local (mesmo que não estejam em uso) para permitir melhorias no futuro.
Observação: ao escrever o script de lógica de negócios, é importante implementar todos os eventos do mecanismo para que seja possível abranger todas as possibilidades finais. Por exemplo, se uma definição de período de atividade não for aplicável durante a primeira etapa da implementação, mas será aplicável no futuro, todas as fórmulas precisarão ser alteradas. Portanto, é recomendável que o Especialista em lógica de negócios defina o comportamento "no período de atividade" e "fora do período de atividade" com antecedência, mesmo que inicialmente ele não seja aplicável, para que quando o comportamento for apresentado, as alterações necessárias no sistema sejam triviais.
A seguir, há vários eventos do mecanismo e seus manipuladores de eventos:

A seguir, estão as etapas seguidas pelo mecanismo de cálculo (serviço PslWriter) para processar uma única fórmula de lógica de negócios:
Observação: quando a versão do contrato for confirmada pela primeira vez e uma projeção tiver sido selecionada, a função Previsão será chamada, em vez da função Resultado. No entanto, isso ocorre apenas dessa vez para cada versão.
Durante cada ciclo de cálculo, o mecanismo avalia quais são os eventos do mecanismo e os eventos de dados brutos relevantes com base no período de cálculo. Primeiro, irá classificá-los por hora e, em seguida, enviá-los às fórmulas relevantes para cálculo. A hora do evento de dados brutos é sua data e hora, e a hora do evento do mecanismo é sua hora de acionamento. Em seguida, esses dois tipos de eventos são combinados em uma sequência de tempo e enviados para cálculo.
Os períodos dos eventos estão de acordo com a métrica local associada, mas o parâmetro de hora dos manipuladores de eventos (isto é, OnPeriodStart (Time)) e a data e hora do evento de dados brutos estão de acordo com o valor em UTC. O mecanismo os compara de acordo com seus valores em UTC, de forma a usar um ponto de referência constante.
Exemplo:
Se a diferença de fuso horário de UTC de uma métrica for de duas horas (por exemplo, GMT+2), e um evento de abertura de incidente tiver data e hora de 10h00, dentro do mecanismo a data e hora que o manipulador de eventos usará na verdade será modificada de forma adequada e realmente inicia às 8h00 UTC. Supondo que o conector esteja configurado para usar esse mesmo fuso horário, os eventos de dados brutos também terão 2 horas reduzidas para UTC no banco de dados. Quando os eventos são passados para a lógica de negócios, o agente de cálculo responsável pelo cálculo dos eventos no período que inicia às 10h00 usará a hora em UTC para os eventos, que será das 8h00 em diante. No entanto, se você usar a mensagem out.log no código para imprimir as datas e horas, ela mostrará a data e hora modificada para UTC e, portanto, mostrará 8h00, apesar do período especificado (de acordo com a métrica) ser às 10 da manhã.
No seguinte requisito de cálculo, é importante converter a data e hora do evento antes de usá-lo:
Se uma métrica for para calcular o número de incidentes que foram fechados no mesmo dia em que foram abertos, será necessário comparar a hora de abertura e de fechamento de cada incidente. Se a hora de abertura e de fechamento de um incidente cair no mesmo dia (e em um período de atividade definido), o incidente será contado.
Há a possibilidade de que durante o processo de modificação do incidente para UTC a partir de sua hora local original, o dia mude (isto é, novamente usando GMT+2). Um incidente aberto à 1h será modificado para 23h no dia anterior em UTC. Desse modo, não será contado mesmo que devesse ter sido. Essa é uma situação em que a hora primeiro deve ser convertida de volta para a hora local da métrica e apenas depois ser comparada. Nesse caso, use o método GetLocaleTime(utcTime). Esse método converte uma hora determinada em um fuso horário UTC para o fuso horário da métrica local.
A seguir, há o código do manipulador de eventos:
Sub OnIncidentEvent(eventDetails)
If dateDiff("d",Tools.GetLocaleTime(eventDetails.time),_
Tools.GetLocaleTime(eventDetails("ClosedAt)))=0 then
CountIncidents=CountIncidents+1
End If
End Sub
| Copyright © 2012 CA. Todos os direitos reservados. | Enviar email à CA Technologies sobre este tópico |