From cb2628a2dd3039f9f3f1582bc599b70bd74dbe08 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期三, 25 十月 2023 18:05:09 +0800
Subject: [PATCH] 数据分发增加日志优化

---
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog#981.def                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_ListDataInterfaceLog.def                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/_ROOT_Component_FormDataInterfaceLog.def                                      |    4 
 _Main/BL/Type_Global_ProductInLineCategory/StaticMethod_Create.qbl                                                                       |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_Button5_OnClick#605.def                                       |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                            |   66 ----
 _Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_CreateStream.qbl                                                               |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_ButtonGenerateProductCategory_OnClick#902.def                 |   24 +
 _Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_CreateStream.qbl                                                             |   19 +
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel4_ButtonDeleteMappingData_OnClick#608.def                       |   30 ++
 _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_FormDataInterfaceLog/Component_Panel1.def                                                          |   37 ++
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_CheckSelectAll_OnChanged.def                                            |   35 ++
 _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/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel4#2.def                                                        |   37 ++
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingDataStream.qbl                                                                 |   32 ++
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllCategoryDataStream.qbl                                                                |   17 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def                                              |    2 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_DeleteAllMappingData.qbl                                                                       |   27 -
 _Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_CreateStream.qbl                                                                      |   20 +
 _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_FormDataInterfaceLog/Response_Panel3_Button4_OnClick#249.def                                       |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2.def                                              |    2 
 _Main/BL/Type_Global_StockingPointCostCategory/StaticMethod_Create.qbl                                                                   |   14 
 /dev/null                                                                                                                                |   20 -
 _Main/BL/Type_DataInterfaceLog/StaticMethod_Create.qbl                                                                                   |   18 
 _Main/BL/Type_Global_ProductCategory/StaticMethod_CreateStream.qbl                                                                       |   19 +
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Component_Panel3.def                                                          |   48 +++
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel3_Button2_OnClick#836.def                                       |   20 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def                                              |    2 
 _Main/BL/Type_Global_InventorySupplyCategory/StaticMethod_Create.qbl                                                                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDataInterfaceLog/Response_Panel1_Button1_OnClick#673.def                                       |   20 +
 _Main/BL/Type_DataInterfaceLog/StaticMethod_Success.qbl                                                                                  |   16 +
 _Main/BL/Type_Global_MAPISPIPCategory/StaticMethod_Create.qbl                                                                            |   15 
 40 files changed, 569 insertions(+), 164 deletions(-)

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/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_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_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/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_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
       ]
     }
   ]

--
Gitblit v1.9.3