yanweiyuan3
2023-09-15 6982337837db3443d05ada70c0afbf331032cf15
Add Release & Copy(Save) button

在场景编辑中添加发布/复制(保存)按钮,并实现对应后台逻辑,修复了之前未测试出的部分问题
已修改15个文件
已添加13个文件
已删除1个文件
490 ■■■■■ 文件已修改
LibMacroPlanner/BL/InfoMessages.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_Scenario/Attribute_IsReleased.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_Scenario/Method_SetReleased.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/Type_ScenarioMP/Method_SetReleased.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Scenario/Method_SetReleased.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_GetSOPVersionInfo.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_pnlActions.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_pnlActions_btnOk_OnClick.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCopyScenario_OnClick.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LibMacroPlanner/BL/InfoMessages.qbl
@@ -529,6 +529,10 @@
  {
    DefaultText: 'Revert'
  }
  InfoMessage Scenario_General_IsReleased
  {
    DefaultText: 'Not allowed on a released scenario'
  }
  InfoMessage Strategy_CampaignOptimizer_DisableTooltip
  {
    DefaultText: 'When disabled, the optimizer is only allowed to replan the quantities of the campaigns based on the constraints of the campaigns created manually.'
LibMacroPlanner/BL/Type_Scenario/Attribute_IsReleased.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#parent: #root
Attribute IsReleased
{
  #keys: '3[412960.0.172790038][412960.0.172790037][412960.0.172790039]'
  Description: '该版本是否已发布'
  ValueType: Boolean
  InterfaceProperties { Accessibility: 'Module' }
}
LibMacroPlanner/BL/Type_Scenario/Method_CanSelect.qbl
@@ -32,6 +32,9 @@
    {
      feedback_o := Translations::Scenario_General_IsDeleted();
    }
    else if( this.IsReleased() ){
      feedback_o := Translations::Scenario_General_IsReleased();
      }
    
    return feedback_o = '';
  *]
