✏️ Explanatory Question
Method validateWrite() will just check mandatory fields and is triggered when the record . Checks made by validateWrite() are the same as the super() call in validateField().So if your condition is not related to the value an application user enters in a specific field, you should put the validation in validateWrite().
/// <summary>
/// Validate record
/// </summary>
/// <returns></returns>
/// <remarks>
/// atnylaProgram 2017-08-16 rAnsari
/// </remarks>
public boolean validateWrite()
{
boolean ret = true;
atnylaProgramTable atnylaProgramTable;
ret = this.validateData();
// record-level validations
if (ret)
{
ret = this.checkDateOverlap();
}
if (ret)
{
ret = super();
}
return ret;
}
/// <summary>
/// Validate input string against a format string
/// </summary>
/// <param name = "_inputStr"></param>
/// <returns>true if input matches format, else false</returns>
/// <remarks>
/// atnylaProgram 2017-08-16 rumman
/// </remarks>
static boolean checkFormat(str _inputStr, str _formatStr)
{
//-------------------------------
// # = numeric only
// & = alpha only
// ? = alphanumeric only
// * = any char
// else match char in formatStr
//-------------------------------
int iLen = strLen(_inputStr);
int fLen = strLen(_formatStr);
int idx;
char iChar;
char fChar;
boolean ret = true;
if(!_formatStr || !_inputStr)
{
ret = true; // must have both to validate
return ret;
}
if (iLen != fLen)
{
ret = false; // not the same length
return ret;
}
for (idx=1; idx<=flen; idx++)
{
iChar = subStr(_inputStr, idx, 1);
fChar = subStr(_formatStr, idx, 1);
switch (fChar)
{
case "#" : // numeric
if (!match(':d',iChar))
{
ret = false;
}
break;
case "&" : // alpha
if (!match(':a',iChar))
{
ret = false;
}
break;
case "?" : // alphanumeric
if (!match(':n',iChar))
{
ret = false;
}
break;
case "*" : // any char
if (!match('?',iChar))
{
ret = false;
}
break;
default: // must match char in format
if (iChar != fChar)
{
ret = false;
}
break;
}
}
return ret;
}