解决方案 »
- Panel中的CalendarExtender显示位置问题
- 字符串问题
- 服务器控件的引用
- 发布的asp.net网站,用IE 8 浏览器显示时只有一半
- 如下的一段代码每段代码各显示什么功能?如何加以引用?如何举一反三?
- 用Excel如何实现这样的报表???高手请进!!!!!
- 在线等 嵌入google搜索!!!!!!!!!!
- textbox的问题,我想实现一个调用text_changed的事件,还不想刷新画面。服务器端有数据库处理。急急急急!!!!!!!!!
- 上传文件的功能
- datagrid中是否可以显示非绑定字段的内容?
- asp.net Url中的一堆随机字母 是什么意思呢?
- 谁有wpf和exists的电子书教程
但你又有新的问题,即同一角色下的不同用户只能拿到自己的单据。所以思路大致如下:
1、根据角色拿到该角色权限下所有工作流
2、根据用户拿到通过角色过滤出来的工作流下的所有单据。
以上操作完全可以通过SQL来实现,没必要循环。这样效率会好些。
/// 通过用户取到用户所属的单据
/// </summary>
/// <param name="user">登录用户</param>
/// <param name="IsSp">是否有工作流权限,如果没有,直接反回,能尽量节省时间</param>
/// <returns></returns>
public IList<Bdxx> GetUserWaitingWorkItems(Userinfo user , out bool IsSp)
{
#region 拿到用户的所有基础数据
IList<Bdxx> bdxxList = new List<Bdxx>();//单据集合
BdxxBll bdBll = new BdxxBll();//单据业务层对象
User_state_mapBll ubll = new User_state_mapBll();//工作流权限集合
IList<User_state_map> stateList = ubll.GetListByUser(user.ID);//通过用户编号拿到所有工作流权限
if (stateList == null || stateList.Count == 0) { IsSp = false; return null; } else { IsSp = true; }//是否有工作流权限,如果没有,直接反回,能尽量节省时间
JcrywzgxBll jcrwwzgxbll = new JcrywzgxBll();//同一计划员角色中的不同计划员管理不同的物资大类
IList<Jcrywzgx> userdl = jcrwwzgxbll.GetModelList("rwyhid='" + user.USERID + "'");//拿到用户所管的物资大类集合
IList<Kckf> kflist = new whims.bll.KckfBll().GetList("trim(kffzr)=trim('" + user.USERNAME + "')");//同一保管员角色中的不同保管员管理的库房不一样,拿到用户管理的库房的集合
IList<Bdxx> bdList = new whims.bll.BdxxBll().GetListBySP();//拿到所有待审批的单据
#endregion
foreach (Bdxx bdxx in bdList)//遍历所有的单据
{
#region 通过单据号拿到该工作流的作态
StateMachineWorkflowInstance stateInstance = null;
try
{
stateInstance= new StateMachineWorkflowInstance(WorkflowMgr.CurrentWorkflowRuntime, bdxx.INSTANCEID);
}
catch (Exception)
{
continue;
}
string wfname = stateInstance.CurrentState.Parent.Name;//工作流名称
string statename = stateInstance.CurrentStateName;//工作流审批状态
#endregion
foreach (User_state_map up in stateList)//遍历所有的工作流权限
{
if (up.STATENAME == statename && up.WFNAME == wfname)//如果这个工作流的名称,审批状态和用户的权限相匹配
{
bool add = false;//标识是否为用户的单据,true属于该用户则添加,否则不添加
switch (wfname)
{
#region 出库
case "CkWorkflow":
switch (statename)
{
case "BgyCheckState"://如果是保管员则要根据库房的不同查看自己库房的单子
Kcck ckmodel=new KcckBll().GetModel(bdxx.BDBH);//拿到单据的库房信息
if (kflist != null && kflist.Count > 0)
{
string ckkfid = ckmodel.CKKFID;
foreach (Kckf kf in kflist)//遍历该保管员管理的所有库房
{
if (ckkfid.Equals(kf.KFID))//如果包含该库房则标识为true
{
add = true;
break;
}
}
}
break;
case "JlyCheckState":
add = true;
break;
case "JhyCheckState"://如果是计划员则根据管理物资大类的不同查看自己大类的单子
StringBuilder strSql = new StringBuilder();
strSql.Append("select wzdl from kcckmx ,jcwz");
strSql.Append(" where ckid='" + bdxx.BDBH + "' and xtid=kcckmx.wzid and rownum=1");
object objck=DbHelperSQL.GetSingle(strSql.ToString());//拿到此单据物资明细中第一条的物资类别
if(objck==null)break;
string dl = (objck).ToString();
if (userdl != null && userdl.Count > 0)
{
foreach (Jcrywzgx rw in userdl)//遍历该计划员管理的所有的物资类别
{
if (dl.Equals(rw.RWWZDL))//如果包含则标识为true
{
add = true;
break;
}
}
}
break;
case "BmldCheckState":
if (user.BUMEN.Equals(bdxx.BUMEN))
{
add = true;
}
break;
case "RequestState":
if (user.BUMEN.Equals(bdxx.BUMEN))
{
if (user.USERID.Equals(bdxx.CJR))
{
add = true;
}
}
break;
}
break;
#endregion
#region 入库
case "RkWorkflow":
KcrkBll rkbll = new KcrkBll();
bdxx.BDMC = rkbll.GetGysByRkid(bdxx.BDBH);
switch (statename)
{
case "BgyCheckState"://保管员,库房不同,单据不同,只查属于自己的单据
Kcrk rkmodel = rkbll.GetModel(bdxx.BDBH);
if (kflist != null && kflist.Count > 0)
{
string rkkfid = rkmodel.RKKFID;
foreach (Kckf kf in kflist)
{
if (rkkfid.Equals(kf.KFID))
{
add = true;
break;
}
}
}
break;
case "JlyCheckState":
add = true;
break;
case "JhyCheckState"://计划员不同,查询属于自己管理大类的单据
StringBuilder strSql = new StringBuilder();
strSql.Append("select wzdl from kcrkmx ,jcwz");
strSql.Append(" where rkid='" + bdxx.BDBH + "' and xtid=kcrkmx.wzid and rownum=1");
object obj=(DbHelperSQL.GetSingle(strSql.ToString()));
if (obj == null) break;
string dl = obj.ToString();
if (userdl != null && userdl.Count > 0)
{
foreach (Jcrywzgx rw in userdl)
{
if (dl.Equals(rw.RWWZDL))
{
add = true;
break;
}
}
}
break;
case "JyyCheckState":
add = true;
break;
case "RequestState"://采购员不同,查询属于自己管理大类的单据
StringBuilder Sql = new StringBuilder();
Sql.Append("select wzdl from kcrkmx ,jcwz");
Sql.Append(" where rkid='" + bdxx.BDBH + "' and xtid=kcrkmx.wzid and rownum=1");
object objr = (DbHelperSQL.GetSingle(Sql.ToString()));
if (objr == null) break;
string dlr = objr.ToString();
if (userdl != null && userdl.Count > 0)
{
foreach (Jcrywzgx rw in userdl)
{
if (dlr.Equals(rw.RWWZDL))
{
add = true;
break;
}
}
}
break;
}
break;
#endregion
#region 退库
case "TkWorkflow":
switch (statename)
{
case "BgyCheckState"://保管员查看自己库房的单子
Kcck ckmodel = new KcckBll().GetModel(new KctkBll().GetModel(bdxx.BDBH).TKCKID);
if (kflist != null && kflist.Count > 0)
{
string ckkfid = ckmodel.CKKFID;
foreach (Kckf kf in kflist)
{
if (ckkfid.Equals(kf.KFID))
{
add = true;
break;
}
}
}
break;
case "JlyCheckState":
add = true;
break;
case "JhyCheckState"://计划员查看自己大类的单子
StringBuilder strSql = new StringBuilder();
strSql.Append("select wzdl from kctk ,jcwz");
strSql.Append(" where tkid='" + bdxx.BDBH + "' and xtid=tkwzid and rownum=1");
object obj = (DbHelperSQL.GetSingle(strSql.ToString()));
if (obj == null) break;
string dl = obj.ToString(); if (userdl != null && userdl.Count > 0)
{
foreach (Jcrywzgx rw in userdl)
{
if (dl.Equals(rw.RWWZDL))
{
add = true;
break;
}
}
}
break;
case "JyyCheckState":
add = true;
break;
case "RequestState"://采购员不同,查询属于自己管理大类的单据
StringBuilder Sql = new StringBuilder();
Sql.Append("select wzdl from kctk ,jcwz");
Sql.Append(" where tkid='" + bdxx.BDBH + "' and xtid=tkwzid and rownum=1");
object objr = (DbHelperSQL.GetSingle(Sql.ToString()));
if (objr == null) break;
string dlr = objr.ToString();
if (userdl != null && userdl.Count > 0)
{
foreach (Jcrywzgx rw in userdl)
{
if (dlr.Equals(rw.RWWZDL))
{
add = true;
break;
}
}
}
break;
}
break;
#endregion
#region 采购
case "CgWorkflow":
switch (statename)
{
case "RequestState":
if (user.BUMEN.Equals(bdxx.BUMEN))
{
if (user.USERID.Equals(bdxx.CJR))
{
add = true;
}
}
break;
case "CgbmldCheckState":
if (user.BUMEN.Equals(bdxx.BUMEN))
{
add = true;
}
break;
case "CgbjhyCheckState"://计划员查看自己大类的单子
StringBuilder strSql = new StringBuilder();
strSql.Append("select wzdl from cgprdetail ,jcwz");
strSql.Append(" where prdsqdh='" + bdxx.BDBH + "' and xtid=prdxtm and rownum=1");
object objdl=DbHelperSQL.GetSingle(strSql.ToString());
if(objdl==null)break;
string dl = (objdl).ToString();
if (userdl != null && userdl.Count > 0)
{
foreach (Jcrywzgx rw in userdl)
{
if (dl.Equals(rw.RWWZDL))
{
add = true;
break;
}
}
}
break;
case "MultiCheckState"://多人审批,属于这一角色时标识为true
RolewaitstateBll rbll = new RolewaitstateBll();
if (rbll.IsExistByUserId(bdxx.INSTANCEID.ToString(), user.USERID))
{
add = true;
}
break;
}
break;
#endregion
}
if (add) { bdxxList.Add(bdxx); break; }
}
}
}
return bdxxList;
}