テーブルのサブセットのみを表示する方法
-
27-10-2019 - |
質問
データテーブルに正しいデータを入力する際に問題が発生します。
フォームで使用しているデータテーブルがあります。これは userConfigProfile と呼ばれます。これには、groupId (これは UserGroupInfo に結合します) と corpProfileId (これは私が作成したテーブルに結合します) の 2 つの FK 列があります。userConfigProfiles のデータは別のフォームから入力され、現在は適切に入力されています。
問題は、現在のユーザーが属する UserGroups に基づいて userConfigProfiles の行のサブセットを表示するドロップダウンを SalesTable フォームに作成する必要があることです。
SalesTable フォームのテーブル userConfigProfiles に以下のコードを追加してこれを実行しようとしました。
public void init()
{
userConfigProfiles.data(userConfigProfiles::find());
super();
}
次に、この find メソッドをテーブル自体に追加しました。
static public userConfigProfiles find()
{
userConfigProfiles userProfile;
UserGroupList userGroupList;
str 8 u = curUserId();
select *
from userProfile
order by userProfile.bdcProfileId
join userGroupList
where userProfile.groupId == userGroupList.groupId
&& userGroupList.userId == u;
return userProfile;
}
ただし、find メソッドが呼び出され、正しいデータが返されたとしても、フォームのドロップダウン リストに入るデータには影響していないようです。
私のドロップダウン リストは、userConfigProfiles の DataSource と corpProfileId の DataField を持つ StringEdit フィールドです。
問題を解決するにはいくつかの方法があると確信しており、コードをすべて削除してドロップダウン ボックスをまったく別の方法で実行することになる場合でも、どの方法でも受け入れるつもりです。
解決
テーブルを使用してクエリを作成する UserConfigProfiles
存在結合 (プロパティ joinMode
) テーブルへ UserGroupList
, 、適切なリレーションを使用して、フィールドに範囲を追加します UserId
とともに value
の (currentUserId())
.
この値は動的です クエリ式 クラスによって提供されるもの SysQueryRangeUtil.
最後にクラスを使用してルックアップを作成します SysTableLookup クエリを使用して。
他のヒント
ルックアップメソッドに関する最高のチュートリアルは、Vanya によるものです。
http://kashperuk.blogspot.com/2009/04/lookup-methods-tutorial-custom-list.html
彼のチュートリアル XPO をダウンロードし、あなたのフォームに彼のオプションの 1 つを使用してください。あなたのコードはハッキングジョブのように見えます。
テーブル上のレコードのサブセットを表示しようとしている場合は、query() を変更する必要がありますが、ルックアップから表示される値を変更しようとしている場合は、彼のブログ投稿を確認してください。