xiaoding721
2024-05-27 191fc5cc2e5eeaff377b749dfa7e497fe503506b
PR,PP,Budget 功能
已修改19个文件
已添加36个文件
1254 ■■■■ 文件已修改
_Main/BL/ConfigTemplates.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/EDI/Broker_AES_TemporaryDemandData.qbl 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_TemporaryDemandData_ArchiveExecutionStatus_ArchiveExecutionStatus_T.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_HandleBudget.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_HandlePP.qbl 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_OnException.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_Archive/StaticMethod_Success.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_RequirementImportExecutionStatus/Attribute_ExecutionCode.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_RequirementImportExecutionStatus/StaticMethod_Create.qbl 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_CurrencyID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_DemandUncertaintyPercentage.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_EndDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_ID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_Price.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_PriorityName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_ProductID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_SalesSegmentName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_StockingPointID.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/Attribute_UnitOfMeasureName.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/TypeIndex_TemporaryDemandDataTypeIndex.qbl 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_TemporaryDemandData/_ROOT_Type_TemporaryDemandData.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_List1.def 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_swBottom.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_swTop.def 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_swTopMost.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Response_List1_MenuDelete_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/_ROOT_Component_frmStandardAnalysis589.def 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_bRequirementUpload_OnClick.def 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_dhRequirementImportExecuti.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Component_pnlActions.def 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Component_pnlContent.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Method_OnOK.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Response_pnlActions_btnCancel_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Response_pnlActions_btnOk_OnClick.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/_ROOT_Component_DialogOverwriteFile.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pBudget.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pIDS.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPP.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPR.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_OnCreated.def 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_cBudget_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_cPP_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_cPR_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/ConfigTemplates.properties
@@ -108,6 +108,7 @@
domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel=template:domainmodel.ediremotedatasourcedefinition
domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel=template:domainmodel.ediremotedatasourcedefinition
domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject=template:domainmodel.ediremotedatasourcedefinition
domainmodel.ediremotedatasourcedefinition.remotestorage.vwed=template:domainmodel.ediremotedatasourcedefinition
domainmodel.fileprovider.qdrive=template:domainmodel.fileprovider.qdrive
domainmodel.gisdefinition.osm=template:domainmodel.gisdefinition
domainmodel.historicaltransactioncontrol=template:domainmodel.historicaltransactioncontrol
_Main/BL/EDI/Broker_AES_TemporaryDemandData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
Quintiq file version 2.0
#parent: #root
EDIBroker AES_TemporaryDemandData
{
  MDSDefinition: ArchiveExecutionStatus
  TimeZone: 'ACT'
  UseOSTimeZone: false
  EDIModelLink.Destination Destination0
  {
    EDIMLTable TemporaryDemandData
    {
      PrimaryKeyColumns: ID
      TargetType: TemporaryDemandData
      TypeIndex: TemporaryDemandDataTypeIndex
      EDIMLColumn CurrencyID { Attribute: CurrencyID ValueType: String }
      EDIMLColumn DemandUncertaintyPercentage { Attribute: DemandUncertaintyPercentage ValueType: Number }
      EDIMLColumn EndDate { Attribute: EndDate ValueType: Date }
      EDIMLColumn ID { Attribute: ID ValueType: Number }
      EDIMLColumn Price { Attribute: Price ValueType: Number }
      EDIMLColumn PriorityName { Attribute: PriorityName ValueType: String }
      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
      EDIMLColumn Quantity { Attribute: Quantity ValueType: Real }
      EDIMLColumn SalesSegmentName { Attribute: SalesSegmentName ValueType: String }
      EDIMLColumn StartDate { Attribute: StartDate ValueType: Date }
      EDIMLColumn StockingPointID { Attribute: StockingPointID ValueType: String }
      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
    }
  }
  EDIODBCLink.Source dbTemporaryDemandData
  {
    DataIntegrityStrategy: 'Disabled'
    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.vwed'
    EDIODBCLinkTable A_Forecasts
    {
      OthersMayCreateTable: true
      OthersMayDeleteRow: true
      OthersMayDropTable: true
      OthersMayFlushTable: true
      OthersMayInsertRow: true
      Parameters: '/owner="dbo"'
      PrimaryKeyColumns: ID
      RecordModificationHintStrategy: 'None'
      EDIODBCLinkColumn CURRENCY_ID
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn DEMAND_UNCERTAINTY_PERCENTAGE
      {
        OthersMayUpdateColumn: true
        ValueType: Number
      }
      EDIODBCLinkColumn END_DATE
      {
        OthersMayUpdateColumn: true
        ValueType: DateTime
      }
      EDIODBCLinkColumn ID
      {
        OthersMayUpdateColumn: true
        ValueType: Number
      }
      EDIODBCLinkColumn IS_EXCLUDED_FROM_FULFILLMENT_KPI_USER
      {
        OthersMayUpdateColumn: true
        ValueType: Boolean
      }
      EDIODBCLinkColumn PRICE
      {
        OthersMayUpdateColumn: true
        ValueType: Number
      }
      EDIODBCLinkColumn PRIORITY_NAME
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn PRODUCT_ID
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn QUANTITY
      {
        OthersMayUpdateColumn: true
        ValueType: Real
      }
      EDIODBCLinkColumn SALES_SEGMENT_NAME
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn START_DATE
      {
        OthersMayUpdateColumn: true
        ValueType: DateTime
      }
      EDIODBCLinkColumn STOCKING_POINT_ID
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
      EDIODBCLinkColumn UNIT_OF_MEASURE_NAME
      {
        OthersMayUpdateColumn: true
        ValueType: String
      }
    }
  }
  EDITransformation.Transformation Transformation
  {
    EDITableTransformation
    {
      InputTable: A_Forecasts
      OutputTable: TemporaryDemandData
      EDIColumnMatch { InputColumn: CURRENCY_ID OutputColumn: CurrencyID }
      EDIColumnMatch { InputColumn: DEMAND_UNCERTAINTY_PERCENTAGE OutputColumn: DemandUncertaintyPercentage }
      EDIColumnMatch
      {
        InputColumn: END_DATE
        OutputColumn: EndDate
        Converter
        {
          XMLDefinition:
          [*
            <?xml version="1.0" encoding="UTF-16"?>
            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
              <IsStandard>true</IsStandard>
              <IsISO>false</IsISO>
              <IsCustom>false</IsCustom>
              <ConversionType>0</ConversionType>
            </DateTimeToDate>
          *]
        }
      }
      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
      EDIColumnMatch { InputColumn: PRICE OutputColumn: Price }
      EDIColumnMatch { InputColumn: PRIORITY_NAME OutputColumn: PriorityName }
      EDIColumnMatch { InputColumn: PRODUCT_ID OutputColumn: ProductID }
      EDIColumnMatch { InputColumn: QUANTITY OutputColumn: Quantity }
      EDIColumnMatch { InputColumn: SALES_SEGMENT_NAME OutputColumn: SalesSegmentName }
      EDIColumnMatch
      {
        InputColumn: START_DATE
        OutputColumn: StartDate
        Converter
        {
          XMLDefinition:
          [*
            <?xml version="1.0" encoding="UTF-16"?>
            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
              <IsStandard>true</IsStandard>
              <IsISO>false</IsISO>
              <IsCustom>false</IsCustom>
              <ConversionType>0</ConversionType>
            </DateTimeToDate>
          *]
        }
      }
      EDIColumnMatch { InputColumn: STOCKING_POINT_ID OutputColumn: StockingPointID }
      EDIColumnMatch { InputColumn: UNIT_OF_MEASURE_NAME OutputColumn: UnitOfMeasureName }
    }
  }
}
_Main/BL/InfoMessages.qbl
@@ -48,6 +48,10 @@
  {
    DefaultText: 'The vehicle model, engine part number, and existing data do not match'
  }
  InfoMessage A_VWED_RequirementImportSuccessful
  {
    DefaultText: 'Requirement import successful'
  }
  InfoMessage A_VWED_SixDigitCode_Code
  {
    DefaultText: 'Code'
_Main/BL/Relations/Relation_TemporaryDemandData_ArchiveExecutionStatus_ArchiveExecutionStatus_T.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation TemporaryDemandData_ArchiveExecutionStatus_ArchiveExecutionStatus_TemporaryDemandData
{
  #keys: '1[414996.0.388320052]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ArchiveExecutionStatus
  {
    #keys: '3[414996.0.388320054][414996.0.388320053][414996.0.388320055]'
    Cardinality: '0to1'
    ObjectDefinition: TemporaryDemandData
    OwningSide: 'Reference'
  }
  RelationSide.RightSide TemporaryDemandData
  {
    #keys: '3[414996.0.388320057][414996.0.388320056][414996.0.388320058]'
    Cardinality: '1toN'
    ObjectDefinition: ArchiveExecutionStatus
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_Archive/StaticMethod_GenerateForecast.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateForecast (
  ArchiveExecutionStatus archiveExecutionStatus,
  MacroPlan macroPlan
)
{
  TextBody:
  [*
    traverse ( macroPlan, SalesDemand.astype( Forecast ), f ) {
      f.Delete();
    }
    traverse ( archiveExecutionStatus, TemporaryDemandData, tdd ) {
      targetProduct_MP       := select( macroPlan, Product_MP, tempPMP, tempPMP.ID() = tdd.ProductID() );
      targetStockingPoint_MP := select( macroPlan, StockingPoint_MP, tempSPMP, tempSPMP.ID() = tdd.StockingPointID() );
      info( tdd.SalesSegmentName() );
      if ( not isnull( targetProduct_MP ) and not isnull( targetStockingPoint_MP ) ) {
        Forecast::Create( targetProduct_MP,
                          targetStockingPoint_MP,
                          [String]tdd.ID(),
                          tdd.StartDate(),
                          tdd.EndDate(),
                          tdd.Quantity(),
                          [Real]tdd.Price(),
                          tdd.PriorityName(),
                          tdd.SalesSegmentName(),
                          tdd.CurrencyID(),
                          tdd.UnitOfMeasureName(),
                          0.0,
                          false,
                          false
                         );
      }
    }
  *]
}
_Main/BL/Type_Archive/StaticMethod_HandleBudget.qbl
@@ -7,37 +7,41 @@
  String budgetFileName,
  BinaryValue budgetBinaryValue,
  Boolean isBudgetArchive,
  String filePath
)
  String filePath,
  Boolean isOverwriteFile
) as stream[JSON]
{
  TextBody:
  [*
    // è¯·æ±‚参数
    pathBudget := filePath + budgetFileName;
    isArchive  := ifexpr( isBudgetArchive, "true", "false" );
    isOverride := ifexpr( isOverwriteFile, "true", "false" );
    minorKey   := [String]macroPlan.MDSID().MinorKey();
    json       := JSON::Object()
                  .Add( "path", pathBudget )
                  .Add( "isArchive", isArchive )
                  .Add( "isOverride", isOverride )
                  .Add( "minorKey", minorKey ).Build().AsString();
    
    // å†™å…¥ä¸´æ—¶æ–‡ä»¶
    Archive::WriteTempFile( pathBudget, budgetBinaryValue );
    
    info( json );
    // è°ƒç”¨æŽ¥å£
    //url := "/PR/Import";
    //i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
    //i.URL( url );
    //i.PostMethod( true );
    //
    //try {
    //  i.Call( json );
    //
    //  htmlresult := i.Result();
    //} onerror {
    //
    //}
    url := "/PPBudget/Import";
    i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
    i.URL( url );
    i.PostMethod( true );
    i.MediaType( "application/json" );
    i.TimeOut( Duration::Minutes( 5 ) );
    i.Call( json );
    htmlresult := i.Result();
    respJSON   := JSON::Parse( htmlresult );
    return emit( respJSON );
  *]
}
_Main/BL/Type_Archive/StaticMethod_HandlePP.qbl
@@ -7,37 +7,41 @@
  String ppFileName,
  BinaryValue ppBinaryValue,
  Boolean isPPArchive,
  String filePath
)
  String filePath,
  Boolean isOverwriteFile
) as stream[JSON]
{
  TextBody:
  [*
    // è¯·æ±‚参数
    pathPP    := filePath + ppFileName;
    isArchive := ifexpr( isPPArchive, "true", "false" );
    minorKey  := [String]macroPlan.MDSID().MinorKey();
    json      := JSON::Object()
                 .Add( "path", pathPP )
                 .Add( "isArchive", isArchive )
                 .Add( "minorKey", minorKey ).Build().AsString();
    pathPP     := filePath + ppFileName;
    isArchive  := ifexpr( isPPArchive, "true", "false" );
    isOverride := ifexpr( isOverwriteFile, "true", "false" );
    minorKey   := [String]macroPlan.MDSID().MinorKey();
    json       := JSON::Object()
                  .Add( "path", pathPP )
                  .Add( "isArchive", isArchive )
                  .Add( "isOverride", isOverride )
                  .Add( "minorKey", minorKey ).Build().AsString();
    
    // å†™å…¥ä¸´æ—¶æ–‡ä»¶
    Archive::WriteTempFile( pathPP, ppBinaryValue );
    
    info( json );
    // è°ƒç”¨æŽ¥å£
    //url := "/PR/Import";
    //i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
    //i.URL( url );
    //i.PostMethod( true );
    //
    //try {
    //  i.Call( json );
    //
    //  htmlresult := i.Result();
    //} onerror {
    //
    //}
    url := "/PPBudget/Import";
    i := HTTPInterface::Create( archive.JavaInterfaceAddress(), archive.JavaInterfacePort() );
    i.URL( url );
    i.PostMethod( true );
    i.MediaType( "application/json" );
    i.TimeOut( Duration::Minutes( 5 ) );
    i.Call( json );
    htmlresult := i.Result();
    respJSON   := JSON::Parse( htmlresult );
    return emit( respJSON );
  *]
}
_Main/BL/Type_Archive/StaticMethod_HandlePR.qbl
@@ -7,29 +7,26 @@
  String prFileName,
  BinaryValue prBinaryValue,
  Boolean isPRArchive,
  String filePath
)
  String filePath,
  Boolean isOverwriteFile
) as stream[JSON]
{
  TextBody:
  [*
    // è¯·æ±‚参数
    pathPR    := filePath + prFileName;
    isArchive := ifexpr( isPRArchive, "true", "false" );
    minorKey  := [String]macroPlan.MDSID().MinorKey();
    json      := JSON::Object()
                 .Add( "pathPR", pathPR )
                 .Add( "isArchive", isArchive )
                 .Add( "minorKey", minorKey ).Build().AsString();
    pathPR     := filePath + prFileName;
    isArchive  := ifexpr( isPRArchive, "true", "false" );
    isOverride := ifexpr( isOverwriteFile, "true", "false" );
    minorKey   := [String]macroPlan.MDSID().MinorKey();
    json       := JSON::Object()
                  .Add( "pathPR", pathPR )
                  .Add( "isArchive", isArchive )
                  .Add( "isOverride", isOverride )
                  .Add( "minorKey", minorKey ).Build().AsString();
    
    // å†™å…¥ä¸´æ—¶æ–‡ä»¶
    Archive::WriteTempFile( pathPR, prBinaryValue );
    
    info( json );
    for ( i := 0; i < 10000; i++ ) {
      for ( j := 0; j < 20000; j++ ) {
        info( i + j );
      }
    }
    // è°ƒç”¨æŽ¥å£
    url := "/PR/Import";
    
@@ -37,19 +34,14 @@
    i.URL( url );
    i.PostMethod( true );
    i.MediaType( "application/json" );
    i.TimeOut( Duration::Minutes( 5 ) );
    
    i.Call( json );
      
    htmlresult := i.Result();
      
    respJSON   := JSON::Parse( htmlresult );
    code       := respJSON.Get( "code" ).GetNumber();
    message    := respJSON.Get( "message" ).GetString();
    if ( code = 200 ) {
    
    } else {
      error( message );
    }
    return emit( respJSON );
  *]
}
_Main/BL/Type_Archive/StaticMethod_OnException.qbl
@@ -9,9 +9,10 @@
  TextBody:
  [*
    archiveExecutionStatus.RequirementImportExecutionStatus( relnew, 
                                                             ExecutionStatus      := "Complete",
                                                             ExecutionUserName    := userName,
                                                             ExecutionCode        := 500,
                                                             ExecutionIsSuccess   := false,
                                                             ExecutionRespMessage := e.Message(),
                                                             ExecutionIsSuccess   := false );
                                                             ExecutionStatus      := "Complete",
                                                             ExecutionUserName    := userName );
  *]
}
_Main/BL/Type_Archive/StaticMethod_RequirementProcessing.qbl
@@ -20,7 +20,8 @@
  String curveFileName,
  BinaryValue curveBinaryValue,
  String idsFileName,
  BinaryValue idsBinaryValue
  BinaryValue idsBinaryValue,
  Boolean isOverwriteFile
)
{
  TextBody:
@@ -30,15 +31,25 @@
    
    // åˆ›å»ºæ‰§è¡ŒçŠ¶æ€
    archiveExecutionStatus.RequirementImportExecutionStatus( relnew, 
                                                             ExecutionCode      := -1,
                                                             ExecutionStatus    := "InProgress",
                                                             ExecutionUserName  := userName );
    
    if ( prBinaryValue.Size() > 0 ) {
      archive -> Archive::HandlePR( macroPlan, userName, prFileName, prBinaryValue, isPRArchive, filePath ) ->Archive::Success() -> Exception() -> Archive::OnException( archiveExecutionStatus, userName );
      archive -> Archive::HandlePR( macroPlan, userName, prFileName, prBinaryValue, isPRArchive, filePath, isOverwriteFile )
              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
              -> Exception()
              -> Archive::OnException( archiveExecutionStatus, userName );
    } else if ( ppBinaryValue.Size() > 0 ) {
      Archive::HandlePP( archive, macroPlan, userName, ppFileName, ppBinaryValue, isPPArchive, filePath );
      archive -> Archive::HandlePP( macroPlan, userName, ppFileName, ppBinaryValue, isPPArchive, filePath, isOverwriteFile )
              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
              -> Exception()
              -> Archive::OnException( archiveExecutionStatus, userName );
    } else if ( budgetBinaryValue.Size() > 0 ) {
      Archive::HandleBudget( archive, macroPlan, userName, budgetFileName, budgetBinaryValue, isBudgetArchive, filePath );
      archive -> Archive::HandleBudget( macroPlan, userName, budgetFileName, budgetBinaryValue, isBudgetArchive, filePath, isOverwriteFile )
              -> Archive::Success( macroPlan, archiveExecutionStatus, userName )
              -> Exception()
              -> Archive::OnException( archiveExecutionStatus, userName );
    } else {
      Archive::HandlePPA_Curve_IDS( archive, macroPlan, userName, ppaFileName, ppaBinaryValue, isPPAArchive, curveFileName, curveBinaryValue, idsFileName, idsBinaryValue, filePath );
    }
_Main/BL/Type_Archive/StaticMethod_Success.qbl
@@ -1,9 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Success
StaticMethod Success (
  JSON respJSON,
  MacroPlan macroPlan,
  ArchiveExecutionStatus archiveExecutionStatus,
  String userName
)
{
  TextBody:
  [*
    // lihongji May-25-2024 (created)
    code    := respJSON.Get( "code" ).GetNumber();
    message := respJSON.Get( "message" ).GetString();
    if ( code = 200 ) { // æ‰§è¡ŒæˆåŠŸï¼Œå¤„ç†éœ€æ±‚
      // èŽ·å–éœ€æ±‚
      archiveExecutionStatus.AES_TemporaryDemandData().Execute();
      // ç”ŸæˆForecast
      Archive::GenerateForecast( archiveExecutionStatus, macroPlan );
      // æ¸…空临时数据库
      archiveExecutionStatus.AES_TemporaryDemandData().Source().FlatQuery( "truncate table A_Forecasts" );
      // è¿”回成功消息
      RequirementImportExecutionStatus::Create( archiveExecutionStatus, code, "Complete", userName, Translations::A_VWED_RequirementImportSuccessful(), true );
    } else {
      RequirementImportExecutionStatus::Create( archiveExecutionStatus, code, "Complete", userName, message, false );
    }
  *]
}
_Main/BL/Type_RequirementImportExecutionStatus/Attribute_ExecutionCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ExecutionCode
{
  #keys: '3[414996.0.388310598][414996.0.388310597][414996.0.388310599]'
  ValueType: Number
}
_Main/BL/Type_RequirementImportExecutionStatus/StaticMethod_Create.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Create (
  ArchiveExecutionStatus archiveExecutionStatus,
  Number executionCode,
  String executionStatus,
  String executionUserName,
  String executionRespMessage,
  Boolean executionIsSuccess
)
{
  TextBody:
  [*
    archiveExecutionStatus.RequirementImportExecutionStatus( relnew,
                                                             ExecutionCode        := executionCode,
                                                             ExecutionStatus      := executionStatus,
                                                             ExecutionUserName    := executionUserName,
                                                             ExecutionRespMessage := executionRespMessage,
                                                             ExecutionIsSuccess   := executionIsSuccess );
  *]
}
_Main/BL/Type_TemporaryDemandData/Attribute_CurrencyID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CurrencyID
{
  #keys: '3[414996.0.388235043][414996.0.388235042][414996.0.388235044]'
  ValueType: String
}
_Main/BL/Type_TemporaryDemandData/Attribute_DemandUncertaintyPercentage.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute DemandUncertaintyPercentage
{
  #keys: '3[414996.0.388235066][414996.0.388235065][414996.0.388235067]'
  ValueType: Number
}
_Main/BL/Type_TemporaryDemandData/Attribute_EndDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute EndDate
{
  #keys: '3[414996.0.388235090][414996.0.388235089][414996.0.388235091]'
  ValueType: Date
}
_Main/BL/Type_TemporaryDemandData/Attribute_ID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ID
{
  #keys: '3[414996.0.388235113][414996.0.388235112][414996.0.388235114]'
  IsReadOnly: true
  ValueType: Number
}
_Main/BL/Type_TemporaryDemandData/Attribute_Price.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Price
{
  #keys: '3[414996.0.388235161][414996.0.388235160][414996.0.388235162]'
  ValueType: Number
}
_Main/BL/Type_TemporaryDemandData/Attribute_PriorityName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute PriorityName
{
  #keys: '3[414996.0.388235184][414996.0.388235183][414996.0.388235185]'
  ValueType: String
}
_Main/BL/Type_TemporaryDemandData/Attribute_ProductID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductID
{
  #keys: '3[414996.0.388235207][414996.0.388235206][414996.0.388235208]'
  ValueType: String
}
_Main/BL/Type_TemporaryDemandData/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[414996.0.388235231][414996.0.388235230][414996.0.388235232]'
  ValueType: Real
}
_Main/BL/Type_TemporaryDemandData/Attribute_SalesSegmentName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute SalesSegmentName
{
  #keys: '3[414996.0.388235254][414996.0.388235253][414996.0.388235255]'
  ValueType: String
}
_Main/BL/Type_TemporaryDemandData/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[414996.0.388235302][414996.0.388235301][414996.0.388235303]'
  ValueType: Date
}
_Main/BL/Type_TemporaryDemandData/Attribute_StockingPointID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StockingPointID
{
  #keys: '3[414996.0.388235325][414996.0.388235324][414996.0.388235326]'
  ValueType: String
}
_Main/BL/Type_TemporaryDemandData/Attribute_UnitOfMeasureName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute UnitOfMeasureName
{
  #keys: '3[414996.0.388235349][414996.0.388235348][414996.0.388235350]'
  ValueType: String
}
_Main/BL/Type_TemporaryDemandData/TypeIndex_TemporaryDemandDataTypeIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#parent: #root
TypeIndex TemporaryDemandDataTypeIndex
{
  Attributes:
  [
    TypeIndexAttribute
    {
      ModelElement: ID
    }
  ]
}
_Main/BL/Type_TemporaryDemandData/_ROOT_Type_TemporaryDemandData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type TemporaryDemandData
{
  #keys: '5[414996.0.388320032][414996.0.388320030][0.0.0][414996.0.388320031][414996.0.388320033]'
  BaseType: Object
  StructuredName: 'TemporaryDemandDatas'
}
_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -81,6 +81,7 @@
        Component ComponentMenu469 { #keys: '[413988.0.1164544687]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis857' Text: '' ] }
        Component menuSeparator222 { #keys: '[413988.0.1172464289]' BaseType: 'Menu' Properties: [ Separator: true ] }
        Component ComponentMenu347 { #keys: '[413988.0.1172464302]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormTest1' Text: '' ] }
        Component ComponentMenu357 { #keys: '[414996.0.395684386]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'frmStandardAnalysis589' Text: 'Archive Execution Status' ] }
      ]
      Properties:
      [
@@ -98,6 +99,7 @@
          c: MenuSelectDemoDataset
          c: menuSeparator833
          c: ComponentMenu469
          c: ComponentMenu357
          c: menuSeparator222
          c: ComponentMenu347
        }
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_List1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
Quintiq file version 2.0
Component List1
{
  #keys: '[530.0.3531950]'
  BaseType: 'List1'
  IsDerived: true
  Children:
  [
    Component popupList1
    {
      #keys: '[530.0.5957094]'
      BaseType: 'popupList1'
      IsDerived: true
      Children:
      [
        Component PopupParent
        {
          #keys: '[514.0.129466]'
          BaseType: 'PopupParent'
          IsDerived: true
          Children:
          [
            Component menuSeparator { #keys: '[414996.0.395684559]' BaseType: 'Menu' Properties: [ Separator: true ] }
            Component MenuDelete { #keys: '[414996.0.395684612]' BaseType: 'Menu' Properties: [ Image: 'DELETE' Text: 'Delete' ] }
          ]
          Properties:
          [
            ModeledStringList ChildOrdering
            {
              c: MenuActions
              c: MenuFilter
              c: menuListQuintiqSetQuantor
              c: menuOLSeparator0
              c: menuUseFilter
              c: menuAppendFilter
              c: menuClearAnalysisFilter
              c: MenuClearAnalysisConfigurationsList
              c: menuSeparator
              c: MenuDelete
            }
          ]
        }
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_swBottom.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
Component swBottom
{
  #keys: '[530.0.3531811]'
  BaseType: 'swBottom'
  IsDerived: true
  Children:
  [
    Component spBottomRight
    {
      #keys: '[530.0.3531813]'
      BaseType: 'spBottomRight'
      IsDerived: true
      Children:
      [
        #child: List1
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_swTop.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
Component swTop
{
  #keys: '[530.0.3531806]'
  BaseType: 'swTop'
  IsDerived: true
  Children:
  [
    Component spTopLeft
    {
      #keys: '[530.0.3531807]'
      BaseType: 'spTopLeft'
      IsDerived: true
      Children:
      [
        Component Analysis
        {
          #keys: '[530.0.3532065]'
          BaseType: 'Analysis'
          IsDerived: true
          Properties:
          [
            GlobalInstance: 'ArchiveExecutionStatus'
          ]
        }
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Component_swTopMost.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
Component swTopMost
{
  #keys: '[530.0.3531801]'
  BaseType: 'swTopMost'
  IsDerived: true
  Children:
  [
    Component SplitterPane1
    {
      #keys: '[530.0.3531802]'
      BaseType: 'SplitterPane1'
      IsDerived: true
      Children:
      [
        #child: swTop
      ]
    }
    Component SplitterPane2
    {
      #keys: '[530.0.3531803]'
      BaseType: 'SplitterPane2'
      IsDerived: true
      Children:
      [
        #child: swBottom
      ]
    }
  ]
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/Response_List1_MenuDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: List1
Response OnClick (
  structured[Object] selection
) id:Response_List1_MenuDelete_OnClick
{
  #keys: '[414996.0.395684637]'
  Body:
  [*
    MacroPlan::DeleteObjects( selection );
  *]
  CanBindMultiple: false
  DefinitionID: 'Responsedef_List1_Menu_OnClick'
  Initiator: 'MenuDelete'
}
_Main/UI/MacroPlanner/Component_frmStandardAnalysis589/_ROOT_Component_frmStandardAnalysis589.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
Quintiq file version 2.0
#root
#parent: MacroPlanner
OrphanComponent frmStandardAnalysis589
{
  #keys: '[414996.0.395683203]'
  BaseType: 'frmStandardAnalysis'
  Children:
  [
    #child: swTopMost
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_bRequirementUpload_OnClick.def
@@ -9,9 +9,10 @@
  {
    Body:
    [*
      dlg := construct( DialogRequirementUpload );
      info( this.Image() );
        dlg := construct( DialogRequirementUpload );
      
      ApplicationMacroPlanner.ShowFormModal( dlg );
        ApplicationMacroPlanner.ShowFormModal( dlg );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgRequirementPreprocessing_dhRequirementImportExecuti.def
@@ -12,16 +12,22 @@
      if ( not isnull( this.Data() ) ) {
        ries := this.Data();
        
        info( "执行用户:", this.Data().ExecutionUserName(), "    æ‰§è¡ŒçŠ¶æ€ï¼š", this.Data().ExecutionUserName(), "    æ‰§è¡Œæ¶ˆæ¯ï¼š", this.Data().ExecutionRespMessage() );
        if ( ries.ExecutionIsSuccess() ) {
        } else {
          if ( ries.ExecutionStatus() = "InProgress" ) {
            bRequirementUpload.Image( "APPLICATION_STOP" );
          } else if ( ries.ExecutionStatus() = "Complete" ) {
            bRequirementUpload.Image( "FLASH" );
          }
        if ( ries.ExecutionCode() = 200 ) {
          WebMessageBox::Success( ries.ExecutionRespMessage() );
          bRequirementUpload.Image( "FLASH" );
          bRequirementUpload.Enabled( true, "" );
        } else if ( ries.ExecutionCode() = 500 ) {
          WebMessageBox::Error( ries.ExecutionRespMessage() );
          bRequirementUpload.Image( "FLASH" );
          bRequirementUpload.Enabled( true, "" );
        } else if ( ries.ExecutionCode() = 501 ) {
          dlg := construct( DialogOverwriteFile );
          ApplicationMacroPlanner.ShowFormModal( dlg );
          bRequirementUpload.Image( "FLASH" );
          bRequirementUpload.Enabled( true, "" );
        } else if ( ries.ExecutionCode() = -1 ) {
          bRequirementUpload.Image( "APPLICATION_STOP" );
          bRequirementUpload.Enabled( false, "" );
        }
        
        this.Data().Delete();
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -14,5 +14,165 @@
        #child: applicationConfigureActionBarPageDef
      ]
    }
    Component dhBinaryDataPR id:dhBinaryDataPR_688
    {
      #keys: '[414996.0.393643308]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 40
      ]
    }
    Component dhOriginalFileNamePR id:dhOriginalFileNamePR_648
    {
      #keys: '[414996.0.393612592]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 41
      ]
    }
    Component dhBinaryDataPP id:dhBinaryDataPP_821
    {
      #keys: '[414996.0.393824611]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 43
      ]
    }
    Component dhOriginalFileNamePP id:dhOriginalFileNamePP_14
    {
      #keys: '[414996.0.393824682]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 44
      ]
    }
    Component dhBinaryDataBudget id:dhBinaryDataBudget_98
    {
      #keys: '[414996.0.393824752]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 46
      ]
    }
    Component dhOriginalFileNameBudget id:dhOriginalFileNameBudget_623
    {
      #keys: '[414996.0.393824822]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 47
      ]
    }
    Component dhBinaryDataPPA id:dhBinaryDataPPA_838
    {
      #keys: '[414996.0.393824892]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 49
      ]
    }
    Component dhOriginalFileNamePPA id:dhOriginalFileNamePPA_673
    {
      #keys: '[414996.0.393824962]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 50
      ]
    }
    Component dhBinaryDataCurve id:dhBinaryDataCurve_97
    {
      #keys: '[414996.0.393825033]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 52
      ]
    }
    Component dhOriginalFileNameCurve id:dhOriginalFileNameCurve_971
    {
      #keys: '[414996.0.393825103]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 53
      ]
    }
    Component dhBinaryDataIDS id:dhBinaryDataIDS_976
    {
      #keys: '[414996.0.393825179]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 54
      ]
    }
    Component dhOriginalFileNameIDS id:dhOriginalFileNameIDS_878
    {
      #keys: '[414996.0.393825249]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 55
      ]
    }
    Component dhIsPRArchive
    {
      #keys: '[414996.0.395211329]'
      BaseType: 'WebDataHolder'
      Databinding: 'Boolean*'
      Properties:
      [
        Taborder: 42
      ]
    }
    Component dhIsPPArchive
    {
      #keys: '[414996.0.395393587]'
      BaseType: 'WebDataHolder'
      Databinding: 'Boolean*'
      Properties:
      [
        Taborder: 45
      ]
    }
    Component dhIsBudgetArchive
    {
      #keys: '[414996.0.395393613]'
      BaseType: 'WebDataHolder'
      Databinding: 'Boolean*'
      Properties:
      [
        Taborder: 48
      ]
    }
    Component dhIsPPAArchive
    {
      #keys: '[414996.0.395393638]'
      BaseType: 'WebDataHolder'
      Databinding: 'Boolean*'
      Properties:
      [
        Taborder: 51
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Component_pnlActions.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
Quintiq file version 2.0
Component pnlActions
{
  #keys: '[414996.0.392231422]'
  BaseType: 'WebPanel'
  Children:
  [
    Component btnOk
    {
      #keys: '[414996.0.392231426]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'OK'
        Taborder: 0
      ]
    }
    Component btnCancel
    {
      #keys: '[414996.0.392231428]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Cancel'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
    Alignment: 'trailing'
    Border: true
    ExcludeFromActiveComponent: true
    FixedSize: true
    Orientation: 'horizontal'
    Padding: 'true'
    Style: 'footer'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Component_pnlContent.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
Component pnlContent
{
  #keys: '[414996.0.392231420]'
  BaseType: 'WebPanel'
  Children:
  [
    Component lOverwriteFile
    {
      #keys: '[414996.0.393341499]'
      BaseType: 'WebLabel'
      Properties:
      [
        Label: '存档文件名重复,是否覆盖文件'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    Padding: 'true'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Method_OnOK.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: #root
Method OnOK () id:Method_DialogOverwriteFile_OnOK
{
  #keys: '[414996.0.395210951]'
  Body:
  [*
    Form.ApplyChanges();
    Archive::RequirementProcessing( Archive, ArchiveExecutionStatus, MacroPlan, ApplicationMacroPlanner.GetUserName(),
                                    dhOriginalFileNamePR.Data()    , guard( dhBinaryDataPR.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) )    , dhIsPRArchive.Data(),
                                    dhOriginalFileNamePP.Data()    , guard( dhBinaryDataPP.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) )    , dhIsPPArchive.Data(),
                                    dhOriginalFileNameBudget.Data(), guard( dhBinaryDataBudget.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), dhIsBudgetArchive.Data(),
                                    dhOriginalFileNamePPA.Data()   , guard( dhBinaryDataPPA.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) )   , dhIsPPAArchive.Data(),
                                    dhOriginalFileNameCurve.Data() , guard( dhBinaryDataCurve.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
                                    dhOriginalFileNameIDS.Data()   , guard( dhBinaryDataIDS.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
                                    true );
    Form.Close();
  *]
}
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Response_pnlActions_btnCancel_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnCancel
Response OnClick () id:Response_pnlActions_btnCancel_OnClick
{
  #keys: '[414996.0.392231432]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      Form.Close();
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/Response_pnlActions_btnOk_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: pnlActions/btnOk
Response OnClick () id:Response_pnlActions_btnOk_OnClick
{
  #keys: '[414996.0.392231431]'
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      Form.OnOK();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogOverwriteFile/_ROOT_Component_DialogOverwriteFile.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent DialogOverwriteFile
{
  #keys: '[414996.0.392231418]'
  BaseType: 'WebForm'
  Children:
  [
    #child: pnlContent
    #child: pnlActions
  ]
  Properties:
  [
    Alignment: 'trailing'
    EnterButton: 'btnOk'
    EscapeButton: 'btnCancel'
    ExcludeFromActiveComponent: true
    Padding: 'false'
    Title: 'Overwrite file'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pBudget.def
@@ -48,26 +48,6 @@
        Taborder: 0
      ]
    }
    Component dhBinaryDataBudget
    {
      #keys: '[413988.0.1186302663]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhOriginalFileNameBudget
    {
      #keys: '[413988.0.1186121268]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
@@ -37,26 +37,6 @@
        Taborder: 0
      ]
    }
    Component dhBinaryDataCurve
    {
      #keys: '[413988.0.1186330961]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 3
      ]
    }
    Component dhOriginalFileNameCurve
    {
      #keys: '[413988.0.1187151501]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pIDS.def
@@ -37,26 +37,6 @@
        Taborder: 0
      ]
    }
    Component dhBinaryDataIDS
    {
      #keys: '[413988.0.1186390982]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 3
      ]
    }
    Component dhOriginalFileNameIDS
    {
      #keys: '[413988.0.1187214517]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPP.def
@@ -48,26 +48,6 @@
        Taborder: 0
      ]
    }
    Component dhBinaryDataPP
    {
      #keys: '[413988.0.1186302619]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhOriginalFileNamePP
    {
      #keys: '[413988.0.1186363668]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPA.def
@@ -48,26 +48,6 @@
        Taborder: 0
      ]
    }
    Component dhBinaryDataPPA
    {
      #keys: '[413988.0.1186330911]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhOriginalFileNamePPA
    {
      #keys: '[413988.0.1187121752]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPR.def
@@ -48,26 +48,6 @@
        Taborder: 0
      ]
    }
    Component dhBinaryDataPR
    {
      #keys: '[413988.0.1186120299]'
      BaseType: 'WebDataHolder'
      Databinding: 'BinaryData*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhOriginalFileNamePR
    {
      #keys: '[413988.0.1186971485]'
      BaseType: 'WebDataHolder'
      Databinding: 'String*'
      Properties:
      [
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Method_OnOK.def
@@ -13,7 +13,8 @@
                                    efBudget.Text()                                                                      , guard( dhBinaryDataBudget.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cBudget.Checked(),
                                    ifexpr( cPPAPPAArchiveEnable.Checked(), ddlPPAArchive.Data().Name(), efCurve.Text() ), guard( dhBinaryDataPPA.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ), cPPA.Checked(),
                                    efCurve.Text()                                                                       , guard( dhBinaryDataCurve.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
                                    efIDS.Text()                                                                         , guard( dhBinaryDataIDS.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ) );
                                    efIDS.Text()                                                                         , guard( dhBinaryDataIDS.Data().AsBinaryValue(), BinaryValue::Construct( 0 ) ),
                                    false );
    
    
    Form.Close();
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
Quintiq file version 2.0
#parent: #root
Response OnCreated () id:Response_DialogRequirementUpload_OnCreated
{
  #keys: '[414996.0.395481593]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  QuillAction
  {
    Body:
    [*
      if ( not isnull( dhBinaryDataPR.Data() ) ) {
        dhBinaryDataPR.Data().Clear();
      }
      dhOriginalFileNamePR.Data( "" );
      dhIsPRArchive.Data( false );
      if ( not isnull( dhBinaryDataPP.Data() ) ) {
        dhBinaryDataPP.Data().Clear();
      }
      dhOriginalFileNamePP.Data( "" );
      dhIsPPArchive.Data( false );
      if ( not isnull( dhBinaryDataBudget.Data() ) ) {
        dhBinaryDataBudget.Data().Clear();
      }
      dhOriginalFileNameBudget.Data( "" );
      dhIsBudgetArchive.Data( false );
      if ( not isnull( dhBinaryDataPPA.Data() ) ) {
        dhBinaryDataPPA.Data().Clear();
      }
      dhOriginalFileNamePPA.Data( "" );
      dhIsPPAArchive.Data( false );
      if ( not isnull( dhBinaryDataCurve.Data() ) ) {
        dhBinaryDataCurve.Data().Clear();
      }
      dhOriginalFileNameCurve.Data( "" );
      if ( not isnull( dhBinaryDataIDS.Data() ) ) {
        dhBinaryDataIDS.Data().Clear();
      }
      dhOriginalFileNameIDS.Data( "" );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pBudget_cBudget_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: pBudget/cBudget
Response OnChanged () id:Response_pBudget_cBudget_OnChanged
{
  #keys: '[414996.0.395394037]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  QuillAction
  {
    Body:
    [*
      dhIsBudgetArchive.Data( this.Checked() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: pPPA/cPPA
Response OnChanged () id:Response_pPPA_cPPA_OnChanged
{
  #keys: '[414996.0.395394557]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  QuillAction
  {
    Body:
    [*
      dhIsPPAArchive.Data( this.Checked() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPP_cPP_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: pPP/cPP
Response OnChanged () id:Response_pPP_cPP_OnChanged
{
  #keys: '[414996.0.395393952]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  QuillAction
  {
    Body:
    [*
      dhIsPPArchive.Data( this.Checked() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPR_cPR_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: pPR/cPR
Response OnChanged () id:Response_pPR_cPR_OnChanged
{
  #keys: '[414996.0.395393868]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  QuillAction
  {
    Body:
    [*
      dhIsPRArchive.Data( this.Checked() );
    *]
    GroupServerCalls: false
  }
}