From 1499d8149575493519f2c5b04462c2302a455aa9 Mon Sep 17 00:00:00 2001
From: haorenhui <renhui.hao@capgemini.com>
Date: 星期五, 27 十月 2023 15:16:24 +0800
Subject: [PATCH] Merge branch 'dev' into dev_hrh_global

---
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog#981.def                          |    2 
 _Main/BL/Type_GlobalParameters/Attribute_Address.qbl                                                                                     |    8 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def                                      |    4 
 _Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl                                                                       |   14 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl                                                                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick#605.def                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def                                           |    3 
 _Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl                                                               |   20 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl                                                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                           |    2 
 _Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl                                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Views/全局参数.vw                                                                                                |  351 +++++++++
 _var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged#613.def                                       |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick#608.def                       |   30 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def                                      |   18 
 _Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl                                          |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def                                  |   31 
 _Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def              |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4#2.def                                                        |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def                                            |   59 +
 _Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl                                                                        |  172 ++++
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl                                                                 |   32 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def                                                       |   19 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl                                                                |   17 
 _var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties                                                                      |    8 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def                                                              |   15 
 _Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl                                                                      |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def                                                    |   40 +
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick#249.def                                       |   20 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl                                                                 |   10 
 _Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def                                              |    2 
 _Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw                                                                                             |  204 +++++
 _Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl                                                                   |   14 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl                                                                                   |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def                                                          |   48 +
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def                            |   20 
 _Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick#836.def                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def                                              |    2 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl                                                                                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def                                   |   15 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                            |   66 -
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl                                                                                     |   54 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def                                                    |   83 ++
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick#902.def                 |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def                                           |   14 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def     |   16 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def                                       |   15 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl                                                                |   10 
 _Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl                                                             |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def                                              |    2 
 _Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl                                                                 |   19 
 _Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl                                                                             |   14 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def                                                          |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def                                            |   35 
 _Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn#56.qbl                                                                  |    0 
 _Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl                                                                              |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def                                                 |    2 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl                                                                      |   15 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl                                                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def                                     |   18 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl                                                                       |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def                            |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick#918.def                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def                                 |   57 +
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def                          |   19 
 _var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties                                                                      |    8 
 /dev/null                                                                                                                                |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def                             |   18 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                   |    8 
 _Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl                                                                       |   19 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl                                                               |   12 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl                                                                       |   12 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def                                                             |   17 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl                                                                        |   10 
 _Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl                                                                                |   53 +
 _Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl                                                                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick#673.def                                       |   20 
 _Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl                                                                            |   15 
 _Main/BL/Type_GlobalParameters/Attribute_Port.qbl                                                                                        |    8 
 94 files changed, 2,038 insertions(+), 260 deletions(-)

