有一个审核的工作流程,默认情况下是 【杭州编辑审核】--》 【北京编辑审核】--》 【信息发布员审核】--》 【信息发布】

这个是一个典型的工作审核流程,我们可以简单的建立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,符合你的要求。

2010-09-06 23:17 | Ink@Snow      

#5楼[楼主]  回复 引用 查看 

@Ink@Snow

主要是还是想靠 普通的C#程序实现, 不是通过微软的WF。

2010-09-06 23:26 | 吉日嘎拉 不仅权限管理      

#6楼  回复 引用 查看 

关于你这个问题,解决方法挺简单的。你在数据库中定义一个标准流程表,【杭州编辑审核】-》 【北京编辑审核】-》 【信息发布员审核】 -》 【信息发布】四个流程的定义;再定义一个用户流程表,如包括杭州发贴,北京发贴;定义一个用户流程子表,如杭州发贴流程就包括【杭州编辑审核】-》 【北京编辑审核】-》 【信息发布员审核】三个子记录;再为杭州编辑设定有杭州编辑审核的权限,北京编辑有北京编辑审核的权限;再建一个地区和流程的关联表。

用户发贴的时候,判断用户的所属的地区,根所用户的地区从地区和流程的关联表中找到关联的流程,将该贴子的下一步流程设为该关联的流程,如杭州编辑审核。杭州编辑登录系统后,根据权限就会看到该流程中的贴子,审核后转入下一流程。同理,北京用户发贴后,根据地区和流程的关联表找到关联程序,将该巾子的下一步流程设为北京编辑审核,北京编辑登录系统后,根据权限就可以看到要它审核的贴子,而杭州编辑登录后,则看不到。

2010-09-06 23:27 | 海上清风      

#8楼  回复 引用 查看 

@吉日嘎拉 不仅权限管理
WF推出的目的就是解决您遇到的这类问题,或者另一类有限状态机模型,个人认为能用最合适的技术去实现需求是非常重要的。
如果您不想使用WF,针对您的需求,我想可以有如下设计。

设计接口IVerify,表示所有验证过程。对于每一个验证类型,做一个实现类。你可以实现一个抽象类LocalAreaVerify,实现IVerify,表示限定在某一区域审核,其内部逻辑就是==逻辑。

或者使用策略模式,设计接口IVerifyCondition,设计类VerifyEntity,其构造函数接受IVerifyCondition表示判断验证条件,Action<T...>表示验证通过执行的动作。

您觉得如何?

2010-09-06 23:32 | Ink@Snow      

#10楼  回复 引用 查看 

学习中,盼高见!

2010-09-06 23:33 | ffffff      

#11楼[楼主]  回复 引用 查看 

@Ink@Snow
你这个回复比较贴切,就想要一个比较完美一点儿的代码例子。

2010-09-06 23:33 | 吉日嘎拉 不仅权限管理      

#12楼[楼主]  回复 引用 查看 

NETET之门槛 23:30:26
这个条件,在流程中是常用的
我们的流程,现在有前驱/后劲
后驱
实际上就是这个意思
前驱:满足什么条件下跳到某个地方
后驱:满足什么条件时可以往下跳
如果你的条件,是固定的,比如:仅是判断人员所在的地区,那这上事情好办
也可以给用户设置
但如果必须给用户设置的条件不仅是一个地区,比如他可以设置人员是北京的,还可以设置是男性的话,还可以设置如果是女性,但是科长,像这种情况,就无法给用户设置
只能通过程序员来写程序,或者是通过存储过程/或者是通过实现某个方法再通过反射调用
我们的流程里面,为响应前驱事件和后驱事件,以前是使用存储过程,在前驱/后驱条件表里面,添加一个条件语句,这个语句即存储过程名,然后在节点运行到这里的时候,判断是否存在条件语句,如果有则执行
现在,修改为存储一个方法名,如果有,则通过反射的形式执行该方法
Ψ吉日嘎拉 23:36:24
嗯,通过反射的形式执行该方法,我觉得很可行

