Skip to main content

Notifications

Announcements

No record found.

Finance | Project Operations, Human Resources, ...
Answered

Error opening EcoResProductDetailsExtended form in F&O

(1) ShareShare
ReportReport
Posted on by 11
"Assignment 6
Objective: Develop and extend features to enhance the management of released products including tracking product reviews
Extend InventTable and form:
Add new field for rating which you created earlier and display the rating as * on the invent table form
Get the Rating from ProductReviewForm (max value rating for the form)"
 
This was the task given and in accordance to the requirement about management of released products I selected the EcoResProductDetailsExtended form and created an extension. I extended the InventTable which is a data source in the form and added custom fields ReviewRating (base enum containing 1-5 rating values) and RatingStar (EDT container) and built the solution after which the fields reflected in the form extension data source and I added ReviewRating to the forms design node and since I can't drag drop a container, I created an image control and bound it to the container by data source and field properties and I also created resources to store images of the star ratings. Created a code extension and wrote this as the code: 
 
[ExtensionOf(formStr(EcoResProductDetailsExtended))]
final class EcoResProductDetailsExtended_YD_Extension
{
    public void init()
    {
        next init();
        
        ProductReview productReview;
        FormDataSource inventTableDS = this.datasource(formDataSourceStr(EcoResProductDetailsExtended, InventTable));
        if (inventTableDS && inventTableDS.cursor())
        {
            // Fetch the highest rating for the current product
            select firstOnly maxof(ReviewRating) from productReview
                where productReview.ProductId == inventTableDS.cursor().(fieldNum(InventTable, ItemId));
            if (productReview)
            {
                str imagePath;
                BinData binData = new BinData();
                container imageContainer;
            
                // Determine the image path based on the rating
                switch (productReview.ReviewRating)
                {
                    case 1:
                        imagePath = resourceStr("Stars_1");
                        break;
                    case 2:
                        imagePath = resourceStr("Stars_2");
                        break;
                    case 3:
                        imagePath = resourceStr("Stars_3");
                        break;
                    case 4:
                        imagePath = resourceStr("Stars_4");
                        break;
                    case 5:
                        imagePath = resourceStr("Stars_5");
                        break;
                    default:
                        imagePath = resourceStr("NoStarRating");
                        break;
                }
                // Load the image into BinData
                binData.loadFile(imagePath);
                // Convert binary data into a container
                imageContainer = binData.getData();
                // Update the RatingStar field with the image container
                inventTableDS.cursor().(fieldNum(InventTable, RatingStar)) = imageContainer;
                // Refresh the data source to display the image
                inventTableDS.refresh();
            }
        }
    }
}"
 
The code isn't showing any errors in the compiler but when I build the solution I get this error:
"SeverityCodeDescriptionProjectFileLineSuppression State
ErrorOperationCanceledException: The operation was canceled.ProductManagement (ISV) [YD]C:\Program Files (x86)\MSBuild\Microsoft\Dynamics\AX\Microsoft.Dynamics.Framework.Tools.BuildTasks.17.0.targets63"
 
