| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride Copy ( | 
|   ScenarioNode scenarionode, | 
|   String scenarioname, | 
|   String newassumption, | 
|   String comment, | 
|   String storagestate, | 
|   String kbdescription, | 
|   String kbname, | 
|   Key macroplanmdskey, | 
|   String datasetname | 
| ) as Scenario | 
| { | 
|   Description: 'Make a copy of this scenario' | 
|   TextBody: | 
|   [* | 
|     // Get current user's name | 
|     currentusername := GlobalParameters_MP::GetUserName(); | 
|      | 
|     // Get mds info of the selected dataset | 
|     mdsEditor       := MDSEditor::Editor(); | 
|     mdsObjectInfo   := mdsEditor.LoadedObjectInfo( macroplanmdskey ); | 
|      | 
|     //create a new scenario | 
|     scenario := construct( ScenarioMP, | 
|                            Name                    := scenarioname, | 
|                            CreatedBy               := currentusername, | 
|                            CreatedOn               := DateTime::Now(), | 
|                            DatasetMDSID            := macroplanmdskey, | 
|                            DatasetName             := datasetname, | 
|                            Comment                 := comment, | 
|                            IsLoaded                := true, | 
|                            KBName                  := kbname, | 
|                            State                   := storagestate, | 
|                            KBDescription           := kbdescription | 
|                          ); | 
|      | 
|     // Copy all assumptions over from the current scenario to the new scenario | 
|     traverse( this, Assumption, assumption ) | 
|     { | 
|      assumption.Copy( scenario ); | 
|     } | 
|      | 
|     // Create new assumption for the new scenario | 
|     scenario.CreateNewAssumption( newassumption ); | 
|     // Update last changed status of the new scenario | 
|     scenario.UpdateLastChanged(); | 
|     // Call job to update MacroPlan dataset with the info from the new scenario | 
|     MacroPlan::JobUpdateCompany( mdsObjectInfo.MDSID(), scenario ); | 
|      | 
|     //Copy authorization | 
|     groupnames := selectvalues( this, ScenarioAuthorization, sa, true, sa.Name() ) | 
|     scenario.Authorize( groupnames, true ); | 
|      | 
|     // refresh KPI after copy | 
|     /*Create MDSID from ScenarioManager, then pass the arguments | 
|       to existing method to refresh newly copied scenario KPI*/ | 
|     smMDSID := MDSID::Create( this.ScenarioManager().MDSID() ); | 
|     ScenarioManager::JobUpdateKPIValue( smMDSID, false, mdsObjectInfo.MDSID() ) | 
|      | 
|     // Add the new scenario into scenario manager | 
|     return this.ScenarioManager().AddLeaf( scenarionode, &scenario ).astype( Scenario ); | 
|   *] | 
| } |