У меня есть страница в 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();