Mit einem benutzerdefinierten Feld des Typs „Auswahlfenster“ können Sie ein Fenster mit
abrufen (Suche), beispielsweise das Fenster Kunden. Wenn Sie ein solches Feld definieren, stehen in der Feldauswahl der benutzerdefinierten Registerkarte zwei Felder zur Verfügung, die Sie auf der Registerkarte separat ablegen können: ein Feld mit dem Code und ein Feld mit dem Namen oder der Bezeichnung des entsprechenden Auswahlfensters.
Sie müssen beachten, dass Rechte für benutzerdefinierte Registerkarten von den Rechten von anderen Registerkarten abweichen können. Nachstehend finden Sie eine Übersicht der Rechte von gemeinsamen und persönlichen Registerkarten und benutzerdefinierten Feldern.
Persönliche benutzerdefinierte Registerkarten
Persönliche benutzerdefinierte Registerkarten werden nur dem Benutzer angezeigt, der sie erstellt. Benutzer können auf einer persönlichen benutzerdefinierten Registerkarte nur Felder von Registerkarten ablegen, für die sie mindestens über Anzeigerechte verfügen. Felder von Registerkarten, für die sie nicht über Rechte verfügen, fehlen auf der untergeordneten Registerkarte Feldauswahl. Für persönliche benutzerdefinierte Registerkarten verfügen Benutzer für alle Felder über Änderungsrechte. Es ist also möglich, dass Benutzer für Felder auf der ursprünglichen Registerkarte über Anzeigerechte, aber für dieselben Felder auf der persönlichen benutzerdefinierten Registerkarte über Änderungsrechte verfügen.
Wenn sich Rechte ändern, kann sich eine Situation ergeben, dass Felder auf einer persönlichen benutzerdefinierten Registerkarte zu finden sind, die von einer Registerkarte stammen, für die der Benutzer nicht mehr über die entsprechenden Rechte verfügt. Der Benutzer hat dann zwar keinen Zugriff mehr auf die ursprüngliche Registerkarte, kann aber die Felder derselben auf der benutzerdefinierten Registerkarte doch noch verwenden. Mit der Verarbeitung Rechte benutzerdefinierte Registerkarten kontrollieren können Sie das kontrollieren und ggf. beheben.
Gemeinsame benutzerdefinierte Registerkarten
Welche Benutzer eine gemeinsame benutzerdefinierte Registerkarte verwenden können, hängt von dem Programmcode ab, den Sie mit der Registerkarte verknüpfen. Ohne verknüpften Programmcode können alle Benutzer des Unternehmens die Felder auf der gemeinsamen benutzerdefinierten Registerkarte anzeigen oder ändern. Mit einem verknüpften Programmcode legen Sie fest, welche Benutzer(-gruppen) über Anzeige- bzw. Änderungsrechte für die Registerkarte verfügen sollen. Es ist möglich, dass ein Benutzer für dasselbe Feld auf der ursprünglichen Registerkarte über Anzeigerechte und für die gemeinsame benutzerdefinierte Registerkarte über Änderungsrechte verfügt, aber es ist auch umgekehrt möglich (der Benutzer verfügt über mehr Rechte für die ursprüngliche Registerkarte als für die benutzerdefinierte Registerkarte).
Sie können auf einer gemeinsamen benutzerdefinierten Registerkarte Felder von Registerkarten ablegen, für die es nicht erforderlich ist, dass Benutzer über Rechte verfügen. Durch den mit der Registerkarte verknüpften Programmcode wird auch hier festgelegt, über welche Rechte die Benutzer für die gemeinsame benutzerdefinierte Registerkarte verfügen.
Benutzerdefinierte Felder
Wenn Sie ein benutzerdefiniertes Feld mit einer Gruppe verknüpfen, können Sie festlegen, welche Benutzer das benutzerdefinierte Feld auf der benutzerdefinierten Registerkarte ablegen dürfen. Auf der Grundlage einer Debitoren-Nummer können also alle Filialen eines Unternehmens zusammengefasst werden. Die Rechte für Registerkarten sind ausschlaggebend dafür, ob Benutzer das benutzerdefinierte Feld anzeigen oder ändern dürfen (siehe persönliche benutzerdefinierte Registerkarten und gemeinsame benutzerdefinierte Registerkarten).
Es ist möglich, benutzerdefinierte Felder in Voreinstellungen aufzunehmen. In der dazu erforderlichen gespeicherten Prozedur können Sie nachstehende Code-Beispiele verarbeiten. In den Code-Beispielen wird ausgegangen von:
- dem Fenster Kunden. Alle fett gedruckten Elemente gehören zum Fenster Kunden. Wenn Sie eine Voreinstellung für ein anderes Fenster erstellen, müssen Sie diese durch Elemente ersetzten, die zu diesem Fenster gehören.
- die Feldtypen „Möglichkeiten“ und „Boolesch“. Alle anderen Feldtypen sind vergleichbar mit „Boolesch“. Bei den Feldtypen geben Sie statt der Feldtypen <FieldDefCode> den Code des benutzerdefinierten Felds ein, beispielsweise:
T_Code_CustomField = N'BL026'
Bitte beachten Sie: Die Verwendung von benutzerdefinierten Feldern in Voreinstellungen kann das Öffnen der Fenster verzögern.
Code-Beispiele
DECLARE @Statement nvarchar(max)
, @Lbl1 dbo.T_Description_30
, @Lbl2 dbo.T_Description_30
/* Your own fields (FieldDefCodes) */
, @F1 T_Code_CustomField = N'<FieldDefCode>' /* Possibility */
, @F2 T_Code_CustomField = N'<FieldDefCode>' /* Boolean */
;
SELECT @LangCode = LangCode FROM T_UserRegistrationInfo WHERE UserCode = @IsahUserCode;
SELECT @BasicLangCode = BasicLangCode FROM T_Setting WHERE SettingCode = 1;
SELECT @IsahTableId = IsahTableId FROM T_IsahTable WHERE IsahTableName = N'T_Customer';
/* Determine the column headers. */
SELECT @Lbl1 = ISNULL(USERLANG.[Description], BASELANG.[Description])
FROM T_CustomFieldDefDescription AS BASELANG
LEFT OUTER JOIN T_CustomFieldDefDescription AS USERLANG
ON USERLANG.FieldDefCode = BASELANG.FieldDefCode
AND USERLANG.LangCode = @LangCode
WHERE BASELANG.FieldDefCode = @F1
AND BASELANG.LangCode = @BasicLangCode;
SELECT @Lbl2 = ISNULL(USERLANG.[Description], BASELANG.[Description])
FROM T_CustomFieldDefDescription AS BASELANG
LEFT OUTER JOIN T_CustomFieldDefDescription AS USERLANG
ON USERLANG.FieldDefCode = BASELANG.FieldDefCode
AND USERLANG.LangCode = @LangCode
WHERE BASELANG.FieldDefCode = @F2
AND BASELANG.LangCode = @BasicLangCode;
SELECT @F1 = N'''' + @F1 + N'''';
SELECT @F2 = N'''' + @F2 + N'''';
/* Dynamic SQL: first the required fields for a preset for the customer form, followed by 2 of your own fields. */
SET @Statement =
N'SELECT C.CustID
, C.Mnem
, C.LOBCode
, (SELECT CFP.Description
FROM T_CustomFieldPossibilityDesc CFP
WHERE CFP.LangCode = ' + '''' + @LangCode + '''' + '
AND CFP.PossibilityID = ISNULL(F1.PossibilityValue, LINK1.DefaultPossibility)) AS [' + @Lbl1 + N']' + '
, ISNULL(F2.BooleanValue, LINK2.DefaultBoolean) AS [' + @Lbl2 + N']' + '
FROM T_Customer AS C' + '
INNER JOIN T_CustomFieldEntityLink AS LINK1
ON LINK1.IsahTableId = ' + CONVERT(NVARCHAR, @IsahTableId) + '
AND LINK1.FieldDefCode = ' + @F1 + '
LEFT OUTER JOIN T_CustomFieldValue AS F1
ON F1.IsahTableId = LINK1.IsahTableId
AND F1.IsahPrimKey = C.CustID
AND F1.FieldDefCode = LINK1.FieldDefCode' + '
INNER JOIN T_CustomFieldEntityLink AS LINK2
ON LINK2.IsahTableId = ' + CONVERT(NVARCHAR, @IsahTableId) + '
AND LINK2.FieldDefCode = ' + @F2 + '
LEFT OUTER JOIN T_CustomFieldValue AS F2
ON F2.IsahTableId = LINK2.IsahTableId
AND F2.IsahPrimKey = C.CustID
AND F2.FieldDefCode = LINK2.FieldDefCode';
EXEC (@Statement);