Showing posts with label Create. Show all posts
Showing posts with label Create. Show all posts

Monday, April 12, 2021

Create default dimension using X++ in D365fo

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

Wednesday, April 22, 2020

Add Custom lookup on EP

The trick is to override datasetLookup() on Dataset > data source > field > methods. You will not find this method in the list of override methods so just create this as new method.
the table which we are using for lookup should be in the Dataset

public void dataSetLookup(SysDataSetLookup sysDataSetLookup)
{
    List list = new List(Types::String);

    Query query = new Query();

    QueryBuildDataSource    queryBuildDataSource;

    QueryBuildRange qbr;

    // Add the table to the query.

    queryBuildDataSource  = query.addDataSource(tableNum(HcmWorker));

    //add the range

    qbr = queryBuildDataSource.addRange( fieldnum(HcmWorker, PersonnelNumber));

   // qbr.value(DirPersonUser::currentWorkerPersonnelNumber());

   // qbr.status(RangeStatus::Locked);

     // Specify the fields to use for the lookup.

    list.addEnd(fieldStr(HcmWorker,PersonnelNumber));

    list.addEnd(fieldStr(HcmWorker,Name()));


     sysDataSetLookup.parmLookupFields(list);

     // Specify the field that is returned from the lookup.

    sysDataSetLookup.parmSelectField('PersonnelNumber');

     // Pass the query to the SysDataSetLookup so that the query is used.

    sysDataSetLookup.parmQuery(query);
 
}

Table browser URL in D365FO

Critical Thinking icon icon by Icons8