XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEWorkflow

【WinUI】XFE基于windows的工作流

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text.Json.Nodes;
using XFEWorkflow.Abstractions;
using XFEWorkflow.Core.Runtime;
using XFEWorkflow.Views;

namespace XFEWorkflow.Services;

internal static partial class UiSmokeTest
{
    private static async Task SmokeDebuggingAsync(string output)
    {
        var workflow = WorkflowTemplates.CreateGraph(); workflow.Name = "节点调试按键验收"; workflow.Enabled = false;
        workflow.Graph.Nodes[0].Id = "debug-start"; workflow.Graph.Nodes[1].Id = "debug-end";
        var body = WorkflowTemplates.CreateGraph().Graph;
        body.Nodes[0].Id = "debug-body-start"; body.Nodes[1].Id = "debug-body-end";
        body.Nodes.Insert(1, new() { Id = "debug-current", CapabilityId = "core.foreach.current", Name = "当前循环项", X = 620, Y = 180 });
        body.Nodes.Insert(2, new() { Id = "debug-log", CapabilityId = "core.log", Name = "输出当前项", X = 1080, Y = 180 });
        body.Nodes[^1].X = 1540;
        body.Edges = [new() { FromNode = "debug-body-start", ToNode = "debug-current" }, new() { FromNode = "debug-current", ToNode = "debug-log" }, new() { FromNode = "debug-log", ToNode = "debug-body-end" },
            new() { Kind = PortKind.Data, FromNode = "debug-current", FromPort = "item", ToNode = "debug-log", ToPort = "message" }];
        workflow.Graph.Nodes.Insert(1, new() { Id = "debug-loop", CapabilityId = "core.foreach", Name = "遍历数组", X = 620, Y = 180,
            Parameters = new() { ["items"] = new JsonArray("甲", "乙"), ["itemName"] = "item" }, Children = new() { ["body"] = body } });
        workflow.Graph.Edges = [new() { FromNode = "debug-start", ToNode = "debug-loop" }, new() { FromNode = "debug-loop", ToNode = "debug-end" }];
        var services = AppServices.Current; await services.Workflows.SaveAsync(workflow);
        var navigation = AppShellPage.Current!.ViewModel.NavigationViewService;
        try
        {
            navigation.NavigateTo<WorkflowEditorPage>();
            await WaitManagementAsync(() => Descendants<Frame>(App.MainWindow.Content).Any(x => x.Content is WorkflowEditorPage));
            var editor = await WorkflowEditorPage.Current!.OpenAsync(workflow.Id);
            await editor.SmokeDebugAsync(output);
        }
        finally
        {
            if (services.Runs.IsRunning(workflow.Id)) await services.Runs.StopAsync(workflow.Id);
            await WorkflowEditorPage.CloseOpenAsync(workflow.Id); navigation.NavigateTo<MainPage>(); await Task.Delay(250);
        }
    }
}