Пример #1
0
        void OnSend(object sender, Mi e)
        {
            int count = 0;

            foreach (var lv in _pnl.Children.OfType <Lv>())
            {
                AtvRecv ar = (AtvRecv)lv.Tag;
                ar.SelectedRecvs = null;
                if (lv.SelectedCount > 0)
                {
                    count++;
                    ar.SelectedRecvs = (from r in lv.SelectedRows
                                        select r.ID).ToList();
                }
                else if (_info.AtvDef.TransKind == WfdAtvTransKind.全部)
                {
                    Kit.Warn($"未选择{ar.Def.Name}的执行者!");
                    return;
                }
            }

            if (_info.AtvDef.TransKind == WfdAtvTransKind.自由选择 && count == 0)
            {
                Kit.Warn("请至少选择一个活动的执行者!");
                return;
            }
            if (_info.AtvDef.TransKind == WfdAtvTransKind.独占式选择 && count == 0)
            {
                Kit.Warn("请选择一个活动的执行者!");
                return;
            }
            if (_info.AtvDef.TransKind == WfdAtvTransKind.独占式选择 && count > 1)
            {
                Kit.Warn("只能选择一个活动的执行者!");
                return;
            }
            Close(true);
        }
Пример #2
0
        async Task Send()
        {
            // 先保存
            if (!await _info.CmdSave.Save())
            {
                return;
            }

            // 判断当前活动是否结束(需要多人同时完成该活动的情况)
            if (!await _info.AtvInst.IsFinished())
            {
                // 活动未结束(不是最后一人),只结束当前工作项
                await SaveWorkItem(false);

                return;
            }

            // 获得所有后续活动,包括同步
            var nextAtvs = await AtCm.Query <WfdAtv>("流程-后续活动", new { atvid = _info.AtvDef.ID });

            if (nextAtvs.Count == 0)
            {
                // 无后续活动,结束当前工作项和活动
                await SaveWorkItem(true);

                return;
            }

            bool manualSend = false;
            var  nextRecvs  = new AtvRecvs();

            foreach (var atv in nextAtvs)
            {
                switch (atv.Type)
                {
                case WfdAtvType.Normal:
                    // 普通活动
                    var recv = await LoadRecvs(atv);

                    if (recv.Recvs != null && recv.Recvs.Count > 0)
                    {
                        AtvRecv ar = new AtvRecv {
                            Def = atv, IsRole = recv.IsRole, Recvs = recv.Recvs
                        };
                        nextRecvs.Atvs.Add(ar);

                        if (recv.IsManualSend)
                        {
                            manualSend = true;
                        }
                    }
                    break;

                case WfdAtvType.Sync:
                    // 同步活动 且 可激活后续活动时
                    if (await IsActive(atv))
                    {
                        // 同步活动只支持一个后续活动!
                        var syncNext = await AtCm.First <WfdAtv>("流程-后续活动", new { atvid = atv.ID });

                        if (syncNext != null)
                        {
                            recv = await LoadRecvs(syncNext);

                            if (recv.Recvs != null && recv.Recvs.Count > 0)
                            {
                                nextRecvs.SyncAtv = new AtvSyncRecv
                                {
                                    SyncDef = atv,
                                    Def     = syncNext,
                                    IsRole  = recv.IsRole,
                                    Recvs   = recv.Recvs
                                };

                                if (recv.IsManualSend)
                                {
                                    manualSend = true;
                                }
                            }
                        }
                    }
                    break;

                case WfdAtvType.Finish:
                    // 结束活动
                    nextRecvs.FinishedAtv = new AtvFinishedRecv {
                        Def = atv
                    };
                    break;
                }
            }

            // 当后续迁移活动为独占式选择且后续活动多于一个时手动选择
            if (!manualSend &&
                _info.AtvDef.TransKind == WfdAtvTransKind.独占式选择 &&
                nextRecvs.AtvCount > 1)
            {
                manualSend = true;
            }
            _info.NextRecvs = nextRecvs;

            // 触发外部自定义执行者范围事件
            await _info.OnSending();

            // 外部可以修改接收者列表
            if (_info.NextRecvs != null && _info.NextRecvs.AtvCount > 0)
            {
                if (manualSend)
                {
                    // 手动选择后发送
                    if (await new WfSendDlg().Show(_info))
                    {
                        DoSend(true);
                    }
                }
                else
                {
                    DoSend(false);
                }
            }
            else
            {
                Kit.Warn("无后续活动接收者,请检查流程授权是否合理!");
            }
        }
Пример #3
0
        /// <summary>
        /// 每个活动接收者对应一个Lv
        /// </summary>
        /// <param name="p_ar"></param>
        /// <returns></returns>
        void CreateItem(AtvRecv p_ar)
        {
            // 分组栏
            Grid grid = new Grid
            {
                Background        = Res.浅灰背景,
                BorderBrush       = Res.浅灰边框,
                BorderThickness   = new Thickness(0, 1, 0, 1),
                ColumnDefinitions =
                {
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                    new ColumnDefinition {
                        Width = GridLength.Auto
                    },
                },
                Children =
                {
                    new StackPanel
                    {
                        Orientation = Orientation.Horizontal,
                        Margin      = new Thickness(10, 0, 10, 0),
                        Children    =
                        {
                            new TextBlock {
                                FontFamily = Res.IconFont, Text = "\uE02D", VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(0, 0, 4, 0)
                            },
                            new TextBlock {
                                Text = p_ar.Def.Name, TextWrapping = TextWrapping.NoWrap, VerticalAlignment = VerticalAlignment.Center
                            }
                        }
                    },
                },
                Height = 40,
            };

            Lv lv = new Lv {
                View = Resources["ViewTemp"], ViewMode = ViewMode.Tile, Data = p_ar.Recvs, Tag = p_ar, Margin = new Thickness(0, 0, 0, 20)
            };
            var sp = new StackPanel {
                Orientation = Orientation.Horizontal
            };
            var btn = new Button {
                Content = "清除", Tag = lv, Background = Res.TransparentBrush
            };

            btn.Click += OnClearSelection;
            sp.Children.Add(btn);

            if (p_ar.MultiSelection && p_ar.Recvs.Count > 1)
            {
                btn = new Button {
                    Content = "全选", Tag = lv, Background = Res.TransparentBrush
                };
                btn.Click += OnSelectAll;
                sp.Children.Add(btn);
                lv.SelectionMode = Base.SelectionMode.Multiple;
            }

            Grid.SetColumn(sp, 1);
            grid.Children.Add(sp);

            _pnl.Children.Add(grid);
            _pnl.Children.Add(lv);
        }