Advance XDS Security role in d365fo x++
Advance XDS Security role in d365fo x++
public class TblXDSCaseCategoryCEPTmp extends common
{
public RefreshFrequency xds()
{
CaseCategoryHierarchyDetail caseCategoryHierarchyDetail;
Unchecked(Uncheck::XDS)
{
while select
caseCategoryHierarchyDetail
where caseCategoryHierarchyDetail.CaseCategory == 'CEP'
{
this.CategoryRecId = caseCategoryHierarchyDetail.RecId;
this.CatDataAreaId = caseCategoryHierarchyDetail.DataAreaId;
this.insert();
}
}
return RefreshFrequency::PerSession;
}
}
2. Create a Query
Query:
3. Create a Security policy
Create a Security policy and set it's properties
Create a Security Privilege and set it's properties
public final class CblClsXDSCaseCategoryCEPPolicy
{
private const str CaseCategoryPolicyContextString = 'Cbl_XDS_CaseCategoryCEPCxtStr';
public static void flushCblTblXDSCaseCategoryTmp()
{
XDSServices services = new XDSServices();
services.flushXDSMyConstructs(0, tableStr(CblTblXDSCaseCategoryCEPTmp));
}
public static str getCurrentXdsContextString(XDSServices _xdsServices)
{
return _xdsServices.getXDSContext(0);
}
public static void setCurrentXdsContextString(XDSServices _xdsServices, str _contextString = CaseCategoryPolicyContextString)
{
_xdsServices.setXDSContext(0, _contextString);
}
public static void resetCurrentXdsContextString(XDSServices _xdsServices)
{
str prevXDSContext = _xdsServices.getXDSContext(0);
_xdsServices.setXDSContext(0, '');
if(prevXDSContext != CaseCategoryPolicyContextString)
{
_xdsServices.setXDSContext(0, prevXDSContext);
}
}
public static boolean enableCaseCategoryPolicy(Args _args, boolean _callerCheck = false)
{
NoYesId ret = false;
switch(_args.menuItemName())
{
case menuItemDisplayStr(CaseListPage):
ret = NoYes::Yes;
break;
default:
if(!_callerCheck)
{
FormRun callerFormRun = _args.caller();
if(callerFormRun)
{
ret = CblClsXDSCaseCategoryCEPPolicy::enableCaseCategoryPolicy(callerFormRun.args(), true);
}
}
}
return ret;
}
}
public final class CblClsCaseCategoryEventHandler
{
/// <summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(CaseDetail, CaseDetailBase), FormDataSourceEventType::Initialized)]
public static void CaseDetailBase_OnInitialized(FormDataSource sender, FormDataSourceEventArgs e)
{
CblClsXDSCaseCategoryICOPolicy::resetCurrentXdsContextString(new XDSServices());
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(CaseDetail, CaseDetailBase), FormDataSourceEventType::QueryExecuting)]
public static void CaseDetailBase_OnQueryExecuting(FormDataSource sender, FormDataSourceEventArgs e)
{
FormRun formRun = sender.formRun();
XDSServices services;
if(CblClsXDSCaseCategoryICOPolicy::enableCaseCategoryPolicy(formRun.args()))
{
services = new XDSServices();
CblClsXDSCaseCategoryICOPolicy::setCurrentXdsContextString(services);
}
}
}
Comments
Post a Comment