pfc_w_sheet から継承されたウィンドウがあり、u_tv から継承されたツリービューが含まれています。以下は、ウィンドウの open イベント内のスクリプトです。最初は、引数が 1 つしかなく、ツリービューに項目が正常に入力されて表示されました。しかし、datawindow: d_app_usermenu1 が変更されると、内部結合と検索引数 user_id が追加されます。また、la_arg[2] は Windows のオープン イベントにも追加されており、ツリービューは実行時に項目を設定できませんでした。tv_main.of_SetDatasource の戻り値が -2 であることがわかりました。これは、データウィンドウ オブジェクトにキー カラムが割り当てられていなかったことを意味します。-2 値を返すスクリプトの行の下を確認しました。of_CreateKey 関数は基本的に、連結されたすべてのキーを含む datawindow オブジェクトに計算列を追加します。これは、一意の行を検索できるようにするために必要です。これは、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
これまたはいくつかの回避策に対処する方法について何か考えはありますか? 目的は、特定のユーザー ID に割り当てられたアイテムまたはメニューを取得することです。そのため、datawindow の 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)