Повторное использование оператора SQL в PeopleCode для таблицы подсказок - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть страница в PeopleSoft, в которой есть несколько похожих полей. Каждый из них использует таблицу подсказок, для которой установлено динамическое представление. При изменении одного поля оно заполняет свойство SQLText двух других полей, включая только что выбранное значение. Поскольку этот SQL-оператор по сути каждый раз один и тот же, я надеялся, что смогу сделать что-то вроде этого:

/* UM_SUBPLAN_SQL contains something to the effect of:
   SELECT DISTINCT a.acad_sub_plan 
      , a.descr 
   FROM ps_acad_subpln_tbl a 
   WHERE a.institution =:1 
      AND a.acad_plan =:2 
*/
&loSQL = GetSQL(SQL.UM_SUBPLAN_SQLTEXT, "UMS04", "ENT-BS");
&lcSQLText = &loSQL.Value;
&loSQL.Close();
RECORD.FIELD.SqlText = &lcSQLText;

К сожалению, свойство SQL.Value возвращает строку, содержащую переменные связывания: 1 и: 2, а не привязываемые значения. Есть ли способ получить эту строку с подставленными значениями, если не выполнять конкатенацию строк того же рода, что я пытаюсь уйти отсюда? Спасибо.

Редактировать: Ну, это было не совсем то, что я хотел, но я пошел со следующим. Это работает, если немного словеснее, чем я надеялся.

&loSQL = GetSQL(SQL.UM_SUBPLAN_SQLTEXT, "X", "X");
&lcSQLText = Substitute(&loSQL.Value, ":1", "'" | RECORD.FIELD1.Value | "'")
&lcSQLText = Substitute(&lcSQLText, ":2", "'" | RECORD.FIELD2.Value | "'");
&loSQL.Close();

Если у вас есть более чистое решение, я бы с удовольствием его услышал. Еще раз спасибо!

Отредактируйте снова: комментарий Питера ниже позволил мне немного прояснить это. Спасибо!

&loSQL = GetSQL(SQL.UM_SUBPLAN_SQLTEXT, "X", "X");
&lcSQLText = ExpandSqlBinds(&loSQL.Value, RECORD.FIELD1.Value, RECORD.FIELD2.Value);
&loSQL.Close();

1 Ответ

0 голосов
/ 19 ноября 2018

Попробуйте ExpandSqlBinds и ExpandBindVar .

...