| Quintiq file version 2.0 | 
| #parent: #root | 
| Method CreateSCVEdge ( | 
|   shadow[SCVNode] owner, | 
|   shadow[SCVNode] inputnode, | 
|   Boolean isupstream, | 
|   Process_MP process | 
| ) as shadow[SCVEdge] id:Method_FormSupplyChainVisualization_CreateSCVEdge | 
| { | 
|   #keys: '[132894.0.863091930]' | 
|   Body: | 
|   [* | 
|     // Create SCVEdge | 
|      | 
|     // Retrieve the quantity that should be displayed on the edge | 
|      | 
|     // The concept of edge building is: | 
|     // The edges are owned by the node  | 
|     // that has more edges, so that  | 
|     // the node doesn't have to remember | 
|     // that many keys, but only one key, which is the key | 
|     // of the single edge that points to the node                       | 
|     scvedge := owner.SCVEdge( relnew, | 
|                               IsUpstream := isupstream, | 
|                               DestinationKey := inputnode.Key().AsQUILL(), | 
|                               OriginKey := owner.Key().AsQUILL() );   | 
|      | 
|     // Append destination nodes keys to scvedge | 
|     // We need to store the node as key because all these are shadow | 
|     // and in shadow objects, only the owner has acess to the children | 
|     // The children DON'T have access to their owner, since edge doesn't  | 
|     // own node, the only way for edge to find its nodes is to remember  | 
|     // their keys  | 
|     inputnode.OwnerNodeKey( owner.Key().AsQUILL() ); | 
|     inputnode.Depth( owner.Depth() + 1 ); | 
|     owner.IsUpstream( isupstream ); | 
|     inputnode.IsUpstream( isupstream ); | 
|      | 
|     // Update the depth of the tree, better to update the max depth here | 
|     // rather than after we have created all the nodes | 
|     depth := 0; | 
|     scvConfig := DataHolderSCVConfiguration.Data(); | 
|     if( isupstream ) | 
|     {  | 
|       depth := maxvalue( inputnode.Depth(), scvConfig.UpstreamDepth() ) | 
|       scvConfig.UpstreamDepth( depth ); | 
|     } | 
|     else | 
|     {  | 
|       depth := maxvalue( inputnode.Depth(), scvConfig.DownstreamDepth() ) | 
|       scvConfig.DownstreamDepth( depth ); | 
|     } | 
|      | 
|     return scvedge; | 
|   *] | 
| } |