Masquer des champs en fonction d'un utilisateur ou d'un rôle
Procédure à suivre
Dans formularDesigner, passer en mode Source
Il faut identifier le ou les champs sur lesquels le code doit s'appliquer. Pour cela, repérer la position du champ dans la page et affecter un id qui doit être unique sur tout le formulaire à la cellule du tableau dans laquelle se trouve le champ.
Cela suppose que chaque champ doit être dans 1 cellule du tableau, et que chaque cellule du tableau ne doit contenir qu'un champ.
S'il n'y est pas déja, ajouter également à la cellule l'attribut runat="server"
NB: Une bonne pratique serait de nommer cet id avec cette convention : cell_NOM_DU_CHAMP
Exemple, ici on souhaite travailler avec le champ GED_PDF
1/ ==> On ajoute à la cellule les attributs id="cell_GED_PDF" runat="server"
<td valign="top" width="49%" id="cell_GED_PDF" runat="server">
<apsfield:ApsFieldTextRadio id="apsFieldbeb63a77" runat="server" fieldid="f73f4c60-73bd-4ef6-9fbc-226c57811883" fieldname="GED_PDF"
fieldlabel="G&#233;n&#233;rer PDF?" repeatdirection="Horizontal" labellayout="Left">
</apsfield:ApsFieldTextRadio>
</td>
2/ ==> Plus bas dans la page (en dehors des tableau, par exemple au bas de la page), ajouter un block de script serveur (Code C#) avec la balise <script runat="server"> ... </script>
Dans ce script, surcharger la fonction d'initialisation de la page (OnLoad) pour travailler sur les champs pré-cités. Il est également possible de travailler dans la même section sur plusieurs champs
<span class="hidden" style="color:Red; width=100%; BORDER: red 1px dashed; BACKGROUND-COLOR: #f3f1e7; text-align=center;">
***** CETTE SECTION CONTIENT DU CODE SERVEUR C# ******
<script runat="server">
protected override void OnLoad( EventArgs e )
{
base.OnLoad( e );
// Ceci permet de récupérer la définition complète de l'utilisateur
Avanteam.Kernel.UserInfo currentUser = ((Avanteam.Kernel.Web.ApsPageManager)this.Page).UserInfo;
// Masquer un ou des champs en fonction de son NOM
if( currentUser.DisplayName != "John Doe" )
{
this.cell_GED_PDF.Style.Add( "display", "none" );
}
// Masquer un ou des champs en fonction de ses rôles
if( !currentUser.Roles.Contains( "Admin" ) )
{
this.cell_GED_PDF.Style.Add( "display", "none" );
}
}
</script>
</span>
Le fait d'entourer la section <script ... </script> avec une section <span ... </span> comme ci-dessus n'est pas obligatoire mais permet lorsque l'on est en mode normal sur le formulaire de visualiser la (les) zones contenant du script. le tab class="hidden" permet qu'il ne soit pas visible en mode réel sur le Web
