But there is a difference to select statements inside display methods. Every select statement has activated Record Level Security if the command is in a scope inside a call stack with a display method root. But the current status is not really available trough the property recordLevelsSecurity. A call to this propery will return false, make you thinking Record Level Security is off - but it is not.
display showEmplName() { EmplTable emplTable; EmplName name; ; info(strfmt("%1", emplTable.recordLevelSecurity())); // this will return false, but actually it's true! select firstonly Name from emplTable where emplTable.EmplId == reportTable.emplId; // the record will use RLS (yeah, it's magic) name = emplTable.Name; return name; }
Even here the Record Level Security is on, without explicit change to recordLevelSecurity property:
display showEmplName() { EmplName name; ; name = EmplTable::find(reportTable.EmplId); // the select inside the find method will use RLS even you haven't activate this return name; }
If you want to ensure, that Record Level Security is really off, you need to touch the property explicit.
display showEmplName() { EmplTable emplTable; EmplName name; ; emplTable.recordLevelSecurity(false); // this will really free from RLS select firstonly Name from emplTable where emplTable.EmplId == reportTable.emplId; name = emplTable.Name; return name; }
This Problem appears in AX 4.0. In AX 2009 this phenomen does not exists; Record Level Security stays off until you change it explicit.
No comments:
Post a Comment