Skip to main content

Notifications

Microsoft Dynamics AX (Archived)

how to bound display method to the form values

(0) ShareShare
ReportReport
Posted on by 787

Hello,

I need on the form RouteInventProd to add a display method to the "Overview" tab of the lower grid that will take values from the tab "Resource Requirements" and depending on the value display different values.

I write something like this:

display ProdUnitId prodUnitId1()
{
    RouteOpr                        routeOpr1;
    WrkCtrRouteOprActivity          wrkCtrRouteOprActivity;
    WrkCtrActivityRequirementSet    wrkCtrActivityRequitementSet;
    WrkCtrActivityRequirement       wrkCtrActivityRequirement;
    WrkCtrResourceGroup             wrkCtrResourceGroup;
    WrkCtrResourceGroupResource     wrkCtrResourceGroupResource;

select * from wrkCtrActivityRequirement
        join wrkCtrActivityRequitementSet
            where wrkCtrActivityRequitementSet.RecId == wrkCtrActivityRequirement.ActivityRequirementSet
        join wrkCtrRouteOprActivity
            where wrkCtrRouteOprActivity.Activity == wrkCtrActivityRequitementSet.Activity
        join routeOpr1
            where routeOpr1.RecId == wrkCtrRouteOprActivity.RouteOpr;              
    
    
if (wrkCtrActivityRequirement.RelationshipType == WrkCtrActivityRequirementType::ResourceGroup)
    {
        select * from wrkCtrResourceGroup
            where wrkCtrResourceGroup.WrkCtrId == wrkCtrActivityRequirement.requirementEdit();
        return wrkCtrResourceGroup.ProdUnitId;
    }
    
else if (wrkCtrActivityRequirement.RelationshipType == WrkCtrActivityRequirementType::Resource)
    {
        select * from wrkCtrResourceGroupResource
            where wrkCtrResourceGroupResource.WrkCtrId == wrkCtrActivityRequirement.requirementEdit();
        select * from wrkCtrResourceGroup
            where wrkCtrResourceGroup.RecId == wrkCtrResourceGroupResource.ResourceGroup;
        return wrkCtrResourceGroup.ProdUnitId;
    }
    
    return " ";
            
}

I add this display method to the table "RouteOpr" and then add this table as data source to the form. Then as JoinSource I point out "ProdRoute" table and type is OuterJoin.
But my query from above always returns the same value and doesn't bound anyhow to the values on the form. Tell me please how can I bound to the form values? It's Tab "Resource Requirements"

115.JPG

The values I need:

2480.114.JPG

In case of additional questions please feel free to ask. Thanks you.

*This post is locked for comments

  • nmaenpaa Profile Picture
    nmaenpaa 101,156 on at
    RE: how to bound display method to the form values

    Also, why did you now put this method in RouteOpr table? Why did you not put it in ProdRoute table? You say that you "need to check out all records from "WrkCtrActivityRequirement" grid connected with the record from the grid "ProdRoute"". So the only logical place for this method is the ProdRoute table!

  • Suggested answer
    nmaenpaa Profile Picture
    nmaenpaa 101,156 on at
    RE: how to bound display method to the form values

    I'm not sure if I understand, but are you saying that you expect your select statement to return more than one record but it returns only one record?

    Meaning: do you see multiple records in the "WrkCtrActivityRequirement" grid, but your select statement finds only one WrkCtrActivityRequirement? Please clarify.

    If that is the case I recommend you examine the criteria that you have in the select statement and make sure it corresponds to the table relations.

    Also please notice that your while loop is terminated if either of the conditions inside it are satisfied (you use return command there). So if you find a record that matches either one of the if statements, you will return wrkCtrResourceGroup.ProdUnitId. Is this intentional? Anyway your display method can return only one ProdUnitId.

  • dark_knight Profile Picture
    dark_knight 787 on at
    RE: how to bound display method to the form values

    I have put my display method to the "RouteOpr" table eventually. I've put DataSource for it - "ProdRoute" and LinkType: OuterJoin

    The code is:

    display ProdUnitId prodUnitId1()
    {
    
        WrkCtrRouteOprActivity          wrkCtrRouteOprActivity1;
        WrkCtrActivityRequirementSet    wrkCtrActivityRequitementSet;
        WrkCtrActivityRequirement       wrkCtrActivityRequirement1;
        WrkCtrResourceGroup             wrkCtrResourceGroup;
        WrkCtrResourceGroupResource     wrkCtrResourceGroupResource;
        WrkCtrActivity                  wrkCtrActivity1;
    
    
    
    while select * from wrkCtrActivityRequirement1
            join wrkCtrActivityRequitementSet
                where wrkCtrActivityRequitementSet.RecId == wrkCtrActivityRequirement1.ActivityRequirementSet
            join wrkCtrActivity1
                where wrkCtrActivity1.RecId == wrkCtrActivityRequitementSet.Activity
            join wrkCtrRouteOprActivity1
                where wrkCtrRouteOprActivity1.Activity == wrkCtrActivity1.RecId
                      && wrkCtrRouteOprActivity1.RouteOpr == this.RecId
        {
            if (wrkCtrActivityRequirement1.RelationshipType == WrkCtrActivityRequirementType::ResourceGroup)
            {
                select * from wrkCtrResourceGroup
                    where wrkCtrResourceGroup.WrkCtrId == wrkCtrActivityRequirement1.requirementEdit();
                return wrkCtrResourceGroup.ProdUnitId;
            }
            else if (wrkCtrActivityRequirement1.RelationshipType == WrkCtrActivityRequirementType::Resource)
            {
                select * from wrkCtrResourceGroupResource
                    where wrkCtrResourceGroupResource.WrkCtrId == wrkCtrActivityRequirement1.requirementEdit();
                select * from wrkCtrResourceGroup
                    where wrkCtrResourceGroup.RecId == wrkCtrResourceGroupResource.ResourceGroup;
                return wrkCtrResourceGroup.ProdUnitId;
            }
        }
    
        return " ";
    
    }


    Seems like it works but original task is to go through all records in the "WrkCtrActivityRequirement" grid and check for RelationShipType field value "ResourceGroup". Is there any means to do this? Currently it only sees one record on the grid "WrkCtrActivityRequirement" connected with record from grid "ProdRoute" and that's expected behavior but I need to check out all records from "WrkCtrActivityRequirement" grid connected with the record from the grid "ProdRoute"

    Thank you in advance.

  • Rustem Galiamov Profile Picture
    Rustem Galiamov 8,072 on at
    RE: how to bound display method to the form values

    В итоге RouteOpr и не нужно было добавлять. Если использовать displayMethod() который зависит от тех таблиц, которые уже есть в DS, то достаточно на основной  DS повесить метод и там уже написать запрос.

  • Verified answer
    nmaenpaa Profile Picture
    nmaenpaa 101,156 on at
    RE: how to bound display method to the form values

    Ah, you are right. You just had the ProdRoute variable defined in the method but you were not using it.

    Then I suggest you to step back one more time.

    Make this method only return something from "this" (for example int642str(this.RecId). That way you will see if you will see same value on all grid lines, or different value based on the active buffer on the grid.

    Could you do that and let us know the result?

    And please check these one more time:

    1) Is your grid's data source ProdRoute?

    2) Is your display method in ProdRoute table?

    3) Did you set following properties in your display field: DataSource: ProdRoute, DataMethod: prodUnitId1

  • dark_knight Profile Picture
    dark_knight 787 on at
    RE: how to bound display method to the form values

    I'm sorry but I join in the end the current table

      join this

               where this.RouteOprRefRecId == routeOpr1.RecId

    Doesn't that mean I look into the current record on my form datasource?

  • Suggested answer
    nmaenpaa Profile Picture
    nmaenpaa 101,156 on at
    RE: how to bound display method to the form values

    I think we already discussed this one.

    You have introduced a local ProdRoute buffer, and it has nothing to do with the active record of your form data source.

    Please read the earlier messages in this discussion to understand how to access the current active record when you are in a display method.

  • dark_knight Profile Picture
    dark_knight 787 on at
    RE: how to bound display method to the form values
    display ProdUnitId prodUnitId1()
    {
    
        WrkCtrRouteOprActivity          wrkCtrRouteOprActivity;
        WrkCtrActivityRequirementSet    wrkCtrActivityRequitementSet;
        WrkCtrActivityRequirement       wrkCtrActivityRequirement;
        WrkCtrResourceGroup             wrkCtrResourceGroup;
        WrkCtrResourceGroupResource     wrkCtrResourceGroupResource;
        WrkCtrActivity                  wrkCtrActivity;
        RouteOpr                        routeOpr1;
        ProdRoute                       prodRoute;
        
    
    while select * from wrkCtrActivityRequirement
            join wrkCtrActivityRequitementSet
                where wrkCtrActivityRequitementSet.RecId == wrkCtrActivityRequirement.ActivityRequirementSet
            join wrkCtrActivity 
                where wrkCtrActivity.RecId == wrkCtrActivityRequitementSet.Activity
            join wrkCtrRouteOprActivity
                where wrkCtrRouteOprActivity.Activity == wrkCtrActivity.RecId
            join routeOpr1
                where routeOpr1.Recid == wrkCtrRouteOprActivity.RouteOpr
            join this
                where this.RouteOprRefRecId == routeOpr1.RecId
        {
            if (wrkCtrActivityRequirement.RelationshipType == WrkCtrActivityRequirementType::ResourceGroup)
            {
                select * from wrkCtrResourceGroup
                    where wrkCtrResourceGroup.WrkCtrId == wrkCtrActivityRequirement.requirementEdit();
                return wrkCtrResourceGroup.ProdUnitId;
            }
            else if (wrkCtrActivityRequirement.RelationshipType == WrkCtrActivityRequirementType::Resource)
            {
                select * from wrkCtrResourceGroupResource
                    where wrkCtrResourceGroupResource.WrkCtrId == wrkCtrActivityRequirement.requirementEdit();
                select * from wrkCtrResourceGroup
                    where wrkCtrResourceGroup.RecId == wrkCtrResourceGroupResource.ResourceGroup;
                return wrkCtrResourceGroup.ProdUnitId;
            }
        }
    
        return " ";
    
    }

    wrote something like this but anyway doesn't work. Put it as a display method to the "ProdRoute" Table. It always retrieves the same record with the same recId. Seems like it doesn't refer to the current record in the "ProdRoute" grid on the form

  • Verified answer
    nmaenpaa Profile Picture
    nmaenpaa 101,156 on at
    RE: how to bound display method to the form values

    You can switch your AX language to English, it will definetely help others understand your screenshots better.

    Anyway, I suggest you try now to implement the display method in ProdRoute table.

    I think you should next concentrate on developing code that will fetch you the required data based on a ProdRoute record.

    Then put this code in your display method and see what happens.

    I also suggest you try to make your select statements more effective: avoid nested loops, use firstonly keyword when you know you will need only one record, use field list to get only the fields you need and so on. Complex display methods on grids can be real performance killers.

  • dark_knight Profile Picture
    dark_knight 787 on at
    RE: how to bound display method to the form values

    OK. Thank you for you answers. really appreciate this.

    Yes. I see that for one "ProdRoute" table record there can be multiple resource requirement records. I must take a look into resource requirement from the "gridRequirements" which data source is "WrkCtrActivityRequirement" and it's the 5th tab on the lower form. The difficulty is I have Russian interface and it's hard to explain. Then I must take the first value (field "RelationShipType")among resource requirements which relationship type is "ResourceGroup"  (if it's presented there) take a value of the next field "RequirementEditGrid" and then using the value of "RequirementEditGrid" display a value of WrkCtrResourceGroup.ProdUnitId in the display method. I hope it's understandable a bit.

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

Announcing Our 2025 Season 1 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Vahid Ghafarpour – Community Spotlight

We are excited to recognize Vahid Ghafarpour as our February 2025 Community…

Congratulations to the January Top 10 leaders!

Check out the January community rock stars...

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 292,162 Super User 2025 Season 1

#2
Martin Dráb Profile Picture

Martin Dráb 230,962 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Featured topics

Product updates

Dynamics 365 release plans