Возьмите значение из одной формы и передайте ее другой - PullRequest
0 голосов
/ 11 июля 2019

Я начал изучать PLSQL Oracle и попытался найти способ скопировать значение из одной формы в другую.У меня есть две формы, сначала form (A) сделать некоторые вычисления, и в некоторых случаях этот расчет не может быть отредактирован в форме (A).Я пришел к мысли сделать form (B) и передать эти данные из form (A), отредактировать их и передать обратно form (A) Вот мой код и изображение моей идеи.

begin
    set_block_property('POL',UPDATE_ALLOWED,PROPERTY_TRUE);

        update POL set  
        POLICA =: TENDER.POLICA,
        VOZAC = TENDER.VOZAC,
        BR_VOZACA = TENDER.BR_VOZACA,
    NEZGODA1 = TENDER.NEZGODA1,
        PUTNICI = TENDER.PUTNICI,
        BR_PUTNIKA = TENDER.BR_PUTNIKA,
        NEZGODA = TENDER.NEZGODA,
        AO_PLUS_LIMIT = TENDER.AO_PLUS_LIMIT,
        AO_PLUS_PREMIJA = TENDER.AOPLUSPREMIJA,
        PRAVNA_ZASTITA_LIMIT = TENDER.PRAVNA_ZASTITA_LIMIT,
        PRAVNA_ZASTITA_PREMIJA = TENDER.PRAVNA_ZASTITA_PREMIJA,
        LOM_STAKLA_PREMIJA = TENDER.LOM_STAKLA_PREMIJA,
        TROSKOVI_LIJECENJA = TENDER.TROSKOVI_LIJECENJA,
        TROSKOVI_LIJECENJA_PREMIJA = TENDER.TROSKOVI_LIJECENJA_PREMIJA

        WHERE POLICA =:TENDER.BRPOLICE;

end;

Я пробую вариант: Копировать значение из свойств элемента, но я получаю ошибку

FRM-30047: Cannot resolve item reference 

Я не знаю, где я допустил ошибку?Любое предложение или комментарий?

1 Ответ

2 голосов
/ 11 июля 2019

Формы обычно взаимодействуют двумя следующими способами:

  • параметр
  • глобальная переменная

Глобальная переменная проще в использовании;в форме A вы просто устанавливаете его на :global.polica := :pol.polica; и используете его в форме B как (например)

select ...
from some_table
where polica = :global.polica;

Глобальные переменные всегда строки (ихтип данных VARCHAR2), размер которого ограничен (это может зависеть от версии Forms; я знаю, что в некоторых версиях он ограничен 255 символами).

Параметр несколько сложнее в использовании, так как вы должны сначала создать его (в узле «Параметры» Навигатора объектов), но он позволяет вам выбрать тип данных (так что вы нене ограничивается строк только).Вы устанавливаете его значение так же, как значение глобальной переменной: :parameter.polica := :pol.polica;, но вам нужно передать его, чтобы сформировать B в CALL_FORM (или OPEN_FORM) списке параметров.Например:

Функция, которая создает список параметров (будет использоваться позже в примере):

function make_param_list (p_name in varchar2)
  return paramlist 
is
  pl_id     paramlist;
  w_button  number;
begin
  pl_id := get_parameter_list(p_name);
  if not id_null(pl_id) then
     destroy_parameter_list(pl_id);
  end if;

  pl_id := create_parameter_list(p_name);

  if id_null(pl_id) then
     message('DESIGN ERROR - PARAMLIST');
     if name_in('system.mode') <> 'QUERY' then
        raise form_trigger_failure;
     end if;
  else
     return pl_id;
  end if;
end;

Пример;list_id относится к параметрам, о которых мы говорим:

declare
  list_id ParamList;
begin
  list_id := make_param_list('input_params');

  Add_Parameter(list_id, 'ugo_id'         , TEXT_PARAMETER, :ugo.ugo_id);
  Add_Parameter(list_id, 'query_only_mode', TEXT_PARAMETER, :parameter.query_only_mode);

  call_form('ugoa', no_hide, no_replace, no_query_only, no_share_library_data, list_id);
end;

Более подробная информация в справочной системе Forms Online.

...