So zeigen Sie nur eine Teilmenge einer Tabelle an
-
27-10-2019 - |
Frage
Ich habe ein Problem beim Auffüllen einer Datentabelle mit den richtigen Daten.
Ich habe eine Datentabelle, die ich in einem Formular verwende. Es heißt userConfigProfiles. Es hat eine GroupId mit 2 FK-Spalten (dies verbindet sich mit UserGroupInfo) und corpProfileId (dies verbindet sich mit einer von mir erstellten Tabelle). Diese Daten in userConfigProfiles werden aus einem anderen Formular ausgefüllt und sind derzeit entsprechend ausgefüllt.
Das Problem ist, dass ich im SalesTable-Formular ein Dropdown-Menü erstellen muss, das eine Teilmenge der Zeilen in userConfigProfiles basierend auf den Benutzergruppen anzeigt, in denen sich der aktuelle Benutzer befindet.
Ich habe versucht, dies zu tun, indem ich der Tabelle userConfigProfiles im SalesTable-Formular den folgenden Code hinzufügte:
public void init()
{
userConfigProfiles.data(userConfigProfiles::find());
super();
}
Dann habe ich diese Suchmethode zur Tabelle selbst hinzugefügt:
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;
}
Es scheint jedoch, dass meine Suchmethode, obwohl sie aufgerufen wird und die richtigen Daten zurückgibt, keine Auswirkungen auf die Daten hat, die in die Dropdown-Liste in meinem Formular aufgenommen werden.
Meine Dropdown-Liste ist ein StringEdit-Feld mit einer DataSource von userConfigProfiles und einem DataField von corpProfileId.
Ich bin mir ziemlich sicher, dass es mehrere Möglichkeiten gibt, mein Problem zu lösen, und ich bin offen für alle, auch wenn dies bedeutet, dass ich meinen gesamten Code entferne und das Dropdown-Feld völlig anders mache.
Lösung
Erstellen Sie eine Abfrage mit der Tabelle UserConfigProfiles
mit einem vorhandenen Join (Eigenschaft joinMode
) zur Tabelle UserGroupList
, verwenden Sie die entsprechende Beziehung und fügen Sie dann einen Bereich für das Feld UserId
mit einem value
von (currentUserId())
hinzu.
Dieser Wert ist ein dynamischer Abfrageausdruck , der von der Klasse
Erstellen Sie abschließend eine Suche mit der Klasse SysTableLookup mithilfe Ihrer Abfrage.
Andere Tipps
Das mit Abstand beste Tutorial zu Suchmethoden ist Vanya:
http://kashperuk.blogspot.com/2009/04 / Lookup-Methoden-Tutorial-Benutzerdefinierte-Liste.html
Laden Sie sein Tutorial XPO herunter und verwenden Sie eine seiner Optionen für Ihr Formular.Ihr Code sieht ein bisschen wie ein Hack-Job aus.
Wenn Sie versuchen, eine Teilmenge von Datensätzen in der Tabelle anzuzeigen, sollten Sie die Abfrage () ändern. Wenn Sie jedoch versuchen, die angezeigten Werte aus einer Suche heraus zu ändern, würde ich seinen Blog-Beitrag lesen.