From 7c527e6f480798b6089ac19f316f11a598708c1c Mon Sep 17 00:00:00 2001
From: Recolic K <bensl@microsoft.com>
Date: Mon, 17 May 2021 14:57:13 +0800
Subject: [PATCH] update demo

---
 activity.hpp         | 18 ++++++++++++++++++
 web/demo.cc          | 43 +++++++++++++++++++++++--------------------
 workflows/another.cc | 22 +++++++++++-----------
 xaml-template.hpp    |  4 ++++
 4 files changed, 56 insertions(+), 31 deletions(-)

diff --git a/activity.hpp b/activity.hpp
index 6d23d02..6849c39 100644
--- a/activity.hpp
+++ b/activity.hpp
@@ -112,7 +112,25 @@ namespace CIS {
             xamlCode.replace_once("__TEMPLATE_ARG_EntityDefPlaceholder", entityXaml);
             return xamlCode;
         }
+    };
+
+    class Noop : public ActivityBase {
+    public:
+        explicit Noop(string displayName, string entityName = "")
+            : displayName(Utility::HtmlEscapeString(displayName)), entityName(entityName) {}
+        Noop(const Noop &) = default;
+        Noop(Noop &&) = default;
 
+    private:
+        string displayName, entityName;
+        virtual rlib::string generateXaml() const override {
+            rlib::string xamlCode = templates::NOOP_XAML;
+            xamlCode.replace_once("__TEMPLATE_ARG_DisplayName", displayName);
+
+            auto entityXaml = this->entityName == "" ? "" : rlib::string(templates::ENTITY_DEF_TEMPLATE).replace("__TEMPLATE_ARG_EntityName", this->entityName);
+            xamlCode.replace_once("__TEMPLATE_ARG_EntityDefPlaceholder", entityXaml);
+            return xamlCode;
+        }
     };
 
     class Flow {
diff --git a/web/demo.cc b/web/demo.cc
index 90c061e..bd1e578 100644
--- a/web/demo.cc
+++ b/web/demo.cc
@@ -1,37 +1,39 @@
-
 // This is a DEMO. You may use any C++17 syntax here. 
 
-// 先演示一下定义一个Activity和ManualOperation的正常语法。
-//                  (ActivityName,   ClassName_In_Our_Code            , DependencyEntityName)
+// 先演示一下定义一个Activity和ManualOperation的基本语法。
+//          Activity(ActivityName,   ClassName_In_Our_Code            , DependencyEntityName)
 Activity HaveASleep ("HaveASleep", "FleetAGC.Activities.DelayActivity", "");
 HaveASleep.addInputSetting("Timespan", "60");
-//                           (DisplayName   ,   Message             , DependencyEntityName)
-ManualOperation AlertSomeone ("AlertSomeone", "This is some message", "");
+//            ManualOperation(DisplayName   ,   Message             ,  TeamId to alert   , DependencyEntityName)
+ManualOperation AlertSomeone ("AlertSomeone", "This is some message", "AzDNetDeployments", "");
+//         Noop(DisplayName      , DependencyEntityName)
+Noop DummyNode ("Just do nothing", "");
 // 但是如果你要定义很多很多Activity,建议下面的方法偷懒。
 
 ////////////////////////////////////////////////////////////////////////////////////////////////
 
 { // 偷懒方案1
-    // 这里假设你想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpan参数。
-    #define AC(name, entityName) \
-            auto name = Activity(#name, "FleetAGC.Activities.DelayActivity", entityName).addInputSetting("Timespan", "60");
+    // 这里假设你想用ManualOperation。
+    #define AC(teamid, entityName) auto teamid = ManualOperation("Alert" #teamid, "This is an alert to wake you up!", #teamid, #entityName);
+    // 这里也有一个带参数的DelayActivity的例子。
+    // #define AC(name, entityName) auto name = Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60");
        
     // 使用刚刚定义的偷懒宏。
-    AC(GridManager, "M365Poc.SPO.GridManager")
-    AC(AuthAndProvision, "M365Poc.SPO.AuthProvisioning")
-    AC(FarmsAndTennats, "")
-    AC(CSC , "")
-    AC(FastSearch , "")
-    AC(Microservices, "M365Poc.SPO.MicroServices")
-    AC(MonitorAndAlert, "M365Poc.SPO.MonitoringAlerting")
-    AC(SPOTooling, "M365Poc.SPO.SPOTooling")
-    AC(UXCDNFailover, "M365Poc.SPO.UXCDNFailover")
-    AC(ODFBSyncClient, "M365Poc.SPO.ODFBSyncClient")
+    AC(GridManagerTeam, M365Poc.SPO.GridManager)
+    AC(AuthAndProvisionTeam, M365Poc.SPO.AuthProvisioning)
+    AC(FarmsAndTennats, )
+    AC(CSC , )
+    AC(FastSearch , )
+    AC(Microservices, M365Poc.SPO.MicroServices)
+    AC(MonitorAndAlert, M365Poc.SPO.MonitoringAlerting)
+    AC(SPOTooling, M365Poc.SPO.SPOTooling)
+    AC(UXCDNFailover, M365Poc.SPO.UXCDNFailover)
+    AC(ODFBSyncClient, M365Poc.SPO.ODFBSyncClient)
     
     // 把定义好的Activity组合一下,其中箭头表示串行,竖线表示并行。
-    auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch);
+    auto block1 = GridManagerTeam >> FarmsAndTennats >> (CSC | FastSearch);
     auto block2 = Microservices | MonitorAndAlert;
-    auto completeFlow = block1 | AuthAndProvision | block2 >> SPOTooling | UXCDNFailover | ODFBSyncClient;
+    auto completeFlow = block1 | AuthAndProvisionTeam | block2 >> SPOTooling | UXCDNFailover | ODFBSyncClient;
     
     // 最后指定一下workflow的名字就可以了。
     println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow"));
@@ -53,3 +55,4 @@ if constexpr(false) { // 偷懒方案2
     // 最后指定一下workflow的名字就可以了。
     println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow"));
 }
+
diff --git a/workflows/another.cc b/workflows/another.cc
index 86e7cdc..4fef449 100644
--- a/workflows/another.cc
+++ b/workflows/another.cc
@@ -16,19 +16,19 @@ ManualOperation AlertSomeone ("AlertSomeone", "This is some message", "AzDNetDep
 { // 偷懒方案1
     // 这里假设你想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpan参数。
     #define AC(name, entityName) \
-            auto name = Activity(#name, "FleetAGC.Activities.DelayActivity", entityName).addInputSetting("Timespan", "60");
+            auto name = Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60");
        
     // 使用刚刚定义的偷懒宏。
-    AC(GridManager, "M365Poc.SPO.GridManager")
-    AC(AuthAndProvision, "M365Poc.SPO.AuthProvisioning")
-    AC(FarmsAndTennats, "")
-    AC(CSC , "")
-    AC(FastSearch , "")
-    AC(Microservices, "M365Poc.SPO.MicroServices")
-    AC(MonitorAndAlert, "M365Poc.SPO.MonitoringAlerting")
-    AC(SPOTooling, "M365Poc.SPO.SPOTooling")
-    AC(UXCDNFailover, "M365Poc.SPO.UXCDNFailover")
-    AC(ODFBSyncClient, "M365Poc.SPO.ODFBSyncClient")
+    AC(GridManager, M365Poc.SPO.GridManager)
+    AC(AuthAndProvision, M365Poc.SPO.AuthProvisioning)
+    AC(FarmsAndTennats, )
+    AC(CSC , )
+    AC(FastSearch , )
+    AC(Microservices, M365Poc.SPO.MicroServices)
+    AC(MonitorAndAlert, M365Poc.SPO.MonitoringAlerting)
+    AC(SPOTooling, M365Poc.SPO.SPOTooling)
+    AC(UXCDNFailover, M365Poc.SPO.UXCDNFailover)
+    AC(ODFBSyncClient, M365Poc.SPO.ODFBSyncClient)
     
     // 把定义好的Activity组合一下,其中箭头表示串行,竖线表示并行。
     auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch);
diff --git a/xaml-template.hpp b/xaml-template.hpp
index 3cbd406..5528d26 100644
--- a/xaml-template.hpp
+++ b/xaml-template.hpp
@@ -105,6 +105,10 @@ R"XAML(    <mwcwa:ManualOperation TaskId="__TEMPLATE_ARG_TaskId" DisplayName="__
     </mwcwa:ManualOperation>
 )XAML";
 
+constexpr auto NOOP_XAML = 
+R"XAML(    <mwcwa:NoOpsActivity DisplayName="__TEMPLATE_ARG_DisplayName" __TEMPLATE_ARG_EntityDefPlaceholder/>
+)XAML";
+
 }
 }
 
-- 
GitLab