SAS Data Integration Studio: проблемы с отправкой почты (войти прикрепить)

Я неопытный пользователь SAS Data Integration Studio.

Я хотел бы получать по электронной почте информацию о статусе работы. Использование «Обработки статуса» и действия «Отправить письмо» (из вариантов задания) меня не удовлетворяет. Прежде всего - (возможно?) я не могу прикрепить лог к ​​этому письму.

В SAS Enterprise Guide я разработал и протестировал код для отправки электронной почты с прикрепленным логином и некоторой полезной информацией (дата-время, список ошибок) в теле письма:

      %let mail = "test@test.com";
%let path_error = /home/ ... .log;

filename msg email
 to =           (&maile)
 subject =      "SAS Message Test"
 attach =       "&path_error.";

data _null_;
 dttm = put(datetime(),nldatm.);

 infile "&path_error.";
 input;

 file msg;
 if _n_ = 1 then do;
    put "Date time: " dttm;
    put;
    put "Full log in attach.";
    put "There are some ERRORs and WARNINGs:";
    put;
    end;
 if substr(_infile_,1,5) = "ERROR" then 
    put _infile_;
 if substr(_infile_,1,7) = "WARNING" then 
    put _infile_;
run;

Этот код работает нормально - я получаю полную почту со списком ошибок и предупреждений. В журнале я вижу:

      NOTE: 268 records were read from the infile "[...].log"

Но как реализовать этот код (особенно чтение оператором infile) в DIS?

Я изменил параметры работы:

  1. Precode - помещает лог во внешний файл; имя журнала содержит имя задания и дату и время:
      %let path = /home/[...]/log_&etls_jobName._%sysfunc(datetime(), datetime.).log; 
proc printto log="&path.";
run;
  1. Почтовый индекс — я использовал код из Enterprise Guide:
      %let address = "test@test.com";
%let message = problems with &etls_jobName;

         filename sendMail email 
                to=         (&address) 
                subject=        "ETL Process problem: &etls_jobName." 
                attach=     "&path."; 

            options nosyntaxcheck;  

         data _null_; 
            dttm = put(datetime(),nldatm.);

                infile "&path.";
                input;

                file sendMail; 
                 if _n_ = 1 then do;
                    put "Date time: " dttm;
                    put;
                    put "Full log in attach.";
                    put "There are some ERRORs and WARNINGs:";
                    put;
                    end;
                 if substr(_infile_,1,5) = "ERROR" then 
                    put _infile_;
                 if substr(_infile_,1,7) = "WARNING" then 
                    put _infile_;
         run; 

По сути, я получаю электронное письмо с прикрепленным журналом, но пустым телом. В прикрепленном логе вижу:

      NOTE: 0 records were read from the infile 

У меня есть несколько вопросов:

  1. Почему 0 записей???
  2. Когда я удаляю input;выписка из почтового индекса и запуск задания. Я получаю электронное письмо с надписью «Дата, время/Полный журнал в приложении/Есть некоторые ОШИБКИ и ПРЕДУПРЕЖДЕНИЯ» в теле. Почему они удаляются где inputработает в коде?
  3. Электронная почта не отправляется без options nosyntaxcheck;в коде. Почему?

Спасибо за ответы. С уважением, Михал

1 ответ

Обычный способ остановки шага данных — когда он считывается после конца ввода (либо считываются необработанные данные, либо осуществляется доступ к наборам данных).

Поэтому переместите свой блок _N_=1 ДО инструкции INPUT. Возможно, вы захотите изменить формулировку сообщения об ошибках и предупреждениях. Или подождите, прежде чем писать, пока не узнаете, что есть записи для чтения.

      %let address = "test@test.com";
%let message = problems with &etls_jobName;

filename sendMail email 
  to=(&address) 
  subject="ETL Process problem: &etls_jobName." 
  attach="&path."
; 

options nosyntaxcheck;  

data _null_; 
  dttm = put(datetime(),nldatm.);

  file sendMail; 
  if _n_ = 1 then do;
    put "Date time: " dttm;
    put;
    put "Full log in attach.";
    put "There are some ERRORs and WARNINGs:";
    put;
  end;

  infile "&path.";
  input;
  if _n_ = 1 then do;
    put "There are some ERRORs and WARNINGs:";
    put;
  end;
  if substr(_infile_,1,5) = "ERROR" then put _infile_;
  if substr(_infile_,1,7) = "WARNING" then put _infile_;
run; 
Другие вопросы по тегам