U dient er rekening mee te houden dat de rechten voor eigen tabbladen af kunnen wijken van die van andere tabbladen. Hieronder vindt u een overzicht van de rechten van gemeenschappelijke en persoonlijke tabbladen en eigen velden.
Persoonlijke eigen tabbladen
Persoonlijke eigen tabbladen zijn uitsluitend zichtbaar voor de gebruiker die ze aanmaakt. Gebruikers kunnen alleen velden op een persoonlijk eigen tabblad plaatsen van tabbladen waarvoor ze minimaal raadpleegrechten hebben. Velden van tabbladen waarvoor zij geen rechten hebben, ontbreken op subtabblad Veldkiezer. Voor persoonlijke eigen tabbladen hebben zij voor alle velden wijzigrechten. Het kan dus voorkomen dat ze voor velden op het oorspronkelijke tabblad raadpleegrechten hebben maar voor diezelfde velden op het persoonlijke eigen tabblad wijzigrechten.
Als rechten wijzigen, kan de situatie ontstaan dat er velden op een persoonlijk eigen tabblad staan die afkomstig zijn van een tabblad waarvoor de gebruiker geen rechten meer heeft. De gebruiker heeft dan geen toegang meer tot het oorspronkelijke tabblad, maar kan de velden daarvan op het eigen tabblad wel gebruiken. Met de verwerking Controleren rechten eigen tabbladen kunt u deze gevallen opsporen en verhelpen.
Gemeenschappelijke eigen tabbladen
Welke gebruikers een gemeenschappelijk eigen tabblad kunnen gebruiken, is afhankelijk van de programmacode die u aan het tabblad koppelt. Zonder gekoppelde programmacode kunnen alle gebruikers van het bedrijf de velden op het gemeenschappelijke eigen tabblad bekijken en wijzigen. Met een gekoppelde programmacode bepaalt u welke gebruikers(groepen) raadpleeg- of wijzigrechten hebben voor het tabblad. Het kan voorkomen dat een gebruiker voor hetzelfde veld op het oorspronkelijke tabblad raadpleegrechten heeft en op het gemeenschappelijke eigen tabblad wijzigrechten maar het kan ook andersom (de gebruiker heeft dan meer rechten voor het oorspronkelijke tabblad dan voor het eigen tabblad).
U kunt velden op het gemeenschappelijke eigen tabblad plaatsen van tabbladen waarvoor gebruikers geen rechten hebben. De programmacode gekoppeld aan het tabblad bepaalt ook hier welke rechten de gebruikers voor het gemeenschappelijke eigen tabblad hebben.
Eigen velden
Als u een eigen veld aan een groep koppelt, kunt u bepalen welke gebruikers het eigen veld op een eigen tabblad mogen plaatsen. Zonder gekoppelde groep kunnen alle gebruikers van het bedrijf dat doen. De tabbladrechten bepalen of de gebruikers het eigen veld mogen raadplegen of wijzigen (zie persoonlijke eigen tabbladen en gemeenschappelijke eigen tabbladen).
Het is mogelijk om eigen velden op te nemen in presets. In de stored procedure die u daarvoor nodig heeft, kunt u onderstaande codevoorbeelden verwerken. In de codevoorbeelden wordt uitgegaan van:
- het scherm Klanten. Alle vetgedrukte elementen horen bij het scherm Klanten. Als u een preset voor een ander scherm maakt, dient u deze te vervangen door elementen die horen bij dat scherm.
- de veldtypes 'mogelijkheden' en 'boolean'. Alle andere veldtypes zijn vergelijkbaar met 'boolean'. Bij de veldtypes vult u in plaats van <FieldDefCode> de code van het eigen veld in, bijvoorbeeld:
T_Code_CustomField = N'BL026'
Let op: Het gebruik van eigen velden in presets kan het openen van schermen vertragen.
Codevoorbeelden
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);