Всем привет!
В этой статье будет описан способ выводить сообщение об ошибке со своим русским текстом в SAS Customer Intelligence Studio (SAS CI).
В одной из предыдущих статей было описано, как обрабатывать ошибки в SAS Macro. Также в статье были упомянуты, какие переменные отвечают за ошибки в SAS.
Случается, что необходимо остановить работу программы и сообщить пользователю какое-то сообщение. Когда же речь идёт о SAS Customer IntelligenceStudio, то появляется ряд моментов как правильно это осуществить.
Чтобы искусственно вызвать ошибку, требуется поменять значение автоматической макропеременной SYSCC на целое значение, которое больше 1.
Например, присвоим значение 500:
%let SYSCC = 500;
Создадим PROCESS NODE (узел процесс) в SAS Customer Intelligence Studio и посмотрим что получится:
Таким образом, значение SYSCC отображается в окне ошибки.
Макро переменная MAMsg отвечает за параметр текста ошибки.
Присвоим следующее значение:
%let MAMsg = HELLO WORLD!;
Теперь видно и текст ошибки. И вроде бы ничего, но выглядит это немного странно – всё на русском, кроме сообщения.
Попробуем присвоить значение переменной русские текст:
%let MAMsg = ПРИВЕТ!;
Попробуем разобраться, почему так происходит. Для этого возьмём функцию KCVT и преобразуем слово ПРИВЕТ в кодировку UTF-8.
Несложными манипуляциями можно выяснить, что слово ПРИВЕТ изначально в кодировке ANSI, но когда передаётся из SAS в Java программы, преобразуется в кодировку UTF8.
Более того, если немного покопаться в исходниках программы, то можно обнаружить код, который отвечает за вывод этой ошибки. В принципе, можно сделать соответствующую доработку и перекомпилировать исходники, но сложность такой доработки очень высока.
Кстати, текст который стандартно отображается при любой ошибке также «зашит» в Java в качестве UTF кода и представлен в виде кодов букв.
Например, слово ПРИВЕТ будет отображено в виде:
Но, к сожалению, если этот код подать в качестве ошибки, он так и останется в том же виде:
В итоге, после долгого времени экспериментирования был найден способ вывести русские буквы в тексте ошибки, используя функцию KCVT в макросе:
На этом всё!
Пользуйтесь на здоровье!