| Quintiq file version 2.0 | 
| #parent: #root | 
| Method EditKBBranch ( | 
|   Scenario scenario, | 
|   String kbname | 
| ) id:Method_ApplicationLibMacroPlanner_EditKBBranch | 
| { | 
|   #keys: '[11122.0.58944389]' | 
|   Body: | 
|   [* | 
|     //Edit a kb branch with active dataset | 
|     componentmds := ComponentMDS::CreateForLoadedMDSsOnly( Application ); | 
|     mdsinstance := selectobject( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().Equals( scenario.DatasetMDSID() ) ); | 
|     mdshandle := mdsinstance.GetMDSHandle(); | 
|      | 
|     kbinfo := null( MDSObjectKB ); | 
|     if ( scenario.istype( ScenarioMP ) ) | 
|     { | 
|       kbinfo := select( mdsinstance.GetMDSHandle().AsMacroPlan().MDSMacroPlan(), MDSKBs, kb, kb.Name().ToUpper() = kbname.ToUpper() ); | 
|     } | 
|      | 
|      | 
|      | 
|     kbfullid := KBFullID::Create( kbinfo.Domain(), kbinfo.Name(), kbinfo.Branch(), kbinfo.Version(), kbinfo.ChangeNr() ); | 
|     editor := CKBEditor::Create(); | 
|     ckbhandle := editor.LoadNewestKBChange( kbfullid ); | 
|      | 
|     // lock | 
|     editor.LockKB( ckbhandle.CKB().ID(), mdshandle ); | 
|      | 
|     // edit | 
|     dlg := construct( dlgKnowledgeBaseEditor ); | 
|     result := dlg.EditKnowledgeBase( mdshandle, ckbhandle, this ); | 
|     if ( result > 0 and dlg.Data().NeedsSave() ) | 
|     { | 
|       // save | 
|       editor.SaveMDSKB( mdshandle, kbfullid.KBID(), 'Edit branch' ); | 
|      | 
|       // delete old KB | 
|       infos := editor.GetKBStructure( kbfullid.KBID() ); | 
|       traverse( infos, Elements.KBFullID, i, i.Branch() = kbinfo.Branch() and i.ChangeNr() < kbinfo.ChangeNr() ) | 
|       { | 
|         editor.DeleteKBChange( i ); | 
|       } | 
|     } | 
|     else | 
|     { | 
|       editor.UnlockKB( ckbhandle.CKB().ID(), mdshandle ); | 
|     } | 
|      | 
|     //give some time for kbinfo.ChangeNr() to get updated | 
|     Kernel.Sleep( 1000 ); | 
|     ScenarioManager.UpdateScenarioKBInfo( scenario, kbinfo.Name(), kbinfo.Branch(), kbinfo.ChangeNr(), scenario.State(), scenario.KBDescription() ) | 
|   *] | 
| } |