LibMacroPlanner/BL/Type_Scenario/Method_SetReleased.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
Method SetReleased
{
  Description: '设置某场景的发布状态'
  IsAbstract: true
  TextBody:
  [*
    // Administrator Sep-15-2023 (created)
    this.IsReleased( true );
  *]
}
LibMacroPlanner/BL/Type_ScenarioMP/Method_SetReleased.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
MethodOverride SetReleased
{
  TextBody: 'this.IsReleased( true );'
}
_Main/BL/InfoMessages.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
Quintiq file version 2.0
#parent: #root
InfoMessages id:#InfoMessages #extension
{
}
_Main/BL/Type_GlobalDTOTable/StaticMethod_GetOutputVersionData.qbl
@@ -31,7 +31,7 @@
    listtodeal := selectset( macroplan, 
                              Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, 
                              pispip, 
                              true );
                              pispip.SalesDemandQuantity() > 0 );
    
    if( latestversion.CalType() = "TM_SOP_R1" ){
      listtodeal := selectset( macroplan, 
_Main/BL/Type_GlobalDTOTable/StaticMethod_GetVersionData.qbl
@@ -10,7 +10,7 @@
  [*
    // Administrator Sep-14-2023 (created)
    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
    releasetime := DateTime::ActualTime();
    // Clean exist data
    traverse( owner, MappingVersionControl, mpc, true ){
      mpc.Delete();
@@ -28,7 +28,7 @@
      if( isnull( existversion ) ){
        longversionname := item.VersionName();
        longversionnamelist := longversionname.Tokenize( "-" );
        shortversionname := longversionnamelist.Element( longversionnamelist.Size() );
        shortversionname := longversionnamelist.Element( longversionnamelist.Size() - 1 );
        caltype := shortversionname.SubString( 0, 10 );
        shortversionid := versionid.ReplaceAll( "-" + caltype, "" );
        newversioncontrol := VersionControl::Create( owner, 
@@ -40,6 +40,7 @@
                                                     shortversionname, 
                                                     item.User() );
        newversioncontrol.IsReleased( true );
        newversioncontrol.ReleaseTime( releasetime );
        } 
      }
  *]
_Main/BL/Type_Scenario/Method_SetReleased.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
Quintiq file version 2.0
#parent: #root
Method SetReleased #extension
{
}
_Main/BL/Type_VersionControl/StaticMethod_CopyVersion.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CopyVersion (
  GlobalOTDTable owner,
  String businessname
) as VersionControl
{
  Description: '复制当前版本并更新版本号'
  TextBody:
  [*
    // Administrator Sep-13-2023 (created)
    createtime := DateTime::ActualTime();
    user := QuintiqUser::CurrentUser().Username();
    starttime := DateTime::Construct(1970,1,1,0,0,0);
    // Get the local scenario businesstype
    businesstype := GlobalOTDTable::GetBusinessTypeName( businessname );
    // Get the older version info
    oldversionid := "";
    oldversionname := "";
    latestversion := VersionControl::FindLatestUpdateVersion( owner, businesstype );
    copyversionid := latestversion.VersionID();
    if( copyversionid.FindString( "-", 0 ) > 0 ){
      latestversionlist := copyversionid.Tokenize( "-" );
      latestversionnamelist := latestversion.LongVersionName().Tokenize( "-" );
      for( i := 0; i < latestversionlist.Size(); i := i + 1 ){
        oldversionid := oldversionid + "-" + latestversionlist.Element( i );
        oldversionname := oldversionname + "-" + latestversionnamelist.Element( i );
        }
      oldversionid := oldversionid + "-";
      oldversionname := oldversionname + "-";
      }
    // Calculate new version info
    additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 );
    newversionid := oldversionid + [String]additionversionid;
    newcaltype := latestversion.CalType();
    newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")";
    newversionname := oldversionname + newsingleversionname;
    // Create new version
    newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user );
    return newversion;
  *]
}
_Main/BL/Type_VersionControl/StaticMethod_CreateNewSceneVersion.qbl
@@ -24,11 +24,13 @@
    additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 );
    newversionid := oldversion_id + [String]additionversionid;
    newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype );
    newsingleversionname := newcaltype + "(" + createtime.Format( "Y-M2-D2 H:m:s" ) + ")";
    newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")";
    newversionname := oldversion_name + newsingleversionname;
    
    // Create new version
    newversion := VersionControl::Create( owner, businesstype, newcaltype, createtime, newversionid, newversionname, newsingleversionname, user );
    newversion.IsReleased( true );
    newversion.ReleaseTime( createtime );
    
    return newversion;
  *]
_Main/BL/Type_VersionControl/StaticMethod_CreateNewVersion.qbl
@@ -36,7 +36,7 @@
    additionversionid := ( createtime.MinutesAsReal( starttime ) * 60 * 10 + createtime.SecondOfMinute() ).Round( 0 );
    newversionid := oldversion_id + [String]additionversionid;
    newcaltype := GlobalOTDTable::GetNextCalType( oldcaltype, businesstype );
    newsingleversionname := newcaltype + "(" + createtime.Format( "Y-M2-D2 H:m:s" ) + ")";
    newsingleversionname := newcaltype + "(" + createtime.Format( "Y/M2/D2 H:m:s" ) + ")";
    newversionname := oldversion_name + newsingleversionname;
    
    // Create new version
_Main/BL/Type_VersionControl/StaticMethod_FindLatestUpdateVersion.qbl
@@ -14,8 +14,7 @@
    latestversion := maxselect( globalotdtable, 
                                VersionControl, 
                                version, 
                                version.BusinessType()=businesstype,
    //                             and version.IsReleased()=true,
                                version.BusinessType()=businesstype and version.IsReleased()=true,
                                version.CreateTime() );
    
    return latestversion;
