haring some x++ code  which is require when you work with dimensions.

Creation of default dimension using map , if you are getting values different resources e.g. file , any http request etc.

MapEnumerator           mapEnum;
        boolean                  validDim = true;
        List                    _contractList;
        Map                      dimMap = new Map(Types::String, Types::String);
        RecId                    defaultDimension;
        DimensionDefaultContract dimensionDefaultContract = DimensionDefaultContract::construct();

             
       
        
        dimMap.insert('Client', '003501_036');
        
        dimMap.insert('Purpose', '2016GBG');
        
        dimMap.insert('Division', 'CORP');
        
        dimMap.insert('Department', 'ADMIN');
        
        dimMap.insert('Location', 'LOSANGELES');
        
        dimMap.insert('SubDepartment', 'AP');
        
        dimMap.insert('Employee', '100077');
                   
        mapEnum = dimMap.getEnumerator();

        while(mapEnum.moveNext())
        {
            str     dimName, dimValue;
            boolean dimNameValid;

            dimName      = mapEnum.currentKey();
            dimValue     = mapEnum.currentValue();
            
            
            DimensionAttributeValueContract dimAttrValContract = DimensionAttributeValueContract::construct(dimName, dimValue);
            _contractList = dimensionDefaultContract.parmValues();
            _contractList.addEnd(dimAttrValContract);
          
        }

        if(dimensionDefaultContract && !dimensionDefaultContract.parmValues().empty())
        {
            DimensionNameValueListServiceProvider dimensionDefaultServiceProvider = DimensionNameValueListServiceProvider::newForDimensionNameValueListContract(dimensionDefaultContract);
            DimensionStorageResult                dimensionStorageResult          = dimensionDefaultServiceProvider.resolve();

            switch(dimensionStorageResult.parmStatus())
            {
                case DimensionStorageResultStatus::Valid:
                    defaultDimension = dimensionStorageResult.parmSavedRecId();
                    break;

                default:
                    error(strFmt("Validation Status: %1", dimensionStorageResult.parmStatus()));
                    break;
            }
        }

                        
        info(strFmt("Default Dimension %1",defaultDimension));

Here is created Default dimension

image

If you would like to combine main account  with default dimension and create LedgerDimension use below code

MainAccount     mainaccount = MainAccount::findByMainAccountId('000103');

        LedgerDimensionAccount      ledgerddimensoin ;


        ledgerddimensoin = LedgerDimensionFacade::serviceCreateLedgerDimension(mainaccount.RecId, defaultDimension);

        info(strFmt("LedgerDimension :%1",ledgerddimensoin));
image