Skip to content
Snippets Groups Projects
Commit 9bcf7e78 authored by Recolic K's avatar Recolic K
Browse files

update demo

parent 0ab8634f
No related branches found
No related tags found
No related merge requests found
Pipeline #851 passed with stage
in 8 seconds
...@@ -87,8 +87,8 @@ namespace CIS { ...@@ -87,8 +87,8 @@ namespace CIS {
class ManualOperation : public ActivityBase { class ManualOperation : public ActivityBase {
public: public:
explicit ManualOperation(string displayName, string message = "", string entityName = "") explicit ManualOperation(string displayName, string message = "", string teamId = "", string entityName = "")
: displayName(Utility::HtmlEscapeString(displayName)), messageInCSharp(Utility::HtmlEscapeString("\"" + message + "\"")), entityName(entityName), taskId(Utility::GenUUID()) {} : displayName(Utility::HtmlEscapeString(displayName)), messageInCSharp(Utility::HtmlEscapeString("\"" + message + "\"")), teamId(teamId), entityName(entityName), taskId(Utility::GenUUID()) {}
ManualOperation(const ManualOperation &another) ManualOperation(const ManualOperation &another)
: displayName(another.displayName), messageInCSharp(another.messageInCSharp), entityName(another.entityName), taskId(Utility::GenUUID()) {} : displayName(another.displayName), messageInCSharp(another.messageInCSharp), entityName(another.entityName), taskId(Utility::GenUUID()) {}
ManualOperation(ManualOperation &&) = default; ManualOperation(ManualOperation &&) = default;
...@@ -99,12 +99,13 @@ namespace CIS { ...@@ -99,12 +99,13 @@ namespace CIS {
} }
private: private:
string displayName, messageInCSharp, entityName; string displayName, messageInCSharp, teamId, entityName;
string taskId; string taskId;
virtual rlib::string generateXaml() const override { virtual rlib::string generateXaml() const override {
rlib::string xamlCode = templates::MANUAL_OPERATION_XAML; rlib::string xamlCode = templates::MANUAL_OPERATION_XAML;
xamlCode.replace_once("__TEMPLATE_ARG_DisplayName", displayName); xamlCode.replace_once("__TEMPLATE_ARG_DisplayName", displayName);
xamlCode.replace_once("__TEMPLATE_ARG_TaskId", this->taskId); xamlCode.replace_once("__TEMPLATE_ARG_TaskId", this->taskId);
xamlCode.replace_once("__TEMPLATE_ARG_TeamId", this->teamId);
xamlCode.replace_once("__TEMPLATE_ARG_CodeLines", messageInCSharp); xamlCode.replace_once("__TEMPLATE_ARG_CodeLines", messageInCSharp);
auto entityXaml = this->entityName == "" ? "" : rlib::string(templates::ENTITY_DEF_TEMPLATE).replace("__TEMPLATE_ARG_EntityName", this->entityName); auto entityXaml = this->entityName == "" ? "" : rlib::string(templates::ENTITY_DEF_TEMPLATE).replace("__TEMPLATE_ARG_EntityName", this->entityName);
......
// This is a DEMO. You may use any C++17 syntax here. // This is a DEMO. You may use any C++17 syntax here.
// 先演示一下定义一个Activity的正常语法。 // 先演示一下定义一个Activity和ManualOperation的正常语法。
// (ActivityName, ClassName_In_Our_Code , DependencyEntityName) // (ActivityName, ClassName_In_Our_Code , DependencyEntityName)
Activity HaveASleep ("HaveASleep", "FleetAGC.Activities.DelayActivity", ""); Activity HaveASleep ("HaveASleep", "FleetAGC.Activities.DelayActivity", "");
HaveASleep.addInputSetting("Timespan", "60"); 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组合一下,其中箭头表示串行,竖线表示并行。 { // 偷懒方案1
auto block1 = GridManager >> FarmsAndTennats >> (CSC | FastSearch); // 这里假设你想用FleetAGC.Activities.DelayActivity,并且想给他一个TimeSpan参数。
auto block2 = Microservices | MonitorAndAlert; #define AC(name, entityName) \
auto completeFlow = block1 | AuthAndProvision | block2 >> SPOTooling | UXCDNFailover | ODFBSyncClient; 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"));
}
#include <cis-workflow-gen/quick-include.hpp> #include <cis-workflow-gen/quick-include.hpp>
int main() { 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_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_proxy(x, Arg1, Arg2, FUNC, ...) FUNC
#define A(...) A_proxy(, ##__VA_ARGS__, A_2(__VA_ARGS__), A_1(__VA_ARGS__)) #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 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 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); 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
...@@ -96,7 +96,7 @@ constexpr auto STD_XAML_TAIL = "</Activity>"; ...@@ -96,7 +96,7 @@ constexpr auto STD_XAML_TAIL = "</Activity>";
constexpr auto MANUAL_OPERATION_XAML = 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> <mwcwa:ManualOperation.AdditionalContent>
<InArgument x:TypeArguments="x:String"> <InArgument x:TypeArguments="x:String">
<mca:CSharpValue x:TypeArguments="x:String">__TEMPLATE_ARG_CodeLines</mca:CSharpValue> <mca:CSharpValue x:TypeArguments="x:String">__TEMPLATE_ARG_CodeLines</mca:CSharpValue>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment