У меня есть окно, унаследованное от 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)