web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Answered

X++ Set One Of Financial Dimension Value to Empty

(0) ShareShare
ReportReport
Posted on by 1,214

Hi,

I'm adding custom field Worker in Cash Advance form. When updating this Worker field, I want the same value reflecting on Worker financial dimension value:

5187.cash-advance.png

Following code works when selected Worker is not empty:

[ExtensionOf(TableStr(TrvCashAdvance))]
final class TrvCashAdvance_Extension
{
    public void modifiedField(fieldId _fieldId)
    {
        next modifiedField(_fieldId);

        switch (_fieldId)
        {
            case(fieldnum(TrvCashAdvance, Worker)):
                this.updateDefaultDimension();
                break;
        }
    }

    private void updateDefaultDimension()
    {
        HcmPersonnelNumberId      hcmPersonnelNumberId;        
        DimensionAttributeValueSetStorage   dimStorage = new DimensionAttributeValueSetStorage();
        DimensionAttribute                  dimAttribute;
        DimensionAttributeValue             dimAttributeValue;
        DimensionDefault                    defaultDimension;
        
        #define.Worker('Worker')

        hcmPersonnelNumberId     =  this.Worker;
        defaultDimension    = this.DefaultDimension;

        ttsBegin;
        dimStorage          = DimensionAttributeValueSetStorage::find(defaultDimension);
        dimAttribute        = DimensionAttribute::findByName(#Worker);
        dimAttributeValue   = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute, hcmPersonnelNumberId, true, true);

        dimStorage.addItem(dimAttributeValue);
        // Dimension modified or updated including Worker as well.
        defaultDimension = dimStorage.save();
        this.DefaultDimension = defaultDimension;  
        ttsCommit;
    }
}

Because financial dimensions are allowed to be set empty when keyed in manually, I want Worker financial dimension set to empty when Worker field is set to empty.

However, with current codes, I got following error "Unable to return DimensionAttributeValue record for Dimension Worker with value <blank> as no record exists in table HcmWorker through view DimAttributeHcmWorker.".

It's understandable that the error came from DimensionAttributeValue::findByDimensionAttributeAndValue() method, but is there any workaround to set the Worker financial dimension value empty?

Thank you.

I have the same question (0)
  • Verified answer
    ergun sahin Profile Picture
    8,826 Moderator on at

    [ExtensionOf(TableStr(TrvCashAdvance))]
    final class TrvCashAdvance_Extension
    {
        public void modifiedField(fieldId _fieldId)
        {
            next modifiedField(_fieldId);
    
            switch (_fieldId)
            {
                case(fieldnum(TrvCashAdvance, Worker)):
                    this.updateDefaultDimension();
                    break;
            }
        }
    
        private void updateDefaultDimension()
        {
            HcmPersonnelNumberId      hcmPersonnelNumberId;        
            DimensionAttributeValueSetStorage   dimStorage = new DimensionAttributeValueSetStorage();
            DimensionAttribute                  dimAttribute;
            DimensionAttributeValue             dimAttributeValue;
            DimensionDefault                    defaultDimension;
            
            #define.Worker('Worker')
    
            hcmPersonnelNumberId     =  this.Worker;
            defaultDimension    = this.DefaultDimension;
    
            ttsBegin;
            dimStorage          = DimensionAttributeValueSetStorage::find(defaultDimension);
            dimAttribute        = DimensionAttribute::findByName(#Worker);
            if(hcmPersonnelNumberId)
            {
                dimAttributeValue   = DimensionAttributeValue::findByDimensionAttributeAndValue(dimAttribute, hcmPersonnelNumberId, true, true);
        
                dimStorage.addItem(dimAttributeValue);
            }
            else
            {
                dimStorage.removeDimensionAttribute(dimAttribute.RecId);
            }
            // Dimension modified or updated including Worker as well.
            defaultDimension = dimStorage.save();
            this.DefaultDimension = defaultDimension;  
            ttsCommit;
        }
    }

    I wrote it in the editor, didn't check it but that way it should be doing what you want.

  • HAIRUL HAZRI Profile Picture
    1,214 on at

    Aha. Thank you  Ergün Åžahin. I didn't notice that removeDimensionAttribute() method. I tested. This works :)

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > Finance | Project Operations, Human Resources, AX, GP, SL

#1
Martin Dráb Profile Picture

Martin Dráb 660 Most Valuable Professional

#2
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 549 Super User 2025 Season 2

#3
Sohaib Cheema Profile Picture

Sohaib Cheema 307 User Group Leader

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans