From f5d6db2a9edfb82bbdb1ce5688c00df7dc101e83 Mon Sep 17 00:00:00 2001
From: yypsybs <yypsybs@foxmail.com>
Date: 星期日, 08 十月 2023 14:10:36 +0800
Subject: [PATCH] Merge branch 'dev' into dev_yx

---
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                   |   31 
 _Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl                                                                             |   10 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl                                                                        |    2 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl                                                                         |   16 
 _Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl                                                                                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def                                                           |    7 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl                                                       |   13 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def                                                  |   35 
 _Main/BL/Type_FillingCapacityOrder/Attribute_ID.qbl                                                                                      |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl                                                   |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl                                                      |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl                                                      |   13 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def                                                              |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def         |    6 
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeInterfaceData.qbl                                                   |   18 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeInterfaceData.qbl                                                          |   18 
 _Main/BL/Type_Scenario/Attribute_ScenarioName.qbl                                                                                        |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl                                                 |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl                                            |   13 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl                                                                                |    1 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def                                              |   65 +
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def                         |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def                                 |   19 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl                                                   |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def                                          |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuDelete_OnClick.def                                |   18 
 _Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CreateInOperation.qbl                                                                 |   16 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl                                                           |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def                  |    2 
 _Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_CustomOrder.qbl                                                                |   58 
 _Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl                                                                               |    9 
 _Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl                                                                                 |   94 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def                                              |   65 +
 _Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl                                                                               |    5 
 _Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl                                                                            |    2 
 _Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl                                                                             |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_PanelFillingCapacityOrder.def                                   |   26 
 _Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def                                   |   50 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def                                             |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_Edit.def                                                            |   15 
 _Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl                                                                                  |  112 -
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def                                                |  189 +++
 _Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecuteUser.qbl                                                                          |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl                                                            |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInit_OnClick.def                                |   18 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl                                           |   13 
 _Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeInterfaceData.qbl                                                      |   18 
 _Main/BL/Type_GlobalDTOTable/Method_SettingSuccessfulDetails.qbl                                                                         |   20 
 _Main/BL/Type_FillingCapacityOrder/Attribute_State.qbl                                                                                   |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl                                                           |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def                                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def                                          |    1 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def                                                                     |   15 
 _Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl                                                                              |    2 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl                                                          |   13 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def                                                             |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def                                       |   23 
 _Main/Sys/ImgAttr/Global_BrokerExecuteLog.dme                                                                                            |   25 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl                                                      |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl                                               |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl                                                         |   13 
 _Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl                                                                              |    7 
 _Main/BL/Type_Global_ShowCell/StaticMethod_SetColumnsAndRows.qbl                                                                         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def                                    |    2 
 _Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl                                                                               |   12 
 _Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl                                                                                       |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick#549.def                       |    2 
 _Main/BL/Type_BusinessType/Attribute_DisplayType.qbl                                                                                     |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl                                                  |   13 
 _Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl                                                                               |    1 
 _Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw                                                                              |  351 +++++
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def                                                         |   15 
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeInterfaceData.qbl                                                         |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def                                                           |    5 
 _Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl                                                                                   |   45 
 _Main/UI/MacroPlannerWebApp/Views/接口测试.vw                                                                                                |  197 ++-
 _Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl                                                                                  |    4 
 _Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeInterfaceData.qbl                               |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog#981.def                          |    4 
 _Main/BL/Type_Global_MappingCustomerGrade/StaticMethod_SynchronizeInterfaceData.qbl                                                      |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def                                                            |   18 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl                                             |   13 
 _Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeInterfaceData.qbl                                                       |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def                                                |    4 
 _Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl                                                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def                                                            |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def                                      |    2 
 _Main/BL/Type_GlobalDTOTable/Method_SettingFailureDetails.qbl                                                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def                                                          |    6 
 _Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl                                                                                |    4 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl                                                      |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def                                                   |   10 
 _Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeInterfaceData.qbl                                                    |   18 
 _Main/BL/Type_MacroPlan/Method_MappingProductData.qbl                                                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def                                                                    |   17 
 _Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeInterfaceData.qbl                                                    |   18 
 _Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl                                                                              |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl                                                    |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl                                                     |   13 
 _Main/BL/Type_FillingCapacityOrder/TypeIndex_FillingCapacityOrderTypeIndex.qbl                                                           |   12 
 _Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def                                           |   19 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl                                            |   13 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def                                                   |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def                                 |   19 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl                                                                 |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def                                     |   35 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def                           |    5 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl                                                    |  109 +
 _Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl                                                                             |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuSelectionAll_OnClick.def                          |   17 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl                                                    |   13 
 _Main/BL/Type_ScenarioManager/StaticMethod_AvailableScenarioNames.qbl                                                                    |    4 
 _Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def                                          |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def                                                |   33 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl                                                   |   13 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def                                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick#545.def              |    2 
 _Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl                                                            |   23 
 _Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeInterfaceData.qbl                                                  |   18 
 _Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeInterfaceData.qbl                                                           |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral#549.def                                            |    4 
 _Main/BL/Type_Global_ShowColumn/StaticMethod_CreateColumn.qbl                                                                            |   15 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def                                               |   12 
 _Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CanRun.qbl                                                                            |   16 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl                                                |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl                                                    |   13 
 _Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl                                                                    |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def                             |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl                                             |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl                                                    |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl                                               |   13 
 _Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType#367.def                                                   |    3 
 _Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeInterfaceData.qbl                                                   |   18 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl                                                                |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def                                              |   65 +
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def                                                           |   26 
 _Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl                                                                                   |    8 
 _Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl                                                                               |    4 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl                                                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def                                                                |   62 +
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def                                 |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2#456.def                                          |   65 +
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl                                                        |   13 
 _Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecutionStatus.qbl                                                                      |   13 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl                                                  |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def                      |    4 
 _Main/BL/Type_BusinessType/StaticMethod_GetScenarioNamesStr.qbl                                                                          |   10 
 _Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl                                                                                |    1 
 _Main/BL/Type_Global_MappingDOI_DSI/StaticMethod_SynchronizeInterfaceData.qbl                                                            |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def                                                           |   40 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeInterfaceData.qbl                                                        |   18 
 /dev/null                                                                                                                                |   62 -
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def                              |    1 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                   |   14 
 _Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def                                                        |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def                       |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def                               |    5 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeInterfaceData.qbl                                                           |   18 
 171 files changed, 2,783 insertions(+), 793 deletions(-)

