How to roll-up cycle times and costs of MBOM in Aras MPP Process Plans?

At the moment, we can add cycle times and setup times to operations, and cycle times to steps. But this information does not display anywhere once entered. That is fine, but at least if there was the ability to roll-up the cycle times of all the operations in the Process plan, taht would be great. Has anybody attempted this on their isntances?

On a similar vein, the phantoms and MBOM only parts consumed have costs associated with them (for ex. I intend to have 'Material' category parts in the MBOM (we use polyureethanes for casting) as the quantity and hence the cost of the material is a process parameter and not an EBOM item. Is there any way to roll-up the 'MBOM cost'? Would appreciate if anybody could point me in the direction of how to set this up



  • Hi Sachin,

    we also plan to do something similar in the future. I haven´t worked on this yet, but already thought about a few concepts. The following text is more some kind of brain-storming, do not take it too serious! But I would be very happy to hear how you solved this one.

    I already asked Aras about the cycles times. So far, the values are not used for any calculation.

    For calculation cycle/setup-times I wouldn´t use the exact same cost goal rollup concept which is used in Parts. Part and the Part BOM are multilevel structures, so you have to calculate over multiple levels. MPP Process Plans normally just contain one additional level for Operations and another level including the Steps. (Exception: ProcessPlans that are used in ProcessPlans....)

    So my first idea was to add two additional "sum" properties, one in ItemType 'Process Plan' and another one in 'Operations'.

    Regarding the calculation, I had two ideas:

    1. Use classical onAfterAdd/onAfterUpdate/onAfterDelete/onAfterVersion Methods that updates the "sum" properties as soon Users modify Steps and Operations. The events could trigger a SQL procedure to update the parent Items cyle time properties. I am not sure, how complicated this one will become for multilevel ProcessPlans.
    2. Use federation to calculate the cycle time

    One thing that propably should be solved with additional Methods:
    The current properties do not specify any units and do not contain some kind of unit conversion. So we have to ensure, people enter valid values and stick to certain units (minutes, seconds).

    Another issue will be, were to display the cycle-time calculations. I do not want to use some kind of "Cost-Roll Up report" like it is used in ItemType Part. It´s possible to add additional properties to MPP, but it´s also some work that has to be done.

    Regarding MBOM cost rollup. It somehow reminds me to Effectity. The MBOM costs are not fixed EBOM values, but are more depending from what you actually used for your product. Maybe the costs and cost roll-up can federated. But that´s just a quick idea...


  • I am famous for writing long exhausting texts that are hard to follow at a certain poin.  But hey, the answer was fast! :-). The above text is really just a collection of ideas, it should be splitted in serveral small tasks. 

    But you do not really need programming knowledge for this kind of customization, you just need to know where you can find things.

    Displaying the cycle time is one of the first things I would do to solve the task.I made a quick and dirty test, as I also need this customization anyway. But it still needs further testing:

    Take a look at the Method 'mpp_OperationElementRenderer'

    Around line 45 add additional code for displaying the timing in the process plan:

            RenderStartHtmlElementfunction(/*WrappedObject*/ schemaElement, /*Object*/ elementState) {
                var startHtml = this.inherited(arguments);
                var detailsButtonContent = elementState.isDetailsEmpty && elementState.isEditable ?
                    this.wrapInTag('''img', {class'ExpandDetailsButton', src: '../../images/EditItem.svg', title: this.resourceStrings.editDetails}) : '';
                var operationCaption = this.wrapInTag(schemaElement.nodeName + ' ' + schemaElement.getProperty('sort_order') +
                    ' : ' + schemaElement.getProperty('name') + detailsButtonContent, 'div', {class'OperationCaption'});
                var timing = "Setup time: " + schemaElement.getProperty('setup_time') + "min, Cycle time: " + schemaElement.getProperty('cycle_time') + "min";
                return startHtml + operationCaption + timing;
    Around line 315 add additional code for displaying the timing in the side bar:
       GetTreeNamefunction(/*WrappedObject*/ schemaElement, /*Object*/ elementState) {
                var elementName = '';

                if (elementState.isBlocked) {
                    elementName = this.resourceStrings.itemIsBlocked;
                } else if (!elementState.isEmpty) {
                    var itemName = schemaElement.getProperty('name');
                    elementName = schemaElement.getProperty('sort_order') + (itemName ? ' : ' + itemName : '');
                    var timing = "(" + schemaElement.getProperty('setup_time') + "min / " + schemaElement.getProperty('cycle_time') + "min)";
                    elementName += " " + timing

                return this.wrapInTag(elementName, 'span', {class'ArasXmlSchemaElementTypeNode'});
  • Is the code insertion similar if i want to display the cycle time of each step in the operation?

    If I have not understood the whole process incorrectly, the operational cycle time is the sum of the cycle times of the steps right? Is it possible to automatically sum up the cycle times of the steps to calculate the operational cycle time?

  • I haven´t tried it yet, but I am pretty sure Steps can be customized the same way. Just try to get a feeling of how Aras names stuff in Innovator.
    When the Method 'mpp_OperationElementRenderer' renders our Operations, how would you call a Method that renders 'Steps'? :-)

    Quote: "...the operational cycle time is the sum of the cycle times of the steps right?". There is no right or wrong answer, but I would calculate it this way. If you change a step, it has direct influence to the parent levels 
    Steps are Relationships of Operations. And Operations are Relationships of ProcessPlans. So I would just rollup this structure.

    For the rollup there are two option: Do you just want to display the sum (on demand calculation) or do you want to store the value in the database?

  • Hey Angela, I thought along the same ways and manged to get a hold of mpp_stepelementrenderer method. Have made similar mods there , at least for the WIS so far, and works well (I did however not like the fact that adding a new variable for the timing entered that text in the WIS in the next line to the Step title. So I added the cycle-time property capture in the 'Stepcaption' variable instead - seems to work and nothing has exploded yet. So sticking to it for now)

    For the time roll-up, level 1 feature request would be of course just sum up and display. But If i need to meaningfully roll-up the times and then use it to do labour costing for a particular process, having access to that data stored in DB would be necessary i think

  • Yep, stepelementrenderer was the right answer! You will notice that there are a lot of similar Methods that render all kind of stuff you see in MPP. As all the various elements have their unique look&feel, my version for the Operations may not work for the other elements the same way. I also would add the cycle_time to the caption, just like you did. 

    I also prefer option 2 for doing the rollup, as we normally need these kind of data in the db for various purposes. 

    We can use a similiar concept that is used for the Files flag in ItemType Manufacturer Part and Document. Take a look at the ItemType Document File. There you can find a Server Method that is called at 4 different events. We can use a modified version of this Method for 4 server events in the mpp_Step ItemType, that makes a SUM of the cycle_time property.

    There are two options:

    1. Trigger a SQL procedure (just like the files flag Method) that makes a SUM of the step cycle_times and writes the value in the operation cycle_time

    FROM innovator.[ <-- add source itemtype --> ]
    WHERE (SOURCE_ID = ' --- add source_id--- ')

    2. Use AML instead of SQL procdure.You normally just use SQL procedures, when you really have no other options. When we work inside a ProcessPlan, we already have full permission access to Operations and Steps. So it should be possible update the cycle_time with AML.