I'm creating a lightning application who show by whom fields are editable. For that, I have that lightning component :
<aura:component controller="testmap">
<!-- initialazing the first select list -->
<aura:handler name="init" action="{!c.Initialize}" value="{!this}" />
<!-- creating the 3 attribute in use -->
<aura:attribute name="item" type="String[]" default='' required="false" />
<aura:attribute name="ItemField" type="String[]" default='' required="false" />
<aura:attribute name="Permissions" type="Sobject[]" required="false" />
<h1 align="center">Liste des droits pour un champ</h1><br/> <br />
<p>il peut être nécessaire d'attendre quelques instants avant que le menu ne se charge</p>
<!-- First list, works fine -->
<ui:inputSelect aura:id="LD" label="Object Levels" change="{!c.SelectChangement}">
<aura:iteration items="{!v.item}" var="Objet">
<ui:inputSelectOption text="{!Objet}" label="{!Objet}"/>
</aura:iteration>
</ui:inputSelect>
<p>Si vous souhaitez selectionner le première champ, veuillez selectionner un autre champ avant</p>
<!-- Second list, works fine -->
<ui:inputSelect aura:id="Liste2" label="Fields Levels">
<aura:iteration items="{!v.ItemField}" var="champ">
<ui:inputSelectOption text="{!champ}" label="{!champ}"/>
</aura:iteration>
</ui:inputSelect>
<!-- When pressing the button, it calls a function with the two fields precendently selected as input -->
<ui:button label="Presse moi pour savoir les permissions" press="{!c.FindPerm}" />
<br/>
<!-- Table where the result is shown -->
<table>
<aura:iteration items="{!v.Permissions}" var="perm">
<!-- Display names of all accounts -->
<tr><td>
<div>{!perm.NomProfil}</div></td><td>{!perm.IsEdit}</td><td>{!perm.IsRead} </td></tr>
</aura:iteration>
</table>
which access 3 javascript function. The first two work just fine, and the third supposedely so, but I cannot see the result.
This is the javascript function I call to update {!v.Permission} :
FindPerm : function(cmp,event){
var Perm = cmp.get("c.Recherche");
var objetselec = cmp.find("LD").get("v.value");
var champ = cmp.find("Liste2").get("v.value");
Perm.setParams({
Objet : objetselec,
NomField : champ
});
// system.log(Perm);
Perm.setCallback(this, function(rep) {
var state = rep.getState();
if (state === "SUCCESS") {
var stringItems = rep.getReturnValue();
if(stringItems != null){
console.log("stringItems.NomProfil : " +stringItems.NomProfil);
console.log("stringItems.IsEdit : " +stringItems.IsEdit);
console.log("stringItems.IsRead : " +stringItems.IsRead);
}
cmp.set("v.Permissions.IsEdit", stringItems.IsEdit);
cmp.set("v.Permissions.IsRead", stringItems.IsRead);
cmp.set("v.Permissions.NomProfil",stringItems.NomProfil);
console.log(cmp.get("v.Permissions.IsEdit"));
console.log(cmp.get("v.Permissions.IsRead"));
console.log(cmp.get("v.Permissions.NomProfil"));
console.log(cmp.get("v.Permissions"));
}
});
$A.enqueueAction(Perm);
}
the console debug display me this :
So, Permissions exists, the 3 arrays too, but my iteration cannot access it. When i create an iteration like the following :
<aura:iteration items="{!v.Permissions.NomProfil}" var="perm">
{!perm} <br/>
</aura:iteration>
The application displays all my profile names.
Anyone knows why it does this ?
Thank you !
EDIT : There is the backed apex controller :
global class VarTmp{
@AuraEnabled
global List<String> NomProfil {get;set;}
@AuraEnabled
global List<String> IsEdit {get;set;}
@AuraEnabled
global List<String> IsRead {get;set;}
global VarTmp(){
NomProfil = new List<String>();
IsEdit = new List<String>();
IsRead = new List<String>();
}
}
@AuraEnabled
public static VarTmp Recherche(String Objet ,String NomField) {
//Requete dans FieldPermission afin de trouver l'ID de la permission
VarTmp Variable = new VarTmp();
List<FieldPermissions> IdPerm = [SELECT ParentId , PermissionsEdit, PermissionsRead From FieldPermissions
WHERE Field =: NomField AND SobjectType=:Objet ];
Map<id, FieldPermissions>IdTri= new Map<id, FieldPermissions>();
Integer NbrComptes = IdPerm.size();
system.debug(IdPerm);
for(Integer i=0; i<NbrComptes; i++) {
IdTri.put(IdPerm.get(i).ParentID, IdPerm.get(i));
}
system.debug(IdTri);
If (IdPerm.isEmpty()) {
System.debug('Le champ que vous recherchez n"existe pas, veuillez chercher à nouveau');
}
System.debug(IdPerm.size());
//Requete dans PermissionSet afin de trouver l'ID des profils concernés
List<PermissionSet> IdProfile = [SELECT ProfileId,Profile.Name FROM PermissionSet
WHERE IsOwnedByProfile=true];
List<PermissionSet> PermissionSetName =[SELECT Label FROM PermissionSet
Where ProfileID =''];
Map<id, PermissionSet>IdTriProfil= new Map<id, PermissionSet>();
Map<id, PermissionSet>IdTriPermission = new Map<id, PermissionSet>();
Integer NbrComptes2 = IdProfile.size();
for(Integer i=0; i<NbrComptes2; i++) {
IdTriProfil.put(IdProfile.get(i).Id, IdProfile.get(i));
}
Integer NbrComptes3 = PermissionSetName.size();
for(Integer i=0; i<NbrComptes3; i++) {
IdTriPermission.put(PermissionSetName.get(i).Id, PermissionSetName.get(i));
}
List<ID> IdKeyTotal = new List<ID>();
IdKeyTotal.addAll( IdTriProfil.keySet());
for(ID IdKey :IdKeyTotal ) {
if(idTri.containsKey(IdKey)) {
Variable.NomProfil.add(idTriProfil.get(IdKey).Profile.Name);
if(IdTri.get(IdKey).PermissionsEdit ==true){
Variable.IsEdit.add('Aye');
}else{
Variable.IsEdit.add('Nei');
}
if(IdTri.get(IdKey).PermissionsRead ==true) {
Variable.IsRead.add('Aye');
}else{
Variable.IsRead.add('Nei');
}//else {
}
else if(idTriPermission.containsKey(IdKey)){
Variable.NomProfil.add(IdTriPermission.get(IdKey).Label);
}
else{
Variable.NomProfil.add(IdTriProfil.get(IdKey).Profile.Name);
Variable.IsRead.add('Nei');
Variable.IsEdit.add('Nei');
}
}
system.debug(IdTri.keySet());
system.debug(IdTriPermission.keySet());
system.debug(IdTriProfil.keySet());
system.debug(Variable);
return Variable;
}