Exemplos de cálculos de janela
Esta seção contém alguns outros exemplos de cálculos de janela com explicações de como eles funcionam. Primeiro, no entanto, existe uma versão estendida do requisito de sentença e o cálculo do modelo correspondente com espaços reservados. Você pode usar isso para ajudá-lo a escrever cálculos básicos.
Quando o TRIGGER_FIELD no TRIGGER_OBJECT está definido para VALOR, eu desejo mudar a PROPRIEDADE de ALVO para verdadeiro/falso.
O cálculo que corresponde a este requisito de sentença é:
import System
static def GetAttributeValue(Incident):
PropertyState = false
if TRIGGER_OBJECT.TRIGGER_FIELD != null and TRIGGER_OBJECT.TRIGGER_FIELD._Title == 'VALOR':
PropertyState = true
return String.Format(":SetPROPERTY(ALVO, {0});", PropertyState)
Substituir os espaços reservados do requisito de sentença no cálculo e, em seguida, adicionando TRIGGER_FIELD ao painel de Dependências no editor de Cálculo dá-lhe o cálculo necessário. Também recomendamos que você substitua todas as referências para "PropertyState" com um nome mais descritivo para a variável.
O restante desta seção fornece exemplos baseados neste cálculo e explica a sua lógica. Mais tarde exemplos estendem o cálculo ainda mais.
As indentações nestes cálculos são muito importantes e definir o escopo das funções. Portanto, se você copiar exemplos neste documento, certifique-se de que as indentações corretas são mantidas quando você colá-los no editor do cálculo.
Usando se declaração para redefinir os valores
O exemplo a seguir estende o exemplo dado em Configurar os cálculos da janela para que o campo de impacto é definido para ser não-obrigatório e torna-se obrigatório somente se o campo de Urgência está definido Urgente. Se o campo estiver desmarcado (definida como nula), ou definido para outro valor, então o campo de Impacto é definido para ser não obrigatório novamente.
Nosso requisito de sentença para isso é:
Quando a Urgência é definida como Urgente, eu quero mudar SetMandatory de Impacto para verdadeiro.
Isto nos diz que o campo acionador é de Urgência, o atributo alvo é o Impacto e a função da janela é :SetMandatory(,).
Uma boa estrutura para um cálculo de Janela é:
- definir uma variável no início que especifica o valor típico de verdadeiro ou falso para a função de janela
- em seguida, construir uma declaração que muda a variável quando os valores adequados são selecionados
- finalmente retornar a função de Janela usando a variável para definir seu parâmetro de verdadeiro/falso
Por exemplo:
import System
static def GetAttributeValue(Incident):
MandatoryUrgency = false
if Incident._IncidentUrgency != null and Incident._IncidentUrgency._Title == 'Urgente':
MandatoryUrgency = true
return String.Format(":SetMandatory(_Impact, {0});", MandatoryUrgency)
A terceira, quarta e últimas linhas têm um recuo simples; linha cinco tem um recuo duplo.
Linha três cria uma variável chamada MandatoryUrgency e define seu valor para falso. Este é o mais comum, valor padrão para o cálculo.
Linha quatro testa para ver se a Urgência é definida comoUrgente (Incident._IncidentUrgency._Title == 'Urgente'). Observe que, antes do cálculo poder testar o valor do atributo Incident._IncidentUrgency._Title, a linguagem de cálculo requer nós que teste que o objeto de atributo não é nulo (Incident._IncidentUrgency! = null).
Se a linha quatro é verdadeiro, e a Urgência não é nulo, e está definido para Urgente, em seguida, linha cinco executa e define o valor da variável MandatoryUrgency para verdadeiro.
Finalmente, a linha seis executa e define o valor do atributo de cálculo. Porque estamos fazendo referência a uma variável, a linguagem de cálculo requer que nós geramos o string de retorno usando uma função String. Format. Este é fora do formulário String.Format("function(attribute, {0});", variable) – o {0} é substituído pela variável quando o string é gerado, para nos dar:SetMandatory(_Impact,MandatoryUrgency);. Por padrão, MandatoryUrgency é falso, então o campo de impacto não é obrigatório. No entanto, se a Urgência é definida como Urgente, então as condições especificado na linha quatro são cumpridos e linha cinco executa. Isso então define a variável MandatoryUrgency para verdadeiro, então o campo Impacto torna-se obrigatória.
Observe que as linhas três e cinco usam um sinal de igual único = enquanto linha quatro usa dois sinais de igual = =.
= significa "fazer isso igual a", enquanto == significa "Isso é igual?"
Atualizando os dois campos com um cálculo
O exemplo seguinte mostra como se pode atualizar dois campos usando um único cálculo, usando um cálculo semelhante à do exemplo anterior. Neste exemplo, os campos de Item de configuração e do Tipo de item de configuração aparecem apenas se a Categoria é definida como Hardware.
Nosso requisito de sentença para isso é:
Quando Categoria é definida para Hardware, eu quero mudar SetHidden do Item da configuração E Tipo de item de configuração para falso.
Isso nos diz que o campo acionador é Categoria, os atributos alvo são Item da configuração E Tipo de item de configuração, e a função da janela é :SetHidden(,).
import System
static def GetAttributeValue(Incident):
HideCI = true if Incident.Category != null and Incident.Category.FullName == 'Hardware':
HideCI = false
return String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{1});", HideCI, HideCI)
A terceira, quarta e sexta linhas têm um recuo simples; linha cinco tem um recuo duplo. A longa linha seis aparece em uma única linha no editor de cálculo.
Linha três define a variável HideCI para verdadeiro.
Linha quatro testa que a Categoria não é nula e é definida como Hardware.
Se a linha de quatro é verdadeiro, então linha de cinco é executado e define HideCI para falso.
Finalmente, a linha seis executa e define o valor do atributo de cálculo para String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{1});", HideCI, HideCI). Por padrão, HideCI é verdadeiro, então os ConfigurationItemType e ConfigurationItem campos são ocultos. No entanto, se a Categoria é definida como Hardware, então as condições especificadas na linha quatro são cumpridas e linha cinco executa. Este então define a variável HideCI para falso, então o ConfigurationItemType e ConfigurationItem campos se tornam visível.
Quando você usa o String.Format para retornar mais de uma função que usa variáveis, você se refere as variáveis na função como números entre chaves e em seguida, adicione as variáveis em ordem depois. Por exemplo:
String.Format("function(attribute, {0});function(attribute, {1});function(attribute, {2});", variable 0, variable1, variable 2)
:SetHidden também mostra e oculta a etiqueta associada ao atributo alvo. No entanto, você não pode usar :SetHidden para etiquetas estáticas adicionadas a partir da árvore de Controles no Gerenciador de janelas.
Usando funções diferentes com um acionador
Os exemplos anteriores têm sempre retornado apenas uma função do Windows: alterando o estado obrigatório de um ou mais campos, ou alterando o estado oculto. Este exemplo mostra como você pode atualizar duas funções diferentes usando um único cálculo. Este exemplo estende o exemplo anterior, com o Item de Configuração e campos Tipo de Item de Configuração aparecendo se a Categoria está definido Hardware, mas também com o Tipo de Item de Configuração para ser obrigatória.
Nosso requisito de sentença para isso é:
Quando Categoria é definida como Hardware, eu quero mudar SetHidden de Item de Configuração E Tipo de Item de Configuraçãopara falso E para mudar SetMandatory de Tipo de Item de Configuração para verdadeiro.
Isso nos diz que o campo acionador é Categoria, os atributos alvo são Item da Configuração e Tipo de item de configuração, e a função da janela é :SetHidden(,) e SetMandatory(,).
import System
static def GetAttributeValue(Incident):
HideCI = true
MandatoryCI = false
if Incident.Category != null and Incident.Category.FullName == 'Hardware':
HideCI = false
MandatoryCI = true
return String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{1});:SetMandatory(ConfigurationItemType,{2});", HideCI, HideCI, MandatoryCI)
A terceira, quarta, quinta e oitava linhas têm um recuo simples; linha seis e sete tem um recuo duplo. A longa linha oito aparece em uma única linha no editor de cálculo.
A linha três define a variável HideCI para verdadeiro – por padrão queremos que o IC e campos Tipo de IC para ser oculto.
A linha quatro define a variável MandatoryCI para falso – por padrão queremos que o campo Tipo de IC para ser não obrigatório.
Se linha cinco é verdadeiro, então ambas linhas seis e sete executam e define HideCI como falso e MandatoryCI para verdadeiro. Ambas estas linhas executam porque eles têm a mesma indentação no cálculo.
Finalmente, a longa linha oito executa e passa o valor de HideCI para as duas primeiras funções e o valor de MandatoryCI para a terceira função.
Porque você está enviando a mesma variável para as duas primeiras funções, você poderia reescrever a linha oito como:
return String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{0});:SetMandatory(ConfigurationItemType,{1});", HideCI, MandatoryCI)
Usando funções diferentes com base nos valores de um acionador
Este exemplo mostra como você pode usar uma função diferente dependendo do valor selecionado no atributo acionador. Se a Prioridade é definida como Alta, então o campo Motivo passa a ser obrigatória e editável; se a Prioridade é definida como Baixa, então o campo Motivo é feita não obrigatório e somente-leitura; caso contrário, o campo Motivo é deixado no estado padrão.
Este cálculo necessita um atributo com o Nome definido como _reason a ser adicionado para o objeto do Incidente.
Nosso requisito de sentença para isso é:
Quando Prioridade é definida como Alta, eu quero mudar SetMandatory de Motivo para verdadeiro E para SetReadOnly de Motivo a ser falso; quandoPrioridade é definida como Baixa, eu quero mudar SetReadOnly de Motivo para verdadeiro E para SetMandatory de Motivo a ser falso.
Isto nos diz que o campo acionador é de Prioridade, o atributo alvo é o Motivo e a funções da janela são :SetMandatory(,) e SetReadOnly(,). Podemos também escrever:
Em todas as outras vezes, eu quero ambos SetMandatory e SetReadOnly de Motivo a ser falso.
Isto nos diz que o valor padrão para ambos SetMandatory e SetReadOnly de Motivo é falso.
import System
static def GetAttributeValue(Incident):
MandatoryReason = false
ReadOnlyReason = false
if Incident.Priority != null and Incident.Priority.Title == 'Alta':
MandatoryReason = true
elif Incident.Priority != null and Incident.Priority.Title == 'Baixa':
ReadOnlyReason = true
return String.Format(":SetMandatory(_reason, {0});:SetReadOnly(_reason, {1});", MandatoryReason, ReadOnlyReason)
A terceira, quarta, quinta, sétima e nona linhas têm um recuo simples; linha seis e oito tem um recuo duplo. A longa linha nove aparece em uma única linha no editor de cálculo.
A linha três define a variável MandatoryReason para falso – por padrão queremos que o campo Motivo para ser não obrigatório.
A linha quatro define a variável ReadOnlyReason para falso – por padrão queremos que o campo Motivo para ser somente-leitura.
Se a linha cinco é verdadeiro, e o campo Prioridade é definido como Alta, então a linha seis executa e define MandatoryReason para verdadeiro.
Se a linha cinco NÃO for "true", a linha sete será executada.Linhas elif ("else if") são executadas apenas se a linha precedente for falsa.Se esta linha é verdadeira, e o campo Prioridade é definido como Baixa, então a oito executa e define ReadOnlyReason para verdadeiro.
Finalmente, linha nove executa usando os valores definidos de MandatoryReason e ReadOnlyReason.
Isso significa que, por padrão, MandatoryReason e ReadOnlyReason são falso, então o campo Motivo não é obrigatório nem somente-leitura. Se, no entanto, a Prioridade é definida como Alta, então MandatoryReason é verdadeiro (linhas cinco e seis), mas ReadOnlyReason é ainda falso, então Motivo é obrigatório mas não somente-leitura. Se a Prioridade é definida como Baixa, então ReadOnlyReason é verdadeiro (linhas sete e oito), mas MandatoryReason é falso, então Motivo é de somente-leitura mas não obrigatório.
Usando datas em cálculos
Este exemplo faz o campo Motivo obrigatório se a data selecionada no campo Data Necessária é definida para dentro de sete dias da data atual.
Este cálculo necessita um atributo com o Nome definido como _reason e _daterequired a ser adicionado para o objeto do Incidente. Lembre-se de não atualizar o mesmo campo com os cálculos diferentes.
Nosso requisito de sentença para isso é:
Quando Data Necessária é definida como dentro de 7 dias de hoje, eu quero mudar SetMandatory de Motivo para verdadeiro.
Isto nos diz que o campo acionador é Data Necessária, o atributo alvo é o Motivo e a função da janela é :SetMandatory(,).
import System
static def GetAttributeValue(Incident):
MandatoryReason = false
if Incident._daterequired != null and Incident._daterequired < DateTime.Today.AddDays(7):
MandatoryReason = true
return String.Format(":SetMandatory(_reason,{0});", MandatoryReason)
A terceira, quarta e últimas linhas têm um recuo simples; linha cinco tem um recuo duplo.
A linha três cria uma variável chamada MandatoryReason e define este para falso – por padrão queremos que o campo Motivo para ser não obrigatório.
A linha quatro usa um Método .Net chamado .AddDays para determinar se aData Necessária é menor que a data de hoje mais 7. Se for, então a linha cinco executa e define MandatoryReason para verdadeiro.
Linha seis então gera a função apropriada do SetMandatory.
Para obter mais informações sobre como usar Métodos .Net em seus cálculos, consulte o site da Comunidade do Ivanti.