Financial dimension names lookup

Financial dimension names lookup to exclude system-generated financial dimension names:
    /// <summary>
    /// Look up to filter system generated financial dimension names
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormControlEventHandler(formControlStr(HRMParameters, VKAPDPayrollSystem_VKADPCostCentreDim), FormControlEventType::Lookup)]
    public static void VKAPDPayrollSystem_VKADPCostCentreDim_OnLookup(FormControl sender, FormControlEventArgs e)
    {
        FormReferenceControl    formControl = sender as FormReferenceControl;
        SysReferenceTableLookup sysReferenceTableLookup = SysReferenceTableLookup::newParameters(tablenum(DimensionAttribute), formControl);
        Query                   query = new Query();
        QueryBuildDataSource    queryBuildDataSource = query.addDataSource(tableNum(DimensionAttribute));

        // Ranges from DimensionDetails(CSL).init(), which are applied to standard form General ledger / Chart of accounts / Dimensions / Financial dimensions
        queryBuildDataSource.addRange(fieldNum(DimensionAttribute, Type)).value(QueryValue(DimensionAttributeType::CustomList));
        queryBuildDataSource.addRange(fieldNum(DimensionAttribute, Type)).value(QueryValue(DimensionAttributeType::ExistingList));

        sysReferenceTableLookup.addLookupField(fieldNum(DimensionAttribute, Name));
     
        sysReferenceTableLookup.parmQuery(query);
      
        sysReferenceTableLookup.performFormLookup();

        FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs;
        ce.CancelSuperCall();
    }
Ranges copied from DimensionDetails.init():
    /// <summary>
    ///    Initializes the dimension attribute data source to restrict to the records that are required by the
    ///    launching form.
    /// </summary>
    public void init()
    {
        dimensionAttribute_ds.query().dataSourceTable(tablenum(DimensionAttribute)).addRange(fieldnum(DimensionAttribute, Type)).value(queryValue(DimensionAttributeType::ExistingList));
        dimensionAttribute_ds.query().dataSourceTable(tablenum(DimensionAttribute)).addRange(fieldnum(DimensionAttribute, Type)).value(queryValue(DimensionAttributeType::CustomList));
        dimensionAttribute_ds.query().dataSourceTable(tablenum(DimensionAttribute)).findRange(fieldnum(DimensionAttribute, Type)).status(RangeStatus::Locked); 
        
        Set availableBackingEntityTypes = DimensionEnabledType::getAvailableDimensionBackingEntityTypes();

        // Only include DimensionAttributes that have backing entities
        SetEnumerator setEnumerator = availableBackingEntityTypes.getEnumerator();
        while (setEnumerator.moveNext())
        {
            dimensionAttribute_ds.query().dataSourceTable(tablenum(DimensionAttribute)).addRange(fieldnum(DimensionAttribute, BackingEntityType)).value(queryValue(setEnumerator.current()));
        }
    }
DimensionEnabledType::getAvailableDimensionBackingEntityTypes() - is internal and therefore cannot be called from different models


Support The Author

 If you found value in what I share, I've set up a Buy Me a Coffee page as a way to show your support.

Buy Me a Coffee

Post a Comment


All Comments


No comments. Be the first one to comment on this post.

Search

About

DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics 365 FO.

Authors are allowed to set their own "buy me a coffee" link.
Join us.

Blog Tags