/// <summary> /// 是否激活后续活动 /// </summary> /// <param name="p_atvSync">同步活动</param> /// <returns></returns> async Task <bool> IsActive(WfdAtv p_atvSync) { Dict dt = new Dict(); dt["prciid"] = _info.PrcInst.ID; dt["atvdid"] = p_atvSync.ID; int cnt = await AtCm.GetScalar <int>("流程-同步活动实例数", dt); // 已产生同步实例 if (cnt > 0) { return(false); } // 获得同步前所有活动 dt = new Dict(); dt["TgtAtvID"] = p_atvSync.ID; var trss = await AtCm.Query <WfdTrs>("流程-活动前的迁移", dt); // 聚合方式 // 全部 if (p_atvSync.JoinKind == 0) { return(await GetAllFinish(trss)); } // 任一 if (p_atvSync.JoinKind == WfdAtvJoinKind.任一任务) { return(true); } // 即时 return(await GetExistFinish(trss)); }
void LoadExecDrop(WfdAtv p_atv) { var items = from item in p_atv.Table.OfType <WfdAtv>() where item != p_atv && item.Type != WfdAtvType.Sync && item.Type != WfdAtvType.Finish select item; Nl <IDStr> ls = new Nl <IDStr>(); foreach (var atv in items) { ls.Add(new IDStr() { ID = atv.ID.ToString(), Str = atv.Name }); } ((CList)_fv["execatvid"]).Data = ls; }
/// <summary> /// 加载活动的接收者 /// </summary> /// <param name="p_atv"></param> /// <returns></returns> async Task <RecvDef> LoadRecvs(WfdAtv p_atv) { RecvDef recv = new RecvDef(); if (p_atv.ExecLimit == WfdAtvExecLimit.无限制) { // 无限制 if (p_atv.ExecScope == WfdAtvExecScope.一组用户 || p_atv.ExecScope == WfdAtvExecScope.单个用户) { // 一组用户或单个用户,所有授权用户为被选项 recv.IsManualSend = true; recv.IsRole = false; recv.Recvs = await GetAtvUsers(p_atv.ID); } else { // 所有用户或任一用户,按角色发 recv.IsRole = true; recv.Recvs = await AtCm.Query("流程-活动的所有授权角色", new Dict { { "atvid", p_atv.ID } }); } } else { // 有限制,按过滤后的用户发送 recv.IsRole = false; var users = await GetAtvUsers(p_atv.ID); if (users.Count > 0) { long atvdid = (p_atv.ExecLimit == WfdAtvExecLimit.已完成活动的执行者 || p_atv.ExecLimit == WfdAtvExecLimit.已完成活动的同部门执行者) ? p_atv.ExecAtvID.Value : p_atv.ID; var limitUsers = await GetLimitUsers(atvdid, p_atv.ExecLimit); if (limitUsers.Count > 0) { // 取已授权用户和符合限制用户的交集 Table tblJoin = new Table { { "id", typeof(long) }, { "name" } }; foreach (var l in limitUsers) { foreach (var r in users) { if (r.Long("id") == l.Long(0)) { tblJoin.AddRow(new { id = l.Long(0), name = r["name"] }); break; } } } recv.Recvs = tblJoin; } } // 除‘所有用户’外其余手动发送 if (p_atv.ExecScope != WfdAtvExecScope.所有用户) { recv.IsManualSend = true; } } return(recv); }