Disable financial Dimension on form in d365fo x++

Disable financial Dimension on form in d365fo x++

Code:

Public class DSADimensionEntryControlUtil
{
    //Enable Disable Sector Dimension, JS, 11/19/2024
    public static void disableDimension(custtable custtable, DimensionEntryControl dimControl , str Sector = 'Sector')
    {
        
        DimensionEnumeration            dimensionSetId               = DimensionCache::getDimensionAttributeSetForLedger();
        DimensionAttributeSetStorage    dimensionAttributeSetStorage = new DimensionAttributeSetStorage();
        DimensionAttribute              dimensionAttribute;
        DimensionAttributeSetItem       dimAttrSetItem;

        if(custtable.DSACustomerSectorType == DSACustomerSectorType::MultiSector)
        {
            while select dimensionAttribute
            where dimensionAttribute.Name != Sector // Exclude specific dimension which should be not editable
            join dimAttrSetItem
            where dimAttrSetItem.DimensionAttribute == dimensionAttribute.RecId
            && dimAttrSetItem.DimensionAttributeSet == dimensionSetId
            {
                dimensionAttributeSetStorage.addItem(dimensionAttribute.RecId, dimensionAttribute.HashKey, NoYes::Yes);
            }
        }
        else
        {
            while select dimensionAttribute
            join dimAttrSetItem
            where dimAttrSetItem.DimensionAttribute == dimensionAttribute.RecId
            && dimAttrSetItem.DimensionAttributeSet == dimensionSetId
            {
                dimensionAttributeSetStorage.addItem(dimensionAttribute.RecId, dimensionAttribute.HashKey, NoYes::Yes);
            }
        }
            
        dimControl.parmEditableDimensionSet(dimensionAttributeSetStorage.save());
        dimControl.run();
        dimControl.reactivate();
        dimControl.reactivateDisplayValuesAndEnums();
        dimControl.loadAttributeValueSet(custtable.DefaultDimension);
        
    }

    //Enable Disable Sector Dimension, JS, 11/19/2024
    public static void disableSOAndProjDimension(custtable custtable, DimensionEntryControl dimControl , str Sector = 'Sector')
    {
        
        DimensionEnumeration            dimensionSetId               = DimensionCache::getDimensionAttributeSetForLedger();
        DimensionAttributeSetStorage    dimensionAttributeSetStorage = new DimensionAttributeSetStorage();
        DimensionAttribute              dimensionAttribute;
        DimensionAttributeSetItem       dimAttrSetItem;

        if(
            (custtable.DSACustomerSectorType == DSACustomerSectorType::MultiSector)
            || ((custtable.DSACustomerSectorType == DSACustomerSectorType::SingleSector) && (DSADimensionEntryControlUtil::isAllowedToEdit()))
          )
        {
            while select dimensionAttribute
            join dimAttrSetItem
            where dimAttrSetItem.DimensionAttribute == dimensionAttribute.RecId
            && dimAttrSetItem.DimensionAttributeSet == dimensionSetId
            {
                dimensionAttributeSetStorage.addItem(dimensionAttribute.RecId, dimensionAttribute.HashKey, NoYes::Yes);
            }
        }
        else
        {
            while select dimensionAttribute
            where dimensionAttribute.Name != Sector // Exclude specific dimension which should be not editable
            join dimAttrSetItem
            where dimAttrSetItem.DimensionAttribute == dimensionAttribute.RecId
            && dimAttrSetItem.DimensionAttributeSet == dimensionSetId
            {
                dimensionAttributeSetStorage.addItem(dimensionAttribute.RecId, dimensionAttribute.HashKey, NoYes::Yes);
            }
        }
            
        dimControl.parmEditableDimensionSet(dimensionAttributeSetStorage.save());
        dimControl.run();
        dimControl.reactivate();
        dimControl.reactivateDisplayValuesAndEnums();
        dimControl.loadAttributeValueSet(custtable.DefaultDimension);
        
    }

    public static SecurityRole isAllowedToEdit()
    {
        userinfo            userinfo;
        SecurityUserRole    SecurityUserRole;
        SecurityRole        SecurityRole;

        select  AOTNAME
        from SecurityRole
        exists join SecurityUserRole
        where SecurityRole.RecId == SecurityUserRole.SecurityRole
        exists join userinfo
        where SecurityUserRole.USER == userinfo.ID
        && userinfo.id == curUserId()
        && SecurityRole.AOTNAME == 'DSACustomerSectorTypeRole';

        return SecurityRole;
    }

}

Comments