如何解决编写脚本以在程序中执行重复的业务任务
我有以下类保存了一个任务的开始和结束值
public class WorkPackage
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime FromTime { get; set; }
public DateTime ToTime { get; set; }
}
我也将保存的值显示如下(基于FromTime
分组)
最终用户可以
- 通过拖放将一个
WorkPackage
从一个月移到另一个月。 - 根据某些规则将一个
WorkPackage
拆分为两个或多个WorkPackage
。
所以我有以下方法:
public void MoveWorkPackageToMonth(WorkPackage wp,int month)
{
....
}
public List<WorkPackage> SplitWorkPackage(WorkPackage wp)
{
....
}
每次用户对 WorkPackage
列表进行大量更改,但出于业务原因,WorkPackage
列表可能每隔几天就会重建一次,并且用户希望在重新创建时执行相同的操作 -创建了 WorkPackage
列表,所以我需要将用户的作品保存在数据库中,以便在重新创建的 WorkPackage
列表上重复相同的作品。
我想添加一些类似脚本语言的东西来将用户作品保存为字符串,如下所示:
"Move(WP1){From(January) To(April)};SPLIT(WP5);"
有什么图书馆可以帮助我吗?或者我必须定义自己的自定义业务语言?(我使用了 .Net4
)
解决方法
NuGet 包 ITVComponents.Scripting.CScript 提供了一个支持解释和编译代码的脚本引擎。 语法源自 JavaScript,带有一些特殊的扩展,以启用动态类型加载和本机脚本部分。 不幸的是,目前没有文档,但我正在处理它..
基本上,对于您想要实现的目标,您可以使用以下代码:
ExpressionParser.ParseBlock(yourScript,yourObject,s => DefaultCallbacks.PrepareDefaultCallbacks(s.Scope,s.ReplSession));
其中 yourObject 将是实现方法 MoveWorkPackageToMonth 的对象, SplitWorkPackage,一种查找包(FindPackage?)和月份 als 整数属性的方法,您的脚本看起来像
MoveWorkPackageToMonth(FindPackage("nameOfPackage1"),April); MoveWorkPackageToMonth(FindPackage("nameOfPackage2"),February); ...
此代码将在解释后工作,因此,如果您要执行大量操作,它可能会很慢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。