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);
}
}
}
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);
}
}
}