2010-09-06 23:37 | 吉日嘎拉 不仅权限管理      

#13楼  回复 引用 查看 

@吉日嘎拉 不仅权限管理

如果真的有需要“用户自定审计条件”的需求,那么应当考虑到用户并不懂得程序语言,甚至只会点点鼠标的情况,那么您应该使用Expression Tree来创建条件,我之前做过这样的需求,不过是对一些数据进行复杂表达式查询的。Expression Tree的相关文章网上有很多,LZ可以自行查阅。

最终的解决方案可能回事Expression Tree作为执行条件,Serialize作为保存方式将条件保存以便于下一次启动时继续。

最后我还是再次推荐WF,您可以将Expression Tree和WF结合,WF本身提供持久化功能,甚至可以在审计中间的某个阶段持久化,也就是说,可能轮到北京的某人审计,但是该人不在办公室,几天之后才回来,那么可以把这个流持久化到数据库中,直到他回来继续执行。

2010-09-06 23:39 | Ink@Snow      

#17楼[楼主]  回复 引用 查看 

@trenhui

http://www.codeplex.com/Flee

5: 只要C#语言的代码,其他语言的不要

2010-09-07 00:00 | 吉日嘎拉 不仅权限管理      

#20楼[楼主]  回复 引用 查看 

@缪军
意思是用微软的工作流?

2010-09-07 06:36 | 吉日嘎拉 不仅权限管理      

#22楼  回复 引用 查看 

PowerShell

2010-09-07 08:51 | 阿水      

#25楼[楼主]  回复 引用 查看 

王彦锋 2010/9/7 8:37:38

这个我以前只搞过java版的。这个红色部分是工作流规则定义,你可以用脚本语言在工作流定义部分里面定义。
UserInfo.Company 这些作为工作流运行的上下文环境的一部分。在工作流执行的时候赋值。
就像这样, 在工作流定义里用脚本修表达式:
if( :userCompany=="杭州") ....

在执行工作流的时候设置 :userCompany的值。
如setContext("userCompany","北京").

Java里有个IkExpression 是做工作流定义表达式引擎的,C#应该也有。

这个表达式解析部分要是你自己写得话,相当于写个小型的语言编译器。其实就是在C#里面执行自定义脚本。

Ψ吉日嘎拉 9:32:35
Java 还这么强啊

2010-09-07 09:34 | 吉日嘎拉 不仅权限管理      

#27楼  回复 引用 查看 

工作流离不开组织架构。工作流程当中包含的逻辑一种是业务逻辑,这种一般需要编码实现;另一种就是跟组织架构层次相关的逻辑,这种逻辑处理可以通过组织架构树形层次关系来处理。像楼主的问题通过组织架构就能很好的处理(流程第二步取发起人所在城市编辑审核,第三步取北京编辑审核【这里选不允许重复审批】,当第二步发起人所在城市编辑审核所取到的审批人也是北京编辑的时候,则到第三步的时候判断一下当前取到的审批人前面是否有审批过,有则跳过当前环节)。
发起流程
|
发起人所在城市编辑审核
|
北京编辑审核[不允许重复审批]
|
信息发布员审核
|
信息发布

2010-09-08 09:27 | ee11      

