Seleccione a instrução do caso, verifique se o texto é nulo e/ou vazio

Estou a trabalhar com os relatórios Crystal de 2016. Eu tenho uma fórmula com uma declaração select case, e eu gostaria que um desses casos verificasse para null; meus dados têm 4 Condições, e um deles é null. No entanto, para ser minucioso, eu também gostaria de verificar para uma string vazia "". Eu tentei deixar uma declaração de catchall no final, mas isso não detecta null. Eu tentei isNull e is isNull, e obter um erro sobre o tipo de dados errado (número esperado) ou que eu preciso de uma comparação operador.

Isto é o que estou a tentar fazer.
select ({CRV_RoomAttributeValues.ScaledAnalogValue})
  case IsNull: "No Connection"
  case 0: "Offline"
  case 1: "Partially Online"
  case 2: "Online"
  default: "No connection";
Este é o código que tenho agora.
select ({CRV_RoomAttributeValues.ScaledAnalogValue})
  case is IsNull({CRV_RoomAttributeValues.ScaledAnalogValue}): "No Connection"
  case 0: "Offline"
  case 1: "Partially Online"
  case 2: "Online"
  default: "No connection";
Eu vi várias pessoas na net recomendarem testes para {[[3]} Primeiro, por causa das idiossincrasias dos Relatórios de Cristal.

Como faço o teste para null numa declaração de caso?

Author: YetAnotherRandomUser, 2017-02-27

2 answers

A instrução select executa comparações directas, por isso os valores de cada instrução de caso devem sempre ter o mesmo tipo de dados com a sua variável/campo seleccionado. O IsNull é boolean, por isso o que está a tentar fazer só funcionaria se o seu {CRV_RoomAttributeValues.ScaledAnalogValue} fosse do tipo boolean. Eu acho que a maneira mais fácil (há muitas maneiras, mas na minha opinião eles são todos estranhos, então eu não vou incluí-los aqui) para alcançar o seu objetivo é fazer a verificação de valor null explicitamente no início assim:

If(Isnull({CRV_RoomAttributeValues.ScaledAnalogValue})) Then
   "No Connection"
Else 
    Select {CRV_RoomAttributeValues.ScaledAnalogValue}
       case 0: "Offline"
       case 1: "Partially Online"
       case 2: "Online"
       default: "No connection";

Em Sintaxe Cristalina

 1
Author: jambonick, 2017-05-17 01:37:05

Acabei por fazer o seguinte:

select ({CRV_RoomAttributeValues.ScaledAnalogValue})
  case 0: "Offline"
  case 1: "Partially Online"
  case 2: "Online"
  default: "No connection";
 0
Author: YetAnotherRandomUser, 2017-05-16 18:01:33