实际工作中遇到的技术难题与大家交流(工作流条件表达式计算部分),希望技术高手能给于指点
有一个审核的工作流程,默认情况下是 【杭州编辑审核】--》 【北京编辑审核】--》 【信息发布员审核】--》 【信息发布】
这个是一个典型的工作审核流程,我们可以简单的建立3个角色,来定义这个审核流程,也很容易可以达到目的,但是问题没这么简单了。
1:若是杭州编辑发布的,需要走 【杭州编辑审核】--》 【北京编辑审核】--》 【信息发布员审核】--》 【信息发布】 流程。
2:若是北京编辑发布的,需要走 【北京编辑审核】--》 【信息发布员审核】 --》 【信息发布】流程。
这下问题变得有些复杂了,还需要自动判断当前编辑人员是属于哪个组织的?说白了,就是需要有一个条件表达式。
// 例如程序想达到的运行效果如下,这个是审核流程的入口判断
if (this.userinfo.company == "杭州")
{
杭州的审核流程
}
if (this.userinfo.company == "北京")
{
北京的审核流程
}
例如现在设置了一个条件表达式 “UserInfo.Company == "杭州"” 那问题是,如何动态的让程序判断是否满足了这个条件?
我如何写程序才能道道
if (UserInfo.Company == "杭州")
{
杭州的审核流程
}
红色部分是可以自由定义的,我如何能做到,与我写固定的程序一样的效果?这个表达式是否能成立,用C#如何做才是最灵活的?客户可以自由定义的?
如何能让程序动态执行?红色部分又可以自由定义?请高手指点
例如红色这个表达式可以由用户自由定义的功能
UserInfo.Company == "杭州" && UserInfo.Age < 40
UserInfo.Company == "北京"
UserInfo.Age > 40 || UserInfo.Age < 30
工作流开始 --》 UserInfo.Company == "杭州"?--》 【杭州编辑审核】-》 【北京编辑审核】-》 【信息发布员审核】 -》 【信息发布】
|| ^
|| ||
V ||
==============================================
当然在程序里进行了硬编码,那是很容易的事情,但是红色部分想用户自己可以灵活定义,就难了,不知道如何做会更好?更灵活?
虚心向大家学习,当然红色部分的表达式可能更复杂,不是只是一个 == 条件的。
若有满意的例子程序可以提供的,愿意支付 500元辛苦费。
程序的要求:
1:能验证表达式是否成立,语法是否正确?出错了可以提示。
2:能正确保存表达式,显示表达式。
3:能正确解析表达式。
4: 不需要整个流程的定义,流程的实现,只需要条件表达式这部分的示意程序就可以了。
5: 只要C#语言的代码,其他语言的不要。
往往想得太高了,实际能力没那么强的,呵呵
先简单一点儿能实现,就很不错了
例如 天数 > 3 很容易就可以修改为
天数 > 3 && 天数 < 5
主要目的,不是为了绕过难题解决问题,而是就是解决这个问题,不需要变通的解决方法。
http://www.cnblogs.com/zeus/archive/2006/02/11/codedom.html
posted on 2010-09-06 23:03 吉日嘎拉 不仅权通用权限 阅读(717) 评论(29) 编辑 收藏
评论
1913275
#1楼 回复 引用 查看 如果是.net平台可以关注一下workflow,符合你的要求。
#2楼[楼主] 回复 引用 查看
workflow 里没有这个功能,没有客户自由定义的,
是需要在开发环境里写死才可以,在没有VS2008等开发环境时,就闹心了。
#4楼 回复 引用 查看
Activity可以复用,你可以通过替换Activity来复用工作流,或者用Expression Tree即表达式树来实现你所说的“不是只是一个 == 条件的”,不过我更推荐前者。
#6楼 回复 引用 查看
#8楼 回复 引用 查看
@吉日嘎拉 不仅权限管理
WF推出的目的就是解决您遇到的这类问题,或者另一类有限状态机模型,个人认为能用最合适的技术去实现需求是非常重要的。
如果您不想使用WF,针对您的需求,我想可以有如下设计。
设计接口IVerify,表示所有验证过程。对于每一个验证类型,做一个实现类。你可以实现一个抽象类LocalAreaVerify,实现IVerify,表示限定在某一区域审核,其内部逻辑就是==逻辑。
#9楼[楼主] 回复 引用 查看
@海上清风
怕你看不清楚,我又补上了几个条件表达式,目的是让可以能自由定义条件表达式。
1:能验证表达式是否成立,语法是否正确?出错了可以提示。
2:能正确保存表达式,显示表达式。
3:能正确解析表达式。
#12楼[楼主] 回复 引用 查看
#13楼 回复 引用 查看
最终的解决方案可能回事Expression Tree作为执行条件,Serialize作为保存方式将条件保存以便于下一次启动时继续。
#14楼[楼主] 回复 引用 查看
我最想要的是结果,就能解决上面的问题,表达式也友善,就愿意支付辛苦费,我自己没精力折腾哦,实在是没精力。
#15楼 回复 引用 查看
#17楼[楼主] 回复 引用 查看
#19楼 回复 引用 查看
就是简单的状态机,楼主的建模都是错的,
哦,看到了那段红字,我只能说,绕路的恰恰是楼主自己,
按照楼主的思路,业务规则稍微灵活点,开发工作会变得异常复杂
#21楼 回复 引用 查看
#23楼 回复 引用 查看
要想设置自由,得有自己解译此类似条件的功能,得有自己的流程标准走法,得有自己灵活设置此条件的功能,相应的权限设置吧。这些齐了,一个小型的工作流程管理系统就出来了。
#25楼[楼主] 回复 引用 查看
在执行工作流的时候设置 :userCompany的值。
如setContext("userCompany","北京").
Java里有个IkExpression 是做工作流定义表达式引擎的,C#应该也有。
这个表达式解析部分要是你自己写得话,相当于写个小型的语言编译器。其实就是在C#里面执行自定义脚本。
#27楼 回复 引用 查看
#28楼 回复 引用 查看
你还可以把流程做成方案 .那么个人的信息在加上方案.
就可以满足不同用户走不同的审核流程.
个人愚见.反正以前我的审核流程是这样做的.呵呵,希望高手指点下.少给点打击
实际工作中遇到的技术难题与大家交流(工作流条件表达式计算部分),希望技术高手能给于指点相关推荐
- 总结工作中nginx、git、linux、ES、lamada表达式、sql
nginx 启动命令:start nginx 或者 nginx.exe 停止命令:nginx.exe -s stop 或者 nginx.exe -s quit 重启命令:nginx.exe -s re ...
- 新一代计算机速录技术 pdf,4645.职业技术培训教材:新一代计算机速录技术(五笔).pdf...
<> 猛点这里下载全部内容 目录: 第一章绪论 第一节速录与打字.速记的区别 第二节五笔速录与五笔打字的区别 第二章飞耀五笔速录培训要点 第一节飞耀速录教学的一般流程 第二节速录教学的特点 ...
- 遥感在计算机领域的应用,遥感技术在测绘工作中的应用分析
孟亭记 摘 要:在信息化发展的当下,遥感技术是众多新技术中的一种,在测绘工作中发挥着重要作用.在科学技术的快速发展中,计算机技术与互联网技术不断得到普及,大大增加了应用范围,促使遥感技术在测绘工作中的 ...
- 关于征集2020重大科学问题和工程技术难题的通知
来源:中国指挥与控制学会 学会全体会员: 为研判未来科技发展趋势.前瞻谋划和布局前沿科技领域与方向,瞄准世界科技前沿,推进世界科技强国建设,根据<中国科协办公厅关于征集2020重大科学问题和工程 ...
- 程序员日常工作中如何正确的偷懒?
这是北京的雪,昨天刚拍的 又是一个艳阳天,张大胖像一个天真无邪的孩子屁颠屁颠的欢快的走进公司,做到办公桌前,深情的打开了陪伴自己多年的电脑,如往常一样按部就班的和他玩耍了起来,大老远就听到张大胖那里噼 ...
- 宁大计算机科技有限公司,5G时代即将来临 宁大科研团队突破技术难题
"5G时代即将来临 宁大科研团队突破技术难题" 如果说从1G到4G解决的是人与人之间的沟通,那么5G将解决的是人与物.物与物之间的沟通.5月16日上午,浙江移动宣布打造" ...
- 计算机音乐柯蒂斯pdf,探究媒体条件下计算机音乐制作技术的应用.pdf
Music 探究媒体条件下计算机音乐制作技术的应用 ■文/ 付豪 [摘要]在媒体条件下,计算机音乐制作技 别.计算机音乐在媒体条件下,为音乐艺术开辟了一条新 术持续地在发展.进步.上个世纪八十年代初, ...
- 工作中如何做好技术积累
引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...
- 工作中如何做好技术积累『转载-保持学习的空杯心态』
引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...
最新文章
- java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- python降级-关于卸载:如何从Python 3.2降级到2.7?
- 无障碍开发(二)之ARIA role属性
- Ubuntu平台 Qt 5.x 安装方法
- Java使用多线程发送消息
- 分布式监控之Zabbix-Server
- 试解析Tomcat运行原理(一)--- socket通讯(转)
- httpurlconnect设置中文参数_CNC机床参数的设置及报警解除,赶紧收藏吧!
- setsockopt函数功能介绍
- 日本程序开发式自定义的malloc/free函数(一)-外部式样书(外部仕様書)
- 前缀和(树状数组)构造桶数组的用法
- oracle高性能分页,Oracle中高性能分页包
- 的优先级大小_cache也有优先级
- ad15的stc元件库_altium designer常用元件库和封装库下载-非常全面初学者有福了
- 【Allwinner】---搭建 全志平台 开发环境 史上最详细
- 正点原子STM32(基于标准库)
- C++入门——实现十字消除游戏
- 免费英文在线翻译-英文自动翻译
- java输出格林威治时间_Java之格林威治时间格式转换成北京时间格式
- 出现VW自适应方案报错already has a ‘content‘ property, give up to overwrite it的原因及解决办法
热门文章
- matlab求解一维波动方程,一维波动方程matlab
- 生信 使用SRA Toolkit下载SSR数据
- NetApp AFF A 系列
- 我国社保待遇标准将逐步与物价挂钩
- 薛家计算机培训,薛家ug编程网络培训
- NBU 7.0异机恢复Linux备份文件的方法(一)
- NBU-备份错误代码查询
- Fortran笔记,Module
- 【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结
- mht 转换 html java,使用java将网页保存为mht格式(2)