From a89f9faebe6e90c5cf1faeb1d551825e0cb2a06d Mon Sep 17 00:00:00 2001
From: yanweiyuan3 <yanweiyuan3@gmail.com>
Date: 星期四, 26 十月 2023 22:24:47 +0800
Subject: [PATCH] Create GlobalParameters

---
 _Main/BL/Type_GlobalParameters/Attribute_Address.qbl                                                            |    8 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl                                                            |   54 +-
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def                           |   83 ++++
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl                                                |   10 
 _Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Views/全局参数.vw                                                                       |  351 +++++++++++++++++++
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def                  |   14 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def              |   15 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def             |   18 +
 _Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl                 |   23 +
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def         |   31 +
 _Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def                     |    2 
 _Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl                                                  |   10 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def                   |   59 +++
 _Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl                                               |   52 ++
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def                              |   19 +
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def            |   18 +
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def                                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def                           |   40 ++
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl                                        |   10 
 _Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def        |   46 ++
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def |   19 +
 _Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def    |   18 +
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def   |   20 +
 _Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def                                    |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def      |   10 
 _Main/BL/Type_GlobalParameters/Attribute_Port.qbl                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def          |   15 
 34 files changed, 986 insertions(+), 61 deletions(-)

diff --git a/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl b/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl
new file mode 100644
index 0000000..05afed6
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalParameters_GlobalOTDTable_GlobalOTDTable_GlobalParameters
+{
+  #keys: '1[412960.0.369930029]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[412960.0.369930031][412960.0.369930030][412960.0.369930032]'
+    Cardinality: '0to1'
+    ObjectDefinition: GlobalParameters
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide GlobalParameters
+  {
+    #keys: '3[412960.0.369930034][412960.0.369930033][412960.0.369930035]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index 12a5633..66ff081 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -101,14 +101,6 @@
       Global_MappingOperationCost::SynchronizeMacroPlanData( this, macroPlan, executionUser, businessTypes, organcodelist );
     }
     
-    //if ( isDOI_DSI ) {
-    //  Global_MappingDOI_DSI::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_DOI_DSI" );
-    //}
-    //
-    //if ( isCustomerGrade ) {
-    //  Global_MappingCustomerGrade::SynchronizeInterfaceData( this, executionUser, "GlobalOTDTable_CustomerGrade" );
-    //}
-    
     if ( isStockingPoint_MP ) {
       Global_MappingStockingPoint_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
     }
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl b/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl
new file mode 100644
index 0000000..f2e1fe6
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_Address.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Address
+{
+  #keys: '3[412960.0.369930086][412960.0.369930085][412960.0.369930087]'
+  Description: 'Api浣跨敤鐨勫湴鍧�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl b/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl
new file mode 100644
index 0000000..85f6698
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_AttributeName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AttributeName
+{
+  #keys: '3[412960.0.369930046][412960.0.369930045][412960.0.369930047]'
+  Description: '鍙橀噺鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl b/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl
new file mode 100644
index 0000000..378b5e3
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_AttributeValue.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AttributeValue
+{
+  #keys: '3[412960.0.369930056][412960.0.369930055][412960.0.369930057]'
+  Description: '鍙橀噺鍊�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl b/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl
new file mode 100644
index 0000000..29658ab
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_Port.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Port
+{
+  #keys: '3[412960.0.369930066][412960.0.369930065][412960.0.369930067]'
+  Description: 'Api浣跨敤鐨勭鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl b/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl
new file mode 100644
index 0000000..c1fe72b
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/Attribute_PostRequestBody.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PostRequestBody
+{
+  #keys: '3[412960.0.369930076][412960.0.369930075][412960.0.369930077]'
+  Description: 'Api浣跨敤鐨刾ost body'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl b/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl
new file mode 100644
index 0000000..90a2a45
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/StaticMethod_TestForApiRequest.qbl
@@ -0,0 +1,52 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod TestForApiRequest (
+  GlobalOTDTable owner
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-26-2023 (created)
+    info( "Sales Segment Finished, Start Get StockingPoint From Api" )
+    bodynumber := "2";
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    
+    info( DateTime::Now().Format( "Y-M2-D2 H:m:s" ) );
+    postrequestbodystring := postrequestbody.AsString();
+    info( postrequestbodystring );
+    
+    parameter := select( owner, GlobalParameters, param, param.AttributeName() = "test" );
+    body := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
+    
+    // for HTTPS requests:
+    i := HTTPInterface::Create( address, port);
+    //i := HTTPInterface::Create( address ,443);
+    info( address, url, port, body );
+    
+    i.URL(url);
+    i.SSL(false);
+    //i.SSL(true);
+    //i.SSLKeystore('MyKeystore'); // created in the Config Utility
+    
+    i.PostMethod(true); //it's a POST method
+    
+    i.Call(body); // Call's argument is for POST method's content.
+    htmlresult := i.Result();
+    info( htmlresult );
+    
+    htmlresponse := JSON::Parse( htmlresult );
+    info( htmlresponse );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl b/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl
new file mode 100644
index 0000000..7496bd1
--- /dev/null
+++ b/_Main/BL/Type_GlobalParameters/_ROOT_Type_GlobalParameters.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type GlobalParameters
+{
+  #keys: '5[412960.0.369930026][412960.0.369930024][0.0.0][412960.0.369930025][412960.0.369930027]'
+  BaseType: Object
+  Description: '鍏ㄥ眬鍙傛暟'
+  StructuredName: 'GlobalParameterss'
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
index e3b0e63..c8828b9 100644
--- a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
     
-    bodynumber := "5";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrencyRatesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
index 2480088..cf9ba2f 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingCurrency_MP( relflush );
     
-    bodynumber := "1";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrenciesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
index e46efd6..d1f365c 100644
--- a/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingLane( relflush );
     
-    bodynumber := "3";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLanesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
index 7899f6e..ad5182b 100644
--- a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingLaneLeg( relflush );
     
-    bodynumber := "4";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLaneLegsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
index 4901d0a..749075f 100644
--- a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
@@ -8,11 +8,11 @@
   [*
     globalOTDTable.Global_MappingStockingPoint_MP( relflush );
     
-    bodynumber := "2";
-    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetStockingPointsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     i := HTTPInterface::Create( address, port);
     i.URL( url );
     i.SSL( true );
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
index 50f6bc7..ac04bdd 100644
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
@@ -45,31 +45,31 @@
     
     // 搴撳瓨鐐�-3
     info( "Sales Segment Finished, Start Get StockingPoint From Api" )
-    bodynumber := "2";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetStockingPointsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiStockingPointData( data );
     
     // 璐у竵淇℃伅-4
     info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Api" )
-    bodynumber := "1";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrenciesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiCurenciesData( data );
     
     //璐у竵姹囩巼淇℃伅-5
     info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Api" )
-    bodynumber := "5";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetCurrencyRatesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiCurencyRatesData( data );
     
@@ -93,21 +93,21 @@
     
     //杞﹂亾淇℃伅-10
     info( "BOM Finished, Start Get Lanes From Api" );
-    bodynumber := "3";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLanesInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiLanesData( data );
     
     //杞﹂亾杩愯緭娈�-11
     info( "Get Lanes From Api Finished, Start Get LaneLegs From Api" );
-    bodynumber := "4";
-    postrequestbody := macroPlan.ApiBuildPostRequestBody( bodynumber );
-    address := "api-uat-sgc.tianma.cn";
-    url := "/otdService/https/GetLaneLegsInfo";
-    port := 443;
+    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
+    postrequestbody := parameter.PostRequestBody();
+    address := parameter.Address();
+    url := parameter.AttributeValue();
+    port := [Number]parameter.Port();
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
     macroPlan.ApiLaneLegsData( data );
     
@@ -115,7 +115,7 @@
     //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
     //macroPlan.Broker_OTD_ProductInLane().Execute();
     info( "ProductInLane Data Broker Finished, Start ProductInLane Mapping" );
-    macroPlan.DoASyncMappingProductInLaneData(globalOTDTable,businessTypeName);
+    macroPlan.DoASyncMappingProductInLaneData(globalOTDTable,guard( businessTypeName.Element( 0 ), "" ));
     
     // 鍦ㄥ簱搴撳瓨鏁版嵁-13
     //info( "ProductInLane Finished, Start ActualPISPIP Data Broker" );
@@ -130,7 +130,7 @@
     macroPlan.DoASyncMappingExternalSupplyData( businessTypeName, isKeyProduct ,globalOTDTable, organcodelist );
     
     // 搴撳瓨鎴愭湰-15
-    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable, businessTypeName );
+    InventoryValueAndCost::DoASync( macroPlan,globalOTDTable,guard( businessTypeName.Element( 0 ), "" ) );
     
     // todo 鍒堕�犳垚鏈�-16
     info( "InventoryCost Finished, Start OperationCost Mapping" );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def
new file mode 100644
index 0000000..aa8f552
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412960.0.370310585]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412960.0.370310589]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412960.0.370310591]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def
new file mode 100644
index 0000000..8474857
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Component_pnlContent.def
@@ -0,0 +1,83 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412960.0.370310583]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component editAttributeName
+    {
+      #keys: '[412960.0.370311392]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.AttributeName'
+        Label: '鍙傛暟鍚嶇О'
+        Taborder: 1
+      ]
+    }
+    Component editAttributeValue
+    {
+      #keys: '[412960.0.370311429]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.AttributeValue'
+        Label: '鍙傛暟鍊�'
+        Taborder: 2
+      ]
+    }
+    Component editAddress
+    {
+      #keys: '[412960.0.370311489]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.Address'
+        Label: 'Api鍦板潃'
+        Taborder: 3
+        Visible: false
+      ]
+    }
+    Component editPort
+    {
+      #keys: '[412960.0.370311527]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.Port'
+        Label: 'Api绔彛鍙�'
+        Taborder: 4
+        Visible: false
+      ]
+    }
+    Component editPostRequestBody
+    {
+      #keys: '[412960.0.370311577]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'DataHolderGlobalParameters.Data.PostRequestBody'
+        Label: 'Api璇锋眰涓讳綋'
+        Taborder: 5
+        Visible: false
+      ]
+    }
+    Component IsApi
+    {
+      #keys: '[412960.0.370311617]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Description: '鏄惁涓篈PI鐩稿叧鍙傛暟'
+        Label: 'API閰嶇疆'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def
new file mode 100644
index 0000000..afdf6c4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_ClickBtnOk.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method ClickBtnOk () id:Method_DialogGlobalParameters_ClickBtnOk
+{
+  #keys: '[412960.0.370310978]'
+  Body:
+  [*
+    // Disabled button to prevent the possibility of multiple firing
+    
+    btnOk.Enabled(false,'');
+    
+    // OnOk
+    this.ApplyChanges();
+    
+    DataHolderGlobalParameters.Data().Commit();
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def
new file mode 100644
index 0000000..338ca9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_Edit.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  GlobalParameters selection
+) id:Method_DialogGlobalParameters_Edit
+{
+  #keys: '[412960.0.370310979]'
+  Body:
+  [*
+    // Edits assumption
+    data := shadow( selection );
+    
+    DataHolderGlobalParameters.Data( &data );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def
new file mode 100644
index 0000000..047b889
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Method_New.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method New (
+  GlobalOTDTable owner
+) id:Method_DialogGlobalParameters_New
+{
+  #keys: '[412960.0.370310981]'
+  Body:
+  [*
+    data := owner.GlobalParameters(relshadow);
+    DataHolderGlobalParameters.Data( &data);
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..ee5b753
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[412960.0.370310595]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..235dbb5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412960.0.370310594]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ClickBtnOk()
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def
new file mode 100644
index 0000000..20929e5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/Response_pnlContent_IsApi_OnChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: pnlContent/IsApi
+Response OnChanged () id:Response_pnlContent_IsApi_OnChanged
+{
+  #keys: '[412960.0.370311653]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      editAddress.Visible( this.Checked() );
+      editPort.Visible( this.Checked() );
+      editPostRequestBody.Visible( this.Checked() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def
new file mode 100644
index 0000000..a898ae5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogGlobalParameters/_ROOT_Component_DialogGlobalParameters.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogGlobalParameters
+{
+  #keys: '[412960.0.370310581]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+    Component DataHolderGlobalParameters
+    {
+      #keys: '[412960.0.370311111]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[GlobalParameters]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
index f81f38b..7c48b5a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form367/Response_ListBusinessType_MenuNew_OnClick.def
@@ -2,7 +2,7 @@
 #parent: ListBusinessType
 Response OnClick () id:Response_ListBusinessType_MenuNew_OnClick
 {
-  #keys: '[414382.0.377975353]'
+  #keys: '[412960.0.373110863]'
   CanBindMultiple: false
   DefinitionID => /ListBusinessType/Responsedef_ListBusinessType_WebMenu_OnClick
   GroupServerCalls: true
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def
new file mode 100644
index 0000000..18364b4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_ListGlobalParameters.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListGlobalParameters
+{
+  #keys: '[412960.0.370311764]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorGlobalParameters
+    {
+      #keys: '[412960.0.370311765]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'GlobalParameters'
+      ]
+    }
+    #child: listActionBarPageGlobalParameters
+    Component DataSetLevelGlobalParameters
+    {
+      #keys: '[412960.0.370311770]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuGlobalParameters
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AttributeName","title":"AttributeName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AttributeName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AttributeValue","title":"AttributeValue","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AttributeValue"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Address","title":"Address","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Address"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Port","title":"Port","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Port"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PostRequestBody","title":"PostRequestBody","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PostRequestBody"}}]'
+        ContextMenu: 'listContextMenuGlobalParameters'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListGlobalParameters_WebMenu_OnClick
+    {
+      #keys: '[412960.0.373111120]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[693.0.13162755]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def
new file mode 100644
index 0000000..dd6186c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_PanelGlobalParameters.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelGlobalParameters
+{
+  #keys: '[412960.0.370311750]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListGlobalParameters
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def
new file mode 100644
index 0000000..5d480f6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listActionBarPageGlobalParameters.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageGlobalParameters
+{
+  #keys: '[412960.0.370311767]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def
new file mode 100644
index 0000000..4750b4a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Component_listContextMenuGlobalParameters.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenuGlobalParameters
+{
+  #keys: '[412960.0.370311772]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuNew id:MenuNew_21
+    {
+      #keys: '[412960.0.370312224]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'New'
+      ]
+    }
+    Component MenuEdit id:MenuEdit_368
+    {
+      #keys: '[412960.0.370312277]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit'
+      ]
+    }
+    Component MenuDelete id:MenuDelete_832
+    {
+      #keys: '[412960.0.370312355]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def
new file mode 100644
index 0000000..f68b43c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuDelete_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick (
+  GlobalParameters selection
+) id:Response_ListGlobalParameters_MenuDelete_OnClick
+{
+  #keys: '[412960.0.373113087]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      selection.Delete();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def
new file mode 100644
index 0000000..6094065
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick (
+  GlobalParameters selection
+) id:Response_ListGlobalParameters_MenuEdit_OnClick
+{
+  #keys: '[412960.0.373112994]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogGlobalParameters );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def
new file mode 100644
index 0000000..a222fe1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/Response_ListGlobalParameters_MenuNew_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListGlobalParameters
+Response OnClick () id:Response_ListGlobalParameters_MenuNew_OnClick
+{
+  #keys: '[412960.0.373111139]'
+  CanBindMultiple: false
+  DefinitionID => /ListGlobalParameters/Responsedef_ListGlobalParameters_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuNew'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogGlobalParameters );
+      dlg.New( GlobalOTDTable );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def
new file mode 100644
index 0000000..a193e5c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormGlobalParameters/_ROOT_Component_FormGlobalParameters.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormGlobalParameters
+{
+  #keys: '[412960.0.367611841]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelGlobalParameters
+  ]
+  Properties:
+  [
+    Description: '瀛樻斁鍚勭被鍏ㄥ眬鍙傛暟锛岀洰鍓嶄粎鍖呭惈API鐩稿叧'
+    Image: 'EARTH2'
+    Title: 'Global Parameters'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw"
new file mode 100644
index 0000000..3e9b9c2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\205\250\345\261\200\345\217\202\346\225\260.vw"
@@ -0,0 +1,351 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 277
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 106
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
+    index: 4
+    image: 'EARTH2'
+    description: ''
+  }
+  formatversion: 2
+  id: '鍏ㄥ眬鍙傛暟'
+  name: '鍏ㄥ眬鍙傛暟'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3