And when I try to separately open the form in F&O it wont let me open it and gives this as an error
"Object reference not set to an instance of an object.
The form with name ecoresproductdetailsextended could not be opened."
  • Verified answer
    Martin Dráb Profile Picture
    Martin Dráb 230,560 Most Valuable Professional on at
    Error opening EcoResProductDetailsExtended form in F&O
    Your display method is definetely wrong. It's defined on the form and it (in a over-complicated way) refers to the current buffer, but the display method should refer to the buffer it runs for, not the currently selected one. It should be defined either on the table (and refer to this variable) or a form data source (and use a method parameter). 
     
    First of all, learn how to create a trivial display method returning a fixed value. Later we can talk about what code to put there, but you need to learn the basics first.
     
    Note that you can find a plenty of information about display methods on the internet, as well as many examples in the standard codebase.
  • Layan Jwei Profile Picture
    Layan Jwei 7,439 Super User 2024 Season 2 on at
    Error opening EcoResProductDetailsExtended form in F&O
    Hi,
     
    I'm not sure if u took all suggestions into account.
     
    What is the code the calls the method "displayRatingStar" can you show us the full code?
     
    Also again can you please put break points and tell us at which line exactly does the code fail?
  • YD-01011239-0 Profile Picture
    YD-01011239-0 11 on at
    Error opening EcoResProductDetailsExtended form in F&O
    @Martin Dráb @Layan Jwei i took your respective suggestions and made changes to the code and ran the debugger  
     
    [ExtensionOf(formStr(EcoResProductDetailsExtended))]
    final class EcoResProductDetailsExtended_YD_Extension
    {
        // Create a display method for the RatingStar field
        public display container displayRatingStar()
        {
            ProductReview productReview;
            container imageContainer;
            InventTable inventTable = this.datasource(formDataSourceStr(EcoResProductDetailsExtended, InventTable)).cursor();
            
            if (inventTable)
            {
                // Get the highest rating for current product
                select firstOnly maxof(ReviewRating) from productReview
                    where productReview.ProductId == inventTable.ItemId;
                    
                if (productReview)
                {
                    str imagePath;
                    BinData binData = new BinData();
                    
                    // Your existing switch case for image paths
                    switch (productReview.ReviewRating)
                    {
                        case 1:
                            imagePath = resourceStr("Stars_1");
                            break;
                        case 2:
                            imagePath = resourceStr("Stars_2");
                            break;
                        case 3:
                            imagePath = resourceStr("Stars_3");
                            break;
                        case 4:
                            imagePath = resourceStr("Stars_4");
                            break;
                        case 5: 
                            imagePath = resourceStr("Stars_5");
                            break;
                        default:
                            imagePath = resourceStr("NoStarRating");
                            break;
                    }
                    
                    if (binData.loadFile(imagePath))
                    {
                        imageContainer = binData.getData();
                    }
                }
            }
            return imageContainer;
        }
    }
  • YD-01011239-0 Profile Picture
    YD-01011239-0 11 on at
    Error opening EcoResProductDetailsExtended form in F&O
    @Layan Jwei thanks for the code correction i'll give it a try and get back to you!
  • YD-01011239-0 Profile Picture
    YD-01011239-0 11 on at
    Error opening EcoResProductDetailsExtended form in F&O
    @Martin Dráb i'll give your suggestions a try and get back to you!
  • Suggested answer
    Martin Dráb Profile Picture
    Martin Dráb 230,560 Most Valuable Professional on at
    Error opening EcoResProductDetailsExtended form in F&O
    The logic of your code is wrong. You're trying to access the current InventTable record, but there isn't any, because your code runs when the form is still being initialized, before any data source records get loaded.
     
    You should create a display method instead of your current code and the container field.
     
    Also, you should also familiarize yourself with the debugger. In this case, you'd know where exactly the error was thrown, which could help you to understand the problem. When you get an error that you don't understand, your next step should always be getting more information.
  • Layan Jwei Profile Picture
    Layan Jwei 7,439 Super User 2024 Season 2 on at
    Error opening EcoResProductDetailsExtended form in F&O
    Hi,
     
    Did you debug and see where it fails exactly?
    I think it's failing at this line:
    inventTableDS.cursor().(fieldNum(InventTable, ItemId));
     
    Maybe try this instead:
     
    InventTable inventTableLocal = inventTableDS.cursor();​​​​​​
    select firstOnly maxof(ReviewRating) from productReview where productReview.ProductId == inventTableLocal.ItemId;
     
    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
    ​​​​​​

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

December Spotlight Star - Muhammad Affan

Congratulations to a top community star!

Top 10 leaders for November!

Congratulations to our November super stars!

Tips for Writing Effective Verified Answers

Best practices for providing successful forum answers ✍️

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 291,472 Super User 2024 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 230,560 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Product updates

Dynamics 365 release plans