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

Announcements

No record found.

News and Announcements icon
Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Suggested Answer

Retrieve value of a field given by a display method

(1) ShareShare
ReportReport
Posted on by 71
Hi everyone, I'm new in d365 and I'm having some issues with my task because of a display method.
I am in the form LedgerJournalTransVendInvoice, where I have the field 'Total Amount'. Cheking the properties of the field I can see it's a calculated field connected to the method totalAmountSingleLine. This method is a display method in the DataSource of my form, and of course the display method in the end returns the TotalAmount that I need in my project in order to confront it with another field called RemainingAmount. Any suggestion on how can I do it? I tried several ways but nothing seems to work properly.
  • Layan Jwei Profile Picture
    8,353 Super User 2026 Season 2 on at
    Hi Fabrizio,

    can you please explain more what do you need to do with RemainingAmount and TotalAmount? and show us please the code that you tried so that we can understand what are you trying to do.

    Thanks,
    Layan Jweihan
  • FabFab97 Profile Picture
    71 on at
    Hi @Layan Jwei,
     
    Sure, sorry if I haven't been clear. In my project I need to display a pop up when, posting a new journal, the TotalAmount of that specific journal is higher of the RemainingAmount of the specified client, as reported on the intent letter. For example If the remaining amount on the intent letter of a client is 100 and I'm posting a journal with a total amount of 1000, it should stop the registration of the journal and the pop up alert should appear. The remaining amount is on the intent letters form, and is a normal field of the intent letters table, while the Total Amount is a calculated field given by the method totalAmountSingleLine found on the form datasource, I can see its code if I look on the class of the form at least, and it's a display method. This is the code I wrote by now, looking on internet for a solution to my problem:
    [ExtensionOf(formControlStr(LedgerJournalTransVendInvoice, PostJournal))]
    final class LedgerJournalTransVendInvoice_PostJournal_AzimutBenetti_Extension
    {   
      
        public void clicked(){
    
                IntentLetter_IT intentLetter;
    
            FormButtonControl formButtonControl = any2Object(this) as FormButtonControl;
            FormDataSource formDataSource = formButtonControl.formRun().dataSource(tableStr(LedgerJournalTrans));
            LedgerJournalTrans ledgerJournalTrans_ds = formDataSource.cursor();
         
            if(ledgerJournalTrans_ds.totalAmountSingleLine() > intentLetter.remainAmountMST()){
                DialogButton diagBut;
                str strMessage = "Importo da decurtare al saldo della lettera di intento maggiore dell’importo residuo. Proseguire?";
                str strTitle = "Splafonamento";
                diagBut = Box::yesNo(
                        strMessage,
                        DialogButton::No,
                        strTitle
                        );
                next clicked();
            }
        }
    and I keep getting this error:  Error        ClassDoesNotContainMethod: Table 'LedgerJournalTrans' does not contain a definition for method 'totalAmountSingleLine' and no extension method 'totalAmountSingleLine' accepting a first argument of type 'LedgerJournalTrans' is found on any extension class.    
    I hope it's more clear now, 
    Thank You.
  • Suggested answer
    Bharani Preetham Peraka Profile Picture
    3,634 Moderator on at
    If you want to use a display method, then you need to recreate same SQL statement like a view or if you are using it in any data entity then you have to use computed columns. Please tell us complete requirement.
  • FabFab97 Profile Picture
    71 on at
    if it can be helpful in any way, I'll post here also the content of the display method: 
    [Form]
    public class LedgerJournalTransVendInvoice extends FormRun implements TaxIFormShowTax, IFormRefreshable, LedgerILedgerJournalEngineProvider, LedgerIJournalFormRefreshable, LedgerIJournalFormCache, LedgerIJournalCashDiscount, OfficeIMenuCustomizer, OfficeITemplateCustomExporter, LedgerIJournalForm
    {
    [DataSource]
        class LedgerJournalTrans
        {display Amount totalAmountSingleLine(LedgerJournalTrans _ledgerJournalTrans)
            {
                TaxAmountCur signedActualTax;
                Amount totalAmount, taxAmount, transactionAmount;
                transactionAmount = _ledgerJournalTrans.amount();
    
                if (TaxSolutionScopeIntegrationUtil::isCompanyEnabled())
                {
                    TransTaxInformation transTaxInformationLoc = TransTaxInformationHelper::findOrCreateTransTaxInformationByRecord(_ledgerJournalTrans);
                    if (transTaxInformationLoc && !transTaxInformationLoc.InclTax)
                    {
                        ITaxDocument taxDocument = TaxBusinessService::calculateTax(TaxableDocumentObject::construct(TaxableDocumentDescriptorFactory::getTaxableDocumentDescriptor(_ledgerJournalTrans)));
    
                        if (taxDocument)
                        {
                            ITaxDocumentLine taxDocumentLine = taxDocument.findLineBySource(_ledgerJournalTrans.TableId, _ledgerJournalTrans.RecId);
    
                            if (taxDocumentLine)
                            {
                                taxAmount = abs(taxDocumentLine.getLineTax().amountTransactionCurrency());
                            }
                        }
                    }
                }
                else if (!ledgerJournalTable.LedgerJournalInclTax)
                {
                    if (_ledgerJournalTrans.TaxCode)
                    {
                        return transactionAmount;
                    }
    
                    LedgerJournalEngine ledgerJournalEngineVendInvoice = LedgerJournalEngine::construct(ledgerJournalTable.JournalType);
                    ledgerJournalEngineVendInvoice.ledgerJournalTable(ledgerJournalTable);
                    taxAmount = ledgerJournalEngineVendInvoice.correctedTaxAmount(_ledgerJournalTrans);
    
                    if (_ledgerJournalTrans.TaxGroup
                        && _ledgerJournalTrans.TaxItemGroup
                        && _ledgerJournalTrans.AccountType == LedgerJournalACType::Vend)
                    {
                        signedActualTax = ledgerJournalEngineVendInvoice.parmActualTax();
                        if ((transactionAmount > 0 && signedActualTax > 0) || (transactionAmount < 0 && signedActualTax < 0))
                        {
                            taxAmount = -taxAmount;
                        }
                    }
                }
    
                if (transactionAmount > 0)
                {
                    totalAmount = transactionAmount + taxAmount;
                }
                else
                {
                    totalAmount = transactionAmount - taxAmount;
                }
    
                return totalAmount;
            }
    }
    }
    Of course the entire code is much bigger with lots of more methods, but I don't think the rest is important for my issue, here you can see the form, the datasource and the display method, as displayed in the image on my first answer
  • Suggested answer
    Anthony Blake Profile Picture
    3,273 Super User 2026 Season 2 on at
    in this line:
     
     
    if(ledgerJournalTrans_ds.totalAmountSingleLine() > intentLetter.remainAmountMST()){
     
     
    you need to pass a buffer of type LedgerJournalTrans to your display method, this is always the case for form data source display methods, see the definition here:
     
    display Amount totalAmountSingleLine(LedgerJournalTrans _ledgerJournalTrans)
     
    in here you need the record buffer:
     
    if(ledgerJournalTrans_ds.totalAmountSingleLine(ledgerJournalTransBufferGoesHere) > intentLetter.remainAmountMST()){
     
  • FabFab97 Profile Picture
    71 on at
    Thank you,
    Sorry but I've never used or heard about buffers in D365, can u tell me where can I find it?
    I'm also trying to use an Event Handler OnModified in order to  get the value of the field, but I can't do it neither
  • Anthony Blake Profile Picture
    3,273 Super User 2026 Season 2 on at
    Buffers are a whole other subject to the error you have posted.
     
    High level - its a structure to hold an object representing a table row.
     
    There's loads of reading (and practising!) to do to understand, have a read and create some runnable classes to try things out.
     
    Example of X++ buffers, first result of a popular search engine https://supremexpp.wordpress.com/2018/12/13/x-pitfalls-lesson-1-table-buffers/
  • Suggested answer
    Layan Jwei Profile Picture
    8,353 Super User 2026 Season 2 on at
    Hi Farbizio,


    I think you need to use "Object" -- I'm not sure if this will work, but maybe give the below code a try: (i amended your code alittle)
     
    [ExtensionOf(formControlStr(LedgerJournalTransVendInvoice, PostJournal))]
    final class LedgerJournalTransVendInvoice_PostJournal_AzimutBenetti_Extension
    {
      
        public void clicked()
        {
    
            IntentLetter_IT intentLetter;
    
            FormDataSource ledgerJournalTrans_ds = this.formRun().dataSource(tableStr(LedgerJournalTrans));
            LedgerJournalTrans ledgerJournalTrans = ledgerJournalTrans_ds.cursor();
    
            Object dataSourceObject = ledgerJournalTrans_ds;
            
            if(dataSourceObject.totalAmountSingleLine(ledgerJournalTrans) > intentLetter.remainAmountMST())
            {
                DialogButton diagBut;
                str strMessage = "Importo da decurtare al saldo della lettera di intento maggiore dell’importo residuo. Proseguire?";
                str strTitle = "Splafonamento";
                diagBut = Box::yesNo(
                        strMessage,
                        DialogButton::No,
                        strTitle
                        );
            }
            next clicked();
    
        }
    
    }

    Thanks,
    Layan Jweihan
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
  • Suggested answer
    Waed Ayyad Profile Picture
    9,222 Super User 2026 Season 2 on at
    Hi @ Fabrizio,
     
    You can try this code but make sure to change your display method to have the table record as a parameter.
     
    [ExtensionOf(formDataSource(LedgerJournalTransVendInvoice, LedgerJournalTrans))]
    final class LedgerJournalTransVendInvoiceFormDS_Extension
    {
     display Amount totalAmountSingleLine(LedgerJournalTrans _ledgerJournalTrans)
    {
        Amount yourAmount;
       // your logic
        return yourAmount;
    }
    }
    [ExtensionOf(formControlStr(LedgerJournalTransVendInvoice, PostJournal))]
    final class LedgerJournalTransVendInvoice_PostJournal_AzimutBenetti_Extension
    {
      
        public void clicked()
        {
    
            IntentLetter_IT intentLetter;
    
            FormDataSource ledgerJournalTrans_ds = this.formRun().dataSource(tableStr(LedgerJournalTrans));
            LedgerJournalTrans ledgerJournalTrans = ledgerJournalTrans_ds.cursor();
            
            if(ledgerJournalTrans_ds.totalAmountSingleLine(ledgerJournalTrans) > intentLetter.remainAmountMST())
            {
                DialogButton diagBut;
                str strMessage = "Importo da decurtare al saldo della lettera di intento maggiore dell’importo residuo. Proseguire?";
                str strTitle = "Splafonamento";
                diagBut = Box::yesNo(
                        strMessage,
                        DialogButton::No,
                        strTitle
                        );
            }
            next clicked();
    
        }
    
    }
     
    Regards
    Waed Ayyad
     
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
  • FabFab97 Profile Picture
    71 on at
    Thank you all for your suggestions, I tried everyithing you wrote but nothing seems to work. It's like the class of the form is invisible to my module. so It gives me error anytime I call LedgerJournalTransVendInvoice. I tried with other forms and tables and i manage to get the methods i wanted to, but not in this one

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

Season of Sharing Community Challenge Winners!

Congratulations to our community stars!

Women in Power Builds Momentum

Expanding mentorship, skilling, and AI innovation

Congratulations to the August Top 10 Community Leaders

These are the community rock stars!

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

#1
Martin Dráb Profile Picture

Martin Dráb 582 Most Valuable Professional

#2
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 410 Super User 2026 Season 2

#3
CU-1234529-002 Profile Picture

CU-1234529-002 185

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans