Thomas
Thomas

Reputation: 31

AX2012 RouteOpr form shows all RouteOpr entries for a single ressource instead of the specific ones

My problem is that we inserted some routeOpr with the following logic (embedded in a job, see below) and now the RouteOpr form shows all the routeOpr entries in the RouteOpr Form no matter which ressource was selected.

Can someone please explain what the "RouteOpr" form is supposed to to if it is called via

'Organisation administration' / 'Area page' -> select a Ressource and click on 'Applicable for' / 'Operations'

enter image description here enter image description here

With some debugging I already found out what the query for the form is, but I don't understand why the form isn't just showing the routeOpr entries for the specific ressource.

    RouteOpr                        routeOpr;
    WrkCtrRouteOprActivity          wrkCtrRouteOprActivity;
    WrkCtrActivity                  wrkCtrActivity;
    WrkCtrActivityRequirementSet    wrkCtrActivityRequirementSet;
    WrkCtrAbility                   wrkCtrAbility;
    WrkCtrActivityRequirementView   wrkCtrActivityRequirementView;

    changeCompany('someCompany')
    {
        WHILE SELECT routeOpr
            EXISTS JOIN wrkCtrRouteOprActivity
                WHERE routeOpr.RecId == wrkCtrRouteOprActivity.RouteOpr
                    EXISTS JOIN wrkCtrActivity
                        WHERE wrkCtrRouteOprActivity.Activity == wrkCtrActivity.RecId
                            EXISTS JOIN wrkCtrActivityRequirementSet
                                WHERE wrkCtrActivity.RecId == wrkCtrActivityRequirementSet.Activity
                                    NOTEXISTS JOIN wrkCtrActivityRequirementView
                                        WHERE wrkCtrActivityRequirementSet.RecId == wrkCtrActivityRequirementView.ActivityRequirementSet
                                            NOTEXISTS JOIN wrkCtrAbility
                                                WHERE wrkCtrActivityRequirementView.AbilityType == wrkCtrAbility.AbilityType
                                                   && wrkCtrActivityRequirementView.AbilityRecId == wrkCtrAbility.AbilityRecId
                                                   && (((wrkCtrAbility.LevelValue >= wrkCtrActivityRequirementView.MinimumLevelNeeded)))
                                                   && ((wrkCtrAbility.WrkCtrId == 'someWrkCtrId'))
                                                   && ((wrkCtrAbility.ValidFrom <= systemDateGet())
                                                   && ((wrkCtrAbility.ValidTo >= systemDateGet())))
                     {
                         Debug::printDebug(strFmt("%1 %2 %3", routeOpr.OprId, routeOpr.WrkCtrIdCost, routeOpr.ItemRelation));
                     }
    }

I think that I made some mistake and/or forgot something in my job, maybe someone can help me.

select forUpdate route;
select forUpdate routeOpr;
select forUpdate wrkCtrActivityResourceRequirement;
select forUpdate wrkCtrActivityRequirementSet;
select forUpdate wrkCtrActivityRequirement;


route.clear();
route.RouteId      = routeVersion.RouteId;
route.OprNum       = 10;
route.OprNumNext   = 0;
route.OprId        = oprId;
route.Level        = 1;
route.AccError     = 1.00;
route.insert();


routeOpr.clear();
routeOpr.ItemCode          = TableGroupAll::Table;
routeOpr.ItemRelation      = routeVersion.ItemId;
routeOpr.RouteCode         = RouteAll::Route;
routeOpr.RouteRelation     = routeVersion.RouteId;
routeOpr.OprId             = route.OprId;
routeOpr.ProcessPerQty     = 1.00;
routeOpr.FormulaFactor1    = 1.00;
routeOpr.WrkCtrIdCost      = ressource;
routeOpr.COL_UnitId        = "HMIN";
routeOpr.ProcessTime       = str2num(time);
routeOpr.RouteGroupId      = "SOLL=IST";
routeOpr.ToHours           = 0.0002;
routeOpr.insert();


wrkCtrActivityRequirementSet = routeOpr.activityRequirementSet();
wrkCtrActivityRequirementSet.selectForUpdate(true);
//wrkCtrActivityRequirementSet.LoadPercent = 100;
//wrkCtrActivityRequirementSet.Quantity    = 1;
wrkCtrActivityRequirementSet.update();

wrkCtrActivityRequirement.clear();
wrkCtrActivityRequirement.ActivityRequirementSet     = wrkCtrActivityRequirementSet.RecId;
wrkCtrActivityRequirement.RelationshipType           = WrkCtrActivityRequirementType::Resource;
wrkCtrActivityRequirement.UsedForJobScheduling       = NoYes::Yes;
wrkCtrActivityRequirement.UsedForOperationScheduling = NoYes::Yes;
wrkCtrActivityRequirement.insert();

wrkCtrActivityResourceRequirement.clear();
wrkCtrActivityResourceRequirement.setActivityRequirement(wrkCtrActivityRequirement.RecId);
wrkCtrActivityResourceRequirement.WrkCtrId = ressource;
wrkCtrActivityResourceRequirement.insert();

Upvotes: 0

Views: 831

Answers (1)

Thomas
Thomas

Reputation: 31

Apart from the incorrect job, the actual error was that I didn't set the value of the wrkCtrActivityResourceRequirement.ResourceDataAreaId field.

So i made a job which sets the field like this

wrkCtrActivityResourceRequirement.ResourceDataAreaId = curExt2dataareaid(tableNum(WrkCtrTable)); 

and now the correct entries are shown.

(I didn't notice the error because the field was set visible = No, so it was not shown in the table browser.)

Upvotes: 1

Related Questions