1. 更新了节点入参的条件判断:入参类型为IFlowContext(流程上下文)时禁止创建参数来源连接。

2. [Script]脚本节点移除了“getFlowContext”内置方法,改为自动识别入参名称为“context""flowContext""flow_context",如果是,将自动使用 IFlowContext 类型参数(运行时自动给定)
3. NodeFlow项目中,FlowLibraryService添加了GetType(string)以及TryGetType(string,Type?)方法,用于流程环境搜索外部加载的程序集类型。
This commit is contained in:
fengjiayi
2025-08-04 20:13:03 +08:00
parent bf987f4ef0
commit e389dbb967
10 changed files with 103 additions and 37 deletions

View File

@@ -223,7 +223,7 @@ namespace Serein.NodeFlow.Model.Nodes
}
IScriptInvokeContext scriptContext = new ScriptInvokeContext(flowContext);
IScriptInvokeContext scriptContext = new ScriptInvokeContext();
scriptContext.SetVarValue(dataName, data);
var result = await getValueScript.InterpreterAsync(scriptContext);
@@ -262,7 +262,7 @@ namespace Serein.NodeFlow.Model.Nodes
});
}
IScriptInvokeContext scriptContext = new ScriptInvokeContext(flowContext);
IScriptInvokeContext scriptContext = new ScriptInvokeContext();
scriptContext.SetVarValue(dataName, data);
var result = await conditionScript.InterpreterAsync(scriptContext);

View File

@@ -178,7 +178,7 @@ namespace Serein.NodeFlow.Model.Nodes
}
IScriptInvokeContext scriptContext = new ScriptInvokeContext(flowContext);
IScriptInvokeContext scriptContext = new ScriptInvokeContext();
scriptContext.SetVarValue(dataName, data);
var result = await getValueScript.InterpreterAsync(scriptContext);

View File

@@ -1,6 +1,7 @@
using Serein.Library;
using Serein.Library.Api;
using Serein.Library.Utils;
using Serein.NodeFlow.Services;
using Serein.Script;
using Serein.Script.Node.FlowControl;
using System;
@@ -49,7 +50,6 @@ namespace Serein.NodeFlow.Model.Nodes
public SingleScriptNode(IFlowEnvironment environment) : base(environment)
{
sereinScript = new SereinScript();
}
static SingleScriptNode()
@@ -195,7 +195,11 @@ namespace Serein.NodeFlow.Model.Nodes
ScriptArgInfo[] array = JsonHelper.Deserialize<ScriptArgInfo[]>(paramsTypeNameJson);
string returnTypeName = nodeInfo.CustomData?.ReturnTypeName ?? typeof(object);
Type?[] argType = array.Select(item => string.IsNullOrWhiteSpace(item.ArgType) ? null : Type.GetType(item.ArgType) ?? typeof(Unit)).ToArray();
var flowLibService = Env.IOC.Get<FlowLibraryService>();
Type?[] argType = array.Select(item => string.IsNullOrWhiteSpace(item.ArgType) ? null : flowLibService.GetType(item.ArgType) ?? typeof(Unit)).ToArray();
Type? resType = Type.GetType(returnTypeName);
for (int i = 0; i < paramCount; i++)
{
@@ -352,7 +356,7 @@ namespace Serein.NodeFlow.Model.Nodes
var @params = await flowCallNode.GetParametersAsync(context, token);
IScriptInvokeContext scriptContext = new ScriptInvokeContext(context);
IScriptInvokeContext scriptContext = new ScriptInvokeContext();
if (@params[0] is object[] agrDatas)
{

View File

@@ -6,6 +6,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive;
using System.Reflection;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
@@ -429,6 +430,11 @@ namespace Serein.NodeFlow.Model.Operations
return false;
}
if (typeof(IFlowContext).IsAssignableFrom(ToNode.MethodDetails.ParameterDetailss[ArgIndex].DataType))
{
SereinEnv.WriteLine(InfoType.WARN, $"连接失败, IFlowContext 流程上下文由运行环境自动注入,作为节点入参时不允许外部给定。起始节点[{FromNode.Guid}],目标节点[{FromNode.Guid}]。");
return false;
}
var toNodeArgSourceGuid = ToNode.MethodDetails.ParameterDetailss[ArgIndex].ArgDataSourceNodeGuid; // 目标节点对应参数可能已经有其它连接
var toNodeArgSourceType = ToNode.MethodDetails.ParameterDetailss[ArgIndex].ArgDataSourceType;