Обновление IG после сохранения, если проверки пройдены - PullRequest
0 голосов
/ 27 марта 2019

У меня есть интерактивная сетка с некоторыми данными, когда пользователи добавляют новую строку, она не отображается (обнаружил, что это потому, что я написал специальную процедуру для сохранения, и я не возвращаю PK).

Поэтому я настроил динамическое действие при сохранении [Интерактивная сетка] с условием на стороне сервера. Тип: Встроенные ошибки проверки НЕ отображаются, с действительным действием Обновить область.

Но условие, по-видимому, работает.При добавлении строки, которая проходит валидацию, она обновляется очень хорошо, но при добавлении строки, которая не проходит валидацию, появляется ошибка валидации, и появляется всплывающее окно с вопросом, хочу ли я продолжить работу после внесения изменений (пытается обновить).

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

Я также изменил первичный ключ IG на ROWID из PK по умолчанию из моей таблицы, если это может помочь с пользовательской процедурой сохранения.

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

PROCEDURE save_table (s_variable1 IN table.variable1%TYPE
              , s_variable2 IN table.variable2%TYPE
              , row_status IN VARCHAR2)IS          
BEGIN
  CASE row_status
    WHEN 'C' THEN
      INSERT INTO table(variable1, variable2)
      VALUES (variable1_seq.nextval, s_variable2);

    WHEN 'U' THEN
      UPDATE table
         SET variable2= s_variable2
       WHERE variable1= s_variable1;

    WHEN 'D' THEN
      DELETE FROM table
       WHERE variable1= s_variable1;
  END CASE;

END save_table;

Если кто-то может сказать мне самый простой способ исправить это, чтобы вернуть PK (variable1) или ROWID, чтобы IG обновлял эту строку, поэтому мне даже не нужноДинамическое действие.

РЕДАКТИРОВАТЬ: Нашел самый простой способ сделать это, чтобы изменить процедуру и выяснить, как:

PROCEDURE save_table (s_variable1 IN OUT table.variable1%TYPE
              , s_variable2 IN table.variable2%TYPE
              , row_status IN VARCHAR2)IS
a_variable1 table.variable1%TYPE;          
BEGIN
  CASE row_status
    WHEN 'C' THEN
      a_variable1 := variable1_seq.nextval;
      INSERT INTO table(variable1, variable2)
      VALUES (a_variable1, s_variable2)
      RETURNING a_variable1 INTO s_variable1;

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

1 Ответ

0 голосов
/ 27 марта 2019

Предложение RETURNING INTO позволяет нам возвращать значения столбцов для строк, на которые влияют операторы DML.Вы можете использовать это в своей процедуре для возврата значения столбца, как показано ниже.

 DECLARE
  l_id t1.id%TYPE;
BEGIN
  INSERT INTO t1 VALUES (t1_seq.nextval, 'FOUR')
  RETURNING id INTO l_id;
  COMMIT;

  DBMS_OUTPUT.put_line('ID=' || l_id);
END;

Подробнее о Returning into см. Эту ссылку

...