From 9bcf7e789cfa59fdc05b3538d9d77d581bcef59b Mon Sep 17 00:00:00 2001 From: Recolic K <bensl@microsoft.com> Date: Mon, 17 May 2021 14:31:44 +0800 Subject: [PATCH] update demo --- activity.hpp | 7 +++-- web/demo.cc | 68 +++++++++++++++++++++++++++++--------------- workflows/another.cc | 52 ++++++++++++++++++++++++++++++--- xaml-template.hpp | 2 +- 4 files changed, 98 insertions(+), 31 deletions(-) diff --git a/activity.hpp b/activity.hpp index d9e559c..6d23d02 100644 --- a/activity.hpp +++ b/activity.hpp @@ -87,8 +87,8 @@ namespace CIS { class ManualOperation : public ActivityBase { public: - explicit ManualOperation(string displayName, string message = "", string entityName = "") - : displayName(Utility::HtmlEscapeString(displayName)), messageInCSharp(Utility::HtmlEscapeString("\"" + message + "\"")), entityName(entityName), taskId(Utility::GenUUID()) {} + explicit ManualOperation(string displayName, string message = "", string teamId = "", string entityName = "") + : displayName(Utility::HtmlEscapeString(displayName)), messageInCSharp(Utility::HtmlEscapeString("\"" + message + "\"")), teamId(teamId), entityName(entityName), taskId(Utility::GenUUID()) {} ManualOperation(const ManualOperation &another) : displayName(another.displayName), messageInCSharp(another.messageInCSharp), entityName(another.entityName), taskId(Utility::GenUUID()) {} ManualOperation(ManualOperation &&) = default; @@ -99,12 +99,13 @@ namespace CIS { } private: - string displayName, messageInCSharp, entityName; + string displayName, messageInCSharp, teamId, entityName; string taskId; virtual rlib::string generateXaml() const override { rlib::string xamlCode = templates::MANUAL_OPERATION_XAML; xamlCode.replace_once("__TEMPLATE_ARG_DisplayName", displayName); xamlCode.replace_once("__TEMPLATE_ARG_TaskId", this->taskId); + xamlCode.replace_once("__TEMPLATE_ARG_TeamId", this->teamId); xamlCode.replace_once("__TEMPLATE_ARG_CodeLines", messageInCSharp); auto entityXaml = this->entityName == "" ? "" : rlib::string(templates::ENTITY_DEF_TEMPLATE).replace("__TEMPLATE_ARG_EntityName", this->entityName); diff --git a/web/demo.cc b/web/demo.cc index e44657e..90c061e 100644 --- a/web/demo.cc +++ b/web/demo.cc @@ -1,33 +1,55 @@ // This is a DEMO. You may use any C++17 syntax here. -// 先演示一下定义一个Activityçš„æ£å¸¸è¯æ³•ã€‚ +// 先演示一下定义一个Activityå’ŒManualOperationçš„æ£å¸¸è¯æ³•ã€‚ // (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", ""); +// ä½†æ˜¯å¦‚æžœä½ è¦å®šä¹‰å¾ˆå¤šå¾ˆå¤šActivity,建议下é¢çš„方法å·æ‡’。 -// ä½†æ˜¯å¦‚æžœä½ è¦å®šä¹‰å¾ˆå¤šå¾ˆå¤šActivity,建议用这ç§æ–¹æ³•å·æ‡’。 -#define DEFINE_ACTIVITY(name, entityName) \ - Activity name (#name, "FleetAGC.Activities.DelayActivity", entityName); \ - name.addInputSetting("Timespan", "60"); - -// 使用刚刚定义的å·æ‡’å®ã€‚ -DEFINE_ACTIVITY(GridManager, "M365Poc.SPO.GridManager") -DEFINE_ACTIVITY(AuthAndProvision, "M365Poc.SPO.AuthProvisioning") -DEFINE_ACTIVITY(FarmsAndTennats, "") -DEFINE_ACTIVITY(CSC , "") -DEFINE_ACTIVITY(FastSearch , "") -DEFINE_ACTIVITY(Microservices, "M365Poc.SPO.MicroServices") -DEFINE_ACTIVITY(MonitorAndAlert, "M365Poc.SPO.MonitoringAlerting") -DEFINE_ACTIVITY(SPOTooling, "M365Poc.SPO.SPOTooling") -DEFINE_ACTIVITY(UXCDNFailover, "M365Poc.SPO.UXCDNFailover") -DEFINE_ACTIVITY(ODFBSyncClient, "M365Poc.SPO.ODFBSyncClient") +//////////////////////////////////////////////////////////////////////////////////////////////// -// 把定义好的Activity组åˆä¸€ä¸‹ï¼Œå…¶ä¸ç®å¤´è¡¨ç¤ºä¸²è¡Œï¼Œç«–线表示并行。 -auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch); -auto block2 = Microservices | MonitorAndAlert; -auto completeFlow = block1 | AuthAndProvision | block2 >> SPOTooling | UXCDNFailover | ODFBSyncClient; +{ // å·æ‡’方案1 + // 这里å‡è®¾ä½ 想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpanå‚数。 + #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") + + // 把定义好的Activity组åˆä¸€ä¸‹ï¼Œå…¶ä¸ç®å¤´è¡¨ç¤ºä¸²è¡Œï¼Œç«–线表示并行。 + auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch); + auto block2 = Microservices | MonitorAndAlert; + auto completeFlow = block1 | AuthAndProvision | block2 >> SPOTooling | UXCDNFailover | ODFBSyncClient; + + // 最åŽæŒ‡å®šä¸€ä¸‹workflowçš„åå—å°±å¯ä»¥äº†ã€‚ + println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow")); +} -// 最åŽæŒ‡å®šä¸€ä¸‹workflowçš„åå—å°±å¯ä»¥äº†ã€‚ -println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow")); +//////////////////////////////////////////////////////////////////////////////////////////////// +if constexpr(false) { // å·æ‡’方案2 + #define A_2(name, entityName) (Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60")) + #define A_1(name) A_2(name, ) + #define A_proxy(x, Arg1, Arg2, FUNC, ...) FUNC + #define A(...) A_proxy(, ##__VA_ARGS__, A_2(__VA_ARGS__), A_1(__VA_ARGS__)) + + // 和上一个例åä¸€æ ·çš„è¯æ³•ï¼Œåªä¸è¿‡è¿™æ¬¡æ›´æ‡’了。 + auto block1 = A(GridManager, M365Poc.SPO.GridManager) >> A(FarmsAndTennats) >> (A(CSC) | A(FastSearch)); + auto block2 = A(Microservices, M365Poc.SPO.MicroServices) | A(MonitorAndAlert, M365Poc.SPO.MonitoringAlerting); + auto completeFlow = block1 | A(AuthAndProvision, M365Poc.SPO.AuthProvisioning) | block2 | A(SPOTooling, M365Poc.SPO.SPOTooling) | A(UXCDNFailover, M365Poc.SPO.UXCDNFailover) | A(ODFBSyncClient, M365Poc.SPO.ODFBSyncClient); + + // 最åŽæŒ‡å®šä¸€ä¸‹workflowçš„åå—å°±å¯ä»¥äº†ã€‚ + println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow")); +} diff --git a/workflows/another.cc b/workflows/another.cc index d0a01ae..86e7cdc 100644 --- a/workflows/another.cc +++ b/workflows/another.cc @@ -1,15 +1,59 @@ #include <cis-workflow-gen/quick-include.hpp> int main() { +// This is a DEMO. You may use any C++17 syntax here. + +// 先演示一下定义一个Activityå’ŒManualOperationçš„æ£å¸¸è¯æ³•ã€‚ +// (ActivityName, ClassName_In_Our_Code , DependencyEntityName) +Activity HaveASleep ("HaveASleep", "FleetAGC.Activities.DelayActivity", ""); +HaveASleep.addInputSetting("Timespan", "60"); +// (DisplayName , Message , TeamId to alert , DependencyEntityName) +ManualOperation AlertSomeone ("AlertSomeone", "This is some message", "AzDNetDeployments", ""); +// ä½†æ˜¯å¦‚æžœä½ è¦å®šä¹‰å¾ˆå¤šå¾ˆå¤šActivity,建议下é¢çš„方法å·æ‡’。 + +//////////////////////////////////////////////////////////////////////////////////////////////// + +{ // å·æ‡’方案1 + // 这里å‡è®¾ä½ 想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpanå‚数。 + #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") + + // 把定义好的Activity组åˆä¸€ä¸‹ï¼Œå…¶ä¸ç®å¤´è¡¨ç¤ºä¸²è¡Œï¼Œç«–线表示并行。 + auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch); + auto block2 = Microservices | MonitorAndAlert; + auto completeFlow = block1 | AuthAndProvision | block2 >> SPOTooling | UXCDNFailover | ODFBSyncClient; + + // 最åŽæŒ‡å®šä¸€ä¸‹workflowçš„åå—å°±å¯ä»¥äº†ã€‚ + println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow")); +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +if constexpr(false) { // å·æ‡’方案2 #define A_2(name, entityName) (Activity(#name, "FleetAGC.Activities.DelayActivity", #entityName).addInputSetting("Timespan", "60")) - #define A_1(name) A_2(name, "") + #define A_1(name) A_2(name, ) #define A_proxy(x, Arg1, Arg2, FUNC, ...) FUNC #define A(...) A_proxy(, ##__VA_ARGS__, A_2(__VA_ARGS__), A_1(__VA_ARGS__)) - + + // 和上一个例åä¸€æ ·çš„è¯æ³•ï¼Œåªä¸è¿‡è¿™æ¬¡æ›´æ‡’了。 auto block1 = A(GridManager, M365Poc.SPO.GridManager) >> A(FarmsAndTennats) >> (A(CSC) | A(FastSearch)); auto block2 = A(Microservices, M365Poc.SPO.MicroServices) | A(MonitorAndAlert, M365Poc.SPO.MonitoringAlerting); auto completeFlow = block1 | A(AuthAndProvision, M365Poc.SPO.AuthProvisioning) | block2 | A(SPOTooling, M365Poc.SPO.SPOTooling) | A(UXCDNFailover, M365Poc.SPO.UXCDNFailover) | A(ODFBSyncClient, M365Poc.SPO.ODFBSyncClient); - - println(to_file("SPOBuildoutPOCWorkflow.xaml"), completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow")); + + // 最åŽæŒ‡å®šä¸€ä¸‹workflowçš„åå—å°±å¯ä»¥äº†ã€‚ + println(completeFlow.generateXaml("FleetAGC.Workflows.SPOBuildoutPOCWorkflow")); } +} \ No newline at end of file diff --git a/xaml-template.hpp b/xaml-template.hpp index a849878..3cbd406 100644 --- a/xaml-template.hpp +++ b/xaml-template.hpp @@ -96,7 +96,7 @@ constexpr auto STD_XAML_TAIL = "</Activity>"; constexpr auto MANUAL_OPERATION_XAML = -R"XAML( <mwcwa:ManualOperation DeprecatedTaskId="{x:Null}" TaskId="__TEMPLATE_ARG_TaskId" DisplayName="__TEMPLATE_ARG_DisplayName" MonitoringSystems="icm" WaitUntilFinish="True" __TEMPLATE_ARG_EntityDefPlaceholder> +R"XAML( <mwcwa:ManualOperation TaskId="__TEMPLATE_ARG_TaskId" DisplayName="__TEMPLATE_ARG_DisplayName" MonitoringSystems="icm" WaitUntilFinish="True" mwcwcc:OwningTeamPropertyBinder.OwningTeamId="__TEMPLATE_ARG_TeamId" __TEMPLATE_ARG_EntityDefPlaceholder> <mwcwa:ManualOperation.AdditionalContent> <InArgument x:TypeArguments="x:String"> <mca:CSharpValue x:TypeArguments="x:String">__TEMPLATE_ARG_CodeLines</mca:CSharpValue> -- GitLab