diff --git a/_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl b/_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl
new file mode 100644
index 0000000..53c42ae
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OrganCode_BusinessType_BusinessType_OrganCode.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OrganCode_BusinessType_BusinessType_OrganCode
+{
+  #keys: '1[412960.0.276650038]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide BusinessType
+  {
+    #keys: '3[412960.0.276650040][412960.0.276650039][412960.0.276650041]'
+    Cardinality: '0to1'
+    ObjectDefinition: OrganCode
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OrganCode
+  {
+    #keys: '3[412960.0.276650043][412960.0.276650042][412960.0.276650044]'
+    Cardinality: '1toN'
+    ObjectDefinition: BusinessType
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl b/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
index f2fb6a3..44f63a3 100644
--- a/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
+++ b/_Main/BL/Type_BusinessType/Attribute_BusinessTypeName.qbl
@@ -3,5 +3,6 @@
 Attribute BusinessTypeName
 {
   #keys: '3[414382.0.361554811][414382.0.361554810][414382.0.361554812]'
+  Description: '浜嬩笟閮ㄥ悕绉�'
   ValueType: String
 }
diff --git a/_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl b/_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl
new file mode 100644
index 0000000..72577fd
--- /dev/null
+++ b/_Main/BL/Type_BusinessType/Attribute_DisplayType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DisplayType
+{
+  #keys: '3[412960.0.276650024][412960.0.276650023][412960.0.276650025]'
+  Description: '鏄剧ず绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl b/_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..bf93bb5
--- /dev/null
+++ b/_Main/BL/Type_BusinessType/Attribute_ScenarioName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[412960.0.276650011][412960.0.276650010][412960.0.276650012]'
+  Description: '鍦烘櫙鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_BusinessType/StaticMethod_GetBusinessNameStr.qbl b/_Main/BL/Type_BusinessType/StaticMethod_GetScenarioNamesStr.qbl
similarity index 69%
rename from _Main/BL/Type_BusinessType/StaticMethod_GetBusinessNameStr.qbl
rename to _Main/BL/Type_BusinessType/StaticMethod_GetScenarioNamesStr.qbl
index 7496f0f..130ee5a 100644
--- a/_Main/BL/Type_BusinessType/StaticMethod_GetBusinessNameStr.qbl
+++ b/_Main/BL/Type_BusinessType/StaticMethod_GetScenarioNamesStr.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-StaticMethod GetBusinessNameStr (
+StaticMethod GetScenarioNamesStr (
   GlobalOTDTable owner
 ) as String
 {
@@ -9,18 +9,18 @@
     // NBoTk Sep-7-2023 (created)
     // 鑾峰彇businessType 闆嗗悎
     result := "";
-    businessTypeList := construct( structured[String]);
+    scenarioNameList := construct( structured[String]);
     
     traverse( owner,BusinessType,b)
     {
-        businessTypeList.Add( b.BusinessTypeName()); 
+        scenarioNameList.Add( b.ScenarioName() ); 
     }
     
     // 濡傛灉瀛樺湪businessType鏁版嵁 鍒欒繑鍥� : a,b,c
     
-    if( not isnull( businessTypeList ) )
+    if( not isnull( scenarioNameList ) )
     {
-        result := businessTypeList.Concatenate( ";" );
+        result := scenarioNameList.Concatenate( ";" );
     }
     
     // 娴嬭瘯鏁版嵁
diff --git a/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
index e428bb7..1728622 100644
--- a/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_CustomerOrder/StaticMethod_CreateOrUpdate.qbl
@@ -58,7 +58,7 @@
     // 鏂板/鏇存柊
     result := CustomerOrder::FindById( macroPlan, id );
     if( isnull( result ) ) {
-        CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price, 
+        result := CustomerOrder::Create( product, stockingPoint, id, orderDate, quantity, price, 
                                priorityName, salesSegmentName, currencyId, unitOfMeasureName, 
                                false, customerName, customerId, orderId, orderLineId, true, true, true );
     } else {
diff --git a/_Main/BL/Type_FillingCapacityOrder/Attribute_ID.qbl b/_Main/BL/Type_FillingCapacityOrder/Attribute_ID.qbl
new file mode 100644
index 0000000..a15a6b3
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.525344991][414702.0.525344990][414702.0.525344992]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl b/_Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl
index da22dcc..29434aa 100644
--- a/_Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl
+++ b/_Main/BL/Type_FillingCapacityOrder/Attribute_OrderType.qbl
@@ -3,5 +3,6 @@
 Attribute OrderType
 {
   #keys: '3[414382.0.394820190][414382.0.394820189][414382.0.394820191]'
+  Description: '璁㈠崟绫诲瀷鍖呮嫭锛堝弽绛俱�佹巿鏉冿級'
   ValueType: String
 }
diff --git a/_Main/BL/Type_FillingCapacityOrder/Attribute_State.qbl b/_Main/BL/Type_FillingCapacityOrder/Attribute_State.qbl
new file mode 100644
index 0000000..fa630ba
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/Attribute_State.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute State
+{
+  #keys: '3[414702.0.533501330][414702.0.533501329][414702.0.533501331]'
+  Description: '鐘舵�侊紙鏈啿鍑忋�佸凡鍐插噺锛�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FillingCapacityOrder/TypeIndex_FillingCapacityOrderTypeIndex.qbl b/_Main/BL/Type_FillingCapacityOrder/TypeIndex_FillingCapacityOrderTypeIndex.qbl
new file mode 100644
index 0000000..41296eb
--- /dev/null
+++ b/_Main/BL/Type_FillingCapacityOrder/TypeIndex_FillingCapacityOrderTypeIndex.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex FillingCapacityOrderTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ID
+    }
+  ]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl
index ac058bb..df86b5a 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AIPISPIP.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_AIPISPIP",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "瀹為檯搴撳瓨鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_AIPISPIP", "瀹為檯搴撳瓨鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl
index fb840ce..34022c8 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_ConversionFactor.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_ConversionFactor",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "鍗曚綅杞崲鍥犲瓙鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_ConversionFactor", "鍗曚綅杞崲鍥犲瓙鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl
index 66d92a1..b488e5a 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomOrder.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_CustomOrder",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "璁㈠崟鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_CustomOrder", "璁㈠崟鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl
index 26b2034..95cbb13 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_CustomerGrade.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_CustomerGrade",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "瀹㈡埛绛夌骇鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_CustomerGrade", "瀹㈡埛绛夌骇鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl
index 8ebfbf3..5989bef 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_DOI_DSI.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_DOI_DSI",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "DOI_DSI鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_DOI_DSI", "DOI_DSI鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl
index 2384943..21f56b3 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Forecast.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_Forecast",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "棰勬祴鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_Forecast", "棰勬祴鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl
index fd32c60..e3cdc5c 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_InventorySupply.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_InventorySupply",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "搴撳瓨渚涘簲鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_InventorySupply", "搴撳瓨渚涘簲鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl
index 3d491fe..3d19d66 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Operation.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_Operation",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "鎿嶄綔鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_Operation", "鎿嶄綔鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl
index 49e26b7..4c18d21 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationBOM.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_OperationBOM",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "鎿嶄綔BOM鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_OperationBOM", "鎿嶄綔BOM鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl
index 2364cd5..8dd61ac 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_OperationCost.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_OperationCost",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "鎿嶄綔鎴愭湰鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_OperationCost", "鎿嶄綔鎴愭湰鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl
index 2637fd7..a6c260b 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_Product_MP.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_Product_MP",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "浜у搧鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_Product_MP", "浜у搧鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl
index 56d48d9..f861032 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SalesSegment_MP.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_SalesSegment_MP",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "閿�鍞儴闂�",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_SalesSegment_MP", "閿�鍞儴闂�" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl
index 0f166b2..e77ffa9 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_StockingPointCost.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_StockingPointCost",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "搴撳瓨鐐规垚鏈暟鎹�",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_StockingPointCost", "搴撳瓨鐐规垚鏈暟鎹�" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl
index 4974578..6fc9e3b 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_UnitOfMeasure_MP.qbl
@@ -5,16 +5,5 @@
   String errorMessage
 )
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName    := "GlobalOTDTable_UnitOfMeasure_MP",
-                                  ElementTotal  := 0,
-                                  ErrorMessage  := errorMessage,
-                                  IsSuccess     := false,
-                                  Name          := "鍗曚綅鏁版嵁",
-                                  ErrorNo       := errorNo,
-                                  ErrorDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" )
-                                 );
-  *]
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "GlobalOTDTable_UnitOfMeasure_MP", "鍗曚綅鏁版嵁" );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl
index a0a1af4..e180696 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AIPISPIP.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_AIPISPIP
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_AIPISPIP",
-                                  ElementTotal    := this.Global_MappingActualProductInStockingPointInPeriod( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "瀹為檯搴撳瓨鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_AIPISPIP", "瀹為檯搴撳瓨鏁版嵁", this.Global_MappingActualProductInStockingPointInPeriod( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl
index b0ad4d2..f9857c3 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ConversionFactor.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_ConversionFactor
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_ConversionFactor",
-                                  ElementTotal    := this.Global_MappingConversionFactor( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "鍗曚綅杞崲鍥犲瓙鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_ConversionFactor", "鍗曚綅杞崲鍥犲瓙鏁版嵁", this.Global_MappingConversionFactor( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl
index 677960c..d27917a 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomOrder.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_CustomOrder
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_CustomOrder",
-                                  ElementTotal    := this.Global_MappingCustomOrder( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "璁㈠崟鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_CustomOrder", "璁㈠崟鏁版嵁", this.Global_MappingCustomOrder( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl
index e09fc63..c47d9ef 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_CustomerGrade.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_CustomerGrade
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_CustomerGrade",
-                                  ElementTotal    := this.Global_MappingCustomerGrade( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "瀹㈡埛绛夌骇鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_CustomerGrade", "瀹㈡埛绛夌骇鏁版嵁", this.Global_MappingCustomerGrade( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl
index 9082ba1..f8826f9 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_DOI_DSI.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_DOI_DSI
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_DOI_DSI",
-                                  ElementTotal    := this.Global_MappingDOI_DSI( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "DOI_DSI鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_DOI_DSI", "DOI_DSI鏁版嵁", this.Global_MappingDOI_DSI( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl
index c9f8835..ec74612 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Forecast.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_Forecast
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_Forecast",
-                                  ElementTotal    := this.Global_MappingForecast( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "棰勬祴鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_Forecast", "棰勬祴鏁版嵁", this.Global_MappingForecast( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl
index 2ae1628..7745472 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_InventorySupply.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_InventorySupply
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_InventorySupply",
-                                  ElementTotal    := this.Global_MappingInventorySupply( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "搴撳瓨渚涘簲鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_InventorySupply", "搴撳瓨渚涘簲鏁版嵁", this.Global_MappingInventorySupply( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl
index 718b9d0..d537c11 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Operation.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_Operation
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_Operation",
-                                  ElementTotal    := this.Global_MappingOperation( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "鎿嶄綔鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_Operation", "鎿嶄綔鏁版嵁", this.Global_MappingOperation( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl
index 12bda61..6902690 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationBOM.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_OperationBOM
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_OperationBOM",
-                                  ElementTotal    := this.Global_MappingOperationBOM( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "鎿嶄綔BOM鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_OperationBOM", "鎿嶄綔BOM鏁版嵁", this.Global_MappingOperationBOM( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl
index 313be5a..58d1ce1 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_OperationCost.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_OperationCost
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_OperationCost",
-                                  ElementTotal    := this.Global_MappingOperationCost( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "鎿嶄綔鎴愭湰鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_OperationCost", "鎿嶄綔鎴愭湰鏁版嵁", this.Global_MappingOperationCost( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl
index d4da6d7..7b117d2 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_ProductInLane.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_ProductInLane
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_ProductInLane",
-                                  ElementTotal    := this.Global_MappingProductInLane( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "浜у搧鍦ㄨ溅閬撴暟鎹�",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_ProductInLane", "浜у搧鍦ㄨ溅閬撴暟鎹�", this.Global_MappingProductInLane( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl
index bac0207..6b8ac8a 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_Product_MP.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_Product_MP
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_Product_MP",
-                                  ElementTotal    := this.Global_MappingProduct_MP( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "浜у搧鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_Product_MP", "浜у搧鏁版嵁", this.Global_MappingProduct_MP( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl
index 4cf7193..422a176 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SalesSegment_MP.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_SalesSegment_MP
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_SalesSegment_MP",
-                                  ElementTotal    := this.Global_MappingSalesSegment_MP( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "閿�鍞儴闂�",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_SalesSegment_MP", "閿�鍞儴闂�", this.Global_MappingSalesSegment_MP( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl
index 1e75ed5..9b93f9c 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_StockingPointCost.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_StockingPointCost
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_StockingPointCost",
-                                  ElementTotal    := this.Global_MappingStockingPointCost( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "搴撳瓨鐐规垚鏈暟鎹�",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_StockingPointCost", "搴撳瓨鐐规垚鏈暟鎹�", this.Global_MappingStockingPointCost( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl
index d8eb2dd..1192289 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP.qbl
@@ -2,16 +2,5 @@
 #parent: #root
 Method OnAsyncExecute_GlobalOTDTable_UnitOfMeasure_MP
 {
-  TextBody:
-  [*
-    this.Global_BrokerExecuteLog( relnew,
-                                  BrokerName      := "GlobalOTDTable_UnitOfMeasure_MP",
-                                  ElementTotal    := this.Global_MappingUnitOfMeasure_MP( relsize ),
-                                  ErrorMessage    := "",
-                                  IsSuccess       := true,
-                                  Name            := "鍗曚綅鏁版嵁",
-                                  SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                  ErrorNo         := 0
-                                 );
-  *]
+  TextBody: 'this.SettingSuccessfulDetails( "GlobalOTDTable_UnitOfMeasure_MP", "鍗曚綅鏁版嵁", this.Global_MappingUnitOfMeasure_MP( relsize ) );'
 }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SettingFailureDetails.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SettingFailureDetails.qbl
new file mode 100644
index 0000000..3d9aad0
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_SettingFailureDetails.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Method SettingFailureDetails (
+  Number errorNo,
+  String errorMessage,
+  String brokerName,
+  String name
+)
+{
+  TextBody:
+  [*
+    gbel := select( this, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                             tempGBEL.BrokerName()      = brokerName );
+    
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( 0 );
+    gbel.ErrorMessage( errorMessage );
+    gbel.IsSuccess( false );
+    gbel.Name( name );
+    gbel.ErrorNo( errorNo );
+    gbel.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SettingSuccessfulDetails.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SettingSuccessfulDetails.qbl
new file mode 100644
index 0000000..f3f619d
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_SettingSuccessfulDetails.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method SettingSuccessfulDetails (
+  String brokerName,
+  String name,
+  Number elementTotal
+)
+{
+  TextBody:
+  [*
+    gbel := select( this, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                             tempGBEL.BrokerName()      = brokerName );
+    
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( elementTotal );
+    gbel.IsSuccess( true );
+    gbel.Name( name );
+    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
index 79a5e28..31936e3 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
@@ -1,20 +1,119 @@
 Quintiq file version 2.0
 #parent: #root
 Method SynchronizationAllMappingBrokerAndAPIByOption (
+  String executionUser,
   Boolean isCustomOrder,
-  Boolean isForeacst
+  Boolean isForeacst,
+  Boolean isUnitOfMeasure_MP,
+  Boolean isSalesSegment_MP,
+  Boolean isProduct_MP,
+  Boolean isConversionFactor,
+  Boolean isOperation,
+  Boolean isOperationBOM,
+  Boolean isProductInLane,
+  Boolean isAIPISPIP,
+  Boolean isInventorySupply,
+  Boolean isStockingPointCost,
+  Boolean isOperationCost,
+  Boolean isDOI_DSI,
+  Boolean isCustomerGrade,
+  Boolean isStockingPoint_MP,
+  Boolean isCurrency_MP,
+  Boolean isCurrencyRate_MP,
+  Boolean isLane,
+  Boolean isLaneLeg
 )
 {
   TextBody:
   [*
     if ( isCustomOrder ) {
-      this.Global_MappingCustomOrder( relflush );
-      this.GlobalOTDTable_CustomOrder().AsyncExecute();
+      Global_MappingCustomOrder::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomOrder" );
     }
     
     if ( isForeacst ) {
-      this.Global_MappingForecast( relflush );
-      this.GlobalOTDTable_Forecast().AsyncExecute();
+      Global_MappingForecast::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_Forecast" );
+    }
+    
+    if ( isUnitOfMeasure_MP ) {
+      Global_MappingUnitOfMeasure_MP::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_UnitOfMeasure_MP" );
+    }
+    
+    if ( isSalesSegment_MP ) {
+      Global_MappingSalesSegment_MP::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_SalesSegment_MP" );
+    }
+    
+    if ( isProduct_MP ) {
+      Global_MappingProduct_MP::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_Product_MP" );
+    }
+    
+    if ( isConversionFactor ) {
+      Global_MappingConversionFactor::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_ConversionFactor" );
+    }
+    
+    if ( isOperation ) {
+      Global_MappingOperation::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_Operation" );
+    }
+    
+    if ( isOperationBOM ) {
+      Global_MappingOperationBOM::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_OperationBOM" );
+    }
+    
+    if ( isProductInLane ) {
+      Global_MappingProductInLane::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_ProductInLane" );
+    }
+    
+    if ( isAIPISPIP ) {
+      Global_MappingActualProductInStockingPointInPeriod::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_AIPISPIP" );
+    }
+    
+    if ( isInventorySupply ) {
+      Global_MappingInventorySupply::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_InventorySupply" );
+    }
+    
+    if ( isStockingPointCost ) {
+      Global_MappingStockingPointCost::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_StockingPointCost" );
+    }
+    
+    if ( isOperationCost ) {
+      Global_MappingOperationCost::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_OperationCost" );
+    }
+    
+    if ( isDOI_DSI ) {
+      Global_MappingDOI_DSI::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_DOI_DSI" );
+    }
+    
+    if ( isCustomerGrade ) {
+      Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
+    }
+    
+    if ( isStockingPoint_MP ) {
+      this.Global_MappingStockingPoint_MP( relflush );
+      Global_BrokerExecuteLog::CreateInOperation( this, "StockingPoint_MP", executionUser );
+      this -> OnException( this -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), this );
+    }
+    
+    if ( isCurrency_MP ) {
+      this.Global_MappingCurrency_MP( relflush );
+      Global_BrokerExecuteLog::CreateInOperation( this, "Currency_MP", executionUser );
+      this -> OnException( this -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), this );
+    }
+    
+    if ( isCurrencyRate_MP ) {
+      this.Global_MappingCurrencyRate_MP( relflush );
+      Global_BrokerExecuteLog::CreateInOperation( this, "CurrencyRate_MP", executionUser );
+      this -> OnException( this -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), this );
+    }
+    
+    if ( isLane ) {
+      this.Global_MappingLane( relflush );
+      Global_BrokerExecuteLog::CreateInOperation( this, "Lane", executionUser );
+      this -> OnException( this -> Global_MappingLane::CreateByAPI() -> Exception(), this );
+    }
+    
+    if ( isLaneLeg ) {
+      this.Global_MappingLaneLeg( relflush );
+      Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
+      this -> OnException( this -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), this );
     }
   *]
 }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
new file mode 100644
index 0000000..c1d4c3f
--- /dev/null
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method SynchronizeDataToMacroPlan (
+  MacroPlan macroPlan,
+  Boolean isUnitOfMeasure_MP
+)
+{
+  TextBody:
+  [*
+    if ( isUnitOfMeasure_MP ) {
+      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan.qbl
deleted file mode 100644
index b41460d..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan.qbl
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method SynchronizeDataToMacroPlan (
-  MacroPlan macroPlan,
-  Strings businessTypes,
-  Boolean isCustomOrder,
-  Boolean isForecast
-)
-{
-  TextBody:
-  [*
-    if ( isCustomOrder ) {
-      macroPlan.MappingCustomerOrderData( businessTypes, this );
-    }
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
index 5628082..d2862ef 100644
--- a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
@@ -29,27 +29,27 @@
     globalOTDTable.Global_MappingCustomerGrade( relflush );
     // 骞村害浜ч攢棰勭畻涓棿琛�
     globalOTDTable.Global_MappingAnnualBudgetData( relflush );
-    
-    globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
-    globalOTDTable -> OnException( globalOTDTable -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), globalOTDTable );
-    globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), globalOTDTable );
-    globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), globalOTDTable );
-    globalOTDTable.GlobalOTDTable_Product_MP().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_ConversionFactor().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_Operation().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_OperationBOM().AsyncExecute();
-    globalOTDTable -> OnException( globalOTDTable -> Global_MappingLane::CreateByAPI() -> Exception(), globalOTDTable );
-    globalOTDTable -> OnException( globalOTDTable -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), globalOTDTable );
-    globalOTDTable.GlobalOTDTable_ProductInLane().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_AIPISPIP().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_DOI_DSI().AsyncExecute();
-    globalOTDTable.GlobalOTDTable_CustomerGrade().AsyncExecute();
+
+    //globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
+    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingStockingPoint_MP::CreateByAPI() -> Exception(), globalOTDTable );
+    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrency_MP::CreateByAPI() -> Exception(), globalOTDTable );
+    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingCurrencyRate_MP::CreateByAPI() -> Exception(), globalOTDTable );
+    //globalOTDTable.GlobalOTDTable_Product_MP().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_ConversionFactor().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_Operation().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_OperationBOM().AsyncExecute();
+    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingLane::CreateByAPI() -> Exception(), globalOTDTable );
+    //globalOTDTable -> OnException( globalOTDTable -> Global_MappingLaneLeg::CreateByAPI() -> Exception(), globalOTDTable );
+    //globalOTDTable.GlobalOTDTable_ProductInLane().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_AIPISPIP().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_DOI_DSI().AsyncExecute();
+    //globalOTDTable.GlobalOTDTable_CustomerGrade().AsyncExecute();
     // 骞村害浜ч攢棰勭畻涓棿琛�
     globalOTDTable.GlobalOTDTable_AnnualBudgetData().AsyncExecute();
     // 鏍规嵁Global_MappingOperationBOM鍒稧lobalOTDTable_AnnualBudgetData鐨凮rgCodeFromBom
diff --git a/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl b/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
index 0518307..c3d49d2 100644
--- a/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/_ROOT_Type_GlobalOTDTable.qbl
@@ -5,5 +5,17 @@
 {
   #keys: '5[414702.0.83354588][414702.0.83354586][0.0.0][414702.0.83354587][414702.0.83354589]'
   BaseType: Object
+  OnCreate:
+  [*
+    this.BusinessType( relnew, BusinessTypeName := "鎵嬫満浜嬩笟閮∣LED" );
+    this.BusinessType( relnew, BusinessTypeName := "涓撲笟鏄剧ず浜嬩笟閮�" );
+    this.BusinessType( relnew, BusinessTypeName := "澶栧崠CELLOLED" );
+    this.BusinessType( relnew, BusinessTypeName := "鎵嬫満浜嬩笟閮�" );
+    this.BusinessType( relnew, BusinessTypeName := "姹借溅鐢靛瓙浜嬩笟閮�" );
+    this.BusinessType( relnew, BusinessTypeName := "鐗圭鏄剧ず" );
+    this.BusinessType( relnew, BusinessTypeName := "杩愬姩鍋ュ悍浜嬩笟閮�" );
+    this.BusinessType( relnew, BusinessTypeName := "杞﹁浇鏄剧ず浜嬩笟閮�" );
+    this.BusinessType( relnew, BusinessTypeName := "IT浜嬩笟閮�" );
+  *]
   StructuredName: 'GlobalOTDTables'
 }
diff --git a/_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecuteUser.qbl b/_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecuteUser.qbl
new file mode 100644
index 0000000..4549caf
--- /dev/null
+++ b/_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecuteUser.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecuteUser
+{
+  #keys: '3[414702.0.498264673][414702.0.498264672][414702.0.498264674]'
+  Description: '鎵ц鐢ㄦ埛'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecutionStatus.qbl b/_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecutionStatus.qbl
new file mode 100644
index 0000000..e4a5392
--- /dev/null
+++ b/_Main/BL/Type_Global_BrokerExecuteLog/Attribute_ExecutionStatus.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExecutionStatus
+{
+  #keys: '3[414702.0.498264686][414702.0.498264685][414702.0.498264687]'
+  Description:
+  [*
+    鎵ц鐘舵��
+    InOperation
+    Complete
+  *]
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CanRun.qbl b/_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CanRun.qbl
new file mode 100644
index 0000000..428134f
--- /dev/null
+++ b/_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CanRun.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CanRun (
+  GlobalOTDTable globalOTDTable,
+  String brokerName
+) as Boolean
+{
+  TextBody:
+  [*
+    isCanRun := exists( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.BrokerName() = brokerName and
+                                                                 tempGBEL.ExecutionStatus() = "InOperation"
+                       );
+    
+    return isCanRun;
+  *]
+}
diff --git a/_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CreateInOperation.qbl b/_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CreateInOperation.qbl
new file mode 100644
index 0000000..5f46a5f
--- /dev/null
+++ b/_Main/BL/Type_Global_BrokerExecuteLog/StaticMethod_CreateInOperation.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateInOperation (
+  GlobalOTDTable globalOTDTable,
+  String brokerName,
+  String executionUser
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_BrokerExecuteLog( relnew, 
+                                            BrokerName := brokerName, 
+                                            ExecuteUser := executionUser, 
+                                            ExecutionStatus := "InOperation" );
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..e45d793
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingActualProductInStockingPointInPeriod( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_AIPISPIP().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..58bc3d5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingConversionFactor( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_ConversionFactor().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
index 13d9157..e3b0e63 100644
--- a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
@@ -38,14 +38,12 @@
                                                    );
     }
     
-    globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                            BrokerName      := "",
-                                            ElementTotal    := globalOTDTable.Global_MappingCurrencyRate_MP( relsize ),
-                                            ErrorMessage    := "",
-                                            IsSuccess       := true,
-                                            Name            := "鎺ュ彛鏁版嵁锛堣揣甯佹眹鐜囷級",
-                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                            ErrorNo         := 0
-                                           );
+    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                                       tempGBEL.BrokerName()      = "CurrencyRate_MP" );
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( globalOTDTable.Global_MappingCurrencyRate_MP( relsize ) );
+    gbel.IsSuccess( true );
+    gbel.Name( "鎺ュ彛鏁版嵁锛堣揣甯佹眹鐜囷級" );
+    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
index e938f73..2480088 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -35,14 +35,12 @@
                                                );
     }
     
-    globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                            BrokerName      := "",
-                                            ElementTotal    := globalOTDTable.Global_MappingCurrency_MP( relsize ),
-                                            ErrorMessage    := "",
-                                            IsSuccess       := true,
-                                            Name            := "鎺ュ彛鏁版嵁锛堣揣甯侊級",
-                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                            ErrorNo         := 0
-                                           );
+    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                                       tempGBEL.BrokerName()      = "Currency_MP" );
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( globalOTDTable.Global_MappingCurrency_MP( relsize ) );
+    gbel.IsSuccess( true );
+    gbel.Name( "鎺ュ彛鏁版嵁锛堣揣甯侊級" );
+    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..9f855d0
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingCustomOrder( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_CustomOrder().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCustomerGrade/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingCustomerGrade/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..073d3d2
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCustomerGrade/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingCustomerGrade( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_CustomerGrade().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingDOI_DSI/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingDOI_DSI/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..619df91
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingDOI_DSI/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingDOI_DSI( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_DOI_DSI().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..a9bf8b3
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingForecast( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_Forecast().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..c63682f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingInventorySupply( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_InventorySupply().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
index 6d04074..e46efd6 100644
--- a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
@@ -36,14 +36,13 @@
                                         );
     }
     
-    globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                            BrokerName      := "",
-                                            ElementTotal    := globalOTDTable.Global_MappingLane( relsize ),
-                                            ErrorMessage    := "",
-                                            IsSuccess       := true,
-                                            Name            := "鎺ュ彛鏁版嵁锛堣溅閬擄級",
-                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                            ErrorNo         := 0
-                                           );
+    
+    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                                       tempGBEL.BrokerName()      = "Lane" );
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( globalOTDTable.Global_MappingLane( relsize ) );
+    gbel.IsSuccess( true );
+    gbel.Name( "鎺ュ彛鏁版嵁锛堣溅閬擄級" );
+    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
index 20f668b..7899f6e 100644
--- a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
@@ -37,14 +37,12 @@
                                            );
     }
     
-    globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                            BrokerName      := "",
-                                            ElementTotal    := globalOTDTable.Global_MappingLaneLeg( relsize ),
-                                            ErrorMessage    := "",
-                                            IsSuccess       := true,
-                                            Name            := "鎺ュ彛鏁版嵁锛堣溅閬撴敮鏋讹級",
-                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                            ErrorNo         := 0
-                                           );
+    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                                       tempGBEL.BrokerName()      = "LaneLeg" );
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( globalOTDTable.Global_MappingLaneLeg( relsize ) );
+    gbel.IsSuccess( true );
+    gbel.Name( "鎺ュ彛鏁版嵁锛堣溅閬撴敮鏋讹級" );
+    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..2d35ace
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingOperation( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_Operation().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..69c60d3
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingOperationBOM( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_OperationBOM().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..f2333f5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingProductInLane( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_ProductInLane().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..9728f0f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingProduct_MP( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_Product_MP().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..76d2c88
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingSalesSegment_MP( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_SalesSegment_MP().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..82a30f7
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingStockingPointCost( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_StockingPointCost().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
index b800ef2..4901d0a 100644
--- a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
@@ -35,14 +35,12 @@
                                                     );
     }
     
-    globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                            BrokerName      := "",
-                                            ElementTotal    := globalOTDTable.Global_MappingStockingPoint_MP( relsize ),
-                                            ErrorMessage    := "",
-                                            IsSuccess       := true,
-                                            Name            := "鎺ュ彛鏁版嵁锛堝簱瀛樼偣锛�",
-                                            SuccessDateTime := DateTime::ActualTime().Format( "Y-M-D H2:m:s" ),
-                                            ErrorNo         := 0
-                                           );
+    gbel := select( globalOTDTable, Global_BrokerExecuteLog, tempGBEL, tempGBEL.ExecutionStatus() = "InOperation" and
+                                                                       tempGBEL.BrokerName()      = "StockingPoint_MP" );
+    gbel.ExecutionStatus( "Complete" );
+    gbel.ElementTotal( globalOTDTable.Global_MappingStockingPoint_MP( relsize ) );
+    gbel.IsSuccess( true );
+    gbel.Name( "鎺ュ彛鏁版嵁锛堝簱瀛樼偣锛�" );
+    gbel.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..8eab43a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingOperationCost( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_OperationCost().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..a88ea5a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingUnitOfMeasure_MP( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
new file mode 100644
index 0000000..d31811e
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeMacroPlanData (
+  GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
+                                                                       Name := "鍚屾鍗曚綅鏁版嵁",
+                                                                       IsSuccess := true
+                                                                      );
+                                            
+    try {
+      traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
+        unitOfMeasure_MP := select( macroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = gmuommp.Name() );
+        if ( isnull( unitOfMeasure_MP ) ) {  
+          unitOfMeasure_MP := UnitOfMeasure_MP::Create( macroPlan, gmuommp.Name(), false, false );
+        }
+        if ( gmuommp.IsDefault() ) {
+          unitOfMeasure_MP.SetAsDefault();
+        }
+      }
+    } onerror {
+      global_BrokerExecuteLog.IsSuccess( false );
+      global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
+      global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_CustomOrder.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_CustomOrder.qbl
new file mode 100644
index 0000000..6fc41e2
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_CreateShowData_CustomOrder.qbl
@@ -0,0 +1,58 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateShowData_CustomOrder (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    businessTypeColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 0, "浜嬩笟閮�" );
+    currencyIDColumn         := Global_ShowColumn::CreateColumn( globalOTDTable, 1, "璐у竵" );
+    customerColumn           := Global_ShowColumn::CreateColumn( globalOTDTable, 2, "瀹㈡埛鍚嶇О" );
+    customerIDColumn         := Global_ShowColumn::CreateColumn( globalOTDTable, 3, "瀹㈡埛ID" );
+    idColumn                 := Global_ShowColumn::CreateColumn( globalOTDTable, 4, "鍞竴鏍囪瘑" );
+    orderDateColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 5, "璁㈠崟鏃ユ湡" );
+    orderIDColumn            := Global_ShowColumn::CreateColumn( globalOTDTable, 6, "璁㈠崟鍙�" );
+    orderLineIDColumn        := Global_ShowColumn::CreateColumn( globalOTDTable, 7, "璁㈠崟琛屽彿" );
+    priceColumn              := Global_ShowColumn::CreateColumn( globalOTDTable, 8, "鍗曚环" );
+    priorityNameColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 9, "浼樺厛绾у悕绉�" );
+    productIDColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 10, "浜у搧缂栫爜" );
+    stockingPointIDColumn    := Global_ShowColumn::CreateColumn( globalOTDTable, 11, "搴撳瓨鐐圭紪鐮�" );
+    salesegmentNameColumn    := Global_ShowColumn::CreateColumn( globalOTDTable, 12, "閿�鍞儴闂ㄥ悕绉�" );
+    quantityColumn           := Global_ShowColumn::CreateColumn( globalOTDTable, 13, "鏁伴噺" );
+    unitofmeasureNameColumn  := Global_ShowColumn::CreateColumn( globalOTDTable, 14, "鍗曚綅" );
+    orderTypeColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 15, "璁㈠崟绫诲瀷" );
+    isAvailableColumn        := Global_ShowColumn::CreateColumn( globalOTDTable, 16, "鏄惁鍙敤" );
+    productGradeColumn       := Global_ShowColumn::CreateColumn( globalOTDTable, 17, "浜у搧绛夌骇" );
+    segmentPriorityColumn    := Global_ShowColumn::CreateColumn( globalOTDTable, 18, "缁嗗垎甯傚満浼樺厛绾�" );
+    sheetProfitabilityColumn := Global_ShowColumn::CreateColumn( globalOTDTable, 19, "澶у紶鐩堝埄" );
+    orderTimeColumn          := Global_ShowColumn::CreateColumn( globalOTDTable, 20, "璁㈠崟涓嬪崟鏃堕棿" );
+    i := 1;
+    traverse ( globalOTDTable, Global_MappingCustomOrder, gmco ) {
+      gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := i );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.BusinessType(), businessTypeColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.CurrencyID(), currencyIDColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.Customer(), customerColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.CustomerID(), customerIDColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.ID(), idColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, guard( gmco.OrderDate().Format( "Y-M2-D2" ), "鏃堕棿鏍煎紡閿欒" ), orderDateColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.OrderID(), orderIDColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.OrderLineID(), orderLineIDColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, [String]gmco.Price(), priceColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.PriorityName(), priorityNameColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.ProductID(), productIDColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.StockingPointID(), stockingPointIDColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.SalesSegmentName(), salesegmentNameColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, [String]gmco.Quantity(), quantityColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.UnitOfMeasureName(), unitofmeasureNameColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.OrderType(), orderTypeColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, [String]gmco.IsAvailable(), isAvailableColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.ProductGrade(), productGradeColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.SegmentPriority(), segmentPriorityColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, gmco.SheetProfitability(), sheetProfitabilityColumn, gloabal_ShowRow );
+      Global_ShowCell::SetColumnsAndRows( globalOTDTable, guard( gmco.OrderTime().Format( "Y-M2-D2" ), "鏃堕棿鏍煎紡閿欒" ), orderTimeColumn, gloabal_ShowRow );
+           
+      i++;                                                             
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_SetColumnsAndRows.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_SetColumnsAndRows.qbl
new file mode 100644
index 0000000..1e31a53
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_SetColumnsAndRows.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetColumnsAndRows (
+  GlobalOTDTable globalOTDTable,
+  String value,
+  Global_ShowColumn global_ShowColumn,
+  Global_ShowRow global_ShowRow
+)
+{
+  TextBody:
+  [*
+    global_ShowCell := globalOTDTable.Global_ShowCell( relnew, Value := value );
+    global_ShowCell.Global_ShowColumn( relset, global_ShowColumn );
+    global_ShowCell.Global_ShowRow( relset, global_ShowRow );
+  *]
+}
diff --git a/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl b/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
index 1e5c9aa..7eebedc 100644
--- a/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
+++ b/_Main/BL/Type_Global_ShowCell/StaticMethod_ShowData.qbl
@@ -8,117 +8,7 @@
   TextBody:
   [*
     if ( global_BrokerExecuteLog.BrokerName() = "GlobalOTDTable_CustomOrder" ) {
-      businessTypeColumn       := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 0, ColumnName := "浜嬩笟閮�" );
-      currencyIDColumn         := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 1, ColumnName := "璐у竵" );
-      customerColumn           := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 2, ColumnName := "瀹㈡埛鍚嶇О" );
-      customerIDColumn         := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 3, ColumnName := "瀹㈡埛ID" );
-      idColumn                 := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 4, ColumnName := "鍞竴鏍囪瘑" );
-      orderDateColumn          := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 5, ColumnName := "璁㈠崟鏃ユ湡" );
-      orderIDColumn            := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 6, ColumnName := "璁㈠崟鍙�" );
-      orderLineIDColumn        := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 7, ColumnName := "璁㈠崟琛屽彿" );
-      priceColumn              := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 8, ColumnName := "鍗曚环" );
-      priorityNameColumn       := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 9, ColumnName := "浼樺厛绾у悕绉�" );
-      productIDColumn          := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 10, ColumnName := "浜у搧缂栫爜" );
-      stockingPointIDColumn    := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 11, ColumnName := "搴撳瓨鐐圭紪鐮�" );
-      salesegmentNameColumn    :=globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 12, ColumnName := "閿�鍞儴闂ㄥ悕绉�" );
-      quantityColumn           := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 13, ColumnName := "鏁伴噺" );
-      unitofmeasureNameColumn  := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 14, ColumnName := "鍗曚綅" );
-      orderTypeColumn          := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 15, ColumnName := "璁㈠崟绫诲瀷" );
-      isAvailableColumn        := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 16, ColumnName := "鏄惁鍙敤" );
-      productGradeColumn       := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 17, ColumnName := "浜у搧绛夌骇" );
-      segmentPriorityColumn    := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 18, ColumnName := "缁嗗垎甯傚満浼樺厛绾�" );
-      sheetProfitabilityColumn := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 19, ColumnName := "澶у紶鐩堝埄" );
-      orderTimeColumn          := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := 20, ColumnName := "璁㈠崟涓嬪崟鏃堕棿" );
-      i := 1;
-      traverse ( globalOTDTable, Global_MappingCustomOrder, gmco ) {
-        gloabal_ShowRow := globalOTDTable.Global_ShowRow( relnew, RowNr := i );
-        
-        businessTypeCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.BusinessType() );
-        businessTypeCell.Global_ShowColumn( relset, businessTypeColumn );
-        businessTypeCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        currencyIDCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.CurrencyID() );
-        currencyIDCell.Global_ShowColumn( relset, currencyIDColumn );
-        currencyIDCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        customerCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.Customer() );
-        customerCell.Global_ShowColumn( relset, customerColumn );
-        customerCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        customerIDCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.CustomerID() );
-        customerIDCell.Global_ShowColumn( relset, customerIDColumn );
-        customerIDCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        idCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.ID() );
-        idCell.Global_ShowColumn( relset, idColumn );
-        idCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        orderDateCell := globalOTDTable.Global_ShowCell( relnew, Value := guard( gmco.OrderDate().Format( "Y-M2-D2" ), "鏃堕棿鏍煎紡閿欒" ) );
-        orderDateCell.Global_ShowColumn( relset, orderDateColumn );
-        orderDateCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        orderIDCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.OrderID() );
-        orderIDCell.Global_ShowColumn( relset, orderIDColumn );
-        orderIDCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        orderLineIDCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.OrderLineID() );
-        orderLineIDCell.Global_ShowColumn( relset, orderLineIDColumn );
-        orderLineIDCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        priceCell := globalOTDTable.Global_ShowCell( relnew, Value := [String]gmco.Price() );
-        priceCell.Global_ShowColumn( relset, priceColumn );
-        priceCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        priorityNameCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.PriorityName() );
-        priorityNameCell.Global_ShowColumn( relset, priorityNameColumn );
-        priorityNameCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        productIDCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.ProductID() );
-        productIDCell.Global_ShowColumn( relset, productIDColumn );
-        productIDCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        stockingPointIDCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.StockingPointID() );
-        stockingPointIDCell.Global_ShowColumn( relset, stockingPointIDColumn );
-        stockingPointIDCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        salesegmentNameCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.SalesSegmentName() );
-        salesegmentNameCell.Global_ShowColumn( relset, salesegmentNameColumn );
-        salesegmentNameCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        quantityCell := globalOTDTable.Global_ShowCell( relnew, Value := [String]gmco.Quantity() );
-        quantityCell.Global_ShowColumn( relset, quantityColumn );
-        quantityCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        unitofmeasureNameCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.UnitOfMeasureName() );
-        unitofmeasureNameCell.Global_ShowColumn( relset, unitofmeasureNameColumn );
-        unitofmeasureNameCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        orderTypeCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.OrderType() );
-        orderTypeCell.Global_ShowColumn( relset, orderTypeColumn );
-        orderTypeCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        isAvailableCell := globalOTDTable.Global_ShowCell( relnew, Value := [String]gmco.IsAvailable() );
-        isAvailableCell.Global_ShowColumn( relset, isAvailableColumn );
-        isAvailableCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        productGradeCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.ProductGrade() );
-        productGradeCell.Global_ShowColumn( relset, productGradeColumn );
-        productGradeCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        segmentPriorityCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.SegmentPriority() );
-        segmentPriorityCell.Global_ShowColumn( relset, segmentPriorityColumn );
-        segmentPriorityCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        sheetProfitabilityCell := globalOTDTable.Global_ShowCell( relnew, Value := gmco.SheetProfitability() );
-        sheetProfitabilityCell.Global_ShowColumn( relset, sheetProfitabilityColumn );
-        sheetProfitabilityCell.Global_ShowRow( relset, gloabal_ShowRow );
-        
-        orderTimeCell := globalOTDTable.Global_ShowCell( relnew, Value := guard( gmco.OrderTime().Format( "Y-M2-D2" ), "鏃堕棿鏍煎紡閿欒" ) );
-        orderTimeCell.Global_ShowColumn( relset, orderTimeColumn );
-        orderTimeCell.Global_ShowRow( relset, gloabal_ShowRow );
-           
-        i++;                                                             
-      }
+      Global_ShowCell::CreateShowData_CustomOrder( globalOTDTable );
     }
   *]
 }
diff --git a/_Main/BL/Type_Global_ShowColumn/StaticMethod_CreateColumn.qbl b/_Main/BL/Type_Global_ShowColumn/StaticMethod_CreateColumn.qbl
new file mode 100644
index 0000000..2fac7cb
--- /dev/null
+++ b/_Main/BL/Type_Global_ShowColumn/StaticMethod_CreateColumn.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateColumn (
+  GlobalOTDTable globalOTDTable,
+  Number columnIndex,
+  String columnName
+) as Global_ShowColumn
+{
+  TextBody:
+  [*
+    global_ShowColumn := globalOTDTable.Global_ShowColumn( relnew, ColumnIndex := columnIndex, ColumnName := columnName );
+    
+    return global_ShowColumn;
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
index c6520fb..a6f9a24 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingActualPISPIPData.qbl
@@ -9,7 +9,12 @@
   TextBody:
   [*
     // renhao Aug-14-2023 (created)
-    listtodeal := selectset( globalOTDTable,Global_MappingActualProductInStockingPointInPeriod,actual,actual.ActualInventoryLevelEnd() > 0 );
+    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+    listtodeal := selectset( globalOTDTable,
+                             Global_MappingActualProductInStockingPointInPeriod,
+                             actual,
+                             ( actual.ActualInventoryLevelEnd() > 0 ) and 
+                             ( organcodelist.Find( actual.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     totalcount := listtodeal.Size();
     info( "ActualPISPIP has " + totalcount.AsQUILL() + " rows in total" );
     
@@ -24,7 +29,7 @@
       if( not isnull(businessTypes)){
       
         for( i :=0 ;i < businessTypes.Size();i++ ){
-          businessType := businessTypes.Element( i);
+          businessType := businessTypes.Element( i );
           if( product.BusinessType() = businessType and not product.IsCommon()){
             ActualProductInStockingPointInPeriod::CreateOrUpdate( this,
                                                                   actual.ProductID(),
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
index 3a572dc..9d01ece 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingCustomerOrderData.qbl
@@ -14,7 +14,12 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, true );
     } else {
-        listToDeal := selectset( globalOTDTable, Global_MappingCustomOrder, item, businessTypes.Find( item.BusinessType() ) <> -1 );
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingCustomOrder, 
+                                 item, 
+                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     }
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
index c6a2bcf..39675d3 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingExternalSupplyData.qbl
@@ -11,7 +11,13 @@
     // renhao Aug-14-2023 (created)
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
-    listtodeal := selectset( globalOTDTable,Global_MappingInventorySupply,externalSupply, externalSupply.UserQuantity()>0 and externalSupply.Date() >= queryStartDate /*and externalSupply.Date() <= queryEndDate*/);
+    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+    listtodeal := selectset( globalOTDTable,
+                             Global_MappingInventorySupply,
+                             externalSupply, 
+                             ( externalSupply.UserQuantity()>0 ) and 
+                             ( externalSupply.Date() >= queryStartDate ) and 
+                             ( organcodelist.Find( externalSupply.StockingPointID().SubString( 0, 3 ) ) >= 0 )/*and externalSupply.Date() <= queryEndDate*/);
     totalcount := listtodeal.Size();
     description := "鍦ㄩ�斿湪鍒�";
     info( "ExternalSupply has " + totalcount.AsQUILL() + " rows in total" );
@@ -32,7 +38,7 @@
         if( not isnull(businessTypes)){
         
           for( i :=0 ;i < businessTypes.Size();i++ ){
-            businessType := businessTypes.Element( i);
+            businessType := businessTypes.Element( i );
             if( product.BusinessType() = businessType and not product.IsCommon()){
               InventorySupply::CreateOrUpdate( externalSupply.ID(),
                                                productMP,
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
index 21b752b..5fbb66c 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingForecastData.qbl
@@ -14,7 +14,13 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, item.Quantity() > 0 );
     } else {
-        listToDeal := selectset( globalOTDTable, Global_MappingForecast, item, businessTypes.Find( item.BusinessType() ) <> -1 and item.Quantity()>0 );
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingForecast, 
+                                 item, 
+                                 ( businessTypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( item.Quantity()>0 ) and 
+                                 ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     }
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
     queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
index b716d4d..663464c 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationBOMData.qbl
@@ -14,11 +14,13 @@
     if( isKeyProduct ) {
         keyProductList := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, item, item.ProductMajorType()="鎴愬搧" or item.ProductMajorType()="鍗婃垚鍝�", item.ID() );
     }
+    organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
     bomList := selectsortedset(  globalOTDTable, Global_MappingOperationBOM, item,
                                  ifexpr( isnull( businessTypes ) or businessTypes.Size() = 0, 
                                          true, 
     //                                     businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0 )
-                                         businessTypes.Find( item.BusinessType() ) >= 0 )
+                                         ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
+                                         ( organcodelist.Find( item.OrganCode() ) >= 0 ) )
     //                             and ifexpr( isKeyProduct, 
     //                                         keyProductList.Size() > 0 and keyProductList.Find( item.ComponentCode() ) >= 0,
     //                                         true )
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
index 1e71d79..9a458dd 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationCostData.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method MappingOperationCostData (
+  GlobalOTDTable globalOTDTable,
   Strings businesstypes
 )
 {
@@ -14,7 +15,12 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( this, MappingOperation, item, true );
     } else {
-        listtodeal := selectset( this, MappingOperation, item, businesstypes.Find( item.BusinessType() ) <> -1 );
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
+        listtodeal := selectset( this, 
+                                 MappingOperation, 
+                                 item, 
+                                 ( businesstypes.Find( item.BusinessType() ) <> -1 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 ) );
     }
     
     // Get the list to deal with max sequence number
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
index 29e7e21..b09ed68 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingOperationData.qbl
@@ -11,8 +11,10 @@
     // 鑾峰彇鏈夊簭鐨勫緟澶勭悊璁板綍
     toDealList := construct( Global_MappingOperations ) ;
     if( not isnull( businessTypes ) and businessTypes.Size() > 0 ) {
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businessTypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         toDealList := selectsortedset( globalOTDTable, Global_MappingOperation, item, 
-                                       businessTypes.Find( item.BusinessType() ) >= 0, 
+                                       ( businessTypes.Find( item.BusinessType() ) >= 0 ) and 
+                                       ( organcodelist.Find( item.OrganCode() ) >= 0 ), 
     //                                   businessTypes.Difference( businessTypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0, 
                                        item.SequenceNumber() );
     } else {
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
index ab7398e..1e0929e 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingProductData.qbl
@@ -23,10 +23,10 @@
           }
     } else {
         if( iskeyproduct = true ){
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find(  item.BusinessType()) >= 0 );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, item.KeyProduct() = true and businesstypes.Find( item.BusinessType() ) >= 0 );
          }
         else{
-          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find(  item.BusinessType()) >= 0 );
+          listToDeal := selectset( globalOTDTable, Global_MappingProduct_MP, item, businesstypes.Find( item.BusinessType() ) >= 0 );
         }
     }
     totalcount := listToDeal.Size();
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
index cf459b5..d7f21c2 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingSalesSegmentData.qbl
@@ -14,7 +14,10 @@
     if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
         listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, true );
     } else {
-        listToDeal := selectset( globalOTDTable, Global_MappingSalesSegment_MP, item, businessTypes.Find( item.BusinessType() ) <> -1 );
+        listToDeal := selectset( globalOTDTable, 
+                                 Global_MappingSalesSegment_MP, 
+                                 item, 
+                                 businessTypes.Find( item.BusinessType() ) <> -1 );
     }
     //nameList := construct( structured[String] );
     //nameList := selectvalues( listToDeal, Elements, item, true, item.Name() );
diff --git a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
index e826ddb..671fe30 100644
--- a/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_MappingUnitData.qbl
@@ -15,9 +15,11 @@
     if( isnull( businesstypes ) or businesstypes.Size() = 0 ) {
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, true );
     } else {
+        organcodelist := selectvalues( globalOTDTable, BusinessType.OrganCode, organ, businesstypes.Find( organ.BusinessType().BusinessTypeName() ) <> -1, organ.OrganCodeName() );
         listtodeal := selectset( globalOTDTable, Global_MappingOperation, item, 
     //                             businesstypes.Difference( businesstypes.Difference( item.BusinessType().Tokenize( ", " ) ) ).Size() > 0
-                                 businesstypes.Find( item.BusinessType() ) >= 0
+                                 ( businesstypes.Find( item.BusinessType() ) >= 0 ) and 
+                                 ( organcodelist.Find( item.OrganCode() ) >= 0 )
                                 );
     }
     
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index b4361d5..875645b 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -131,7 +131,7 @@
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
-    macroPlan.MappingOperationCostData( businessTypes );
+    macroPlan.MappingOperationCostData( globalOTDTable, businessTypes );
     
     // 璁㈠崟棰勬祴-17
     Forecast::DoSync( macroPlan, businessTypes ,globalOTDTable);
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl
index 4b41017..6e0539c 100644
--- a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_ExportTheFileStream.qbl
@@ -31,7 +31,7 @@
     
     xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
     xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument );
-    
+    info( xmlTableString );
     tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) );
     tableGroupHandle := TableGroupHandle::Create( "鐗╂枡鏍囩" );
     tableGroupHandle.Add( tableHandle );
