C# 编写脚本以在程序内执行重复的业务任务
我有一个包含起始值和结束值的类任务的完成C# 编写脚本以在程序内执行重复的业务任务,c#,.net-4.0,C#,.net 4.0,我有一个包含起始值和结束值的类任务的完成 public class WorkPackage { public int Id { get; set; } public string Name { get; set; } public DateTime FromTime { get; set; } public DateTime ToTime { get; set; } } 我还显示保存的值如下所示(根据FromTime分组) 最终用户可以 通过拖放将一个
public class WorkPackage
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime FromTime { get; set; }
public DateTime ToTime { get; set; }
}
我还显示保存的值如下所示(根据FromTime
分组)
最终用户可以
工作包从一个月移动到另一个月
工作包
拆分为两个或多个工作包
spublic void MoveWorkPackageToMonth(WorkPackage wp, int month)
{
....
}
public List<WorkPackage> SplitWorkPackage(WorkPackage wp)
{
....
}
有图书馆帮我吗?或者我必须定义自己的自定义业务语言?(我使用了
.Net4
)NuGet软件包ITVComponents.Scripting.CScript提供了一个支持解释器和编译代码的脚本引擎。
该语法是从JavaScript派生的,带有一些特殊的扩展,以支持动态类型加载和本机脚本部分。
不幸的是,目前还没有文档,但我正在编写
基本上,对于您想要实现的目标,您可以使用以下代码:
ExpressionParser.ParseBlock(yourScript, yourObject, s => DefaultCallbacks.PrepareDefaultCallbacks(s.Scope, s.ReplSession));
其中,您的对象将是实现方法MoveWorkPackageToMonth的对象,
SplitWorkPackage,一种查找包(FindPackage?)的方法,以及整数属性和脚本
MoveWorkPackageToMonth(FindPackage(“Package1的名称”),4月);将工作包移动到Month(FindPackage(“Package2的名称”),2月)代码>
此代码将被解释,因此,如果您有大量操作要执行,它可能会很慢。脚本是否显示给用户?如果不是,一个简单的解决方案可能是为操作创建一个数据类(例如,类PackageMovement{int-PackageId;int-SourceMonth;int-destmount;}类PackageSplit{int-PackageId;}
并使用内置序列化程序(XML或JSON)之一对其进行序列化@Heinzi:user想要查看脚本,因为他想要选择我要查看的操作。在这种情况下,自定义语言可能是最合适的解决方案。由于语言相当简单,我认为您不需要一个完整的lexer/paser生成器。一个简单的基于正则表达式的手工编写的解析器应该足够了:为每个操作编写一个正则表达式您的命令(即MoveRegex和SplitRegex),其中包括作为命名组的参数。然后在;
或换行符上拆分您的输入,然后依次尝试每个正则表达式。
ExpressionParser.ParseBlock(yourScript, yourObject, s => DefaultCallbacks.PrepareDefaultCallbacks(s.Scope, s.ReplSession));