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() ) 
 | 
  *] 
 | 
} 
 |