diff --git a/_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl b/_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl
new file mode 100644
index 0000000..bdf1f0e
--- /dev/null
+++ b/_Main/BL/Type_OrganCode/Attribute_OrganCodeName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganCodeName
+{
+  #keys: '3[412960.0.276650052][412960.0.276650051][412960.0.276650053]'
+  Description: '缁勭粐缂栫爜鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl b/_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl
new file mode 100644
index 0000000..3a16e43
--- /dev/null
+++ b/_Main/BL/Type_OrganCode/_ROOT_Type_OrganCode.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OrganCode
+{
+  #keys: '5[412960.0.276650035][412960.0.276650033][0.0.0][412960.0.276650034][412960.0.276650036]'
+  BaseType: Object
+  Description: '浜嬩笟閮ㄥ搴旂殑缁勭粐缂栫爜闆嗗悎'
+  StructuredName: 'OrganCodes'
+}
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
index 9434404..d935ad9 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
@@ -11,7 +11,7 @@
     // NBoTk Sep-21-2023 (created)
     
     data := selectobject( owner,PriorityFactor,p,
-                          p.BusinessType() = businessType and p.Name() = name
+                           p.Name() = name
                           )
     
     return data.Coefficient();
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
index 98115c4..05489f2 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
@@ -11,7 +11,6 @@
     value := "";
     
     strList := selectuniquevalues(  owner,PriorityFactor,p,
-                                   p.BusinessType() = businessType,
                                     p.Name()
                                    );
     
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
index 76858f0..956d704 100644
--- a/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_InitData.qbl
@@ -1,8 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod InitData (
-  MacroPlan owner,
-  String businessType
+  MacroPlan owner
 )
 {
   TextBody:
@@ -10,25 +9,35 @@
     // NBoTk Sep-15-2023 (created)
     // businessType
     // result := "闆嗗洟闈㈡澘;涓撲笟鏄剧ず浜嬩笟閮�;澶栧崠CELL;闈炴樉;杩愬姩鍋ュ悍;杩愬姩鍋ュ悍浜嬩笟閮�;鎵嬫満浜嬩笟閮�;鐗圭鏄剧ず;姹借溅鐢靛瓙浜嬩笟閮�;杞﹁浇鏄剧ず浜嬩笟閮�;IT浜嬩笟閮�";
-    // 娣诲姞浜嬩笟閮ㄥ搴旂殑棰勫埗浼樺厛绾у洜瀛愭暟鎹�
-    owner.PriorityFactor(relnew,Name := "瀹㈡埛绛栫暐" ,Desc := "灏嗕簨涓氶儴璁$畻鐨勪紭鍏堢骇锛屾寜璇ョ粏鍒嗛」姣斾緥闃舵纭畾璇ラ」寰楀垎銆傚锛�81%鈮鈮�100% 5鍒嗭紝61%鈮鈮�80% 4鍒�", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "瀹㈡埛绛夌骇" ,Desc := "鏍规嵁闇�姹傛暟鎹腑瀹㈡埛锛屽尮閰嶅鎴风瓑绾�",BusinessType := businessType);
-    owner.PriorityFactor(relnew,Name := "澶у紶鐩堝埄姘村钩" ,Desc := "1銆佽幏鍙栧鎴�*SKU澶у紶鐩堝埄鏁� 2銆佸畾涔夊鎴�*SKU澶у紶鐩堝埄鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "缁嗗垎甯傚満绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU瀵瑰簲缁嗗垎甯傚満绛夌骇 2銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU瀵瑰簲缁嗗垎甯傚満璇勫垎绛夌骇锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "闇�姹傜被鍨�" ,Desc := "鍖归厤涓嶅悓闇�姹傜绫伙紝寰楀埌瀵瑰簲寰楀垎", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "璁㈠崟涓嬪崟鏃堕棿" ,Desc := "鏍规嵁闇�姹傝鍗曚腑涓嬪崟鏃堕棿涓庨渶姹傛椂闂村樊鍊硷紝鍖归厤闃舵寰楀垎", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "浜у搧绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
-    owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
     
-    // 浼樺厛绾у洜瀛愮粏鍒�
-    priorityFactorList := selectset( owner,PriorityFactor,p,
-                                     p.BusinessType() = businessType
-                                     );
+    businessType := "";
     
-    traverse( priorityFactorList,Elements,e)
+    // 濡傛灉宸茬粡瀛樺湪浼樺厛绾ф暟鎹� 鍒欎笉鍋氬鐞�
+    list := selectset( owner,PriorityFactor,p,true);
+    if( list.Size() = 0 )
     {
-        PriorityFactorDetails::InitData( owner,e); 
+          
+          // 娣诲姞浜嬩笟閮ㄥ搴旂殑棰勫埗浼樺厛绾у洜瀛愭暟鎹�
+          owner.PriorityFactor(relnew,Name := "瀹㈡埛绛栫暐" ,Desc := "灏嗕簨涓氶儴璁$畻鐨勪紭鍏堢骇锛屾寜璇ョ粏鍒嗛」姣斾緥闃舵纭畾璇ラ」寰楀垎銆傚锛�81%鈮鈮�100% 5鍒嗭紝61%鈮鈮�80% 4鍒�", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "瀹㈡埛绛夌骇" ,Desc := "鏍规嵁闇�姹傛暟鎹腑瀹㈡埛锛屽尮閰嶅鎴风瓑绾�",BusinessType := businessType);
+          owner.PriorityFactor(relnew,Name := "澶у紶鐩堝埄姘村钩" ,Desc := "1銆佽幏鍙栧鎴�*SKU澶у紶鐩堝埄鏁� 2銆佸畾涔夊鎴�*SKU澶у紶鐩堝埄鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "缁嗗垎甯傚満绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU瀵瑰簲缁嗗垎甯傚満绛夌骇 2銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU瀵瑰簲缁嗗垎甯傚満璇勫垎绛夌骇锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "闇�姹傜被鍨�" ,Desc := "鍖归厤涓嶅悓闇�姹傜绫伙紝寰楀埌瀵瑰簲寰楀垎", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "璁㈠崟涓嬪崟鏃堕棿" ,Desc := "鏍规嵁闇�姹傝鍗曚腑涓嬪崟鏃堕棿涓庨渶姹傛椂闂村樊鍊硷紝鍖归厤闃舵寰楀垎", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "浜у搧绛夌骇" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "DOI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
+          owner.PriorityFactor(relnew,Name := "DSI" ,Desc := "1銆佽幏鍙栧鎴�*SKU DOI&DSI鏁� 2銆佸畾涔夊鎴�*SKUDOI&DSI鏁伴樁姊緱鍒� 3銆佸尮閰嶉渶姹傛暟鎹腑瀹㈡埛鍙奡KU鏁版嵁锛屽緱鍒板搴旈樁姊緱鍒�", BusinessType := businessType );
+          
+          // 浼樺厛绾у洜瀛愮粏鍒�
+          priorityFactorList := selectset( owner,PriorityFactor,p,
+                                           p.BusinessType() = businessType
+                                           );
+          
+          traverse( priorityFactorList,Elements,e)
+          {
+              PriorityFactorDetails::InitData( owner,e); 
+          }
+    
     }
   *]
 }
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
new file mode 100644
index 0000000..c76e0a0
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcFormula.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCalcFormula (
+  MacroPlan macroPlan,
+  String formula
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Oct-7-2023 (created)
+    priorityFactor := null( PriorityFactor);
+    traverse( macroPlan,PriorityFactor,p)
+    {   
+         if( formula.StartsWith( p.Name()) )
+         {
+            priorityFactor := p;
+         }
+    }
+    value := priorityFactor.Name() + "[" + [String]priorityFactor.Coefficient() +"*L]";
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
new file mode 100644
index 0000000..2095877
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_GetCalcStr.qbl
@@ -0,0 +1,94 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCalcStr (
+  MacroPlan macroPlan,
+  String formula,
+  String lastCalcStr
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Oct-7-2023 (created)
+    
+    calcStr := "";
+    remindFormula := formula;
+    
+    // 閬嶅巻浼樺厛绾у洜瀛愰厤缃�
+    if( not remindFormula = '' )
+    {
+                  // 浠庤捣濮嬩綅缃紑濮嬪尮閰� 
+            if(remindFormula.StartsWith( "+" ))
+            {
+                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                calcStr := lastCalcStr + "+" + calcStr;
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+            else if( remindFormula.StartsWith( "-" ))
+            {
+                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                calcStr := lastCalcStr + "-" + calcStr;
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+            else if( remindFormula.StartsWith( "*" ) )
+            {
+                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                calcStr := lastCalcStr + "*" + calcStr;
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+            else if( remindFormula.StartsWith( "/" ) )
+            {
+                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                calcStr := lastCalcStr + "/" + calcStr;
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+            else if( remindFormula.StartsWith( "(" ) )
+            {
+                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                calcStr := lastCalcStr + "{" + calcStr;
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+            else if( remindFormula.StartsWith( ")" ) )
+            {
+                remindFormula := remindFormula.SubString( 1,remindFormula.Length()-1);
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                calcStr := lastCalcStr + ")" + calcStr;
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+            else
+            {
+                // 涓嶆槸绗﹀彿 鐩存帴鑾峰彇璁$畻鍚庣殑鏁板��
+                calcStr := PriorityPolicy::GetCalcFormula(macroPlan,remindFormula);
+                
+                // 鎴彇鎺夊凡缁忚绠楃殑浼樺厛绾у洜瀛� 閫掑綊璁$畻
+                remindFormula := PriorityResult::GetRemindFormula( remindFormula,macroPlan);
+                PriorityPolicy::GetCalcStr(  macroPlan,remindFormula,calcStr);
+            }
+      
+    }
+    
+    return calcStr;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
index 7c80e98..122b53c 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackCalcStr.qbl
@@ -28,7 +28,7 @@
         } 
     }
     
-    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);       
+    nameList := PriorityFactor::GetDataByBusinessType(  owner,"");       
     traverse( nameList,Elements,e)
     {
         nameText := e.Name() + "[" + [String]e.Coefficient() + "*L]"
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
index 55e5bd0..129f7d7 100644
--- a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
@@ -10,7 +10,6 @@
   [*
     // NBoTk Sep-21-2023 (created)
     value := stringData;
-    
     symbolList := construct( structured[String]);
     symbolList.Add( "+")
     symbolList.Add( "-")
@@ -28,7 +27,7 @@
         } 
     }
     
-    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);       
+    nameList := PriorityFactor::GetDataByBusinessType(  owner,"");       
     traverse( nameList,Elements,e)
     {
         if( stringData.EndsWith( e.Name()))
@@ -37,7 +36,6 @@
              value := stringData.SubString( 0,end);
         } 
     }
-    
     return value;
   *]
 }
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
index 93e2b2f..7b59176 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_CalculateScore.qbl
@@ -17,7 +17,6 @@
     remindFormula := formula;
     
     // 閬嶅巻浼樺厛绾у洜瀛愰厤缃�
-    
     if( not remindFormula = '' )
     {
             // 浠庤捣濮嬩綅缃紑濮嬪尮閰� 
@@ -70,7 +69,7 @@
                 PriorityResult::CalculateBracketScore(calcStr,customerOrder,businessType,macroPlan,globalOTDTable);
                 
                 // 鎴彇 ) 鍚庣殑瀛楃缁х画杩涜璁$畻
-                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length());
+                remindFormula := remindFormula.SubString( rightBracket,remindFormula.Length()-1);
             }
             else
             {
@@ -83,6 +82,6 @@
     }
     
     // 娌℃湁鍖归厤 鍏紡璁$畻瀹屾垚
-    return lastScore;
+    return score;
   *]
 }
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
index fd4f1f0..3033476 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_GetRemindFormula.qbl
@@ -27,7 +27,6 @@
          }
     }
     
-    info( "remindStr = " + str );
     return str;
   *]
 }
diff --git a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
index 715b2f8..7cd8770 100644
--- a/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
+++ b/_Main/BL/Type_PriorityResult/StaticMethod_calculatePriorityResult.qbl
@@ -16,7 +16,6 @@
     {
          // 浜嬩笟閮ㄤ俊鎭�
          businessType := e.BusinessType();
-         //businessType :=  "鎵嬫満浜嬩笟閮�";
          
          // 鑾峰彇瀵瑰簲浜嬩笟閮ㄨ绠楀叕寮�
          priorityPolicys := selectobject( macroPlan,PriorityPolicy,p,p.BusinessType() = businessType and p.Name() = priorityPolicyName);
@@ -24,7 +23,6 @@
          
          // 閫掑綊澶勭悊璁$畻鍏紡 鑾峰彇褰撳墠璁㈠崟鐨勫緱鍒�
          value := PriorityResult::CalculateScore( formula,e,businessType,macroPlan,0.0,globalOTDTable);
-         
          // 鐢熸垚浼樺厛绾у洜瀛愯窇鍒嗙粨鏋�
          priorityResult := macroPlan.PriorityResult(relnew,CustomerOrderID := e.ID(),BusinessType := businessType,Customer := e.CustomerName(),CustomerID := e.CustomerID(),
                                                      DemandDate := e.EndDate(),ProductID := e.ProductID(),Quantity := e.Quantity(),SalesSegmentName := e.SalesSegmentName(),
@@ -56,6 +54,10 @@
                                    result.PriorityResultScore()
                                    )
     
+    // Quintiq浼樺厛绾у垎10绾� 闇�瑕佸垎娈佃绠�
+    subLevel := resultList.Size() div 10;
+    subLevelCount := 0;
+    
     priorityValue := 1;
     traverse( resultList,Elements,e)
     {
@@ -70,15 +72,24 @@
               
               // 鍒涘缓浼樺厛绾ф暟鎹� 闇�瑕佸厛娓呴櫎涓婁竴娆$殑璁$畻缁撴灉
               // 鍒ゆ柇褰撳墠customerOrder鏄惁瀛樺湪
-              oldPriority := selectobject( macroPlan,Priority,p,p.Name() = obj.OrderID());
-              if(not isnull( oldPriority ) )
+              oldPriority := selectobject( macroPlan,Priority,p,p.Name() = [String]priorityValue);
+              if(isnull( oldPriority ) )
               {
-                    macroPlan.Priority(reldelete, oldPriority);
-              }
-              macroPlan.Priority(relnew,Weight := priorityValue,Name := obj.OrderID());
-              priorityValue := priorityValue + 1;
+                    macroPlan.Priority(relnew,Weight := priorityValue,Name := [String]priorityValue);
+              }        
         }
     
+        // 鍒ゆ柇璁$畻鍒嗘鏁伴噺涓嶲uintiq鍘熷浼樺厛绾�
+        subLevelCount := subLevelCount + 1;
+        if( subLevelCount = subLevel )
+        {
+            // 褰撳埌杈惧垎娈垫暟閲忓悗 浼樺厛绾�+1 鍒嗘璁℃暟浠�0寮�濮�
+            if( priorityValue < 10 )
+            {
+                  priorityValue := priorityValue + 1;
+            }
+            subLevelCount := 0;
+        }
     }
   *]
 }
diff --git a/_Main/BL/Type_Scenario/Attribute_ScenarioName.qbl b/_Main/BL/Type_Scenario/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..d40aac3
--- /dev/null
+++ b/_Main/BL/Type_Scenario/Attribute_ScenarioName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[412960.0.288500040][412960.0.288500039][412960.0.288500041]'
+  Description: '鍦烘櫙鍚嶇О锛屽搴斾簨涓氶儴&缁勭粐缂栫爜缁存姢涓淮鎶ょ殑鍦烘櫙鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ScenarioManager/StaticMethod_AvailableBusinessTypes.qbl b/_Main/BL/Type_ScenarioManager/StaticMethod_AvailableScenarioNames.qbl
similarity index 84%
rename from _Main/BL/Type_ScenarioManager/StaticMethod_AvailableBusinessTypes.qbl
rename to _Main/BL/Type_ScenarioManager/StaticMethod_AvailableScenarioNames.qbl
index 3c1a81f..4956f3d 100644
--- a/_Main/BL/Type_ScenarioManager/StaticMethod_AvailableBusinessTypes.qbl
+++ b/_Main/BL/Type_ScenarioManager/StaticMethod_AvailableScenarioNames.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-StaticMethod AvailableBusinessTypes (
+StaticMethod AvailableScenarioNames (
   GlobalOTDTable globalOTDTable
 ) as String
 {
@@ -16,7 +16,7 @@
     //}
     
     // 浣跨敤businessType鑾峰彇鏁版嵁
-    strings := BusinessType::GetBusinessNameStr( globalOTDTable);
+    strings := BusinessType::GetScenarioNamesStr( globalOTDTable);
     
     return strings;
   *]
diff --git a/_Main/Sys/ImgAttr/Global_BrokerExecuteLog.dme b/_Main/Sys/ImgAttr/Global_BrokerExecuteLog.dme
new file mode 100644
index 0000000..b3263a6
--- /dev/null
+++ b/_Main/Sys/ImgAttr/Global_BrokerExecuteLog.dme
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+TypeDataInterface Global_BrokerExecuteLog
+{
+  TypeKey: '[414702.0.265587041]'
+  ImageDataMember ImageExecutionStatus
+  {
+    #keys: '1[414702.0.496052017]'
+    ImageSpecifications:
+    [
+      ImageDataMemberImageSpecification
+      {
+        Image: 'MEDIA_PLAY_GREEN'
+        Quill: 'object.ExecutionStatus() = "InOperation"'
+        Value: 'InOperation'
+      }
+      ImageDataMemberImageSpecification
+      {
+        Image: 'CHECK'
+        Quill: 'object.ExecutionStatus() = "Complete"'
+        Value: 'ImageExecutionStatus2'
+      }
+    ]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
index b6cdcbb..07b8549 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Component_pnlContent.def
@@ -12,10 +12,35 @@
       Properties:
       [
         DataBinding: 'DataHolderBusinessType.Data.BusinessTypeName'
-        Label: 'Business Type Name'
+        Description: '浜嬩笟閮ㄥ悕绉拌緭鍏�'
+        Label: '浜嬩笟閮ㄥ悕绉�'
         Taborder: 0
       ]
     }
+    Component editScenarioName
+    {
+      #keys: '[412960.0.275480603]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderBusinessType.Data.ScenarioName'
+        Description: '鍦烘櫙鍚嶇О缂栬緫'
+        Label: '鍦烘櫙鍚嶇О'
+        Taborder: 1
+      ]
+    }
+    Component editDisplayType
+    {
+      #keys: '[412960.0.278321833]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderBusinessType.Data.DisplayType'
+        Description: '鏄剧ず绫诲瀷缂栬緫'
+        Label: '鏄剧ず绫诲瀷'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def
index fbfa4cc..9f099b0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogBusinessType/Method_ClickBtnOk.def
@@ -11,12 +11,7 @@
     
     // OnOk
     this.ApplyChanges();
-    
-    businessType := DataHolderBusinessType.Data().BusinessTypeName();
     DataHolderBusinessType.Data().Commit();
-    
-     
-    PriorityFactor::InitData( MacroPlan,businessType);
     
     this.Close();
   *]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
index f8a1684..158887f 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Component_PanelGeneral\043549.def"
@@ -46,8 +46,8 @@
       Properties:
       [
         AllowEmpty: true
-        DataBinding: 'DataHolderDialogData.Data.BusinessType'
-        Label: 'BusinessType'
+        DataBinding: 'DataHolderDialogData.Data.ScenarioName'
+        Label: 'Scenario Name'
         Taborder: 4
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
index b8022af..b488de3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_OnOk.def
@@ -32,6 +32,13 @@
       data.Name( versionname );
       }
     
+    // Get Business Type from Scenario Name
+    businesstype := select( globalotdtable, 
+                            BusinessType, 
+                            b, 
+                            b.ScenarioName()=data.ScenarioName() ).BusinessTypeName();
+    data.BusinessType( businesstype );
+    
     // Copy scenario
     if( isnull( data.WrappedInstance() ) )
     {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def
new file mode 100644
index 0000000..a0e37ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditPriorityFactor/Method_New.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  MacroPlan owner,
+  String businessType
+) id:Method_DialogEditPriorityFactor_New
+{
+  #keys: '[414382.0.593002251]'
+  Body:
+  [*
+    data := owner.PriorityFactor(relshadow);
+    data.BusinessType(businessType);
+    
+    DataHolderEditPriorityFactor.Data(&data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
index 3425275..911ba95 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Component_pnlContent.def
@@ -13,8 +13,10 @@
       [
         AllowEmpty: true
         DataBinding: 'DataHolderFillingCapacityOrder.Data.ProductID'
+        Enabled: false
         Label: '鍟嗗搧缂栫爜'
         Taborder: 0
+        Visible: false
       ]
     }
     Component dropDownStringListSalesSegmentName id:dropDownStringListSalesSegmentName_325
@@ -25,8 +27,10 @@
       [
         AllowEmpty: true
         DataBinding: 'DataHolderFillingCapacityOrder.Data.SalesSegmentName'
+        Enabled: false
         Label: '閿�鍞儴闂�'
         Taborder: 1
+        Visible: false
       ]
     }
     Component dropDownStringListStockPointID id:dropDownStringListStockPointID_801
@@ -37,8 +41,10 @@
       [
         AllowEmpty: true
         DataBinding: 'DataHolderFillingCapacityOrder.Data.StockingPointID'
+        Enabled: false
         Label: '搴撳瓨鐐�'
         Taborder: 2
+        Visible: false
       ]
     }
     Component dropDownStringListCustomer id:dropDownStringListCustomer_957
@@ -49,8 +55,10 @@
       [
         AllowEmpty: true
         DataBinding: 'DataHolderFillingCapacityOrder.Data.Customer'
+        Enabled: false
         Label: '瀹㈡埛'
         Taborder: 3
+        Visible: false
       ]
     }
     Component edtQuantity id:edtQuantity_995
