Manuais
PHC GO Como criar regras de negócios para parâmetros da aplicação?
 
Para criar uma nova regra de négocio para os parâmetros da aplicação, comece por aceder à Toolbox do PHC GO ( menu Menu > GO Studio > Toolbox), e navegue até ao ecrã da peça Regras de Negócio.

De seguida, carregue em  
Introduza regra de negócio
 , e através do campo Entidade, selecione a opção Parâmetros.

Os restantes campos do ecrã Regras de negócio funcionam da mesma maneira como para outras entidades, estando a única diferença nas opções do campo Tipo de Código, estando apenas disponíveis as seguintes opções para a entidade Parâmetros:

  • Ao gravar: Efetua as validações antes de serem gravadas as alterações efetuadas aos parâmetros da aplicação, permitindo assim interromper a gravação caso uma condição não seja cumprida nas validações.

  • Após gravar: Efetua as validações depois de gravadas as alterações efetuadas aos parâmetros da aplicação.

  • Ao consultar: Efetua as validações aquando da consulta dos parâmetros da aplicação. Estas validações são executadas não só quando acedemos aos parâmetros da aplicação vindos de outro ecrã da aplicação, mas também após terem sidos gravadas com sucesso alterações aos parâmetros - visto que o utilizador passou do modo de edição para o modo de consulta.


Para melhor exemplificar o funcionamento destas regras, disponibilizamos nos separadores seguintes, um exemplo para cada uma das opções do campo Tipo de Código disponíveis:

Exemplo

Ao guardar alterações efetuadas nos parâmetros da aplicação, queremos que sejam despoletadas diferentes ações, de acordo com o valor preenchido no campo "Nome da entidade avenças (singular) (ge_avenca)":

  • Ao preencher o campo com o texto "TOP", a aplicação não deve nem efetuar alterações ao campo, nem despoletar nenhuma mensagem informativa em específico (ou seja, deverá só ser exibida a mensagem padrão do PHC GO).

  • Ao preencher o campo com o texto "T", a aplicação deve substituir o texto por "TOP", além de ser exibida uma mensagem de aviso a informar o utilizador das alterações.

  • Ao preencher o campo com o texto "NOT", a aplicação não deixa guardar as alterações efetuadas, além de ser exibida uma mensagem de erro a informar da regra de negócio.

  • Ao preencher o campo com outro texto, as alterações devem ser guardadas com sucesso, devendo ser exibida uma mensagem informativa a indicar o utilizador que o texto é diferente de "TOP".
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
' this is just for intellisense,
' since the itemVO parameter is declared as an object type
dim paraItem as ParameterVO = itemVO

' IsEqual determines if the value of the "description" field is equal to a given text,
' it is a better alternative than using
' descricao.trim.tolower = "u9999_zzzmy_paratxt" or descricao.trim.toupper = "U9999_ZZZMY_PARATXT",
' ie it is Case-insensitive
' Another example
if paraItem.IsEqual("ge_avenca")

Select Case paraItem.valor

Case "TOP"
' Return an empty list of messages so that the frontend displays its own success message.

Case "T"
' The parameter is successfully saved, but with your value, and a warning message type is returned.
paraItem.valor = "TOP"
listMsg.add(new MsgWarning("O valor foi automaticamente modificado para TOP."))

Case "NOT"
' The parameter is not saved, and a error message type is returned.
listMsg.add(new MsgError("O valor NOT não é uma opção válida."))

Case Else
' The parameter is successfully saved and a information message type is returned.
listMsg.add(new MsgInfo("Relembramos que o valor definido não é TOP."))

End Select

end if



tips_and_updatesDicas

É também possível selecionar parâmetros provenientes de addons, bastando para tal alterar a linha 10 do exemplo acima, identificando o campo desejado:

10
if paraItem.IsEqual("u9999_zzzFIELD1")

Neste exemplo, estamos a apontar para o campo "FIELD1", do addon com o identificativo "zzz", desenvolvido pelo KitParceiro nº9999.

 

Exemplo

Após guardar alterações efetuadas nos parâmetros da aplicação, queremos que o campo "Permite introduzir clientes com Número de Contribuinte em branco (cl_ncvazio)" seja ativo/desativo, de acordo com o valor preenchido no campo "Nome da entidade avenças (singular) (ge_avenca)":

  • Caso o valor do campo seja igual a "Subscrição", a aplicação vai alterar o valor do campo "Permite introduzir clientes com Número de Contribuinte em branco (cl_ncvazio)" para true.

  • Caso o valor do campo seja igual a "Quotas", a aplicação vai alterar o valor do campo "Permite introduzir clientes com Número de Contribuinte em branco (cl_ncvazio)" para false.

' this is just for intellisense,
' since the itemVO parameter is declared as an object type
dim paraItem as ParameterVO = itemVO

' IsEqual determines if the value of the "description" field is equal to a given text,
' it is a better alternative than using
' descricao.trim.tolower = "u9999_zzzmy_paratxt" or descricao.trim.toupper = "U9999_ZZZMY_PARATXT",
' ie it is Case-insensitive
if paraItem.IsEqual("ge_avenca")

' find the record we want to change
dim changeItem as ParameterVO = SDK.Parameters.GetParameterVO("cl_ncvazio")
if changeItem isNot nothing

' EqualsWithIgnoreCase is the operator "=" but with case-insensitive
if paraItem.valor.EqualsWithIgnoreCase("Subscrição")

' isFalse is used on logical type parameters only,
' it's a better alternative than using paraItem.value = "N"
if changeItem.isFalse

' SetValue is an easy way to assign any type of value to the "value" field which is of type string
' it's a better alternative than set paraItem.value = "S"
changeItem.SetValue(True)

' Save the change
Save(changeItem)
end if
end if

if paraItem.valor.EqualsWithIgnoreCase("Quotas")

' isTrue is used on logical type parameters only,
' it's a better alternative than using paraItem.value = "S"
if changeItem.isTrue
changeItem.SetValue(False)
Save(changeItem)
end if
end if

end if

end if


 

Exemplo

Ao consultar os parâmetros da aplicação, queremos que o campo "Nome da entidade avenças (plural) (ge_avencas)" fica escondido/desabilitado para edição, de acordo com o valor presente no campo "Nome da entidade avenças (singular) (ge_avenca)":

  • Caso o valor do campo seja igual a "Esconde", a aplicação vai deixar de exibir o campo "Nome da entidade avenças (plural) (ge_avencas)".

  • Caso o valor do campo seja igual a "Readonly", a aplicação vai desabilitar para edição o campo "Nome da entidade avenças (plural) (ge_avencas)".

' find source
dim sourceItem as ParameterVO = (From pk in itemsVO.Cast(Of ParameterVO) where pk.IsEqual("ge_avenca")).FirstOrDefault
if sourceItem is nothing
return listMsg
end if

' find target
dim targetItem as ParameterVO = (From pk in itemsVO.Cast(Of ParameterVO) where pk.IsEqual("ge_avencas")).FirstOrDefault
if targetItem is nothing
return listMsg
end if

' EqualsWithIgnoreCase is the operator "=" but with case-insensitive
if sourceItem.valor.EqualsWithIgnoreCase("Esconde")
targetItem.visible = False
else
targetItem.visible = True
end if

' for the disable example we use a simple way to write the command
targetItem.disabled = sourceItem.valor.EqualsWithIgnoreCase("Readonly")