Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        /// <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);
        }