Advance XDS Security role in d365fo x++

 Advance XDS Security role in d365fo x++

1. Create Temp Table:
    Create temp table and add required fields and xds() method 
    















    XDS Method:

    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




4. Create a 
Security Privilege

    Create a Security Privilege and set it's properties

    


5. Create a Security Role

  Create a Security Role and set it's properties
   
    



6. Create Policy Class and Event Handler Class to run

    Policy Class:

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;
    }
}


    Event Handler Class:

    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