Повторное использование оператора SQL в PeopleCode для таблицы подсказок
У меня есть страница в 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();