diff --git a/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl b/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl
new file mode 100644
index 0000000..05afed6
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters
+{
+  #keys: '1[412960.0.369930029]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.369930031][412960.0.369930030][412960.0.369930032]'
+    Cardinality: '0to1'
+    ObjectDefinition: GlobalParameters
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide GlobalParameters
+  {
+    #keys: '3[412960.0.369930034][412960.0.369930033][412960.0.369930035]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl
index 83ab828..1c6dcae 100644
--- a/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl
@@ -2,14 +2,20 @@
 #parent: #root
 StaticMethod Create (
   GlobalOTDLog globalOTDLog,
-  String executeUser
-)
+  String executeUser,
+  String message
+) as String
 {
   TextBody:
   [*
-    globalOTDLog.DataDistributionLog( relnew,
-                                      ExecuteStatus  := "Running",
-                                      ExecuteUser    := executeUser
-                                     );
+    dataInterfaceLog := globalOTDLog.DataInterfaceLog( relnew,
+                                                       ID            := OS::GenerateGUIDAsString(),
+                                                       ExecuteStatus := "Running",
+                                                       ExecuteUser   := executeUser,
+                                                       Message       := message,
+                                                       CreateDate    := DateTime::ActualTime()
+                                                      );
+    
+    return dataInterfaceLog.ID();
   *]
 }
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl
new file mode 100644
index 0000000..51eb429
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_OnException.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod OnException (
+  Exception e,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    options := DatasetFindOptions::Construct( "GlobalOTDLog" ).IncludeOffline( true );
+    
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSGlobalOTDLog::Root( mdskey ) -> DataInterfaceLog::OnError( e.ErrorNumber(), e.Message(), dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl
new file mode 100644
index 0000000..0d1e585
--- /dev/null
+++ b/_Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Success (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    options := DatasetFindOptions::Construct( "GlobalOTDLog" ).IncludeOffline( true );
+    
+    mdskey := DatasetController::FindUnique( options );
+    
+    MDSGlobalOTDLog::Root( mdskey ) -> DataInterfaceLog::OnSuccess( dataInterfaceLogID );
+  *]
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index 12a5633..66ff081 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -101,14 +101,6 @@
       Global_MappingOperationCost::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist );
     }
     
-    //if ( isDOI_DSI ) {
-    //  Global_MappingDOI_DSI::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_DOI_DSI" );
-    //}
-    //
-    //if ( isCustomerGrade ) {
-    //  Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
-    //}
-    
     if ( isStockingPoint_MP ) {
       Global_MappingStockingPoint_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
     }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl
new file mode 100644
index 0000000..37b6ab8
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryData.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllCategoryData (
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
+)
+{
+  TextBody:
+  [*
+    globalOTDTable -> GlobalOTDTable::DeleteAllCategoryDataStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl
new file mode 100644
index 0000000..9095912
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllCategoryDataStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_ProductCategory( relflush );
+    globalOTDTable.Global_ProductInLineCategory( relflush );
+    globalOTDTable.Global_InventorySupplyCategory( relflush );
+    globalOTDTable.Global_StockingPointCostCategory( relflush );
+    globalOTDTable.Global_MAPISPIPCategory( relflush );
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl
index bfd949f..3f6a675 100644
--- a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl
@@ -1,30 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod DeleteAllMappingData (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
 )
 {
   TextBody:
   [*
-    globalOTDTable.Global_MappingCustomOrder( relflush );
-    globalOTDTable.Global_MappingForecast( relflush );
-    globalOTDTable.Global_MappingUnitOfMeasure_MP( relflush );
-    globalOTDTable.Global_MappingSalesSegment_MP( relflush );
-    globalOTDTable.Global_MappingProduct_MP( relflush );
-    globalOTDTable.Global_MappingConversionFactor( relflush );
-    globalOTDTable.Global_MappingOperation( relflush );
-    globalOTDTable.Global_MappingOperationBOM( relflush );
-    globalOTDTable.Global_MappingProductInLane( relflush );
-    globalOTDTable.Global_MappingActualProductInStockingPointInPeriod( relflush );
-    globalOTDTable.Global_MappingInventorySupply( relflush );
-    globalOTDTable.Global_MappingStockingPointCost( relflush );
-    globalOTDTable.Global_MappingOperationCost( relflush );
-    globalOTDTable.Global_MappingDOI_DSI( relflush );
-    globalOTDTable.Global_MappingCustomerGrade( relflush );
-    globalOTDTable.Global_MappingStockingPoint_MP( relflush );
-    globalOTDTable.Global_MappingCurrency_MP( relflush );
-    globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
-    globalOTDTable.Global_MappingLane( relflush );
-    globalOTDTable.Global_MappingLaneLeg( relflush );
+    globalOTDTable -> GlobalOTDTable::DeleteAllMappingDataStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
   *]
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl
new file mode 100644
index 0000000..532eaa6
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteAllMappingDataStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingCustomOrder( relflush );
+    globalOTDTable.Global_MappingForecast( relflush );
+    globalOTDTable.Global_MappingUnitOfMeasure_MP( relflush );
+    globalOTDTable.Global_MappingSalesSegment_MP( relflush );
+    globalOTDTable.Global_MappingProduct_MP( relflush );
+    globalOTDTable.Global_MappingConversionFactor( relflush );
+    globalOTDTable.Global_MappingOperation( relflush );
+    globalOTDTable.Global_MappingOperationBOM( relflush );
+    globalOTDTable.Global_MappingProductInLane( relflush );
+    globalOTDTable.Global_MappingActualProductInStockingPointInPeriod( relflush );
+    globalOTDTable.Global_MappingInventorySupply( relflush );
+    globalOTDTable.Global_MappingStockingPointCost( relflush );
+    globalOTDTable.Global_MappingOperationCost( relflush );
+    globalOTDTable.Global_MappingDOI_DSI( relflush );
+    globalOTDTable.Global_MappingCustomerGrade( relflush );
+    globalOTDTable.Global_MappingStockingPoint_MP( relflush );
+    globalOTDTable.Global_MappingCurrency_MP( relflush );
+    globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
+    globalOTDTable.Global_MappingLane( relflush );
+    globalOTDTable.Global_MappingLaneLeg( relflush );
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl b/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl
new file mode 100644
index 0000000..f2e1fe6
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Address
+{
+  #keys: '3[412960.0.369930086][412960.0.369930085][412960.0.369930087]'
+  Description: 'Api浣跨敤鐨勫湴鍧�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl b/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl
new file mode 100644
index 0000000..85f6698
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AttributeName
+{
+  #keys: '3[412960.0.369930046][412960.0.369930045][412960.0.369930047]'
+  Description: '鍙橀噺鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl b/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl
new file mode 100644
index 0000000..378b5e3
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AttributeValue
+{
+  #keys: '3[412960.0.369930056][412960.0.369930055][412960.0.369930057]'
+  Description: '鍙橀噺鍊�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl b/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl
new file mode 100644
index 0000000..29658ab
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Port
+{
+  #keys: '3[412960.0.369930066][412960.0.369930065][412960.0.369930067]'
+  Description: 'Api浣跨敤鐨勭鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl b/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl
new file mode 100644
index 0000000..c1fe72b
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PostRequestBody
+{
+  #keys: '3[412960.0.369930076][412960.0.369930075][412960.0.369930077]'
+  Description: 'Api浣跨敤鐨刾ost body'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl b/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl
new file mode 100644
index 0000000..c10cd30
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl
@@ -0,0 +1,172 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod TestForApiRequest (
+  GlobalOTDTable owner
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-26-2023 (created)
+    //info( "Sales Segment Finished, Start Get StockingPoint From Api" )
+    //bodynumber := "2";
+    //postrequestbody := JSON::Object()
+    //                    .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+    //                    .Add( "fromSystemCode", "OTDH000" + bodynumber )
+    //                    .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+    //                    .Add( "ouZone", "OU_TMSH" )
+    //                    .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+    //                    .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+    //                    .Add( "dataType", "JSON" )
+    //                    .Add( "data", JSON::Object()
+    //                                  .Add( "pageIndex", "1" ) ).Build();
+    //
+    //info( DateTime::Now().Format( "Y-M2-D2 H:m:s" ) );
+    //postrequestbodystring := postrequestbody.AsString();
+    //info( postrequestbodystring );
+    //
+    //parameter := select( owner, GlobalParameters, param, param.AttributeName() = "test" );
+    //body := parameter.PostRequestBody();
+    //address := parameter.Address();
+    //url := parameter.AttributeValue();
+    //port := [Number]parameter.Port();
+    //
+    //// for HTTPS requests:
+    //i := HTTPInterface::Create( address, port);
+    ////i := HTTPInterface::Create( address ,443);
+    //info( address, url, port, body );
+    //
+    //i.URL(url);
+    //i.SSL(false);
+    ////i.SSL(true);
+    ////i.SSLKeystore('MyKeystore'); // created in the Config Utility
+    //
+    //i.PostMethod(true); //it's a POST method
+    //
+    //i.Call(body); // Call's argument is for POST method's content.
+    //htmlresult := i.Result();
+    //info( htmlresult );
+    //
+    //htmlresponse := JSON::Parse( htmlresult );
+    //info( htmlresponse );
+    
+    info( "Init StockingPoint For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    spparameter := owner.GlobalParameters( relnew );
+    spparameter.AttributeName( "StockingPoint" );
+    spparameter.AttributeValue( "/otdService/https/GetStockingPointsInfo" );
+    spparameter.Address( "api-uat-sgc.tianma.cn" );
+    spparameter.Port( "443" );
+    bodynumber := "2";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    spparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init CurrencyInfo For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    ciparameter := owner.GlobalParameters( relnew );
+    ciparameter.AttributeName( "CurrencyInfo" );
+    ciparameter.AttributeValue( "/otdService/https/GetCurrenciesInfo" );
+    ciparameter.Address( "api-uat-sgc.tianma.cn" );
+    ciparameter.Port( "443" );
+    bodynumber := "1";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    ciparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init CurrencyRates For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    crparameter := owner.GlobalParameters( relnew );
+    crparameter.AttributeName( "CurrencyRates" );
+    crparameter.AttributeValue( "/otdService/https/GetCurrencyRatesInfo" );
+    crparameter.Address( "api-uat-sgc.tianma.cn" );
+    crparameter.Port( "443" );
+    bodynumber := "5";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    crparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init Lanes For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    lparameter := owner.GlobalParameters( relnew );
+    lparameter.AttributeName( "Lanes" );
+    lparameter.AttributeValue( "/otdService/https/GetLanesInfo" );
+    lparameter.Address( "api-uat-sgc.tianma.cn" );
+    lparameter.Port( "443" );
+    bodynumber := "3";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    lparameter.PostRequestBody( postrequestbodystring );
+    
+    info( "Init LaneLegs For Api" )
+    existparameter := select( owner, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    if( not isnull( existparameter ) ){
+      existparameter.Delete();
+      }
+    llparameter := owner.GlobalParameters( relnew );
+    llparameter.AttributeName( "LaneLegs" );
+    llparameter.AttributeValue( "/otdService/https/GetLaneLegsInfo" );
+    llparameter.Address( "api-uat-sgc.tianma.cn" );
+    llparameter.Port( "443" );
+    bodynumber := "4";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    postrequestbodystring := postrequestbody.AsString();
+    llparameter.PostRequestBody( postrequestbodystring );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl b/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl
new file mode 100644
index 0000000..7496bd1
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type GlobalParameters
+{
+  #keys: '5[412960.0.369930026][412960.0.369930024][0.0.0][412960.0.369930025][412960.0.369930027]'
+  BaseType: Object
+  Description: '鍏ㄥ眬鍙傛暟'
+  StructuredName: 'GlobalParameterss'
+}
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl
index da22117..9cf3238 100644
--- a/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl
@@ -1,18 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Create (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
 )
 {
   TextBody:
   [*
-    globalOTDTable.Global_InventorySupplyCategory( relflush );
-    
-    productIDs := selectuniquevalues( globalOTDTable, Global_MappingInventorySupply, 
-                                      tempGMIS, true, tempGMIS.ProductID() );
-    
-    traverse ( productIDs, Elements, id ) {
-      globalOTDTable.Global_InventorySupplyCategory( relnew, ProductID := id );
-    }
+    globalOTDTable -> Global_InventorySupplyCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
   *]
 }
diff --git a/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..a39e004
--- /dev/null
+++ b/_Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_InventorySupplyCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingInventorySupply, 
+                                      tempGMIS, true, tempGMIS.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_InventorySupplyCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl
index 2134324..fcc0484 100644
--- a/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl
@@ -1,18 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Create (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
 )
 {
   TextBody:
   [*
-    globalOTDTable.Global_MAPISPIPCategory( relflush );
-    
-    productIDs := selectuniquevalues( globalOTDTable, Global_MappingActualProductInStockingPointInPeriod, 
-                                      tempGMAPISPIP, true, tempGMAPISPIP.ProductID() );
-    
-    traverse ( productIDs, Elements, id ) {
-      globalOTDTable.Global_MAPISPIPCategory( relnew, ProductID := id );
-    }
+    globalOTDTable -> Global_MAPISPIPCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
   *]
 }
diff --git a/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..125e79a
--- /dev/null
+++ b/_Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MAPISPIPCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingActualProductInStockingPointInPeriod, 
+                                      tempGMAPISPIP, true, tempGMAPISPIP.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_MAPISPIPCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
index e3b0e63..c8828b9 100644
--- a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
     
-    bodynumber := "5";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrencyRatesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
index 2480088..cf9ba2f 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingCurrency_MP( relflush );
     
-    bodynumber := "1";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrenciesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
index e46efd6..d1f365c 100644
--- a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingLane( relflush );
     
-    bodynumber := "3";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLanesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
index 7899f6e..ad5182b 100644
--- a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingLaneLeg( relflush );
     
-    bodynumber := "4";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLaneLegsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
index 4901d0a..749075f 100644
--- a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingStockingPoint_MP( relflush );
     
-    bodynumber := "2";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetStockingPointsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl
index 22faab2..e60b885 100644
--- a/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_Global_ProductCategory/StaticMethod_Create.qbl
@@ -1,17 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Create (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
 )
 {
   TextBody:
   [*
-    globalOTDTable.Global_ProductCategory( relflush );
-    
-    businessTypes := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, tempGMPMP, true, tempGMPMP.BusinessType() );
-    
-    traverse ( businessTypes, Elements, bt ) {
-      globalOTDTable.Global_ProductCategory( relnew, BusinessTypeName := bt );
-    }
+    globalOTDTable -> Global_ProductCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
   *]
 }
diff --git a/_Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..6613fb9
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_ProductCategory( relflush );
+    
+    businessTypes := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, tempGMPMP, true, tempGMPMP.BusinessType() );
+    
+    traverse ( businessTypes, Elements, bt ) {
+      globalOTDTable.Global_ProductCategory( relnew, BusinessTypeName := bt );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl
index 57d8a51..a3021a4 100644
--- a/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl
@@ -1,17 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Create (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
 )
 {
   TextBody:
   [*
-    globalOTDTable.Global_ProductInLineCategory( relflush );
-    
-    productIDs := selectuniquevalues( globalOTDTable, Global_MappingProductInLane, tempGMPIL, true, tempGMPIL.ProductID() );
-    
-    traverse ( productIDs, Elements, id ) {
-      globalOTDTable.Global_ProductInLineCategory( relnew, ProductID := id );
-    }
+    globalOTDTable -> Global_ProductInLineCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
   *]
 }
diff --git a/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..2d15e8f
--- /dev/null
+++ b/_Main/BL/Type_Global_ProductInLineCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_ProductInLineCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingProductInLane, tempGMPIL, true, tempGMPIL.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_ProductInLineCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl
index 5d5ba37..ceb2861 100644
--- a/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl
@@ -1,17 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Create (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDTable globalOTDTable,
+  String dataInterfaceLogID
 )
 {
   TextBody:
   [*
-    globalOTDTable.Global_StockingPointCostCategory( relflush );
-    
-    productIDs := selectuniquevalues( globalOTDTable, Global_MappingStockingPointCost, tempGMSPC, true, tempGMSPC.ProductID() );
-    
-    traverse ( productIDs, Elements, id ) {
-      globalOTDTable.Global_StockingPointCostCategory( relnew, ProductID := id );
-    }
+    globalOTDTable -> Global_StockingPointCostCategory::CreateStream()
+                   -> DataInterfaceLog::Success( dataInterfaceLogID )
+                   -> Exception()
+                   -> DataInterfaceLog::OnException( dataInterfaceLogID );
   *]
 }
diff --git a/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl
new file mode 100644
index 0000000..3946f6f
--- /dev/null
+++ b/_Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateStream (
+  GlobalOTDTable globalOTDTable
+) as stream[GlobalOTDTable]
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_StockingPointCostCategory( relflush );
+    
+    productIDs := selectuniquevalues( globalOTDTable, Global_MappingStockingPointCost, tempGMSPC, true, tempGMSPC.ProductID() );
+    
+    traverse ( productIDs, Elements, id ) {
+      globalOTDTable.Global_StockingPointCostCategory( relnew, ProductID := id );
+    }
+    
+    return emit( globalOTDTable );
+  *]
+}
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
index 391ecf9..0b2323a 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_DoASync.qbl
@@ -3,7 +3,7 @@
 StaticMethod DoASync (
   MacroPlan macroPlan,
   const GlobalOTDTable globalOTDTable,
-  String businessTypeName
+  Strings businessTypeNames
 )
 {
   TextBody:
@@ -12,6 +12,6 @@
     //info( "ActualPISPIP Finished, Start InventoryCost Data Broker" );
     //macroPlan.Broker_OTD_InventoryCost().Execute();
     info( "InventoryCost Data Broker Finished, Start InventoryCost Mapping" );
-    macroPlan.DoASyncMappingInventoryValueAndCostData(globalOTDTable,businessTypeName);
+    macroPlan.DoASyncMappingInventoryValueAndCostData(globalOTDTable,businessTypeNames);
   *]
 }
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
index d2f5724..4c98455 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingActualPISPIPData.qbl
@@ -12,9 +12,10 @@
     // renhao Aug-14-2023 (created)
     listtodeal := construct( Global_MappingActualProductInStockingPointInPeriods, constcontent );
     if ( businessTypes.Size() > 0 ) {
-      businessTypeName := businessTypes.Element( 0 );
-      targetGlobal_ProductCategory := select( globalOTDTable, Global_ProductCategory, tempGPC, tempGPC.BusinessTypeName() = businessTypeName );
-      listtodeal := selectset( targetGlobal_ProductCategory, Global_MappingProduct_MP.Global_MAPISPIPCategory.Global_MappingActualProductInStockingPointInPeriod, 
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypes, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_MAPISPIPCategory.Global_MappingActualProductInStockingPointInPeriod, 
                                tempGMPIL, 
                                ( tempGMPIL.ActualInventoryLevelEnd() > 0 ) and 
                                ( organcodelist.Find( tempGMPIL.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
index 6596139..ad47aed 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
@@ -15,9 +15,10 @@
     
     listtodeal := construct( Global_MappingInventorySupplys, constcontent );
     if ( businessTypes.Size() > 0 ) {
-      businessTypeName := businessTypes.Element( 0 );
-      targetGlobal_ProductCategory := select( globalOTDTable, Global_ProductCategory, tempGPC, tempGPC.BusinessTypeName() = businessTypeName );
-      listtodeal := selectset( targetGlobal_ProductCategory, Global_MappingProduct_MP.Global_InventorySupplyCategory.Global_MappingInventorySupply, 
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypes, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_InventorySupplyCategory.Global_MappingInventorySupply, 
                                tempGMIS, 
                                ( tempGMIS.UserQuantity()>0 ) and 
                                ( tempGMIS.Date() >= queryStartDate ) and 
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
index 78b1f55..b000fe9 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingInventoryValueAndCostData.qbl
@@ -2,18 +2,22 @@
 #parent: #root
 Method DoASyncMappingInventoryValueAndCostData (
   const GlobalOTDTable globalOTDTable,
-  String businessTypeName
+  Strings businessTypeNames
 )
 {
   TextBody:
   [*
     // yypsybs Aug-15-2023 (created)
     listtodeal := construct( Global_MappingStockingPointCosts, constcontent );
-    if ( businessTypeName = "" ) {
+    if ( businessTypeNames.Size() = 0 ) {
       listtodeal := selectset( globalOTDTable,Global_MappingStockingPointCost,item,true );
     } else {
-      targetGlobal_ProductCategory := select( globalOTDTable, Global_ProductCategory, tempGPC, tempGPC.BusinessTypeName() = businessTypeName );
-      listtodeal := selectset( targetGlobal_ProductCategory, Global_MappingProduct_MP.Global_StockingPointCostCategory.Global_MappingStockingPointCost, tempGMPIL, true );
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypeNames, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_StockingPointCostCategory.Global_MappingStockingPointCost, 
+                               tempGMPIL, 
+                               true );
     }
     totalcount := listtodeal.Size();
     
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
index 03a2581..37eb082 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingOperationBOMData.qbl
@@ -94,8 +94,14 @@
         toCreateBomList := toCreateBomList.Union( alterCodes);
         traverse( toCreateBomList, Elements, key ) {
             boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.ComponentCode() = key );
-            bom := boms.First();
-            this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
+            if( boms.Size()=0){
+              boms := selectset( bomList, Elements, item, item.ComponentType() = "P" and item.OrganCode() + item.AlternativeMaterialCode() = key );
+            }
+            if( boms.Size()>0){
+              bom := boms.First();
+              this.MappingOperationBOMDataSupplyPurchase( bom.OrganCode(), bom.ComponentCode(), bom.ComponentType());
+            }
+            
         }
     }
     
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
index 38a7a8b..b1434d1 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingProductInLaneData.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 Method DoASyncMappingProductInLaneData (
   const GlobalOTDTable globalOTDTable,
-  String businessTypeName
+  Strings businessTypeNames
 )
 {
   Description: 'Get Product In Line data'
@@ -11,11 +11,15 @@
     // Administrator Aug-17-2023 (created)
     // list to deal
     listtodeal := construct( Global_MappingProductInLanes, constcontent );
-    if ( businessTypeName = "" ) {
+    if ( businessTypeNames.Size() = 0 ) {
       listtodeal := selectset( globalOTDTable, Global_MappingProductInLane, item ,true );
     } else {
-      targetGlobal_ProductCategory := select( globalOTDTable, Global_ProductCategory, tempGPC, tempGPC.BusinessTypeName() = businessTypeName );
-      listtodeal := selectset( targetGlobal_ProductCategory, Global_MappingProduct_MP.Global_ProductInLineCategory.Global_MappingProductInLane, tempGMPIL, true );
+      targetGlobal_ProductCategory := selectset( globalOTDTable, Global_ProductCategory, tempGPC, 
+                                                 exists( businessTypeNames, Elements, tempBTN, tempBTN = tempGPC.BusinessTypeName() ) );
+      listtodeal := selectset( targetGlobal_ProductCategory, 
+                               Elements.Global_MappingProduct_MP.Global_ProductInLineCategory.Global_MappingProductInLane, 
+                               tempGMPIL, 
+                               true );
     }
     totalcount := listtodeal.Size();
     info( "ProductInLane has " + totalcount.AsQUILL() + " rows in total" );
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
index 0f6ac65..0c397f4 100644
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
@@ -45,31 +45,31 @@
     
     // 搴撳瓨鐐�-3
     info( "Sales Segment Finished, Start Get StockingPoint From Api" )
-    bodynumber := "2";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetStockingPointsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiStockingPointData( data );
     
     // 璐у竵淇℃伅-4
     info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Api" )
-    bodynumber := "1";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrenciesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiCurenciesData( data );
     
     //璐у竵姹囩巼淇℃伅-5
     info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Api" )
-    bodynumber := "5";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrencyRatesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiCurencyRatesData( data );
     
@@ -93,21 +93,21 @@
     
     //杞﹂亾淇℃伅-10
     info( "BOM Finished, Start Get Lanes From Api" );
-    bodynumber := "3";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLanesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiLanesData( data );
     
     //杞﹂亾杩愯緭娈�-11
     info( "Get Lanes From Api Finished, Start Get LaneLegs From Api" );
-    bodynumber := "4";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLaneLegsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiLaneLegsData( data );
     
@@ -115,7 +115,7 @@
     //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
     //macroPlan.Broker_OTD_ProductInLane().Execute();
     info( "ProductInLane Data Broker Finished, Start ProductInLane Mapping" );
-    macroPlan.DoASyncMappingProductInLaneData(globalOTDTable,guard( businessTypeName.Element( 0 ), "" ));
+    macroPlan.DoASyncMappingProductInLaneData( globalOTDTable,businessTypeName );
     
     // 鍦ㄥ簱搴撳瓨鏁版嵁-13
     //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
@@ -130,7 +130,7 @@
     macroPlan.DoASyncMappingExternalSupplyData( businessTypeName, isKeyProduct ,globalOTDTable, organcodelist );
     
     // 搴撳瓨鎴愭湰-15
-    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable,guard( businessTypeName.Element( 0 ), "" ) );
+    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable,businessTypeName );
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
diff --git a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
new file mode 100644
index 0000000..4f4edbb
--- /dev/null
+++ b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
@@ -0,0 +1,53 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExportTheFileStream (
+  PRDatas toExportList
+) as BinaryValue
+{
+  TextBody:
+  [*
+    text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>PR</name><column><name>鐗╂枡缂栫爜</name><type>String</type></column><column><name>鐗╂枡鍚嶇О</name><type>String</type></column><column><name>闈㈡澘鐗╂枡鏍囪瘑</name><type>String</type></column><column><name>浜よ揣鏃ユ湡</name><type>String</type></column><column><name>PR寤鸿鏃ユ湡</name><type>String</type></column><column><name>浜よ揣鏁伴噺</name><type>Number</type></column><column><name>MRP璁$畻鐗堟湰鍙�</name><type>String</type></column><column><name>涓氬姟绫诲瀷</name><type>String</type></column><column><name>缁勭粐缂栫爜</name><type>String</type></column><column><name>鏄惁闀垮懆鏈�</name><type>String</type></column><column><name>鏄惁涓撶敤鏂�</name><type>String</type></column><column><name>鐗╂枡璁″垝绛栫暐</name><type>String</type></column><column><name>鎻愬墠鏈�</name><type>Number</type></column><column><name>渚涘簲鍟嗕唬鐮�</name><type>String</type></column><column><name>渚涘簲鍟嗗悕绉�</name><type>String</type></column><column><name>鏀惰揣搴撳瓨鐐�</name><type>String</type></column><column><name>璁¢噺鍗曚綅</name><type>String</type></column><column><name>PR鏁版嵁鍙戦�佺姸鎬�</name><type>String</type></column><column><name>鍙戦�佹椂闂�</name><type>String</type></column><column><name>鍙戦�佷汉</name><type>String</type></column></table>';
+    
+    sc := DateToString::StandardConverter();
+    sc.SetCustomConversion();
+    sc.CustomFormatString( 'yyyy-MM-dd' );
+    
+    xmlDOMImplementation := XMLDOMImplementation::Create();
+    xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text );
+    
+    tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
+    
+    traverse ( toExportList, Elements, prd ) {
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProductID(), "鐗╂枡缂栫爜" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProductName(), "鐗╂枡鍚嶇О" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.IsPanelMaterial(), "闈㈡澘鐗╂枡鏍囪瘑" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, sc.Convert( prd.DeliveryDate() ), "浜よ揣鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, sc.Convert( prd.PRSuggestionDate() ), "PR寤鸿鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]( prd.Quantity().Round( 0 ) ), "浜よ揣鏁伴噺" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.BusinessType(), "涓氬姟绫诲瀷" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.OrganCode(), "缁勭粐缂栫爜" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.IsLongLeadItem(), "鏄惁闀垮懆鏈�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.IsGenericMaterial(), "鏄惁涓撶敤鏂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.MaterialMRPType(), "鐗╂枡璁″垝绛栫暐" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]prd.LeadTime(), "鎻愬墠鏈�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.ProviderName(), "渚涘簲鍟嗗悕绉�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.UnitOfMeasure(), "璁¢噺鍗曚綅" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.PRReleaseStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.CreateTimeString(), "鍙戦�佹椂闂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, prd.CreateBy(), "鍙戦�佷汉" );
+    }
+    
+    xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
+    xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
+    
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
+    tableGroupHandle := TableGroupHandle::Create( "PR" );
+    tableGroupHandle.Add( tableHandle );
+    tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return tableBinaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl "b/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn\04356.qbl"
similarity index 100%
rename from _Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
rename to "_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn\04356.qbl"
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
index 687eea6..cfe3fcb 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
@@ -79,5 +79,15 @@
         Taborder: 4
       ]
     }
+    Component dsPlanningStart
+    {
+      #keys: '[414702.1.259278858]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: '璁″垝寮�濮嬫椂闂�'
+        Taborder: 8
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index d2aa450..fe1ca3b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -123,6 +123,8 @@
     macroPlanNew.IsKeyProduct( data.IsKeyProduct() );
     macroPlanNew.CreatePurchaseSupplyMaterial( data.CreatePurchaseSupplyMaterial() );
     
+    MacroPlan.UpdateStartOfPlanning( dsPlanningStart.Date().DateTime() );
+    
     this.Close();
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def
new file mode 100644
index 0000000..bb9a6b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelGeneral_549/dsPlanningStart
+Response OnCreated () id:Response_TIANMA_JITUAN_PanelGeneral_549_dsPlanningStart_OnCreated
+{
+  #keys: '[414702.1.259420402]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Date( Date::ActualDate() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def
new file mode 100644
index 0000000..aa8f552
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.370310585]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412960.0.370310589]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.370310591]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def
new file mode 100644
index 0000000..8474857
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def
@@ -0,0 +1,83 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.370310583]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component editAttributeName
+    {
+      #keys: '[412960.0.370311392]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.AttributeName'
+        Label: '鍙傛暟鍚嶇О'
+        Taborder: 1
+      ]
+    }
+    Component editAttributeValue
+    {
+      #keys: '[412960.0.370311429]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.AttributeValue'
+        Label: '鍙傛暟鍊�'
+        Taborder: 2
+      ]
+    }
+    Component editAddress
+    {
+      #keys: '[412960.0.370311489]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.Address'
+        Label: 'Api鍦板潃'
+        Taborder: 3
+        Visible: false
+      ]
+    }
+    Component editPort
+    {
+      #keys: '[412960.0.370311527]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.Port'
+        Label: 'Api绔彛鍙�'
+        Taborder: 4
+        Visible: false
+      ]
+    }
+    Component editPostRequestBody
+    {
+      #keys: '[412960.0.370311577]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.PostRequestBody'
+        Label: 'Api璇锋眰涓讳綋'
+        Taborder: 5
+        Visible: false
+      ]
+    }
+    Component IsApi
+    {
+      #keys: '[412960.0.370311617]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Description: '鏄惁涓篈PI鐩稿叧鍙傛暟'
+        Label: 'API閰嶇疆'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def
new file mode 100644
index 0000000..afdf6c4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOk () id:Method_DialogGlobalParameters_ClickBtnOk
+{
+  #keys: '[412960.0.370310978]'
+  Body:
+  [*
+    // Disabled button to prevent the possibility of multiple firing
+    
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    
+    DataHolderGlobalParameters.Data().Commit();
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def
new file mode 100644
index 0000000..338ca9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  GlobalParameters selection
+) id:Method_DialogGlobalParameters_Edit
+{
+  #keys: '[412960.0.370310979]'
+  Body:
+  [*
+    // Edits assumption
+    data := shadow( selection );
+    
+    DataHolderGlobalParameters.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def
new file mode 100644
index 0000000..047b889
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  GlobalOTDTable owner
+) id:Method_DialogGlobalParameters_New
+{
+  #keys: '[412960.0.370310981]'
+  Body:
+  [*
+    data := owner.GlobalParameters(relshadow);
+    DataHolderGlobalParameters.Data( &data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..ee5b753
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/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: '[412960.0.370310595]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..235dbb5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/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: '[412960.0.370310594]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOk()
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def
new file mode 100644
index 0000000..20929e5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: pnlContent/IsApi
+Response OnChanged () id:Response_pnlContent_IsApi_OnChanged
+{
+  #keys: '[412960.0.370311653]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      editAddress.Visible( this.Checked() );
+      editPort.Visible( this.Checked() );
+      editPostRequestBody.Visible( this.Checked() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def
new file mode 100644
index 0000000..a898ae5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogGlobalParameters
+{
+  #keys: '[412960.0.370310581]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderGlobalParameters
+    {
+      #keys: '[412960.0.370311111]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[GlobalParameters]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
index f81f38b..7c48b5a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
@@ -2,7 +2,7 @@
 #parent: ListBusinessType
 Response OnClick () id:Response_ListBusinessType_MenuNew_OnClick
 {
-  #keys: '[414382.0.377975353]'
+  #keys: '[412960.0.373110863]'
   CanBindMultiple: false
   DefinitionID => /ListBusinessType/Responsedef_ListBusinessType_WebMenu_OnClick
   GroupServerCalls: true
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
index e0f9eb6..e5b380b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Component_PanelPRDataButton.def
@@ -41,6 +41,8 @@
   ]
   Properties:
   [
+    FixedSize: true
+    Orientation: 'horizontal'
     Taborder: 0
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_DataHolderChecked_OnDataChanged\043774.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_DataHolderChecked_OnDataChanged\043774.def"
deleted file mode 100644
index 2e992ec..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_DataHolderChecked_OnDataChanged\043774.def"
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: DataHolderChecked_187
-Response OnDataChanged () id:Response_ListPRData_844_DataHolderChecked_OnDataChanged_774
-{
-  #keys: '[414384.0.799231412]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //traverse ( this.Data(), Elements, e ) {
-      //  info( "閫変腑鐨勭墿鏂欏彿锛�", e.MatCode() );
-      //}
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def"
index 20e3571..b844e5a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged\043613.def"
@@ -5,13 +5,12 @@
   #keys: '[414384.0.798051611]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      info( "checked 0 PRs" );
       DataHolderChecked.Data().Flush();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def
index 5783a47..4988e05 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_OnUserCheckedChanged.def
@@ -7,13 +7,12 @@
   #keys: '[414384.0.798051163]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
-  GroupServerCalls: true
   QuillAction
   {
     Body:
     [*
-      info( "checked " + [String]checkeditems.Size() + " PRs" );
       DataHolderChecked.Data( checkeditems.Copy() );
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
index b9d8b6e..d189e36 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonExportPR_OnClick.def
@@ -13,7 +13,7 @@
   {
     Body:
     [*
-      Application.Download( "PRData.xlsx", PRData::Export( MacroPlan ) );
+      Application.Download( "PRData.xlsx", PRData::ExportTheFileStream( DataHolderChecked.Data() ).AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def
index 5c9d1b5..86db130 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def
@@ -36,7 +36,7 @@
   ]
   Properties:
   [
-    Taborder: 1
+    Taborder: 3
   ]
   ResponseDefinitions:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def
new file mode 100644
index 0000000..fddea3f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel1.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component Panel1
+{
+  #keys: '[414702.1.241718154]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonGenerateProductCategory id:ButtonGenerateProductCategory_943
+    {
+      #keys: '[414702.1.245048887]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'TELEPHONE2'
+        Label: '鏍规嵁浜嬩笟閮ㄧ敓鎴愪骇鍝佸垎绫�'
+        Taborder: 0
+      ]
+    }
+    Component Button1 id:Button1_838
+    {
+      #keys: '[414702.1.247625600]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BRUSH2'
+        Label: '鏍规嵁浜у搧ID鐢熸垚ProductInLine鍒嗙被'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def
new file mode 100644
index 0000000..41ba37e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+Component Panel3
+{
+  #keys: '[414702.1.247664260]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component Button2 id:Button2_925
+    {
+      #keys: '[414702.1.242541029]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'INDUSTRIAL_ROBOT'
+        Label: '鏍规嵁浜у搧ID鐢熸垚StockingPoingCost鍒嗙被'
+        Taborder: 0
+      ]
+    }
+    Component Button3 id:Button3_414
+    {
+      #keys: '[414702.1.247559425]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BANANA'
+        Label: '鏍规嵁浜у搧ID鐢熸垚MAPISPIP鍒嗙被'
+        Taborder: 1
+      ]
+    }
+    Component Button4 id:Button4_433
+    {
+      #keys: '[414702.1.247870242]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BEER_GLASS'
+        Label: '鏍规嵁浜у搧ID鐢熸垚InventorySupply鍒嗙被'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4\0432.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4\0432.def"
new file mode 100644
index 0000000..17b69a8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4\0432.def"
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component Panel4
+{
+  #keys: '[414702.1.246784986]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component Button5 id:Button5_56
+    {
+      #keys: '[414702.1.247191910]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BROOM'
+        Label: '娓呯┖鍒嗙被'
+        Taborder: 1
+      ]
+    }
+    Component ButtonDeleteMappingData id:ButtonDeleteMappingData_928
+    {
+      #keys: '[414702.1.247703528]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'GARBAGE'
+        Label: '鍒犻櫎鎵�鏈変腑闂磋〃鏁版嵁'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_PanelDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_PanelDataInterfaceLog.def
deleted file mode 100644
index 6a2764e..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_PanelDataInterfaceLog.def
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-Component PanelDataInterfaceLog
-{
-  #keys: '[414702.1.241718154]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ButtonDeleteMappingData
-    {
-      #keys: '[414702.1.241609042]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'GARBAGE'
-        Label: '鍒犻櫎鎵�鏈変腑闂磋〃鏁版嵁'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick\043673.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick\043673.def"
new file mode 100644
index 0000000..12c6088
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick\043673.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel1/Button1_838
+Response OnClick () id:Response_FormInterfaceTest_Button1_OnClick_673
+{
+  #keys: '[414702.1.247625599]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚浜у搧鍦ㄨ溅閬撳垎绫�" );
+      
+      Global_ProductInLineCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick\043902.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick\043902.def"
new file mode 100644
index 0000000..0cd4107
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick\043902.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: Panel1/ButtonGenerateProductCategory_943
+Response OnClick () id:Response_Panel1_ButtonGenerateProductCategory_OnClick_902
+{
+  #keys: '[414702.1.245048886]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDTable );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚浜у搧鍒嗙被" );
+      
+      Global_ProductCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick\043836.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick\043836.def"
new file mode 100644
index 0000000..624401b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick\043836.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel3/Button2_925
+Response OnClick () id:Response_FormInterfaceTest_Button2_OnClick_836
+{
+  #keys: '[414702.1.242541028]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚搴撳瓨鎴愭湰鍒嗙被" );
+      
+      Global_StockingPointCostCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick\043918.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick\043918.def"
new file mode 100644
index 0000000..b1d0783
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button3_OnClick\043918.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel3/Button3_414
+Response OnClick () id:Response_FormInterfaceTest_Button3_OnClick_918
+{
+  #keys: '[414702.1.247559424]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚瀹為檯搴撳瓨鍒嗙被" );
+      
+      Global_MAPISPIPCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick\043249.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick\043249.def"
new file mode 100644
index 0000000..9bfb3dd
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button4_OnClick\043249.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel3/Button4_433
+Response OnClick () id:Response_FormInterfaceTest_Button4_OnClick_249
+{
+  #keys: '[414702.1.247870241]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true );
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鐢熸垚澶栭儴搴撳瓨鍒嗙被" );
+      
+      Global_InventorySupplyCategory::Create( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick\043605.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick\043605.def"
new file mode 100644
index 0000000..7800712
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick\043605.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: Panel4/Button5_56
+Response OnClick () id:Response_Panel4_Button5_OnClick_605
+{
+  #keys: '[414702.1.247191909]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true )
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "娓呯┖鍒嗙被鏁版嵁" );
+      
+      GlobalOTDTable::DeleteAllCategoryData( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick\043608.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick\043608.def"
new file mode 100644
index 0000000..8a5a671
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick\043608.def"
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: Panel4/ButtonDeleteMappingData_928
+Response OnClick () id:Response_Panel1_ButtonDeleteMappingData_OnClick_608
+{
+  #keys: '[414702.1.247703527]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    isExists := exists( GlobalOTDLog, DataInterfaceLog, tempDIL, tempDIL.Message() = "娓呯┖涓棿琛ㄦ暟鎹�" and tempDIL.ExecuteStatus() = "Running" );
+    
+    if ( isExists ) {
+      feedback := "宸叉湁姝e湪杩愯鐨勪换鍔★紒";
+    }
+    
+    return not isnull( GlobalOTDTable ) and not isnull( GlobalOTDLog ) and not isExists;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      WebMessageBox::Information( "浠诲姟寮�濮嬫墽琛岋紝浠呴檺涓�浜烘搷浣滐紒", true )
+      
+      id := DataInterfaceLog::Create( GlobalOTDLog, guard( ApplicationMacroPlanner.GetUserName(), "璐﹀彿寮傚父" ), "鍒犻櫎鎵�鏈変腑闂磋〃鏁版嵁" );
+      
+      GlobalOTDTable::DeleteAllMappingData( GlobalOTDTable, id );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_PanelDataInterfaceLog_ButtonDeleteMappingData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_PanelDataInterfaceLog_ButtonDeleteMappingData_OnClick.def
deleted file mode 100644
index 8f7212d..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_PanelDataInterfaceLog_ButtonDeleteMappingData_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelDataInterfaceLog/ButtonDeleteMappingData
-Response OnClick () id:Response_PanelDataInterfaceLog_ButtonDeleteMappingData_OnClick
-{
-  #keys: '[414702.1.239672495]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( GlobalOTDTable );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      GlobalOTDTable::DeleteAllMappingData( GlobalOTDTable );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def
index ec119cb..46b02ae 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def
@@ -8,7 +8,9 @@
   Children:
   [
     #child: ListDataInterfaceLog
-    #child: PanelDataInterfaceLog
+    #child: Panel1
+    #child: Panel4
+    #child: Panel3
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def
new file mode 100644
index 0000000..18364b4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListGlobalParameters
+{
+  #keys: '[412960.0.370311764]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorGlobalParameters
+    {
+      #keys: '[412960.0.370311765]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'GlobalParameters'
+      ]
+    }
+    #child: listActionBarPageGlobalParameters
+    Component DataSetLevelGlobalParameters
+    {
+      #keys: '[412960.0.370311770]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuGlobalParameters
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AttributeName","title":"AttributeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AttributeName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AttributeValue","title":"AttributeValue","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AttributeValue"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Address","title":"Address","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Address"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Port","title":"Port","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Port"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PostRequestBody","title":"PostRequestBody","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PostRequestBody"}}]'
+        ContextMenu: 'listContextMenuGlobalParameters'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListGlobalParameters_WebMenu_OnClick
+    {
+      #keys: '[412960.0.373111120]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[693.0.13162755]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def
new file mode 100644
index 0000000..dd6186c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelGlobalParameters
+{
+  #keys: '[412960.0.370311750]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListGlobalParameters
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def
new file mode 100644
index 0000000..5d480f6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageGlobalParameters
+{
+  #keys: '[412960.0.370311767]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def
new file mode 100644
index 0000000..e031569
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+Component listContextMenuGlobalParameters
+{
+  #keys: '[412960.0.370311772]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuNew id:MenuNew_21
+    {
+      #keys: '[412960.0.370312224]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'New'
+      ]
+    }
+    Component MenuEdit id:MenuEdit_368
+    {
+      #keys: '[412960.0.370312277]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete id:MenuDelete_832
+    {
+      #keys: '[412960.0.370312355]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete'
+      ]
+    }
+    Component MenuInitial
+    {
+      #keys: '[412960.0.376011203]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ARROW_LOOP3'
+        Taborder: 6
+        Title: 'Init Api'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def
new file mode 100644
index 0000000..f68b43c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick (
+  GlobalParameters selection
+) id:Response_ListGlobalParameters_MenuDelete_OnClick
+{
+  #keys: '[412960.0.373113087]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def
new file mode 100644
index 0000000..6094065
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick (
+  GlobalParameters selection
+) id:Response_ListGlobalParameters_MenuEdit_OnClick
+{
+  #keys: '[412960.0.373112994]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogGlobalParameters );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def
new file mode 100644
index 0000000..a222fe1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick () id:Response_ListGlobalParameters_MenuNew_OnClick
+{
+  #keys: '[412960.0.373111139]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNew'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogGlobalParameters );
+      dlg.New( GlobalOTDTable );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def
new file mode 100644
index 0000000..c2c4dd2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_listContextMenuGlobalParameters_MenuInitial_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: listContextMenuGlobalParameters/MenuInitial
+Response OnClick () id:Response_listContextMenuGlobalParameters_MenuInitial_OnClick
+{
+  #keys: '[412960.0.376011242]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      GlobalParameters::TestForApiRequest( GlobalOTDTable );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def
new file mode 100644
index 0000000..a193e5c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormGlobalParameters
+{
+  #keys: '[412960.0.367611841]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelGlobalParameters
+  ]
+  Properties:
+  [
+    Description: '瀛樻斁鍚勭被鍏ㄥ眬鍙傛暟锛岀洰鍓嶄粎鍖呭惈API鐩稿叧'
+    Image: 'EARTH2'
+    Title: 'Global Parameters'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_ListHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_ListHistoricalSalesOrders.def
deleted file mode 100644
index 5c5ae1b..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_ListHistoricalSalesOrders.def
+++ /dev/null
@@ -1,59 +0,0 @@
-Quintiq file version 2.0
-Component ListHistoricalSalesOrders
-{
-  #keys: '[414382.0.388210753]'
-  BaseType: 'WebList'
-  Children:
-  [
-    Component DataExtractorHistoricalSalesOrders
-    {
-      #keys: '[414382.0.388210754]'
-      BaseType: 'WebDataExtractor'
-      Properties:
-      [
-        DataType: 'MacroPlan'
-        Source: 'MacroPlan'
-        Taborder: 0
-        Transformation: 'HistoricalSalesOrder'
-      ]
-    }
-    #child: listActionBarPageHistoricalSalesOrders
-    Component DataSetLevelHistoricalSalesOrders
-    {
-      #keys: '[414382.0.388210759]'
-      BaseType: 'WebDataSetLevel'
-      Children:
-      [
-        #child: listContextMenuHistoricalSalesOrders
-      ]
-      Properties:
-      [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VerNo","title":"鐗堟湰鍙�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VerNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"濉骇鍘嗗彶鍟嗗搧缂栫爜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"瀹㈡埛鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"鏁伴噺鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderDate","title":"璁㈠崟鏃ユ湡","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderDate"}}]'
-        ContextMenu: 'listContextMenuHistoricalSalesOrders'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-  ResponseDefinitions:
-  [
-    DelegatedResponseDefinition OnClick id:Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-    {
-      #keys: '[414382.0.394390402]'
-      Initiator: 'WebMenu'
-      IsInherited: false
-      ResponseType: 'OnClick'
-      Arguments:
-      [
-        ResponseDefinitionArgument selection
-        {
-          #keys: '[1083.0.17043214]'
-          Binding: 'this.Selection()'
-        }
-      ]
-    }
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listActionBarPageHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listActionBarPageHistoricalSalesOrders.def
deleted file mode 100644
index 8597dfe..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listActionBarPageHistoricalSalesOrders.def
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-Component listActionBarPageHistoricalSalesOrders
-{
-  #keys: '[414382.0.388210756]'
-  BaseType: 'listActionBarPage'
-  Properties:
-  [
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listContextMenuHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listContextMenuHistoricalSalesOrders.def
deleted file mode 100644
index 08bafce..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Component_listContextMenuHistoricalSalesOrders.def
+++ /dev/null
@@ -1,46 +0,0 @@
-Quintiq file version 2.0
-Component listContextMenuHistoricalSalesOrders
-{
-  #keys: '[414382.0.388210761]'
-  BaseType: 'listContextMenu'
-  Children:
-  [
-    Component MenuNew id:MenuNew_603
-    {
-      #keys: '[414382.0.394390227]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'ADD2'
-        Taborder: 3
-        Title: 'New'
-      ]
-    }
-    Component MenuEdit id:MenuEdit_847
-    {
-      #keys: '[414382.0.394390242]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'PENCIL'
-        Taborder: 4
-        Title: 'Edit'
-      ]
-    }
-    Component MenuDelete id:MenuDelete_646
-    {
-      #keys: '[414382.0.394390257]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'DELETE'
-        Taborder: 5
-        Title: 'Delete'
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuDelete_OnClick.def
deleted file mode 100644
index c59123e..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuDelete_OnClick.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: ListHistoricalSalesOrders
-Response OnClick (
-  HistoricalSalesOrder selection
-) id:Response_ListHistoricalSalesOrders_MenuDelete_OnClick
-{
-  #keys: '[414382.0.402500799]'
-  CanBindMultiple: false
-  DefinitionID => /ListHistoricalSalesOrders/Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-  GroupServerCalls: true
-  Initiator: 'MenuDelete'
-  QuillAction
-  {
-    Body:
-    [*
-      selection.Delete();
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuEdit_OnClick.def
deleted file mode 100644
index 6ad44a8..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuEdit_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: ListHistoricalSalesOrders
-Response OnClick (
-  FillingCapacityOrder selection
-) id:Response_ListHistoricalSalesOrders_MenuEdit_OnClick
-{
-  #keys: '[414382.0.402531567]'
-  CanBindMultiple: false
-  DefinitionID => /ListHistoricalSalesOrders/Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-  GroupServerCalls: true
-  Initiator: 'MenuEdit'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogHistoricalSalesOrders );
-      dlg.Edit(  selection );
-    *]
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuNew_OnClick.def
deleted file mode 100644
index d151663..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/Response_ListHistoricalSalesOrders_MenuNew_OnClick.def
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: ListHistoricalSalesOrders
-Response OnClick () id:Response_ListHistoricalSalesOrders_MenuNew_OnClick
-{
-  #keys: '[414382.0.394390488]'
-  CanBindMultiple: false
-  DefinitionID => /ListHistoricalSalesOrders/Responsedef_ListHistoricalSalesOrders_WebMenu_OnClick
-  Initiator: 'MenuNew'
-  QuillAction
-  {
-    Body:
-    [*
-      dlg := construct( DialogHistoricalSalesOrders );
-      
-      dlg.dropDownStringListProductID().Strings(  HistoricalSalesOrder::GetProductIdString(  MacroPlan,"") );
-      info( HistoricalSalesOrder::GetProductIdString(  MacroPlan,"") );
-      dlg.dropDownStringListCustomer().Strings( HistoricalSalesOrder::GetCustomerString( MacroPlan,""));
-      dlg.dropDownStringListSalesSegmentName().Strings( HistoricalSalesOrder::GetSalesSegmentString(  MacroPlan,""));
-      dlg.dropDownStringListStockPointID().Strings( HistoricalSalesOrder::GetStockingPointString(  MacroPlan,""));
-      dlg.dropDownStringListUnitOfMeasureName().Strings( HistoricalSalesOrder::GetUnitOfMeasuresString(   MacroPlan,""));
-      
-      dlg.New( MacroPlan );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def
index 2bddaac..366fb53 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormHistoricalSalesOrders/_ROOT_Component_FormHistoricalSalesOrders.def
@@ -5,10 +5,6 @@
 {
   #keys: '[414382.0.386940324]'
   BaseType: 'WebForm'
-  Children:
-  [
-    #child: ListHistoricalSalesOrders
-  ]
   Properties:
   [
     Title: '澶栧崠CELL鍘嗗彶璁㈠崟'
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
index 5c28e5e..436d5f1 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 5
+    Taborder: 6
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
index 5cc2c95..a635d39 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 0
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
index b767aa5..d1bb88d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 1
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
index 2ad0d40..b29c642 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 2
+    Taborder: 3
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
index 1c15894..2b436da 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
@@ -60,6 +60,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 3
+    Taborder: 4
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
index b8719b3..4799d94 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
@@ -32,6 +32,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 4
+    Taborder: 5
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button1_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button1_OnClick.def
deleted file mode 100644
index bf4fda9..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button1_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: Button1
-Response OnClick () id:Response_FormInterfaceTest_Button1_OnClick
-{
-  #keys: '[414702.1.224832095]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      Global_ProductInLineCategory::Create( GlobalOTDTable );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button2_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button2_OnClick.def
deleted file mode 100644
index 4da9e70..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button2_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: Button2
-Response OnClick () id:Response_FormInterfaceTest_Button2_OnClick
-{
-  #keys: '[414702.1.224832394]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      Global_StockingPointCostCategory::Create( GlobalOTDTable );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button3_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button3_OnClick.def
deleted file mode 100644
index 43d8ae2..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button3_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: Button3
-Response OnClick () id:Response_FormInterfaceTest_Button3_OnClick
-{
-  #keys: '[414702.1.226882201]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      Global_MAPISPIPCategory::Create( GlobalOTDTable );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button4_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button4_OnClick.def
deleted file mode 100644
index 43ad89d..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button4_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: Button4
-Response OnClick () id:Response_FormInterfaceTest_Button4_OnClick
-{
-  #keys: '[414702.1.226892014]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      Global_InventorySupplyCategory::Create( GlobalOTDTable );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button5_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button5_OnClick.def
deleted file mode 100644
index 5886c41..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_Button5_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: Button5
-Response OnClick () id:Response_FormInterfaceTest_Button5_OnClick
-{
-  #keys: '[414702.1.228751233]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      GlobalOTDTable.Global_ProductCategory( relflush );
-      GlobalOTDTable.Global_ProductInLineCategory( relflush );
-      GlobalOTDTable.Global_InventorySupplyCategory( relflush );
-      GlobalOTDTable.Global_StockingPointCostCategory( relflush );
-      GlobalOTDTable.Global_MAPISPIPCategory( relflush );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ButtonGenerateProductCategory_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ButtonGenerateProductCategory_OnClick.def
deleted file mode 100644
index 6e100b7..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ButtonGenerateProductCategory_OnClick.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonGenerateProductCategory
-Response OnClick () id:Response_FormInterfaceTest_ButtonGenerateProductCategory_OnClick
-{
-  #keys: '[414702.1.220904292]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( GlobalOTDTable );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      Global_ProductCategory::Create( GlobalOTDTable );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def
new file mode 100644
index 0000000..2f9615b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: CheckSelectAll
+Response OnChanged () id:Response_FormInterfaceTest_CheckSelectAll_OnChanged
+{
+  #keys: '[414702.1.245944876]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      CheckboxCustomOrder.Checked( this.Checked() );
+      CheckboxForecast.Checked( this.Checked() );
+      CheckboxUnitOfMeasure_MP.Checked( this.Checked() );
+      CheckboxSalesSegment_MP.Checked( this.Checked() );
+      CheckboxProduct_MP.Checked( this.Checked() );
+      CheckboxConversionFactor.Checked( this.Checked() );
+      CheckboxOperation.Checked( this.Checked() );
+      CheckboxOperationBOM.Checked( this.Checked() );
+      CheckboxProductInLane.Checked( this.Checked() );
+      CheckboxAIPISPIP.Checked( this.Checked() );
+      CheckboxInventorySupply.Checked( this.Checked() );
+      CheckboxStockingPointCost.Checked( this.Checked() );
+      CheckboxOperationCost.Checked( this.Checked() );
+      CheckboxDOI_DSI.Checked( this.Checked() );
+      CheckboxCustomerGrade.Checked( this.Checked() );
+      CheckboxStockingPoint_MP.Checked( this.Checked() );
+      CheckboxCurrency_MP.Checked( this.Checked() );
+      CheckboxCurrencyRate_MP.Checked( this.Checked() );
+      CheckboxLane.Checked( this.Checked() );
+      CheckboxLaneLeg.Checked( this.Checked() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
index 94fce67..c8b3ff8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
@@ -19,6 +19,8 @@
   {
     Body:
     [*
+      WebMessageBox::Information( "鏁版嵁寮�濮嬫媺鍙栦腑锛侊紙浠呴檺涓�浜烘搷浣滐級", true );
+      
       GlobalOTDTable.SynchronizationAllMappingBrokerAndAPIByOption( ApplicationMacroPlanner.GetUserName(),
                                                                     CheckboxCustomOrder.Checked(),
                                                                     CheckboxForecast.Checked(),
@@ -40,8 +42,6 @@
                                                                     CheckboxCurrencyRate_MP.Checked(),
                                                                     CheckboxLane.Checked(),
                                                                     CheckboxLaneLeg.Checked() );
-      
-      WebMessageBox::Information( "鏁版嵁寮�濮嬫媺鍙栦腑锛侊紙浠呴檺涓�浜烘搷浣滐級", true );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
index 16917a6..087a1e2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -13,70 +13,14 @@
     #child: PanelInterfaceOption3
     #child: PanelInterfaceOption2
     #child: PanelInterfaceOption1
-    Component ButtonGenerateProductCategory
+    Component CheckSelectAll
     {
-      #keys: '[414702.1.220980872]'
-      BaseType: 'WebButton'
+      #keys: '[414702.1.245944647]'
+      BaseType: 'WebCheckbox'
       Properties:
       [
-        Image: 'TELEPHONE2'
-        Label: '鏍规嵁浜嬩笟閮ㄧ敓鎴愪骇鍝佸垎绫�'
-        Taborder: 6
-      ]
-    }
-    Component Button1
-    {
-      #keys: '[414702.1.225920560]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'BRUSH2'
-        Label: '鏍规嵁浜у搧ID鐢熸垚ProductInLine鍒嗙被'
-        Taborder: 7
-      ]
-    }
-    Component Button2
-    {
-      #keys: '[414702.1.225920577]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'INDUSTRIAL_ROBOT'
-        Label: '鏍规嵁浜у搧ID鐢熸垚StockingPoingCost鍒嗙被'
-        Taborder: 8
-      ]
-    }
-    Component Button3
-    {
-      #keys: '[414702.1.226882098]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'BANANA'
-        Label: '鏍规嵁浜у搧ID鐢熸垚MAPISPIP鍒嗙被'
-        Taborder: 9
-      ]
-    }
-    Component Button4
-    {
-      #keys: '[414702.1.226891739]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'BEER_GLASS'
-        Label: '鏍规嵁浜у搧ID鐢熸垚InventorySupply鍒嗙被'
-        Taborder: 10
-      ]
-    }
-    Component Button5
-    {
-      #keys: '[414702.1.228751221]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'BROOM'
-        Label: '娓呯┖鍒嗙被'
-        Taborder: 11
+        Label: '鍏ㄩ��'
+        Taborder: 0
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw b/_Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw
new file mode 100644
index 0000000..8a1455b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/PR_DATA.vw
@@ -0,0 +1,204 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPRHistoryData
+      {
+        title: 'QTIANMA_JITUAN::FormPRHistoryData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPRHistoryData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 5
+          columnSpan: 8
+        }
+        components
+        {
+          FormPRHistoryData_PanelPRHistoryButton
+          {
+            sizeRatio: 1
+          }
+          FormPRHistoryData_ListPRHistoryData
+          {
+          }
+          FormPRHistoryData_DataSetLevelPRHistoryData
+          {
+            groupDepth: -1
+            column_BusinessType
+            {
+              columnId: 'BusinessType'
+              dataPath: 'BusinessType'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_MRPCalverNo
+            {
+              columnId: 'MRPCalverNo'
+              dataPath: 'MRPCalverNo'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrganCode
+            {
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_SendStatus
+            {
+              columnId: 'SendStatus'
+              dataPath: 'SendStatus'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_ReleaseBy
+            {
+              columnId: 'ReleaseBy'
+              dataPath: 'ReleaseBy'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiveStatus
+            {
+              columnId: 'ReceiveStatus'
+              dataPath: 'ReceiveStatus'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_ReceiveError
+            {
+              columnId: 'ReceiveError'
+              dataPath: 'ReceiveError'
+              dataType: 'string'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPRData
+      {
+        title: 'QTIANMA_JITUAN::FormPRData'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPRData'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 4
+        }
+        components
+        {
+          FormPRData_PanelPRDataButton
+          {
+            sizeRatio: 1
+          }
+          FormPRData_ListPRData
+          {
+          }
+          FormPRData_DataSetLevelPRData
+          {
+            groupDepth: -1
+            column_MRPCalverNo
+            {
+              columnId: 'MRPCalverNo'
+              dataPath: 'MRPCalverNo'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'ActionBarPageData'
+    group: ''
+    index: 0
+    image: 'BEAR'
+    description: 'PR鐢宠'
+  }
+  formatversion: 2
+  id: 'PR_DATA'
+  name: 'PR_DATA'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw"
new file mode 100644
index 0000000..3e9b9c2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw"
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 277
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 106
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 4
+    image: 'EARTH2'
+    description: ''
+  }
+  formatversion: 2
+  id: '鍏ㄥ眬鍙傛暟'
+  name: '鍏ㄥ眬鍙傛暟'
+  isglobal: false
+  isroot: true
+}
diff --git a/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties b/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties
index 7e6f16a..542cbba 100644
--- a/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-38/_ROOT_Role_Dev-38.properties
@@ -513,12 +513,12 @@
 domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
 domainmodel.mdsstoragedefinitionmanager.maxtablename=0
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=totddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1529
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=todbpdb1
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otddevsyb
 domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
diff --git a/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties b/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties
index 26cfcab..963eb45 100644
--- a/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-40/_ROOT_Role_Dev-40.properties
@@ -513,12 +513,12 @@
 domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
 domainmodel.mdsstoragedefinitionmanager.maxtablename=0
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=totddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1529
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=todbpdb2
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otddevjtmb
 domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
diff --git a/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties b/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties
index 72cac08..13199ee 100644
--- a/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties
+++ b/_var/_Main/ModelSettings/Common/Dev-42/_ROOT_Role_Dev-42.properties
@@ -513,12 +513,12 @@
 domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
 domainmodel.mdsstoragedefinitionmanager.maxtablename=0
 domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=10.110.14.50
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1521
-domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=totddb_it
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=totddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1529
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=todbpdb3
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
 domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
-domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otdit
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=otddevoled
 domainmodel.mdsstoragedefinitionmanager.password=1 2A801D084589485925DA39115D5C7855 b91e3007-e230-4ef5-833e-a07edfc8903c
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
 domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=

--
Gitblit v1.9.3