@@ -62,7 +70,7 @@
         DataBinding: 'DataHolderFillingCapacityOrder.Data.Quantity'
         Label: '鏁伴噺'
         Mask: 'REAL'
-        Taborder: 4
+        Taborder: 12
       ]
     }
     Component dropDownStringListUnitOfMeasureName id:dropDownStringListUnitOfMeasureName_750
@@ -73,9 +81,11 @@
       [
         AllowEmpty: true
         DataBinding: 'DataHolderFillingCapacityOrder.Data.UnitOfMeasureName'
+        Enabled: false
         Label: '鏁伴噺鍗曚綅'
         Strings: 'UnitName'
-        Taborder: 5
+        Taborder: 4
+        Visible: false
       ]
     }
     Component edtSalesAmount id:edtSalesAmount_608
@@ -87,7 +97,7 @@
         DataBinding: 'DataHolderFillingCapacityOrder.Data.SalesAmount'
         Label: '閿�鍞'
         Mask: 'NUMBER'
-        Taborder: 6
+        Taborder: 13
       ]
     }
     Component dsDemandDate
@@ -98,7 +108,7 @@
       [
         DataBinding: 'DataHolderFillingCapacityOrder.Data.DemandDate'
         Label: '闇�姹傛棩鏈�'
-        Taborder: 8
+        Taborder: 15
       ]
     }
     Component dsForecastDemandDate
