SheetSubmitPane.cs
资源名称:H3_OA.rar [点击查看]
上传用户:li2971742
上传日期:2021-11-18
资源大小:39096k
文件大小:12k
源码类别:
OA系统
开发平台:
C#
- using System;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.ComponentModel;
- namespace OThinker.H3.WorkSheet
- {
- /// <summary>
- /// Summary description for SheetWorkItemActionPane.
- /// </summary>
- [DefaultProperty("Text"), ToolboxData("<{0}:SheetSubmitPane runat=server></{0}:SheetSubmitPane>")]
- public class SheetSubmitPane : System.Web.UI.WebControls.WebControl
- {
- #region 获得参数信息
- // 当前的任务
- private OThinker.H3.WorkItem.WorkItem CurrentWorkItem
- {
- get
- {
- return this.SheetPage.CurrentWorkItem;
- }
- }
- private string DestActivityName;
- // 目标任务
- private OThinker.H3.Workflow.Activity DestActivity
- {
- get
- {
- return this.SheetPage.Workflow.GetActivity(this.DestActivityName);
- }
- }
- private bool Approval
- {
- get
- {
- return this.SheetPage.Approval;
- }
- }
- #endregion
- #region 流程数据集
- // 准备数据集
- protected Data.InstanceData InstanceData
- {
- get
- {
- return this.SheetPage.InstanceData;
- }
- }
- private string[] GetOptionalParticipants()
- {
- // 获得后续的参与者
- string originator = OThinker.H3.Server.Engine.InstancePool.GetInstanceOriginator(this.CurrentWorkItem.InstanceID);
- return this.DestActivity.GetOptionalParticipants(
- this.SheetPage.Organization,
- originator,
- this.CurrentWorkItem.InstanceID,
- this.SheetPage.WorkItemManager,
- this.InstanceData);
- }
- #endregion
- public SheetPage SheetPage
- {
- get
- {
- return (WorkSheet.SheetPage)this.Page;
- }
- }
- private RadioButtonList ReceiverSelector = new RadioButtonList();
- private CheckBoxList ReceiversSelector = new CheckBoxList();
- private LinkButton Submit = new LinkButton();
- /// <summary>
- ///
- /// </summary>
- /// <param name="Job">用户任务</param>
- /// <param name="Workflow">该用户任务对应的流程</param>
- /// <param name="Submit">提交事件</param>
- public SheetSubmitPane()
- {
- this.Submit.Text = "确定";
- this.Controls.Add(this.Submit);
- this.Submit.Click += new EventHandler(btnSubmit_Click);
- this.Controls.Add(this.ReceiverSelector);
- this.Controls.Add(this.ReceiversSelector);
- }
- private string Description;
- public void Initialize(SheetPage SheetPage, string DestActivityName, string Description)
- {
- this.DestActivityName = DestActivityName;
- this.Description = Description;
- if (this.DestActivity == null)
- {
- this.btnSubmit_Click(null, null);
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.NoneParticipant)
- {
- this.btnSubmit_Click(null, null);
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.SingleParticipant)
- {
- string[] participants = this.GetOptionalParticipants();
- if (participants == null || participants.Length == 0)
- {
- this.SheetPage.NotifyMessage("该任务设计有问题,没有可选择的处理人");
- }
- else
- {
- int optionalReceiverCount = 0;
- foreach (string receiver in participants)
- {
- if (receiver != null && receiver != "")
- {
- string receiverName = this.SheetPage.Organization.GetFullName(receiver);
- this.ReceiverSelector.Items.Add(receiverName);
- optionalReceiverCount++;
- }
- }
- this.ReceiverSelector.SelectedIndex = 0;
- this.ReceiverSelector.Visible = true;
- if (optionalReceiverCount == 1)
- {
- this.btnSubmit_Click(null, null);
- }
- }
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.MultiParticipants)
- {
- string[] participants = this.GetOptionalParticipants();
- if (participants == null || participants.Length == 0)
- {
- this.SheetPage.NotifyMessage("该任务设计有问题,没有可选择的处理人");
- }
- else
- {
- int optionalReceiverCount = 0;
- foreach (string receiver in participants)
- {
- if (receiver != null && receiver != "")
- {
- string receiverName = OThinker.H3.Server.Engine.Organization.GetFullName(receiver);
- this.ReceiversSelector.Items.Add(receiverName);
- optionalReceiverCount++;
- }
- }
- this.ReceiversSelector.SelectedIndex = 0;
- this.ReceiversSelector.Visible = true;
- if (optionalReceiverCount == 1)
- {
- this.btnSubmit_Click(null, null);
- }
- }
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.AllParticipants)
- {
- this.btnSubmit_Click(null, null);
- }
- else
- {
- throw new NotImplementedException();
- }
- }
- protected void btnSubmit_Click(object sender, System.EventArgs e)
- {
- OThinker.H3.Server.Engine.WorkItemManager.FinishWorkItem(this.CurrentWorkItem.WorkItemID, this.SheetPage.UserValidator.UserID, this.Approval);
- // 准备触发后面Activity的消息
- OThinker.H3.Messages.ActivateActivityMessage activateMessage;
- string[] participants = null;
- // 设置Session的工作项的状态
- this.CurrentWorkItem.State = OThinker.H3.WorkItem.WorkItemState.Finished;
- // 设置操作描述
- string description = System.Web.HttpUtility.UrlDecode(this.Description);
- OThinker.H3.Server.Engine.TokenPool.AppendDescription(this.CurrentWorkItem.InstanceID, this.CurrentWorkItem.TokenID, description);
- if (this.DestActivity == null)
- {
- // 采用自动路由的方式
- this.AutoRoute();
- }
- else
- {
- // 触发后面的Activity
- participants = this.GetSelectedParticipants();
- activateMessage
- = new OThinker.H3.Messages.ActivateActivityMessage(
- OThinker.H3.Messages.MessageEmergencyType.Normal,
- this.CurrentWorkItem.InstanceID,
- this.DestActivity.Name,
- OThinker.H3.Instance.Token.UnspecifiedID,
- participants,
- new long[] { this.CurrentWorkItem.TokenID },
- null);
- OThinker.H3.Server.Engine.InstanceMessageSink.Notify(activateMessage);
- // 通知该Activity已经完成
- OThinker.H3.Messages.AsyncEndMessage endMessage =
- new OThinker.H3.Messages.AsyncEndMessage(
- OThinker.H3.Messages.MessageEmergencyType.Normal,
- this.CurrentWorkItem.InstanceID,
- this.CurrentWorkItem.ActivityName,
- this.CurrentWorkItem.ActivityEventType,
- this.CurrentWorkItem.ReplyID,
- false,
- null);
- OThinker.H3.Server.Engine.InstanceMessageSink.Notify(endMessage);
- }
- this.SheetPage.NotifyMessage("任务已完成");
- }
- private void AutoRoute()
- {
- // 需要通知实例事件管理器结束事件
- Messages.AsyncEndMessage endMessage;
- if (this.Approval)
- {
- endMessage = new OThinker.H3.Messages.ApprovedMessage(
- Messages.MessageEmergencyType.Normal,
- this.CurrentWorkItem.InstanceID,
- this.CurrentWorkItem.ActivityName,
- this.CurrentWorkItem.ActivityEventType,
- this.CurrentWorkItem.ReplyID,
- true,
- this.SheetPage.UserValidator.UserID,
- true);
- }
- else
- {
- endMessage
- = new OThinker.H3.Messages.AsyncEndMessage(
- Messages.MessageEmergencyType.Normal,
- this.CurrentWorkItem.InstanceID,
- this.CurrentWorkItem.ActivityName,
- this.CurrentWorkItem.ActivityEventType,
- this.CurrentWorkItem.ReplyID,
- true,
- null);
- }
- OThinker.H3.Server.Engine.InstanceMessageSink.Notify(endMessage);
- }
- private string[] GetSelectedParticipants()
- {
- // 参与者
- string[] participants;
- if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.NoneParticipant)
- {
- // 参与人为空
- participants = new string[0];
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.SingleParticipant)
- {
- // 选中的参与人
- string receiver = this.ReceiverSelector.SelectedValue;
- int startIndex = receiver.LastIndexOf("[");
- int endIndex = receiver.LastIndexOf("]");
- string principalName = receiver.Substring(startIndex + 1, endIndex - startIndex - 1);
- participants = new string[] { principalName };
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.MultiParticipants)
- {
- System.Collections.ArrayList selectedReceivers = new System.Collections.ArrayList();
- foreach (System.Web.UI.WebControls.ListItem item in this.ReceiversSelector.Items)
- {
- if (item.Selected)
- {
- string receiver = item.Text;
- int startIndex = receiver.LastIndexOf("[");
- int endIndex = receiver.LastIndexOf("]");
- string principalName = receiver.Substring(startIndex + 1, endIndex - startIndex - 1);
- selectedReceivers.Add(principalName);
- }
- }
- // 获得可选择的接收者
- string[] receivers = new string[selectedReceivers.Count];
- for (int count = 0; count < receivers.Length; count++)
- {
- receivers[count] = (string)selectedReceivers[count];
- }
- // 选中的参与人
- participants = receivers;
- }
- else if (this.DestActivity.ParticipateType == OThinker.H3.Workflow.ActivityParticipateType.AllParticipants)
- {
- participants = this.GetOptionalParticipants();
- }
- else
- {
- throw new NotImplementedException();
- }
- return participants;
- }
- }
- }