实际工作中遇到的技术难题与大家交流(工作流条件表达式计算部分),希望技术高手能给于指点相关推荐

  1. 总结工作中nginx、git、linux、ES、lamada表达式、sql

    nginx 启动命令:start nginx 或者 nginx.exe 停止命令:nginx.exe -s stop 或者 nginx.exe -s quit 重启命令:nginx.exe -s re ...

  2. 新一代计算机速录技术 pdf,4645.职业技术培训教材:新一代计算机速录技术(五笔).pdf...

    <> 猛点这里下载全部内容 目录: 第一章绪论 第一节速录与打字.速记的区别 第二节五笔速录与五笔打字的区别 第二章飞耀五笔速录培训要点 第一节飞耀速录教学的一般流程 第二节速录教学的特点 ...

  3. 遥感在计算机领域的应用,遥感技术在测绘工作中的应用分析

    孟亭记 摘 要:在信息化发展的当下,遥感技术是众多新技术中的一种,在测绘工作中发挥着重要作用.在科学技术的快速发展中,计算机技术与互联网技术不断得到普及,大大增加了应用范围,促使遥感技术在测绘工作中的 ...

  4. 关于征集2020重大科学问题和工程技术难题的通知

    来源:中国指挥与控制学会 学会全体会员: 为研判未来科技发展趋势.前瞻谋划和布局前沿科技领域与方向,瞄准世界科技前沿,推进世界科技强国建设,根据<中国科协办公厅关于征集2020重大科学问题和工程 ...

  5. 程序员日常工作中如何正确的偷懒?

    这是北京的雪,昨天刚拍的 又是一个艳阳天,张大胖像一个天真无邪的孩子屁颠屁颠的欢快的走进公司,做到办公桌前,深情的打开了陪伴自己多年的电脑,如往常一样按部就班的和他玩耍了起来,大老远就听到张大胖那里噼 ...

  6. 宁大计算机科技有限公司,5G时代即将来临 宁大科研团队突破技术难题

    "5G时代即将来临 宁大科研团队突破技术难题" 如果说从1G到4G解决的是人与人之间的沟通,那么5G将解决的是人与物.物与物之间的沟通.5月16日上午,浙江移动宣布打造" ...

  7. 计算机音乐柯蒂斯pdf,探究媒体条件下计算机音乐制作技术的应用.pdf

    Music 探究媒体条件下计算机音乐制作技术的应用 ■文/ 付豪 [摘要]在媒体条件下,计算机音乐制作技 别.计算机音乐在媒体条件下,为音乐艺术开辟了一条新 术持续地在发展.进步.上个世纪八十年代初, ...

  8. 工作中如何做好技术积累

    引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...

  9. 工作中如何做好技术积累『转载-保持学习的空杯心态』

    引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...

最新文章

  1. java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
  2. python降级-关于卸载:如何从Python 3.2降级到2.7?
  3. 无障碍开发(二)之ARIA role属性
  4. Ubuntu平台 Qt 5.x 安装方法
  5. Java使用多线程发送消息
  6. 分布式监控之Zabbix-Server
  7. 试解析Tomcat运行原理(一)--- socket通讯(转)
  8. httpurlconnect设置中文参数_CNC机床参数的设置及报警解除,赶紧收藏吧!
  9. setsockopt函数功能介绍
  10. 日本程序开发式自定义的malloc/free函数(一)-外部式样书(外部仕様書)
  11. 前缀和(树状数组)构造桶数组的用法
  12. oracle高性能分页,Oracle中高性能分页包
  13. 的优先级大小_cache也有优先级
  14. ad15的stc元件库_altium designer常用元件库和封装库下载-非常全面初学者有福了
  15. 【Allwinner】---搭建 全志平台 开发环境 史上最详细
  16. 正点原子STM32(基于标准库)
  17. C++入门——实现十字消除游戏
  18. 免费英文在线翻译-英文自动翻译
  19. java输出格林威治时间_Java之格林威治时间格式转换成北京时间格式
  20. 出现VW自适应方案报错already has a ‘content‘ property, give up to overwrite it的原因及解决办法

热门文章

  1. matlab求解一维波动方程,一维波动方程matlab
  2. 生信 使用SRA Toolkit下载SSR数据
  3. NetApp AFF A 系列
  4. 我国社保待遇标准将逐步与物价挂钩
  5. 薛家计算机培训,薛家ug编程网络培训
  6. NBU 7.0异机恢复Linux备份文件的方法(一)
  7. NBU-备份错误代码查询
  8. Fortran笔记,Module
  9. 【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结
  10. mht 转换 html java,使用java将网页保存为mht格式(2)