Как сохранить макет текстовой области HTML, когда он был в макропеременной SAS? - PullRequest
2 голосов
/ 05 июня 2019

Я создаю пользовательскую форму ввода для хранимого процесса SAS, которая создает отчет и отправляет его по почте.

На первом экране отображается форма, и у меня есть текстовая область, где пользователь сможет написать некоторые тексты, и этот текст будет отображаться над отчетом.Код текстовой области выглядит следующим образом:

<textarea col=10 row=10 name='textarea'> </textarea> 

Так, например, если мой пользователь хочет написать:

-Hello this is my first line.
-And my second line without point for example
- and a third.

Но после обработки в тексте введитепользователем и передают в SAS макропеременную &textarea, бланк сжимается и не учитывается (это нормально в SAS).Поэтому отображение текста в отчете при отправке формы не так, как хотелось бы, это всего лишь одна строка.

-Hello this is my first line. -And my second line without point for example - and a third.

Кроме того, мой пользователь может повторно выполнить форму для просмотра результата перед отправкой.и в текстовой области используется содержимое макропеременной.Такая же проблема.

Так как преодолеть поведение SAS?

Я думаю, что функция кодирования / декодирования html была бы решением, но нет.Я также подумал, что макропрограмма для воссоздания множества макропеременных (по одной на предложения) будет решением, но сложно обеспечить то, что будет использоваться пользователем в качестве разделителя предложения.Поэтому я отказался от этой идеи.

Если у кого-то есть идея или решение, я буду очень признателен.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Веб-приложение хранимых процессов SAS для запуска хранимых процессов будет поддерживать cr / lf, как указано в textarea

Рассмотреть этот хранимый процесс, хранящийся в папке метаданных сервера SAS Demo/TextArea, который захватывает комментарий в текстовой области:

data _null_;
  name = "&Comment";
  do i = 1 to length(name); * log each character and its ascii code;
    c = substr(name,i,1);
    b = rank(c);
    putlog i= c= b=;
  end;
run;

proc stream outfile=_webout; BEGIN
<html>
<head>
<title>Text Area test</title>
</head>
<body>
<form method=post>
Name: <input name=Name type="text" length=20><br />
Comment:<br />
<textarea name=Comment rows=10 cols=60></textarea><br />
<input type="submit">
</form>
</body>
</html>
;;;;

при вызове из браузера, с _debug=log как

http://mysasserver:mysasserverport/SASStoredProcess/do?_Program=/Demo/TextArea&_debug=log

и текстовой областью комментария, заполненной

This
is
my comment

и отправленный, журнал SAS, показанный на странице, покажет cr / lf, (13/10), которые были отправлены из новых строк текстовой области (для спецификации HTML браузера):

…
 COMMENT=This
is
my comment
…
i=1 c=T b=84
i=2 c=h b=104
i=3 c=i b=105
i=4 c=s b=115
i=5 c=
 b=13
i=6 c=
 b=10
i=7 c=i b=105
i=8 c=s b=115
i=9 c=
 b=13
i=10 c=
 b=10
i=11 c=m b=109
i=12 c=y b=121
i=13 c=  b=32
i=14 c=c b=99
i=15 c=o b=111
i=16 c=m b=109
i=17 c=m b=109
i=18 c=e b=101
i=19 c=n b=110
i=20 c=t b=116
0 голосов
/ 05 июня 2019

Вы должны добавить немного <br /> к своему коду, например:

<textarea col=10 row=10 name='textarea'>   <br /></textarea> 

Не уверен, что я говорю, но попробуйте, затем скажите мне, пожалуйста!

...