_Main/BL/Type_VersionControl/StaticMethod_FindLatestVersion.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FindLatestVersion (
  GlobalOTDTable globalotdtable,
  String businesstype
) as VersionControl
{
  Description: '获取某事业部目前最新的版本号'
  TextBody:
  [*
    // Administrator Sep-13-2023 (created)
    // Get the latest version data
    latestversion := maxselect( globalotdtable,
                                VersionControl,
                                version,
                                version.BusinessType()=businesstype,
                                version.CreateTime() );
    return latestversion;
  *]
}
_Main/BL/Type_VersionControl/StaticMethod_GetSOPVersionInfo.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_VersionControl/StaticMethod_GetVersionInfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetVersionInfo (
  GlobalOTDTable owner,
  String businessname
) as owning Strings
{
  Description: '获取大版本版本号及版本名称'
  TextBody:
  [*
    // Administrator Sep-13-2023 (created)
    businesstyoe := GlobalOTDTable::GetBusinessTypeName( businessname );
    result := construct( Strings );
    rootversion := VersionControl::FindLatestVersion( owner, businesstyoe );
    if( not isnull( rootversion ) ){
      result.Add( rootversion.VersionID() );
      result.Add( rootversion.LongVersionName() );
      result.Add( rootversion.VersionID() + "-" + rootversion.CalType() );
      result.Add( rootversion.SingleVersionName() );
      }else{
        result.Add( "" );
        result.Add( "" );
        result.Add( "" );
        result.Add( "" );
        }
    return &result;
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component pnlActions #extension
{
  Children:
  [
    Component btnOK #extension
    {
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -17,6 +17,21 @@
    newscenario := null( Scenario );
    strategy := null( Strategy );
    
    // New version
    globalotdtable := GlobalOTDTable;
    testbusinesstype := "集团";
    if( data.IsCreateNewVersion() ){
      VersionControl::CreateNewSceneVersion( globalotdtable, testbusinesstype );
      }else{
        VersionControl::CreateNewVersion( globalotdtable, testbusinesstype );
        }
    versionname := VersionControl::GetVersionInfo( globalotdtable, testbusinesstype ).Element( 3 );
    // Get Version Name
    if( data.Name() = "" ){
      data.Name( versionname );
      }
    // Copy scenario
    if( isnull( data.WrappedInstance() ) )
    {
@@ -95,15 +110,6 @@
        MacroPlan::DoSync( macroPlanNew, 
                           data.BusinessType(), data.IsKeyProduct(), data.CreatePurchaseSupplyMaterial() );
    }
    // New version
    globalotdtable := GlobalOTDTable;
    testbusinesstype := "集团";
    if( data.IsCreateNewVersion() ){
      VersionControl::CreateNewSceneVersion( globalotdtable, testbusinesstype );
      }else{
        VersionControl::CreateNewVersion( globalotdtable, testbusinesstype );
        }
    
    this.Close();
  *]
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: pnlActions/btnOK
Response OnClick () id:Response_pnlActions_btnOK_OnClick #extension
{
  Precondition:
  [*
    data := DataHolderDialogData.Data();
    return not isnull( data )
           and Scenario::ValidateInput( feedback,
                                        ScenarioManager,
    //                                    edtName.Text(),
                                        "for version",
                                        data.WrappedInstance(),
                                        '',
                                        GlobalParameters_MP::GetKB_New(),
                                        'Test',
                                        RadioButtonGroupStorageState.BoundValue(),
                                        Domain.MDSStorageDefinitionManager().Enabled(),
                                        Domain.MDSStorageDefinitionManager().DatasetStoreEnabled(),
                                        Domain.MDSStorageDefinitionManager().DatabaseEnabled() );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/_ROOT_Component_DialogCreateEditScenario.def
@@ -6,5 +6,6 @@
  Children:
  [
    #child: pnlContent
    #child: pnlActions
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Component_ListScenario.def
@@ -1,4 +1,118 @@
Quintiq file version 2.0
Component ListScenario #extension
{
  Children:
  [
    Component DataSetLevelScenario #extension
    {
      Children:
      [
        Component listContextMenuScenarioFolder #extension
        {
          Children:
          [
            Component MenuRelaeaseNewVersion
            {
              #keys: '[412960.0.168283194]'
              BaseType: 'WebMenu'
              Properties:
              [
                DelegationID: 'ActionBarScenario_Release'
                Description: '发布新版本'
                Image: 'EDITOR_ALGORITHM'
                Taborder: 10
                Title: 'Release New Version...'
              ]
            }
            Component MenuCopyScenario #extension
            {
            }
            Component MenuSaveNewVersion
            {
              #keys: '[412960.0.172960163]'
              BaseType: 'WebMenu'
              Properties:
              [
                DelegationID: 'ActionBarScenario_Save'
                Description: '发布新版本'
                Image: 'DATA_DISK'
                Taborder: 11
                Title: 'Save New Version...'
              ]
            }
            Component MenuSeparator2 #extension
            {
              Properties:
              [
                Taborder: 12
              ]
            }
            Component MenuSeparator3 #extension
            {
              Properties:
              [
                Taborder: 14
              ]
            }
            Component MenuSelectScenario #extension
            {
              Properties:
              [
                Taborder: 13
              ]
            }
            Component MenuEditAuthorization #extension
            {
              Properties:
              [
                Taborder: 15
              ]
            }
            Component MenuSeparator4 #extension
            {
              Properties:
              [
                Taborder: 16
              ]
            }
            Component MenuLoadScenario #extension
            {
              Properties:
              [
                Taborder: 17
              ]
            }
            Component MenuUnloadScenario #extension
            {
              Properties:
              [
                Taborder: 18
              ]
            }
            Component MenuSeparator5 #extension
            {
              Properties:
              [
                Taborder: 19
              ]
            }
            Component MenuAdministration #extension
            {
              Properties:
              [
                Taborder: 20
              ]
            }
            Component MenuRestoreItem #extension
            {
              Properties:
              [
                Taborder: 21
              ]
            }
          ]
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCopyScenario_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: ListScenario
Response OnClick (
  ScenarioMP selection
) id:Response_ListScenario_MenuCopyScenario_OnClick #extension
{
  Precondition:
  [*
    feedback := ApplicationMacroPlanner.HasValidDataset( selection );
    return feedback = '' and selection.CanCopy( feedback );
  *]
}
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuRelaeaseNewVersion_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
Quintiq file version 2.0
#parent: ListScenario
Response OnClick (
  ScenarioMP selection
) id:Response_ListScenario_MenuRelaeaseNewVersion_OnClick
{
  #keys: '[412960.0.170112594]'
  CanBindMultiple: false
  DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick
  Initiator: 'MenuRelaeaseNewVersion'
  Precondition:
  [*
    feedback := ApplicationMacroPlanner.HasValidDataset( selection );
    return feedback = '' and selection.CanCopy( feedback );
  *]
  QuillAction
  {
    Body:
    [*
      // Copy scenario
      owner := GlobalOTDTable;
      macroplan := MacroPlan;
      testbusinesstype := "集团";
      VersionControl::ReleaseNewVersion( owner, testbusinesstype );
      GlobalOTDTable::GetOutputVersionData( owner, macroplan, testbusinesstype );
      selection.SetReleased();
      versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 );
      // Get the active scenario
      //data := selection;
      newscenario := null( Scenario );
      strategy := null( Strategy );
      data := ScenarioManager.ScenarioNode( relshadow,
                                                ScenarioMP,
                                                Parent := selection,
                                                Name := versionname,
                                                SelectedStrategy := selection.SelectedStrategy(),
                                                State := selection.State() );
      scenario := data.Parent().astype( ScenarioMP );
      strategy := data.SelectedStrategy();
      newscenario:= scenario.Copy( data.Parent(), versionname, "",
                                   data.Comment(), data.State() );
      newscenario.SelectedStrategy( relset, strategy );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_TIANMA_JITUAN_ListScenario_MenuSaveNewVersion_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
Quintiq file version 2.0
#parent: ListScenario
Response OnClick (
  ScenarioMP selection
) id:Response_ListScenario_MenuSaveNewVersion_OnClick
{
  #keys: '[412960.0.171680443]'
  CanBindMultiple: false
  DefinitionID => /ListScenario/Responsedef_ListScenario_WebMenu_OnClick
  Initiator: 'MenuSaveNewVersion'
  Precondition:
  [*
    feedback := ApplicationMacroPlanner.HasValidDataset( selection );
    return feedback = '' and selection.CanCopy( feedback );
  *]
  QuillAction
  {
    Body:
    [*
      // Copy scenario
      owner := GlobalOTDTable;
      macroplan := MacroPlan;
      testbusinesstype := "集团";
      VersionControl::CopyVersion( owner, testbusinesstype );
      versionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 3 );
      // Copy scenario
      newscenario := null( Scenario );
      strategy := null( Strategy );
      data := ScenarioManager.ScenarioNode( relshadow,
                                                ScenarioMP,
                                                Parent := selection,
                                                Name := versionname,
                                                SelectedStrategy := selection.SelectedStrategy(),
                                                State := selection.State() );
      scenario := data.Parent().astype( ScenarioMP );
      strategy := data.SelectedStrategy();
      newscenario:= scenario.Copy( data.Parent(), versionname, "",
                                   data.Comment(), data.State() );
      newscenario.SelectedStrategy( relset, strategy );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Component_PanelVersionOfSOPHeader.def
@@ -61,6 +61,7 @@
        Description: '发布一个新版本'
        Label: '测试用版本发布'
        Taborder: 4
        Visible: false
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderCopy_OnClick.def
@@ -10,7 +10,8 @@
    Body:
    [*
      owner := GlobalOTDTable;
      rootversionid := VersionControl::GetSOPVersionInfo( owner ).Element( 2 );
      testbusinesstype := "集团";
      rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 2 );
      dlg := construct( DialogVersionIDCopy );
      dlg.lblContent().Text( rootversionid );
      dlg.JustShow();
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/Response_PanelVersionOfSOPHeader_ButtonVersionOfSOPHeaderFresh_OnClick.def
@@ -12,9 +12,9 @@
      owner := GlobalOTDTable;
      testbusinesstype := "集团";
      GlobalOTDTable::GetVersionData( owner, testbusinesstype );
      rootversionid := VersionControl::GetSOPVersionInfo( owner ).Element( 0 );
      rootversionid := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 0 );
      DataExtractorVersionOfSOPDetails.FixedFilter( "object.VersionID().FindString( " + rootversionid.AsQUILL() + ", 0 ) = 0" );
      rootversionname := VersionControl::GetSOPVersionInfo( owner ).Element( 1 );
      rootversionname := VersionControl::GetVersionInfo( owner, testbusinesstype ).Element( 1 );
      LabelVersionOfSOPHeader.Text( rootversionname );
      VersionStatus::GetBusinessTypeStatus( owner, rootversionid );
    *]
_Main/UI/MacroPlannerWebApp/Component_FormVersionOfSOP/_ROOT_Component_FormVersionOfSOP.def
@@ -62,6 +62,16 @@
        Taborder: 4
      ]
    }
    Component DataHolderVersionOfSOPCopy
    {
      #keys: '[412960.0.166861218]'
      BaseType: 'WebDataHolder'
      Databinding: 'shadow[ScenarioMP]*'
      Properties:
      [
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
@@ -5,7 +5,7 @@
  ProjectProperties
  {
    ApplicationComponentName: 'ApplicationMacroPlanner'
    BuildVersion: '2022.3.0.72'
    BuildVersion: '2022.3.0.171'
    Description: 'Quintiq Macro Planner'
    ProjectKind: 'WebClient'
  }