PowerBuilder — заполнение элементов в дереве с помощью PFC

У меня есть окно, унаследованное от pfc_w_sheet, и оно содержит древовидную структуру, унаследованную от u_tv. Ниже приведен скрипт внутри события открытия окна. Сначала у него был только 1 аргумент, и древовидное представление успешно заполнялось и отображало элементы. Но когда окно данных: d_app_usermenu1 было изменено, было добавлено внутреннее соединение и аргумент поиска user_id. И la_arg[2] также был добавлен в событие открытия Windows, древовидное представление не смогло заполнить элементы во время выполнения. Выяснилось, что возвращаемое значение в tv_main.of_SetDatasource равно -2, что означает, что объекту DataWindow не назначены какие-либо ключевые столбцы, это соответствует примечаниям в pfc_u_tv. и я пошел проверить ниже строку скрипта, которая вернула значение -2. of_CreateKey в основном добавляет вычисляемый столбец к объекту окна данных, который будет содержать все объединенные вместе ключи. Это необходимо, чтобы иметь возможность найти уникальную строку, это следует из примечаний в pfc_u_tv.

// Add a computed column to the DataWindow object that will
// contain all the keys concatenated together.  This is necessary
// to be able to find a unique row.
If of_CreateKey(inv_ds[ai_Level].ds_obj) = -1 Then
    // No key columns were defined
    inv_ds[ai_Level].s_DataWindow = ""
    Destroy inv_ds[ai_Level].ds_obj
    Return -2
End if

Любая идея о том, как справиться с этим или каким-то обходным путем? Цель состоит в том, чтобы получить элементы или меню, которые были назначены для определенного идентификатора пользователя, поэтому мне нужно иметь внутреннее соединение в SQL-запросе окна данных.

//Window's Open Event
Any la_arg[]
tv_main.of_SetDatasource(1, "d_app_usermenu1", SQLCA, "menu_name", "", FALSE, 1, 1)
tv_main.of_SetDatasource(2, "d_app_usermenu2", SQLCA, "menu_name", ":parent.1.parent_name", FALSE, 2, 2)
is_userid = Upper(Trim(gnv_App.of_getUserID( )))
la_arg[1] = '0'
la_arg[2] = is_userid
tv_main.of_InitialRetrieve(la_arg)

person RedHat    schedule 05.03.2015    source источник


Ответы (1)


Откройте окно данных в dw painter.

Перейдите в «Строки» > «Обновить свойства» и выберите хотя бы один столбец в списке «Уникальные ключевые столбцы». Сохраните и повторите проверку.

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

Всякий раз, когда вы редактируете запрос окна данных и получаете сообщение "PB изменил спецификации обновления" - это первое, что вам нужно проверить...

-Пол Хоран-
SAP

person NoazDad    schedule 05.03.2015