@@ -109,9 +119,180 @@
       [
         DataBinding: 'DataHolderFillingCapacityOrder.Data.ForecastDemandDate'
         Label: '棰勬湡闇�姹傛棩鏈�'
+        Taborder: 14
+      ]
+    }
+    Component ddlSalesSegment
+    {
+      #keys: '[414702.0.525040441]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'SalesSegment_MP'
+      Children:
+      [
+        Component deSalesSegment
+        {
+          #keys: '[414702.0.525040443]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[SalesSegment_MP]'
+            FixedFilter: 'object.Child(relsize)=0'
+            Source: 'ApplicationMacroPlanner.DataHolderSalesSegment'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '閿�鍞儴闂�'
+        Taborder: 5
+      ]
+    }
+    Component ddlProduct_MP
+    {
+      #keys: '[414702.0.525462899]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'Product_MP'
+      Children:
+      [
+        Component deContent
+        {
+          #keys: '[414702.0.525462901]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Product_MP]'
+            FixedFilter: 'not object.IsSystem()'
+            Source: 'ApplicationMacroPlanner.DataHolderProduct'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '浜у搧'
+        Taborder: 6
+      ]
+    }
+    Component ddlStockingPoint_MP
+    {
+      #keys: '[414702.0.525462922]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'StockingPoint_MP'
+      Children:
+      [
+        Component deContent345
+        {
+          #keys: '[414702.0.525462924]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[StockingPoint_MP]'
+            FixedFilter: 'not object.IsSystem()'
+            Source: 'ApplicationMacroPlanner.DataHolderStockingPoint'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '搴撳瓨鐐�'
         Taborder: 7
       ]
     }
+    Component ddlBusinessType
+    {
+      #keys: '[414702.0.525012300]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'BusinessType'
+      Children:
+      [
+        Component deContent989
+        {
+          #keys: '[414702.0.525012302]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDTable'
+            Source: 'GlobalOTDTable'
+            Taborder: 0
+            Transformation: 'BusinessType'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'BusinessTypeName'
+        Label: '浜嬩笟閮�'
+        Taborder: 8
+      ]
+    }
+    Component ddlUnitOfMeasure_MP
+    {
+      #keys: '[414702.0.525669735]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'UnitOfMeasure_MP'
+      Children:
+      [
+        Component deContent703
+        {
+          #keys: '[414702.0.525669737]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'UnitOfMeasure_MP'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DisplayField: 'Name'
+        Label: '鍗曚綅'
+        Taborder: 9
+      ]
+    }
+    Component efCustomerName
+    {
+      #keys: '[414702.0.525734924]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderFillingCapacityOrder.Data.Customer'
+        Label: 'Customer name'
+        Taborder: 10
+      ]
+    }
+    Component efCustomID
+    {
+      #keys: '[414702.0.525734943]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        Label: 'Customer ID'
+        Taborder: 11
+      ]
+    }
+    Component ddslOrderType
+    {
+      #keys: '[414702.0.526239841]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderFillingCapacityOrder.Data.OrderType'
+        Label: '璁㈠崟绫诲瀷'
+        Strings: '鍙嶇;鎺堟潈'
+        Taborder: 16
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def
index c345b5c..446efca 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_ClickBtnOk.def
@@ -7,12 +7,12 @@
   [*
     // Disabled button to prevent the possibility of multiple firing
     
-    btnOk.Enabled(false,'');
+    //btnOk.Enabled(false,'');
     
     // OnOk
     this.ApplyChanges();
     
-    DataHolderFillingCapacityOrder.Data().Commit();
+    //DataHolderFillingCapacityOrder.Data().Commit();
     
     //if( not isnull( DataHolderForm.Data() ) )
     //{
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def
index 2d5dc2d..f217f0d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_Edit.def
@@ -12,6 +12,21 @@
     
     DataHolderFillingCapacityOrder.Data( &data );
     
+    salesSegment_MP := select( MacroPlan, SalesSegment_MP, tempSSMP, tempSSMP.Name() = selection.SalesSegmentName() );
+    ddlSalesSegment.Data( salesSegment_MP );
+    
+    product_MP := select( MacroPlan, Product_MP, tempPMP, tempPMP.ID() = selection.ProductID() );
+    ddlProduct_MP.Data( product_MP );
+    
+    stockingPoint_MP := select( MacroPlan, StockingPoint_MP, tempSPMP, tempSPMP.ID() = selection.StockingPointID() );
+    ddlStockingPoint_MP.Data( stockingPoint_MP );
+    
+    businessType := select( GlobalOTDTable, BusinessType, tempBT, tempBT.BusinessTypeName() = selection.BusinessType() );
+    ddlBusinessType.Data( businessType );
+    
+    unitOfMeasure_MP := select( MacroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = selection.UnitOfMeasureName() );
+    ddlUnitOfMeasure_MP.Data( unitOfMeasure_MP );
+    
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
index 4170b61..658d008 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
@@ -8,10 +8,10 @@
   Body:
   [*
     
-    data := owner.FillingCapacityOrder(relshadow);
-    data.OrderType("鎻愭媺")
+    data := owner.FillingCapacityOrder( relshadow );
+    //data.OrderType("鎻愭媺")
     
-    DataHolderFillingCapacityOrder.Data(&data);
+    DataHolderFillingCapacityOrder.Data( &data );
     
     ApplicationMacroPlanner.ShowFormModal( this );
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
index 89f4bc2..184dfb0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -6,20 +6,52 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    feedback := Translations::FilllingCapacity_ValidateInput();
-    
-    checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
-                  and not dropDownStringListStockPointID.Text() = '' and not dropDownStringListCustomer.Text() = ''
-                  and not edtQuantity.Text() = '' and not dropDownStringListUnitOfMeasureName.Text() = ''
-                  and not edtSalesAmount.Text() = ''
-    
-    return checkValue;
+    //feedback := Translations::FilllingCapacity_ValidateInput();
+    //
+    //checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
+    //              and not dropDownStringListStockPointID.Text() = '' and not dropDownStringListCustomer.Text() = ''
+    //              and not edtQuantity.Text() = '' and not dropDownStringListUnitOfMeasureName.Text() = ''
+    //              and not edtSalesAmount.Text() = ''
+    //
+    //return checkValue;
   *]
   QuillAction
   {
     Body:
     [*
-      Form.ClickBtnOk()
+      Form.ApplyChanges();
+      
+      data := guard( DataHolderFillingCapacityOrder.Data().WrappedInstance(), null( FillingCapacityOrder ) );;
+      if ( isnull( data ) ) {
+        MacroPlan.FillingCapacityOrder( relnew,
+                                        ID                 := OS::GenerateGUIDAsString(),
+                                        ProductID          := guard( ddlProduct_MP.Data().ID(), "null" ),
+                                        BusinessType       := guard( ddlBusinessType.Data().BusinessTypeName(), "null" ),
+                                        SalesSegmentName   := guard( ddlSalesSegment.Data().Name(), "null" ),
+                                        StockingPointID    := guard( ddlStockingPoint_MP.Data().ID(), "null" ),
+                                        Customer           := efCustomerName.Text(),
+                                        Quantity           := [Real]edtQuantity.Text(),
+                                        UnitOfMeasureName  := ddlUnitOfMeasure_MP.Data().Name(),
+                                        ForecastDemandDate := dsForecastDemandDate.Date(),
+                                        DemandDate         := dsDemandDate.Date(),
+                                        OrderType          := ddslOrderType.Text(),
+                                        SalesAmount        := [Number]edtSalesAmount.Text()
+                                       );
+      } else {
+        data.ProductID( guard( ddlProduct_MP.Data().ID(), "null" ) );
+        data.BusinessType( guard( ddlBusinessType.Data().BusinessTypeName(), "null" ) );
+        data.SalesSegmentName( guard( ddlSalesSegment.Data().Name(), "null" ) );
+        data.StockingPointID( guard( ddlStockingPoint_MP.Data().ID(), "null" ) );
+        data.Customer( efCustomerName.Text() );
+        data.Quantity( [Real]edtQuantity.Text() );
+        data.UnitOfMeasureName( ddlUnitOfMeasure_MP.Data().Name() );
+        data.ForecastDemandDate( dsForecastDemandDate.Date() );
+        data.DemandDate( dsDemandDate.Date() );
+        data.OrderType( ddslOrderType.Text() );
+        data.SalesAmount( [Number]edtSalesAmount.Text() );
+      }
+      
+      Form.Close();
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_Edit.def
new file mode 100644
index 0000000..1962e28
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_Edit.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  PriorityPolicy selection
+) id:Method_DialogNewPriorityPolicy_Edit
+{
+  #keys: '[414382.0.603040472]'
+  Body:
+  [*
+    data := shadow( selection );
+    
+    DataHolderNewPriorityPolicy.Data( &data);
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def
new file mode 100644
index 0000000..262d308
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.278371059]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412960.0.278371063]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.278371065]'
+      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_DialogOrganCode/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def
new file mode 100644
index 0000000..459a754
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Component_pnlContent.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.278371057]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component editOrganCodeName
+    {
+      #keys: '[412960.0.280135212]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderOrganCode.Data.OrganCodeName'
+        Description: '缁勭粐缂栫爜鍚嶇О缂栬緫'
+        Label: '缁勭粐缂栫爜'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def
new file mode 100644
index 0000000..4e90d83
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_ClickBtnOk.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOk () id:Method_DialogOrganCode_ClickBtnOk
+{
+  #keys: '[412960.0.279955432]'
+  Body:
+  [*
+    // Disabled button to prevent the possibility of multiple firing
+    
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    
+    DataHolderOrganCode.Data().Commit();
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def
new file mode 100644
index 0000000..299bad9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_Edit.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  OrganCode selection
+) id:Method_DialogOrganCode_Edit
+{
+  #keys: '[412960.0.279955433]'
+  Body:
+  [*
+    // Edits assumption
+    data := shadow( selection );
+    
+    DataHolderOrganCode.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def
new file mode 100644
index 0000000..b312c1c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Method_New.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  BusinessType owner
+) id:Method_DialogOrganCode_New
+{
+  #keys: '[412960.0.279955435]'
+  Body:
+  [*
+    data := owner.OrganCode(relshadow);
+    DataHolderOrganCode.Data( &data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..fb27680
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/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.278371069]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..3ac7bbe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/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.278371068]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOk()
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def
new file mode 100644
index 0000000..c681a1b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogOrganCode/_ROOT_Component_DialogOrganCode.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogOrganCode
+{
+  #keys: '[412960.0.278371055]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderOrganCode
+    {
+      #keys: '[412960.0.279955517]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[OrganCode]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Description: '缁勭粐缂栫爜杈圭晫寮圭獥'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: '缁勭粐缂栫爜缂栬緫'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
index b0713d9..c7e5490 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListBusinessType.def
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessTypeName","title":"BusinessTypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessTypeName"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessTypeName","title":"BusinessTypeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessTypeName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayType","title":"DisplayType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ScenarioName","title":"ScenarioName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ScenarioName"}}]'
         ContextMenu: 'listContextMenuBusinessType655'
         Taborder: 2
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def
new file mode 100644
index 0000000..055b426
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_ListOrganCode.def
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+Component ListOrganCode
+{
+  #keys: '[412960.0.278370451]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOrganCode
+    {
+      #keys: '[412960.0.278370452]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'BusinessType'
+        Description: '缁勭粐缂栫爜'
+        ExtractionMode: 'Selected'
+        Source: 'ListBusinessType'
+        Taborder: 0
+        Transformation: 'OrganCode'
+      ]
+    }
+    #child: listActionBarPageOrganCode
+    Component DataSetLevelOrganCode
+    {
+      #keys: '[412960.0.278370457]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuBusinessType
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCodeName","title":"OrganCodeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCodeName"}}]'
+        ContextMenu: 'listContextMenuBusinessType'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '缁勭粐缂栫爜'
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListOrganCode_WebMenu_OnClick
+    {
+      #keys: '[412960.0.280046014]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[507.0.16811226]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def
new file mode 100644
index 0000000..9e8ac81
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_PanelBusinessType.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelBusinessType
+{
+  #keys: '[412960.0.278370440]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOrganCode
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def
new file mode 100644
index 0000000..cc122e0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listActionBarPageOrganCode.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOrganCode
+{
+  #keys: '[412960.0.278370454]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def
new file mode 100644
index 0000000..d8d6b3c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component listContextMenuBusinessType
+{
+  #keys: '[412960.0.278370459]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuEdit526
+    {
+      #keys: '[412960.0.278370780]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 3
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete267
+    {
+      #keys: '[412960.0.278370833]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 4
+        Title: 'Delete'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
index 30edf41..6d6b098 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Component_listContextMenuBusinessType655.def
@@ -38,6 +38,18 @@
         Title: 'Delete'
       ]
     }
+    Component MenuNewOrganCode
+    {
+      #keys: '[412960.0.280077335]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: '鏂板缓缁勭粐缂栫爜'
+        Image: 'EARTH_ADD'
+        Taborder: 6
+        Title: 'Add Organ Code'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def
new file mode 100644
index 0000000..fbc8746
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNewOrganCode_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListBusinessType
+Response OnClick (
+  BusinessType selection
+) id:Response_ListBusinessType_MenuNewOrganCode_OnClick
+{
+  #keys: '[412960.0.280105097]'
+  CanBindMultiple: false
+  DefinitionID => /ListBusinessType/Responsedef_ListBusinessType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNewOrganCode'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogOrganCode );
+      dlg.New( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def
new file mode 100644
index 0000000..cb47729
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuDelete267_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListOrganCode
+Response OnClick (
+  OrganCode selection
+) id:Response_ListOrganCode_MenuDelete267_OnClick
+{
+  #keys: '[412960.0.280046423]'
+  CanBindMultiple: false
+  DefinitionID => /ListOrganCode/Responsedef_ListOrganCode_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete267'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def
new file mode 100644
index 0000000..1cbf4e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListOrganCode_MenuEdit526_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListOrganCode
+Response OnClick (
+  OrganCode selection
+) id:Response_ListOrganCode_MenuEdit526_OnClick
+{
+  #keys: '[412960.0.280046170]'
+  CanBindMultiple: false
+  DefinitionID => /ListOrganCode/Responsedef_ListOrganCode_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit526'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogOrganCode );
+      dlg.Edit(  selection );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def"
index e23342a..d9814cb 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form367/_ROOT_Component_FormBusinessType\043367.def"
@@ -8,9 +8,10 @@
   Children:
   [
     #child: ListBusinessType
+    #child: PanelBusinessType
   ]
   Properties:
   [
-    Title: 'Business Type'
+    Title: '浜嬩笟閮�&缁勭粐缂栫爜缁存姢'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def
index 7ff6bcd..a3801b2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_ListFillingCapacityOrder.def
@@ -37,7 +37,7 @@
   ]
   Properties:
   [
-    Taborder: 0
+    Taborder: 1
   ]
   ResponseDefinitions:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_PanelFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_PanelFillingCapacityOrder.def
new file mode 100644
index 0000000..57a3abe
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_PanelFillingCapacityOrder.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component PanelFillingCapacityOrder
+{
+  #keys: '[414702.0.526129526]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonDeduct
+    {
+      #keys: '[414702.0.523642357]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EDITOR_ACCESSIBILITY_LOCAL'
+        Label: '鍐插噺'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
index 42e181a..7db97cc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/Component_listContextMenuFillingCapacityOrder.def
@@ -22,6 +22,7 @@
       BaseType: 'WebMenu'
       Properties:
       [
+        BindOnDoubleClick: true
         Image: 'PENCIL'
         Taborder: 4
         Title: 'Edit'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def
index 594ffdc..da0e3a5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingCapacityOrder/_ROOT_Component_FormFillingCapacityOrder.def
@@ -8,6 +8,7 @@
   Children:
   [
     #child: ListFillingCapacityOrder
+    #child: PanelFillingCapacityOrder
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def
index 882b6d4..57d4c51 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_ListInterfaceTest.def
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BrokerName","title":"BrokerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BrokerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ElementTotal","title":"ElementTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ElementTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorDateTime","title":"ErrorDateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorMessage","title":"ErrorMessage","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorMessage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorNo","title":"ErrorNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsSuccess","title":"IsSuccess","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsSuccess"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SuccessDateTime","title":"SuccessDateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SuccessDateTime"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImageExecutionStatus","title":"杩愯鐘舵��","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImageExecutionStatus"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ExecuteUser","title":"鎵ц鐢ㄦ埛","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ExecuteUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsSuccess","title":"鏄惁鎴愬姛","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsSuccess"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BrokerName","title":"Broker鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BrokerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ElementTotal","title":"鏁版嵁澶у皬","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ElementTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorDateTime","title":"閿欒鏃堕棿","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorMessage","title":"閿欒娑堟伅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorMessage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ErrorNo","title":"閿欒鍙�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ErrorNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"鏃ュ織鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SuccessDateTime","title":"鎴愬姛鏃堕棿","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SuccessDateTime"}}]'
         ContextMenu: 'listContextMenuInterfaceTest'
         Taborder: 2
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest981.def "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
similarity index 70%
rename from _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest981.def
rename to "_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
index b8b4a3f..5c28e5e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest981.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
@@ -1,5 +1,5 @@
 Quintiq file version 2.0
-Component PanelInterfaceTest981
+Component PanelInterfaceGlobal_BrokerExecuteLog
 {
   #keys: '[414702.0.459917264]'
   BaseType: 'WebPanel'
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 2
+    Taborder: 5
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
new file mode 100644
index 0000000..da696e8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption1.def
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+Component PanelInterfaceOption1
+{
+  #keys: '[414702.0.459752107]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component CheckboxCustomOrder
+    {
+      #keys: '[414702.0.459786494]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'CustomOrder'
+        Taborder: 0
+      ]
+    }
+    Component CheckboxForecast
+    {
+      #keys: '[414702.0.459501981]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Forecast'
+        Taborder: 1
+      ]
+    }
+    Component CheckboxUnitOfMeasure_MP
+    {
+      #keys: '[414702.0.500042972]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'UnitOfMeasure_MP'
+        Taborder: 2
+      ]
+    }
+    Component CheckboxSalesSegment_MP
+    {
+      #keys: '[414702.0.498882706]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'SalesSegment_MP'
+        Taborder: 3
+      ]
+    }
+    Component CheckboxProduct_MP
+    {
+      #keys: '[414702.0.500281942]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Product_MP'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
new file mode 100644
index 0000000..a089baa
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption2\043456.def"
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+Component PanelInterfaceOption2
+{
+  #keys: '[414702.0.500233382]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component CheckboxConversionFactor
+    {
+      #keys: '[414702.0.501770364]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'ConversionFactor'
+        Taborder: 0
+      ]
+    }
+    Component CheckboxOperation
+    {
+      #keys: '[414702.0.501791718]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Operation'
+        Taborder: 1
+      ]
+    }
+    Component CheckboxOperationBOM
+    {
+      #keys: '[414702.0.501742364]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'OperationBOM'
+        Taborder: 2
+      ]
+    }
+    Component CheckboxProductInLane
+    {
+      #keys: '[414702.0.501792106]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'ProductInLane'
+        Taborder: 3
+      ]
+    }
+    Component CheckboxAIPISPIP
+    {
+      #keys: '[414702.0.503110868]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'AIPISPIP'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
new file mode 100644
index 0000000..f48dbeb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption3.def
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+Component PanelInterfaceOption3
+{
+  #keys: '[414702.0.501742781]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component CheckboxInventorySupply
+    {
+      #keys: '[414702.0.503576372]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'InventorySupply'
+        Taborder: 0
+      ]
+    }
+    Component CheckboxStockingPointCost
+    {
+      #keys: '[414702.0.503748797]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'StockingPointCost'
+        Taborder: 1
+      ]
+    }
+    Component CheckboxOperationCost
+    {
+      #keys: '[414702.0.503158219]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'OperationCost'
+        Taborder: 2
+      ]
+    }
+    Component CheckboxDOI_DSI
+    {
+      #keys: '[414702.0.503158880]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'DOI_DSI'
+        Taborder: 3
+      ]
+    }
+    Component CheckboxCustomerGrade
+    {
+      #keys: '[414702.0.503159013]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'CustomerGrade'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
new file mode 100644
index 0000000..f708ac7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption4.def
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+Component PanelInterfaceOption4
+{
+  #keys: '[414702.0.504229568]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component CheckboxStockingPoint_MP
+    {
+      #keys: '[414702.0.501794917]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'StockingPoint_MP'
+        Taborder: 0
+      ]
+    }
+    Component CheckboxCurrency_MP
+    {
+      #keys: '[414702.0.504229987]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Currency_MP'
+        Taborder: 1
+      ]
+    }
+    Component CheckboxCurrencyRate_MP
+    {
+      #keys: '[414702.0.503787453]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'CurrencyRate_MP'
+        Taborder: 2
+      ]
+    }
+    Component CheckboxLane
+    {
+      #keys: '[414702.0.503787560]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'Lane'
+        Taborder: 3
+      ]
+    }
+    Component CheckboxLaneLeg
+    {
+      #keys: '[414702.0.503787710]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'LaneLeg'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOptions.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOptions.def
deleted file mode 100644
index 4fe176c..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOptions.def
+++ /dev/null
@@ -1,62 +0,0 @@
-Quintiq file version 2.0
-Component PanelInterfaceOptions
-{
-  #keys: '[414702.0.459752107]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component CheckboxCustomOrder
-    {
-      #keys: '[414702.0.459786494]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'CustomOrder'
-        Taborder: 0
-      ]
-    }
-    Component CheckboxForecast
-    {
-      #keys: '[414702.0.459501981]'
-      BaseType: 'WebCheckbox'
-      Properties:
-      [
-        Label: 'Forecast'
-        Taborder: 1
-      ]
-    }
-    Component DropDownListBusinessType
-    {
-      #keys: '[414702.0.465923773]'
-      BaseType: 'WebDropDownList'
-      Databinding: 'BusinessType'
-      Children:
-      [
-        Component DataExtractorInterfaceOptions
-        {
-          #keys: '[414702.0.465923775]'
-          BaseType: 'WebDataExtractor'
-          Properties:
-          [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
-            Taborder: 0
-            Transformation: 'BusinessType'
-          ]
-        }
-      ]
-      Properties:
-      [
-        DisplayField: 'BusinessTypeName'
-        Label: '浜嬩笟閮�'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
index 90f59dd..b8719b3 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: 1
+    Taborder: 4
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
index 8cbab4b..c678ea7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_listContextMenuInterfaceTest.def
@@ -16,6 +16,29 @@
         Title: '鏄剧ず鏁版嵁'
       ]
     }
+    Component MenuDelete
+    {
+      #keys: '[414702.0.495675965]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 4
+        Title: '鍒犻櫎'
+      ]
+    }
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.0.494390825]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 5
+        Title: '鍏ㄩ��'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuDelete_OnClick.def
new file mode 100644
index 0000000..3f1219b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuDelete_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListInterfaceTest
+Response OnClick (
+  Global_BrokerExecuteLog selection
+) id:Response_ListInterfaceTest_MenuDelete_OnClick
+{
+  #keys: '[414702.0.494333825]'
+  DefinitionID => /ListInterfaceTest/Responsedef_ListInterfaceTest_WebMenu_OnClick
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..da04728
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_ListInterfaceTest_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListInterfaceTest
+Response OnClick () id:Response_ListInterfaceTest_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.0.494351350]'
+  CanBindMultiple: false
+  DefinitionID => /ListInterfaceTest/Responsedef_ListInterfaceTest_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    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 7ec600a..6dfbdbe 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
@@ -13,10 +13,29 @@
   {
     Body:
     [*
-      GlobalOTDTable.SynchronizationAllMappingBrokerAndAPIByOption( CheckboxCustomOrder.Checked(),
-                                                                    CheckboxForecast.Checked() );
+      GlobalOTDTable.SynchronizationAllMappingBrokerAndAPIByOption( ApplicationMacroPlanner.GetUserName(),
+                                                                    CheckboxCustomOrder.Checked(),
+                                                                    CheckboxForecast.Checked(),
+                                                                    CheckboxUnitOfMeasure_MP.Checked(),
+                                                                    CheckboxSalesSegment_MP.Checked(),
+                                                                    CheckboxProduct_MP.Checked(),
+                                                                    CheckboxConversionFactor.Checked(),
+                                                                    CheckboxOperation.Checked(),
+                                                                    CheckboxOperationBOM.Checked(),
+                                                                    CheckboxProductInLane.Checked(),
+                                                                    CheckboxAIPISPIP.Checked(),
+                                                                    CheckboxInventorySupply.Checked(),
+                                                                    CheckboxStockingPointCost.Checked(),
+                                                                    CheckboxOperationCost.Checked(),
+                                                                    CheckboxDOI_DSI.Checked(),
+                                                                    CheckboxCustomerGrade.Checked(),
+                                                                    CheckboxStockingPoint_MP.Checked(),
+                                                                    CheckboxCurrency_MP.Checked(),
+                                                                    CheckboxCurrencyRate_MP.Checked(),
+                                                                    CheckboxLane.Checked(),
+                                                                    CheckboxLaneLeg.Checked() );
       
-      WebMessageBox::Success( "鎷夊彇鎴愬姛锛�", true );
+      WebMessageBox::Information( "鏁版嵁寮�濮嬫媺鍙栦腑锛侊紙浠呴檺涓�浜烘搷浣滐級", true );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
index c2eb216..0b714ed 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonSynchronizeDataToMacroPlan_OnClick.def
@@ -13,12 +13,8 @@
   {
     Body:
     [*
-      businessTypes := construct( Strings );
-      businessTypes.Add( DropDownListBusinessType.Data().BusinessTypeName() );
       GlobalOTDTable.SynchronizeDataToMacroPlan( MacroPlan, 
-                                                 businessTypes,
-                                                 CheckboxCustomOrder.Checked(),
-                                                 CheckboxForecast.Checked()
+                                                 CheckboxUnitOfMeasure_MP.Checked()
                                                 );
       
       WebMessageBox::Success( "鍚屾鎴愬姛锛�", true );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
index 05dd2d6..a50ad14 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -7,9 +7,12 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: PanelInterfaceOptions
+    #child: PanelInterfaceOption1
     #child: PanelInterfaceTest
-    #child: PanelInterfaceTest981
+    #child: PanelInterfaceGlobal_BrokerExecuteLog
+    #child: PanelInterfaceOption2
+    #child: PanelInterfaceOption3
+    #child: PanelInterfaceOption4
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
index 6ac9928..ada73f4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Component_listContextMenuPriorityFactor.def
@@ -12,10 +12,43 @@
       Properties:
       [
         Image: 'GEAR_EDIT'
-        Taborder: 3
+        Taborder: 4
         Title: '缂栬緫'
       ]
     }
+    Component MenuNew
+    {
+      #keys: '[414382.0.593001800]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_ADD'
+        Taborder: 3
+        Title: '鏂板'
+      ]
+    }
+    Component MenuDel
+    {
+      #keys: '[414382.0.593001811]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_DELETE'
+        Taborder: 5
+        Title: '鍒犻櫎'
+      ]
+    }
+    Component MenuInit
+    {
+      #keys: '[414382.0.600301960]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_NEW'
+        Taborder: 6
+        Title: '鍒濆鍖�'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
new file mode 100644
index 0000000..ef61871
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DataHolderPriorityFactorSelect_OnDataChanged.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: DataHolderPriorityFactorSelect
+Response OnDataChanged () id:Response_FormPriorityFactor_DataHolderPriorityFactorSelect_OnDataChanged
+{
+  #keys: '[414382.0.593010798]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      data := selectset( MacroPlan,PriorityFactor,p,true);
+      this.Data(&data);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
index 70938b2..0865d17 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnCreated.def
@@ -9,8 +9,9 @@
   {
     Body:
     [*
-      //strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
-      //this.Strings(strings);
+      info( "create" + DropDownStringListBusinessType.Text());
+      list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
+      DataHolderPriorityFactorSelect.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
index 2ac7956..a1d8860 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_DropDownStringListBusinessType_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      info( "selection" );
+      info( "selection" + DropDownStringListBusinessType.Text());
       list := PriorityFactor::GetDataByBusinessType( MacroPlan, DropDownStringListBusinessType.Text());
       DataHolderPriorityFactorSelect.Data(&list);
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def
new file mode 100644
index 0000000..8a86cdf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuDel_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick (
+  PriorityFactor selection
+) id:Response_ListPriorityFactor_MenuDel_OnClick
+{
+  #keys: '[414382.0.593002800]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  Initiator: 'MenuDel'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInit_OnClick.def
new file mode 100644
index 0000000..83c36b1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuInit_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick () id:Response_ListPriorityFactor_MenuInit_OnClick
+{
+  #keys: '[414382.0.600302015]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  Initiator: 'MenuInit'
+  QuillAction
+  {
+    Body:
+    [*
+      // 鍒濆鍖栦紭鍏堢骇鍥犲瓙
+      PriorityFactor::InitData( MacroPlan);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def
new file mode 100644
index 0000000..2d18cad
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/Response_ListPriorityFactor_MenuNew_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPriorityFactor
+Response OnClick () id:Response_ListPriorityFactor_MenuNew_OnClick
+{
+  #keys: '[414382.0.593002709]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityFactor/Responsedef_ListPriorityFactor_WebMenu_OnClick
+  Initiator: 'MenuNew'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditPriorityFactor );
+      businessType := DropDownStringListBusinessType.Text();
+      dlg.New( MacroPlan, businessType);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
index b3df733..4e4d0d6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityFactor/_ROOT_Component_FormPriorityFactor.def
@@ -25,6 +25,7 @@
       [
         Label: '浜嬩笟閮�:'
         Taborder: 0
+        Visible: false
       ]
     }
     #child: ListPriorityFactor
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
index b5d4a7b..33cfc53 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
@@ -12,7 +12,7 @@
       Properties:
       [
         DataType: 'structured[PriorityPolicy]'
-        Source: 'DataHolderPriorityPolicy'
+        Source: 'DataHolderPriorityPolicyShowList'
         Taborder: 0
         Transformation: 'Elements'
       ]
@@ -36,7 +36,7 @@
   ]
   Properties:
   [
-    Taborder: 2
+    Taborder: 3
   ]
   ResponseDefinitions:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
index 1923a0f..297e8db 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
@@ -40,7 +40,7 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 4
     Title: '浼樺厛绾х瓥鐣ラ厤缃�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def
new file mode 100644
index 0000000..237513d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnCreated.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: DataHolderPriorityPolicy
+Response OnCreated () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnCreated
+{
+  #keys: '[414382.0.594152096]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      data := this.Data();
+      businessType := PriorityPolicyBusinessType.Text();
+      list := selectset( data,Elements,e,e.BusinessType() = businessType);
+      DataHolderPriorityPolicyShowList.Data(&list);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
index 89b9c11..3388972 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
@@ -2,15 +2,17 @@
 #parent: DataHolderPriorityPolicy
 Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnDataChanged
 {
-  #keys: '[414382.0.502145694]'
+  #keys: '[414382.0.595379026]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
   QuillAction
   {
     Body:
     [*
-      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
-      this.Data(&list);
+      data := this.Data();
+      businessType := PriorityPolicyBusinessType.Text();
+      list := selectset( data,Elements,e,e.BusinessType() = businessType);
+      DataHolderPriorityPolicyShowList.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
index b956173..e5eb7a8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
@@ -12,8 +12,21 @@
   {
     Body:
     [*
-      PanelPriorityPolicyOperation.Visible(true);
+      dlg := construct( DialogNewPriorityPolicy );
+      businessType := PriorityPolicyBusinessType.Text();
+      dlg.Edit( selection);
+      
       PanelPriorityPolicyOperationName.Text(selection.Name());
+      
+      businessType := PriorityPolicyBusinessType.Text();
+      str := PriorityFactor::GetNameList( MacroPlan, businessType);
+      DropDownStringList.Strings(str);
+      
+      LabelFormula.Text(selection.Formula());
+      LabelCalculateValue.Text(selection.CalculateValue());
+      
+      data := shadow( selection );
+      DataHolderEditPriorityPolicy.Data( &data );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
index 4fd7821..ff9a42e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnCreated.def
@@ -9,8 +9,11 @@
   {
     Body:
     [*
-      strings := BusinessType::GetBusinessNameStr( GlobalOTDTable );
+      strings := BusinessType::GetScenarioNamesStr( GlobalOTDTable );
       this.Strings(strings);
+      
+      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
+      DataHolderPriorityPolicyShowList.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
index 7acc7f0..ffc5263 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
@@ -9,8 +9,8 @@
   {
     Body:
     [*
-      //list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
-      //DataHolderPriorityPolicy.Data(&list);
+      list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
+      DataHolderPriorityPolicyShowList.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
index 72153cd..12068c1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
@@ -22,9 +22,24 @@
       #keys: '[414382.0.487792124]'
       BaseType: 'WebDataHolder'
       Databinding: 'structured[PriorityPolicy]*'
+      Children:
+      [
+        Component DataExtractorPriorityPolicy216
+        {
+          #keys: '[414382.0.593061574]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'PriorityPolicy'
+          ]
+        }
+      ]
       Properties:
       [
-        Taborder: 1
+        Taborder: 2
       ]
     }
     #child: ListPriorityPolicy
@@ -36,7 +51,7 @@
       Databinding: 'shadow[PriorityPolicy]*'
       Properties:
       [
-        Taborder: 4
+        Taborder: 5
       ]
     }
     Component DataHolderPriorityPolicyBusinessType
@@ -61,7 +76,7 @@
       ]
       Properties:
       [
-        Taborder: 5
+        Taborder: 6
       ]
     }
     Component DataHolderPriorityPolicyFactor
@@ -86,7 +101,17 @@
       ]
       Properties:
       [
-        Taborder: 6
+        Taborder: 7
+      ]
+    }
+    Component DataHolderPriorityPolicyShowList
+    {
+      #keys: '[414382.0.593062135]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityPolicy]*'
+      Properties:
+      [
+        Taborder: 1
       ]
     }
   ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def"
index 560aeb3..8e69dc4 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick\043545.def"
@@ -16,7 +16,7 @@
       dlg := construct( DialogCreateEditScenario );
       dlg.checkboxEnableSync().Visible( true );
       dlg.dropDownStringListGeneral().Visible( true );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes(GlobalOTDTable) );
+      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
       dlg.checkboxIsKeyProduct().Visible( true );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( true );
       dlg.NewScenario( ScenarioManager, selection, true );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
index ff086e5..4c3b7f0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenarioAndDoSync_OnClick.def
@@ -17,7 +17,7 @@
       dlg := construct( DialogCreateEditScenario );
       dlg.checkboxEnableSync().Visible( true );
       dlg.dropDownStringListGeneral().Visible( true );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes(GlobalOTDTable) );
+      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
       dlg.checkboxIsKeyProduct().Visible( true );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( true );
       parent := selection.Element( 0 ).Parent();
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def"
index 4e81457..607ae7d 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick\043549.def"
@@ -17,7 +17,7 @@
       dlg.checkboxEnableSync().Checked( false );
       dlg.checkboxEnableSync().Visible( false );
       dlg.dropDownStringListGeneral().Visible( false );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes(GlobalOTDTable) );
+      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
       dlg.checkboxIsKeyProduct().Visible( false );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( false );
       dlg.NewScenario( ScenarioManager, selection );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
index 52b82cf..55945ed 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuCreateScenario_OnClick.def
@@ -18,7 +18,7 @@
       dlg.checkboxEnableSync().Checked( false );
       dlg.checkboxEnableSync().Visible( false );
       dlg.dropDownStringListGeneral().Visible( false );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes(GlobalOTDTable) );
+      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
       dlg.checkboxIsKeyProduct().Visible( false );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( false );
       parent := selection.Element( 0 ).Parent();
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
index 8fbf279..9c2d77f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScenarioManager/Response_ListScenario_MenuEdit_OnClick.def
@@ -18,7 +18,7 @@
       // Edit scenario
       dlg := construct( DialogCreateEditScenario );
       dlg.dropDownStringListGeneral().Visible( selection.EnableSync() );
-      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableBusinessTypes(GlobalOTDTable) );
+      dlg.dropDownStringListGeneral().Strings( ScenarioManager::AvailableScenarioNames( GlobalOTDTable ) );
       dlg.checkboxIsKeyProduct().Visible( selection.EnableSync() );
       dlg.checkboxCreatePurchaseSupplyProduct().Visible( selection.EnableSync() );
       
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw b/_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.vw
new file mode 100644
index 0000000..7903c23
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Business_Type_Maintain.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
+    {
+    }
+    index: 3
+    image: 'ELEMENTS_TREE_EDIT'
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    description: ''
+  }
+  formatversion: 2
+  id: 'Business_Type_Maintain'
+  name: 'Business Type Maintain'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
index 43ce5f1..d4e8c6a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\346\216\245\345\217\243\346\265\213\350\257\225.vw"
@@ -13,13 +13,25 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 10
+          rowSpan: 16
           columnPosition: 1
           columnSpan: 6
         }
         components
         {
-          FormInterfaceTest_PanelInterfaceOptions
+          FormInterfaceTest_PanelInterfaceOption1
+          {
+            sizeRatio: 1
+          }
+          FormInterfaceTest_PanelInterfaceOption2
+          {
+            sizeRatio: 1
+          }
+          FormInterfaceTest_PanelInterfaceOption3
+          {
+            sizeRatio: 1
+          }
+          FormInterfaceTest_PanelInterfaceOption4
           {
             sizeRatio: 1
           }
@@ -27,7 +39,7 @@
           {
             sizeRatio: 1
           }
-          FormInterfaceTest_PanelInterfaceTest981
+          FormInterfaceTest_PanelInterfaceGlobal_BrokerExecuteLog
           {
             sizeRatio: 1
           }
@@ -37,66 +49,85 @@
           FormInterfaceTest_DataSetLevelInterfaceTest
           {
             groupDepth: -1
-            column_BrokerName
+            sort: 'IsSuccess'
+            column_ImageExecutionStatus
             {
-              columnId: 'BrokerName'
-              dataPath: 'BrokerName'
+              columnId: 'ImageExecutionStatus'
+              dataPath: 'ImageExecutionStatus'
               dataType: 'string'
               index: 0
               subtotals: ''
-              width: 150
+              width: 37
             }
-            column_ElementTotal
+            column_ExecuteUser
             {
-              columnId: 'ElementTotal'
-              dataPath: 'ElementTotal'
-              dataType: 'number'
+              columnId: 'ExecuteUser'
+              dataPath: 'ExecuteUser'
+              dataType: 'string'
               index: 1
               subtotals: ''
-              width: 150
-            }
-            column_ErrorDateTime
-            {
-              columnId: 'ErrorDateTime'
-              dataPath: 'ErrorDateTime'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 150
-            }
-            column_ErrorMessage
-            {
-              columnId: 'ErrorMessage'
-              dataPath: 'ErrorMessage'
-              dataType: 'string'
-              index: 3
-              subtotals: ''
-              width: 150
-            }
-            column_ErrorNo
-            {
-              columnId: 'ErrorNo'
-              dataPath: 'ErrorNo'
-              dataType: 'number'
-              index: 4
-              subtotals: ''
-              width: 150
+              width: 110
             }
             column_IsSuccess
             {
               columnId: 'IsSuccess'
               dataPath: 'IsSuccess'
               dataType: 'boolean'
+              index: 2
+              subtotals: ''
+              width: 96
+            }
+            column_BrokerName
+            {
+              columnId: 'BrokerName'
+              dataPath: 'BrokerName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 229
+            }
+            column_ElementTotal
+            {
+              columnId: 'ElementTotal'
+              dataPath: 'ElementTotal'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 87
+            }
+            column_ErrorDateTime
+            {
+              columnId: 'ErrorDateTime'
+              dataPath: 'ErrorDateTime'
+              dataType: 'string'
               index: 5
               subtotals: ''
-              width: 150
+              width: 121
+            }
+            column_ErrorMessage
+            {
+              columnId: 'ErrorMessage'
+              dataPath: 'ErrorMessage'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 86
+            }
+            column_ErrorNo
+            {
+              columnId: 'ErrorNo'
+              dataPath: 'ErrorNo'
+              dataType: 'number'
+              index: 7
+              subtotals: ''
+              width: 86
             }
             column_Name
             {
               columnId: 'Name'
               dataPath: 'Name'
               dataType: 'string'
-              index: 6
+              index: 8
               subtotals: ''
               width: 150
             }
@@ -105,40 +136,7 @@
               columnId: 'SuccessDateTime'
               dataPath: 'SuccessDateTime'
               dataType: 'string'
-              index: 7
-              subtotals: ''
-              width: 150
-            }
-          }
-        }
-      }
-      form_FormBusinessType
-      {
-        title: 'QTIANMA_JITUAN::FormBusinessType'
-        shown: true
-        componentID: 'QTIANMA_JITUAN::FormBusinessType'
-        layout
-        {
-          mode: 'open'
-          rowPosition: 11
-          rowSpan: 6
-          columnPosition: 1
-          columnSpan: 6
-        }
-        components
-        {
-          FormBusinessType_ListBusinessType
-          {
-          }
-          FormBusinessType_DataSetLevelBusinessType
-          {
-            groupDepth: -1
-            column_BusinessTypeName
-            {
-              columnId: 'BusinessTypeName'
-              dataPath: 'BusinessTypeName'
-              dataType: 'string'
-              index: 0
+              index: 9
               subtotals: ''
               width: 150
             }
@@ -158,7 +156,54 @@
           columnPosition: 7
           columnSpan: 6
         }
-        components: null
+        components
+        {
+          FormShowInterfaceData_MatrixEditorShowInterfaceData
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QTIANMA_JITUAN::FormShowInterfaceData.MatrixEditorShowInterfaceData'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Value
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Value'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ColumnIndex'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
       }
     }
     userconfigurableinformation

--
Gitblit v1.9.3