The null test are as follows:
if field in (null,"") - will test if a field is null or blank.
Another option is to set a value for the field if null nvl(field,"replacement value")
When designing fields a default value for example unknown or n/a can help which will then be treated like text. We see this a lot with check boxes which are null by default and ideally should be initialised with a value. I understand Risk Level is a system field and the above functions should help. Let me know if not and I will have a play.
Thank you Alasdair!
You gave me enough to go on to keep trying. In the end I started testing each expression before putting them together. The trick seemed to be to have the null evaluation first, of course I may not have had the syntax exactly spot on either!?!
Here is our final Validation Rule:
$(Status == "Logged" && IsNull(RiskLevel) ||
Status != "Logged" ||
Status == "Logged" && RiskLevel not in ("Medium", "High") ||
Status == "Logged" && RiskLevel in ("Medium", "High") && CABReviewDate >= CurrentDate())
We are still testing but this order appears to let everything through that we want. Again, thanks for your help!