Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method ImportFromXML ( 
 | 
  String xmlstring, 
 | 
  output String feedback_o 
 | 
) as Boolean 
 | 
{ 
 | 
  Description: 'Restores view setting. Called by designer during retrieve view' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Import supply chain view from XML 
 | 
    result := true; 
 | 
     
 | 
    // Check if xmlstring is populated 
 | 
    if( xmlstring.Length() > 0 ) 
 | 
    { 
 | 
      xmlview := null( SupplyChainView ); 
 | 
       
 | 
      // Try to import xmlstring 
 | 
      try 
 | 
      { 
 | 
        xmlview := SupplyChainView::XMLImportSupplyChainViewXML( xmlstring ); 
 | 
      } 
 | 
      onerror 
 | 
      { 
 | 
        result := false;       
 | 
      } 
 | 
       
 | 
      // Check if xmlview is null 
 | 
      if( not isnull( xmlview ) ) 
 | 
      { 
 | 
        // Update this with xmlview 
 | 
        this.Update( xmlview.SupplyChainBackground(), 
 | 
                     xmlview.FontSize(), 
 | 
                     xmlview.FontName(), 
 | 
                     xmlview.GridPointDistance(), 
 | 
                     xmlview.RelativeStockingPointSize(), 
 | 
                     xmlview.RelativeUnitHeight(), 
 | 
                     xmlview.RelativeUnitWidth(), 
 | 
                     xmlview.RelativeProductHeight(), 
 | 
                     xmlview.RelativeProductWidth(), 
 | 
                     xmlview.IsGridVisible(), 
 | 
                     xmlview.IsLaneVisible(), 
 | 
                     xmlview.IsUnitNodeLabelVisible(), 
 | 
                     xmlview.IsStockingPointNodeLabelVisible(), 
 | 
                     xmlview.ArrowColor(), 
 | 
                     xmlview.HasPersistentArrows(), 
 | 
                     this.OffsetX(), 
 | 
                     this.OffsetY() ) 
 | 
     
 | 
        // Traverse all nodes in xmlview 
 | 
        traverse( xmlview, Node, xmlnode ) 
 | 
        { 
 | 
          // Executes logic according to the type of the object 
 | 
          ontype( xmlnode ) 
 | 
          { 
 | 
            // If xmlnode is type of UnitNode 
 | 
            UnitNode as unitxmlnode: 
 | 
            { 
 | 
              // Select UnitNode with the same name as xmlnode 
 | 
              node := select( this, UnitNode, n, n.Name() = xmlnode.Name() ); 
 | 
              // Check if node is null 
 | 
              if( not isnull( node ) ) 
 | 
              { 
 | 
                // Update node with values from xmlnode 
 | 
                node.Update( unitxmlnode.GridX(), unitxmlnode.GridY(), unitxmlnode.IsUserVisible(), unitxmlnode.NameDisplayBehavior(), 
 | 
                             unitxmlnode.TextColor(), unitxmlnode.BackgroundImageName() ); 
 | 
              } 
 | 
            } 
 | 
            // If xmlnode is type of StockingPointNode 
 | 
            StockingPointNode as stockingpointxmlnode: 
 | 
            { 
 | 
              // Select StockingPointNode with the same name as xmlnode 
 | 
              node := select( this, StockingPointNode, n, n.Name() = stockingpointxmlnode.Name() ); 
 | 
              // Check if node is null 
 | 
              if( not isnull( node ) ) 
 | 
              { 
 | 
                // Update node with values from xmlnode 
 | 
                node.Update( stockingpointxmlnode.GridX(), stockingpointxmlnode.GridY(), stockingpointxmlnode.IsUserVisible(), stockingpointxmlnode.NameDisplayBehavior(), 
 | 
                             stockingpointxmlnode.TextColor() ); 
 | 
              } 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
     
 | 
        //Hide newly added nodes that are not defined in the xmlstring yet 
 | 
        unitnodes := selectset( this, Node.astype( UnitNode ), n, 
 | 
                                not exists( xmlview, Node.astype( UnitNode ), xmlnode, xmlnode.Name() = n.Name() ) ) 
 | 
        traverse( unitnodes, Elements, e ) 
 | 
        { 
 | 
          e.IsUserVisible ( false ); 
 | 
        } 
 | 
     
 | 
        spnodes := selectset( this, Node.astype( StockingPointNode ), n, 
 | 
                              not exists( xmlview, Node.astype( StockingPointNode ), xmlnode, xmlnode.Name() = n.Name() ) ) 
 | 
        traverse( spnodes, Elements, e ) 
 | 
        { 
 | 
          e.IsUserVisible ( false ); 
 | 
        } 
 | 
     
 | 
        // Delete xmlview 
 | 
        xmlview.Delete(); 
 | 
      } 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      result := false; 
 | 
    } 
 | 
     
 | 
    // Return feedback if the method failed to parse xmlstring 
 | 
    if( not result ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_SupplyChainView_ImportFromXML_InvalidFile(); 
 | 
    } 
 | 
     
 | 
    return result; 
 | 
  *] 
 | 
} 
 |