/// <summary> /// 指定表单字段的人员的直接领导。 /// </summary> public void DoFineWho_2() { string sUser = "******"; BP.WF.Dev2Interface.Port_Login(sUser); //创建. workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No); //执行发送, 直接领导. Hashtable ht = new Hashtable(); ht.Add("FindLeader", 1); // 找直接领导. ht.Add("RenYuanBianHao", "zhoutianjiao"); SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID, ht); // 让zhanghaicheng登录, 执行第二步骤地发送。 BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); // 让zhanghaicheng 执行发送,应该还发送给zhanghaicheng. objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID); #region 分析预期 if (objs.VarAcceptersID != "qifenglin") { throw new Exception("@按照找直接领导的方式1, (指定级别的领导)找领导错误,应当是qifenglin现在是" + objs.VarAcceptersID); } #endregion }
public string Node_SendWork(string fk_flow, int fk_node, Int64 workID, string userNo, string dsXml) { try { BP.WF.Dev2Interface.Port_Login(userNo); StringReader sr = new StringReader(dsXml); DataSet ds = new DataSet(); ds.ReadXml(sr); Hashtable htMain = new Hashtable(); DataTable dtMain = ds.Tables["Main"]; foreach (DataRow dr in dtMain.Rows) { htMain.Add(dr[0].ToString(), dr[1].ToString()); } SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workID, htMain, ds); return(objs.ToMsgOfText()); } catch (Exception ex) { return("@发送工作出现错误:" + ex.Message); } }
/// <summary> /// 发送 /// </summary> public void Send() { Hashtable ht = new Hashtable(); if (this.CB_IsShiShi.Checked) { ht.Add("IsShiShi", 1); } else { ht.Add("IsShiShi", 0); } // call 子子流程,执行发送并获取发送后返回对象。 SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, ht, null, 0, this.TB_FZR.Text); //int shebeiID = int.Parse(this.Request.QueryString["SheBeiID"]); //BP.Demo.tab_wf_commonkpioptivalue en = new BP.Demo.tab_wf_commonkpioptivalue(); //en.OID = shebeiID; //en.Retrieve(); //根据设备ID 查询出来该设备的信息 //en.WorkID = (int)objs.VarWorkID; //从返回对象里,获取它的子子流程WorkID。 //en.Update(); //提示发送消息。 this.Session["info"] = objs.ToMsgOfHtml(); this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <summary> /// 测试案例说明: /// 1, 分别列举4种。 /// 2, 测试找领导的两种模式 /// </summary> public override void Do() { this.fk_flow = "057"; fl = new Flow(this.fk_flow); string sUser = "******"; BP.WF.Dev2Interface.Port_Login(sUser); //创建. workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No); //执行发送, 应该跳转到最后一个步骤上去. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID); #region 分析预期 if (objs.VarAcceptersID != "qifenglin") { throw new Exception("@应当是qifenglin现在是" + objs.VarAcceptersID); } if (objs.VarToNodeID != 5799) { throw new Exception("@应该跳转到最后一个节点,但是运行到了:" + objs.VarToNodeID + " - " + objs.VarToNodeName); } #endregion }
/// <summary> /// 运行完一个流程,并返回它的workid. /// </summary> /// <returns></returns> public Int64 RunCompeleteOneWork() { string fk_flow = "024"; string startUser = "******"; BP.Port.Emp starterEmp = new Port.Emp(startUser); Flow fl = new Flow(fk_flow); //让zhanghaicheng登录, 在以后,就可以访问WebUser.No, WebUser.Name 。 BP.WF.Dev2Interface.Port_Login(startUser); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); //执行发送,并获取发送对象,. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); //执行第二步 : . BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); //执行第三步完成: . BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); return(workid); }
/// <summary> /// 测试案例说明: /// 1, 测试共享任务的取出,放入。 /// 2, 延续流程的两种模式 /// </summary> public override void Do() { if (BP.WF.Glo.IsEnableTaskPool == false) { throw new Exception("@此单元测试需要打开web.config中的IsEnableTaskPool配置."); } fl = new Flow("209"); Node nd = new Node(6899); string sUser = "******"; BP.WF.Dev2Interface.Port_Login(sUser); //创建. workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No); //执行发送,指定发送给两个人。 SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID, null, null, 0, "liping"); //让liping登陆。 BP.WF.Dev2Interface.Port_Login("liping"); //发送到子流程(延续流程上去)上去. objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID, null, null, 21001, "liping"); #region 检查数据是否完整。 #endregion 检查数据是否完整。 //执行撤销工作. BP.WF.Dev2Interface.Flow_DoUnSend(fl.No, workID, 0); }
/// <summary> /// 测试案例说明: /// 1, 分别列举4种。 /// 2, 测试找领导的两种模式 /// </summary> public override void Do() { this.fk_flow = "063"; fl = new Flow(this.fk_flow); string sUser = "******"; BP.WF.Dev2Interface.Port_Login(sUser); //创建. workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No); //执行发送, 应该跳转到最后一个步骤上去. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID); //让qinfenglin登陆。 BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID); //让liping登陆, 他应该自动跳转了,跳转给zhoutianjiao. BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID); #region 分析预期 if (objs.VarAcceptersID != "zhoutianjiao") { throw new Exception("@按照找直接领导的方式0, (直接领导模式)找领导错误,应当是qifenglin现在是" + objs.VarAcceptersID); } if (objs.VarToNodeID != 6304) { throw new Exception("@应该跳转到最后一个节点,但是运行到了:" + objs.VarToNodeID + " - " + objs.VarToNodeName); } #endregion }
protected void Btn_Save_Click(object sender, EventArgs e) { string checkMsg = this.TB_Doc.Text; BP.WF.GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID); // 如果是发送. if (this.RB_OK.Checked) { SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID); //写入审核信息. BP.WF.Dev2Interface.WriteTrack(this.FK_Flow, this.FK_Node, this.WorkID, this.FID, checkMsg, ActionType.WorkCheck, "", null); this.ToMsg(objs.ToMsgOfHtml(), "Info"); return; } //获得要退回的节点. int returnToNodeID = int.Parse(this.DDL_Nodes.SelectedValue); //执行退回. string msg = BP.WF.Dev2Interface.Node_ReturnWork(this.FK_Flow, this.WorkID, this.FID, this.FK_Node, returnToNodeID, checkMsg, false); this.ToMsg(msg, "Info"); }
/// <summary> /// 发送 /// </summary> public void Send() { // 向下发送. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, null, null, 0, null); //提示发送消息。 this.Session["info"] = objs.ToMsgOfHtml(); this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <summary> /// 测试案例 /// </summary> public override void Do() { //初始化变量. fk_flow = "036"; userNo = "zhangyifan"; fl = new Flow(fk_flow); //执行登陆. BP.WF.Dev2Interface.Port_Login(userNo); // 创建工作。 this.workID = BP.WF.Dev2Interface.Node_CreateBlankWork(this.fk_flow, null, null, null, null); // 发送到下一步骤(部门经理审批). SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.fk_flow, this.workID, null, null, 0, null); // 获取下一步骤的接收人员,让下一步人员登陆. string nextWorker2 = objs.VarAcceptersID; BP.WF.Dev2Interface.Port_Login(nextWorker2); // 执行部门经理读取工作的api. BP.WF.Dev2Interface.Node_SetWorkRead(objs.VarToNodeID, this.workID); #region 检查发起人是否接受到了回执消息. if (BP.WF.Glo.IsEnableSysMessage == true) { string sql = "SELECT * FROM Sys_SMS WHERE MsgFlag='RP" + this.workID + "_3602' AND MsgAccepter='" + userNo + "@ccflow.org'"; DataTable dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@人员(" + userNo + ")没有接受到回执消息。"); } } #endregion 检查发起人是否接受到了回执消息. // 让第2步的人员发送, 并获取发送对象. Hashtable ht = new Hashtable(); ht.Add(BP.WF.WorkSysFieldAttr.SysIsReadReceipts, "1"); //传入表单参数. objs = BP.WF.Dev2Interface.Node_SendWork(this.fk_flow, this.workID, ht, null, 0, null); string nextWorker3 = objs.VarAcceptersID; //获得第三步骤地接受者。 BP.WF.Dev2Interface.Port_Login(nextWorker3); // 让第三步骤地工作人员登陆。 BP.WF.Dev2Interface.Node_SetWorkRead(objs.VarToNodeID, this.workID); //执行读取回执。 #region 检查部门经理是否接受了已读回执. if (BP.WF.Glo.IsEnableSysMessage == true) { string sql = "SELECT * FROM Sys_SMS WHERE MsgFlag='RP" + this.workID + "_3699' AND MsgAccepter='" + nextWorker2 + "@ccflow.org'"; DataTable dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@人员(" + nextWorker2 + ")没有接受到回执消息。"); } } #endregion 检查部门经理是否接受了已读回执. }
/// <summary> /// 发送 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Btn_Send_Click(object sender, EventArgs e) { //执行发送, 此发送,普通节点到分流点发送,并且指定接受人。 SendReturnObjs sendObjs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, null, null, 0, "guobaogeng"); //提示发送消息。 this.Session["info"] = sendObjs.ToMsgOfHtml(); this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <summary> /// 测试从最后一个节点退回到分流点,然后让其原路返回. /// 返回到最后一个节点后,让其在执行一次退回但是并不原路返回,让发起人执行发送 /// 看看是否是按照步骤一步步的向下运动。 /// </summary> public void ReturnToFenLiuNodeWithTrackback_1() { //创建测试案例. Int64 workid = this.CreateTastCase(); //让他登录. BP.WF.Dev2Interface.Port_Login("zhoupeng"); //向开始节点退回,并不原路返回。 BP.WF.Dev2Interface.Node_ReturnWork("088", workid, 0, 8899, 8802, "test", true); //让 zhoutianjiao , 登录让其发送。 BP.WF.Dev2Interface.Port_Login("qifenglin"); SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork("088", workid); if (objs.VarAcceptersID != "zhoupeng") { throw new Exception("@退回到开始节点并原路返回错误,应该返回给zhoupeng,现在是:" + objs.VarAcceptersID); } //在执行一次退回,但不原路返回. BP.WF.Dev2Interface.Node_ReturnWork("088", workid, 0, 8899, 8802, "test", false); //让qifenglin登录, 测试下一步骤,是否按照一步步的走向结束节点。 BP.WF.Dev2Interface.Port_Login("qifenglin"); objs = BP.WF.Dev2Interface.Node_SendWork("088", workid); // 让分流点发送. string sql = "SELECT WorkID,FK_Emp FROM WF_GenerWorkerlist WHERE FID=" + workid; DataTable dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("没有查询到子线程."); } foreach (DataRow dr in dt.Rows) { Int64 id = Int64.Parse(dr["WorkID"].ToString()); string emp = dr[1].ToString(); BP.WF.Dev2Interface.Port_Login(emp); BP.WF.Dev2Interface.Node_SendWork("088", id); } //让 zhanghaicheng , 登录让其发送. BP.WF.Dev2Interface.Port_Login("zhanghaicheng"); BP.WF.Dev2Interface.Node_SendWork("088", workid); //让 zhoupeng , 登录让其发送。 BP.WF.Dev2Interface.Port_Login("zhoupeng"); BP.WF.Dev2Interface.Node_SendWork("088", workid); /* * 运行到这里执行成功。 */ }
/// <summary> /// 发送 /// </summary> public void Send() { // call 子子流程,执行发送并获取发送后返回对象。 SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, null, null, 0, this.TB_NextWorker.Text); //提示发送消息。 this.Session["info"] = objs.ToMsgOfHtml(); this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <summary> /// 创建一个测试场景,让他跑到结束节点. /// </summary> public Int64 CreateTastCase() { string fk_flow = "088"; string startUser = "******"; BP.Port.Emp starterEmp = new Port.Emp(startUser); Flow fl = new Flow(fk_flow); //让周天娇登录, 在以后,就可以访问WebUser.No, WebUser.Name 。 BP.WF.Dev2Interface.Port_Login(startUser); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); //执行向 分流点 发送, qifenglin接受. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); if (objs.VarAcceptersID != "qifenglin") { throw new Exception("@接受人错误,应当是qifenglin,现在是:" + objs.VarAcceptersID); } //让分流点的发起人登录. BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); //执行向下发送. objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); if (objs.VarAcceptersID != "zhangyifan,zhoushengyu,") { throw new Exception("@接受人错误,应当是zhangyifan,zhoushengyu,现在是:" + objs.VarAcceptersID); } string sql = "SELECT WorkID,FK_Emp FROM WF_GenerWorkerlist WHERE FID=" + workid; DataTable dt = DBAccess.RunSQLReturnTable(sql); foreach (DataRow dr in dt.Rows) { Int64 id = Int64.Parse(dr["WorkID"].ToString()); string emp = dr[1].ToString(); BP.WF.Dev2Interface.Port_Login(emp); objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, id); } //让qifenglin登录,发到最后一个节点,完成tastcase. BP.WF.Dev2Interface.Port_Login("zhanghaicheng"); objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); if (objs.VarAcceptersID != "zhoupeng") { throw new Exception("@接受人错误,应当是zhoupeng,现在是:" + objs.VarAcceptersID); } return(workid); }
/// <summary> /// 创建流程,发送分流点第1步. /// </summary> public void Step1() { Flow fl = new Flow("122"); fl.DoDelData(); // 让zhanghaicheng 登录. BP.WF.Dev2Interface.Port_Login(userNo); //创建空白工作, 发起开始节点. workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); //获得他的work. Node nd = new Node(12201); Work wk = nd.HisWork; wk.OID = workid; wk.Retrieve(); // 初始化明细表的接收人数据. MapDtl dtl = wk.HisMapDtls[0] as MapDtl; GEDtl enDtl = dtl.HisGEDtl; enDtl.RefPK = workid.ToString(); enDtl.SetValByKey("ChuLiRen", "zhangyifan"); enDtl.SetValByKey("ChuLiRenMingCheng", "张一帆"); enDtl.SetValByKey("PiCiHao", "AA"); //批次号. enDtl.Insert(); enDtl = dtl.HisGEDtl; enDtl.RefPK = workid.ToString(); enDtl.SetValByKey("ChuLiRen", "zhangyifan"); enDtl.SetValByKey("ChuLiRenMingCheng", "张一帆"); enDtl.SetValByKey("PiCiHao", "AA"); //批次号. enDtl.Insert(); enDtl = dtl.HisGEDtl; enDtl.RefPK = workid.ToString(); enDtl.SetValByKey("ChuLiRen", "zhangyifan"); enDtl.SetValByKey("ChuLiRenMingCheng", "张一帆"); enDtl.SetValByKey("PiCiHao", "BB"); //批次号. enDtl.Insert(); // 执行向下发送. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.fk_flow, this.workid); if (objs.VarTreadWorkIDs == "") { throw new Exception("sss"); } }
/// <summary> /// 发送案件 /// </summary> /// <returns></returns> private string Send() { //首先执行保存. this.Save(); string resultMsg = ""; try { if (Dev2Interface.Flow_IsCanDoCurrentWork(this.FK_Flow, this.FK_Node, this.WorkID, WebUser.No) == false) { resultMsg = "error|您好:" + BP.Web.WebUser.No + ", " + WebUser.Name + "当前的工作已经被处理,或者您没有执行此工作的权限。"; } else { SendReturnObjs returnObjs = Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID); // resultMsg = returnObjs.ToMsgOfHtml(); resultMsg = returnObjs.ToMsgOfHtml(); //执行抄送. BP.WF.Dev2Interface.Node_CC_WriteTo_Todolist(returnObjs.VarToNodeID, returnObjs.VarToNodeID, this.WorkID, "zhoupeng", "周朋"); BP.WF.Dev2Interface.Flow_SetFlowTitle(this.FK_Flow, this.WorkID, "sdsdsdfsdfsdfsdf"); //BP.WF.Dev2Interface.DB_GenerCanStartFlowsOfDataTable(); #region 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. /*这里有两种情况 * 1,从中间的节点,通过批量处理,也就是说合并审批处理的情况,这种情况子流程需要执行到下一步。 * 2,从流程已经完成,或者正在运行中,也就是说合并审批处理的情况. */ try { //处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. BP.WF.Glo.DealBuinessAfterSendWork(this.FK_Flow, this.WorkID, this.DoFunc, WorkIDs); } catch (Exception ex) { resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>"); return(resultMsg); } #endregion 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. } } catch (Exception ex) { resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>"); } return(resultMsg); }
/// <summary> /// 说明 :此测试针对于演示环境中的 002 流程编写的单元测试代码。 /// 涉及到了: 创建,发送,撤销,方向条件、退回等功能。 /// </summary> public override void Do() { string fk_flow = "028"; Flow fl = new Flow(fk_flow); #region yangyilei 登录. 基层路线 BP.WF.Dev2Interface.Port_Login("yangyilei"); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, WebUser.No, null, 0, null); //执行发送,并获取发送对象,. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid); if (objs.VarToNodeID != 2802) { throw new Exception("@财务部门人员发起没有转入到财务部节点上去。"); } //删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); #endregion yangyilei #region qifenglin登录. BP.WF.Dev2Interface.Port_Login("qifenglin"); workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, WebUser.No, null, 0, null); objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workid); if (objs.VarToNodeID != 2899) { throw new Exception("@研发部人员发起没有转入研发部节点上去。"); } // 删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); #endregion qifenglin登录. #region liyan登录. BP.WF.Dev2Interface.Port_Login("liyan"); workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, WebUser.No, null, 0, null); objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workid); if (objs.VarToNodeID != 2803) { throw new Exception("@没有转入人力资源部上去。"); } // 删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); #endregion liyan登录. }
/// <summary> /// 执行 /// </summary> public override void Do() { string fk_flow = "001"; Flow fl = new Flow(fk_flow); BP.WF.Dev2Interface.Port_Login("zhoutianjiao"); //创建空白工作, 发起开始节点. SendReturnObjs objs = BP.WF.Dev2Interface.Node_StartWork(fk_flow, null, null, 0, null); Int64 workid = objs.VarWorkID; //用第二个人员登录. BP.WF.Dev2Interface.Port_Login(objs.VarAcceptersID); //设置标题 BP.WF.Dev2Interface.Flow_SetFlowTitle(fk_flow, workid, "test"); #region 检查标题是否正确. string title = DBAccess.RunSQLReturnString("SELECT Title FROM WF_GenerWorkFlow WHERE WorkID=" + workid); if (title != "test") { throw new Exception("@Flow_SetFlowTitle 方法失败. WF_GenerWorkFlow没有变化正确。"); } title = DBAccess.RunSQLReturnString("SELECT Title FROM ND" + int.Parse(fl.No) + "Rpt WHERE OID=" + workid); if (title != "test") { throw new Exception("@Flow_SetFlowTitle 方法失败.Rpt table 没有变化正确。"); } #endregion 检查标题是否正确. //重新设置标题 BP.WF.Dev2Interface.Flow_ReSetFlowTitle(fk_flow, objs.VarToNodeID, workid); #region 检查标题是否正确. title = DBAccess.RunSQLReturnString("SELECT Title FROM WF_GenerWorkFlow WHERE WorkID=" + workid); if (title == "test") { throw new Exception("@Flow_SetFlowTitle 方法失败. WF_GenerWorkFlow没有变化正确。"); } title = DBAccess.RunSQLReturnString("SELECT Title FROM ND" + int.Parse(fl.No) + "Rpt WHERE OID=" + workid); if (title == "test") { throw new Exception("@Flow_SetFlowTitle 方法失败.Rpt table 没有变化正确。"); } #endregion 检查标题是否正确. }
/// <summary> /// 发送案件 /// </summary> /// <returns></returns> private string Send() { //首先执行保存. this.Save(); string resultMsg = ""; try { if (Dev2Interface.Flow_IsCanDoCurrentWork(this.FK_Flow, this.FK_Node, this.WorkID, WebUser.No) == false) { resultMsg = "error|您好:" + BP.Web.WebUser.No + ", " + WebUser.Name + "当前的工作已经被处理,或者您没有执行此工作的权限。"; } else { SendReturnObjs returnObjs = Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, 112301, "zhangsan,lisi,wangwu"); // returnObjs.v // resultMsg = returnObjs.ToMsgOfHtml(); resultMsg = returnObjs.ToMsgOfHtml(); #region 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. /*这里有两种情况 * 1,从中间的节点,通过批量处理,也就是说合并审批处理的情况,这种情况子流程需要执行到下一步。 * 2,从流程已经完成,或者正在运行中,也就是说合并审批处理的情况. */ try { //处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. BP.WF.Glo.DealBuinessAfterSendWork(this.FK_Flow, this.WorkID, this.DoFunc, WorkIDs); } catch (Exception ex) { resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>"); return(resultMsg); } #endregion 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. } } catch (Exception ex) { resultMsg = "sysError|" + ex.Message.Replace("@", "<br/>"); } return(resultMsg); }
/// <summary> /// 执行 /// </summary> public override void Do() { string fk_flow = "029"; Flow fl = new Flow(fk_flow); fl.DoCheck(); #region zhoupeng 登录. BP.WF.Dev2Interface.Port_Login("zhoupeng"); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); //加入开发者参数,表单里没有TurnTo字段. Hashtable ht = new Hashtable(); ht.Add("Turn", "A"); //执行发送,并获取发送对象,. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); if (objs.VarToNodeID != 2999) { throw new Exception("@应该转向A。"); } //删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); #endregion #region zhoupeng 登录. BP.WF.Dev2Interface.Port_Login("zhoupeng"); //创建空白工作, 发起开始节点. workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); //加入开发者参数,表单里没有TurnTo字段. ht = new Hashtable(); ht.Add("Turn", "B"); //执行发送,并获取发送对象,. objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); if (objs.VarToNodeID != 2902) { throw new Exception("@应该转向B。"); } //删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); #endregion }
/// <summary> /// 测试抄送 /// </summary> public void TestCC() { string sUser = "******"; BP.WF.Dev2Interface.Port_Login(sUser); //创建. workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No); //执行发送. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID); //执行抄送. BP.WF.Dev2Interface.Node_CC(fl.No, objs.VarToNodeID, workID, "zhoushengyu", "zhoupeng", "移交测试", "", null, 0); //让 zhoushengyu 登陆. BP.WF.Dev2Interface.Port_Login("zhoushengyu"); #region 检查预期结果. sql = "SELECT FK_Emp FROM WF_EmpWorks WHERE WorkID=" + workID; dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0) { throw new Exception("@移交后待办丢失。"); } if (dt.Rows.Count != 1) { throw new Exception("@应该只有一个人处于待办状态。"); } if (dt.Rows[0][0].ToString() != "zhoupeng") { throw new Exception("@应该是:zhoupeng 现在是:" + dt.Rows[0][0].ToString()); } CCList list = new CCList(); int num = list.Retrieve(CCListAttr.Rec, sUser, CCListAttr.WorkID, workID); if (num <= 0) { throw new Exception("@没有写入抄送数据在 WF_CCList 表中,查询的数量是:" + num); } #endregion 检查预期结果 }
/// <summary> /// 测试案例说明: /// 1, 分别列举4种。 /// 2, 测试按部门找人员的两种模式 /// </summary> public override void Do() { this.fk_flow = "064"; fl = new Flow(this.fk_flow); string sUser = "******"; BP.WF.Dev2Interface.Port_Login(sUser); //创建. workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No); //执行发送, 按照职务找 SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID, null, 6499, null); #region 分析预期 if (objs.VarAcceptersID != "zhanghaicheng") { throw new Exception("@按照职务找错误, 应当是zhanghaicheng现在是" + objs.VarAcceptersID); } #endregion //执行撤销发送,按照岗位找. BP.WF.Dev2Interface.Flow_DoUnSend(fl.No, workID); objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID, null, 6402, null); #region 分析预期 if (objs.VarAcceptersID != "zhanghaicheng") { throw new Exception("@按照职务找错误, 应当是zhanghaicheng现在是" + objs.VarAcceptersID); } #endregion //执行撤销发送,找部门所有人员. BP.WF.Dev2Interface.Flow_DoUnSend(fl.No, workID); objs = BP.WF.Dev2Interface.Node_SendWork(fl.No, workID, null, 6403, null); #region 分析预期 if (objs.VarAcceptersID != "zhoupeng") { throw new Exception("@按照职务找错误, 应当是zhoupeng现在是" + objs.VarAcceptersID); } #endregion }
/// <summary> /// 发送 /// </summary> public void Send() { Hashtable ht = new Hashtable(); if (this.CB_IsCheck.Checked) { ht.Add("IsCheck", 1); } else { ht.Add("IsCheck", 0); } // call 子子流程,执行发送并获取发送后返回对象。 SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, ht, null, 0, this.TB_NextWorker.Text); //提示发送消息。 this.Session["info"] = objs.ToMsgOfHtml(); this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <summary> /// 执行发送. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Btn_Send_Click(object sender, EventArgs e) { //执行子子流程的发送. Hashtable ht = new Hashtable(); if (this.CB_IsShiShi.Checked) { ht.Add("IsShiShi", 1); } else { ht.Add("IsShiShi", 0); // 参数决定流程的运动方向。 } //执行发送, 此发送,普通节点到分流点发送,并且指定接受人。 SendReturnObjs sendObjs = BP.WF.Dev2Interface.Node_SendWork(this.FK_Flow, this.WorkID, ht, null, 0, this.TB_FZR.Text); //提示发送消息。 this.Session["info"] = sendObjs.ToMsgOfHtml(); this.Response.Redirect("ShowMsg.aspx?ss" + BP.DA.DataType.CurrentDataTime, true); }
/// <summary> /// 测试案例说明: /// 1, . /// 2, . /// 3,. /// </summary> public override void Do() { //初始化变量. fk_flow = "023"; userNo = "zhanghaicheng"; fl = new Flow(fk_flow); BP.WF.Dev2Interface.Port_Login(userNo); //创建一个工作。 this.workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, userNo, null); Hashtable ht = new Hashtable(); ht.Add(BP.WF.WorkSysFieldAttr.SysSDTOfNode, "2020-12-01 08:00"); //下一个节点完成时间。 ht.Add(BP.WF.WorkSysFieldAttr.SysSDTOfFlow, "2020-12-31 08:00"); //整体流程需要完成的时间。。 objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, this.workID, ht, null, 0, null); #region 检查发送结果是否符合预期. //sql = "SELECT "+GenerWorkFlowAttr.SDTOfFlow+","+GenerWorkFlowAttr.SDTOfNode+" FROM WF_GenerWorkFlow WHERE WorkID="+this.workID; GenerWorkFlow gwf = new GenerWorkFlow(this.workID); if (gwf.SDTOfFlow != "2020-12-31 08:00") { throw new Exception("@没有写入流程应完成时间,现在的应完成时间是:" + gwf.SDTOfFlow); } if (gwf.SDTOfNode != "2020-12-01 08:00") { throw new Exception("@没有写入节点应该完成时间,现在的应完成时间是:" + gwf.SDTOfNode); } GenerWorkerLists gwls = new GenerWorkerLists(this.workID, 2302); foreach (GenerWorkerList gwl in gwls) { if (gwl.SDT != "2020-12-01 08:00") { throw new Exception("@没有写入节点应该应该完成时间."); } } #endregion 检查发送结果是否符合预期. }
/// <summary> /// 说明 :此测试针对于演示环境中的 001 流程编写的单元测试代码。 /// 涉及到了: 创建,发送,撤销,方向条件、退回等功能。 /// </summary> public override void Do() { // guoxiangbin 登录. BP.WF.Dev2Interface.Port_Login("guoxiangbin"); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork("011"); //执行发送,发送到 “实施项目(调用多流程节点)”. SendReturnObjs objs = BP.WF.Dev2Interface.Node_SendWork("011", workid); //让实施人员 fuhui 登录. BP.WF.Dev2Interface.Port_Login("fuhui"); // 让其发起子流程, 首先创建子流程. Int64 workidSubFlow = BP.WF.Dev2Interface.Node_CreateBlankWork("012"); //设置父子流程关系. BP.WF.Dev2Interface.SetParentInfo("012", workidSubFlow, "011", workid, 1103, "guoxiangbin"); //让 fuhui 向下发送. BP.WF.Dev2Interface.Node_SendWork("012", workidSubFlow, 0, null); }
/// <summary> /// 执行 /// </summary> public override void Do() { string fk_flow = "075"; Flow fl = new Flow(fk_flow); #region zhoupeng 登录. BP.WF.Dev2Interface.Port_Login("zhoushengyu"); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); //加入 按URL ,表单里没有TurnTo字段. Hashtable ht = new Hashtable(); ht.Add("ToNodeID", "7502"); SendReturnObjs objs = null; //执行发送,并获取发送对象, 应该出来异常才对,因为传递这个参数会导致sql出错误。 objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); if (objs.VarToNodeID != 7502) { throw new Exception("@应该转向7502 "); } //删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); //测试流程完成条件. workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow); ht = new Hashtable(); ht.Add("ToNodeID", ""); objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); if (objs.IsStopFlow == false) { throw new Exception("@流程应该结束,但是未结束。"); } #endregion }
/// <summary> /// 执行 /// </summary> public override void Do() { string fk_flow = "030"; Flow fl = new Flow(fk_flow); #region zhoupeng 登录. BP.WF.Dev2Interface.Port_Login("zhoupeng"); //创建空白工作, 发起开始节点. Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, WebUser.No, null, 0, null); //加入 按SQL ,表单里没有TurnTo字段. Hashtable ht = new Hashtable(); ht.Add("MyPara", "qqqq"); SendReturnObjs objs = null; try { //执行发送,并获取发送对象, 应该出来异常才对,因为传递这个参数会导致sql出错误。 objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); } catch (Exception ex) { Log.DefaultLogWriteLineInfo("已经检测到SQL的变量已经被正确的替换了,导致此语句执行失败:" + ex.Message); } ht.Clear(); ht.Add("MyPara", "1"); //执行发送,并获取发送对象, 应该出来异常才对,因为传递这个参数会导致sql出错误。 objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, ht); if (objs.VarToNodeID != 3002) { throw new Exception("@应该转向B。"); } //删除测试数据. BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fl.No, objs.VarWorkID, false); #endregion }
/// <summary> /// 业务流程操作 /// </summary> /// <returns></returns> private string WorkFlowManage() { string doWhat = getUTF8ToString("doWhat"); string flowIdAndWorkId = getUTF8ToString("flowIdAndWorkId"); string[] array = flowIdAndWorkId.Split('^'); string Msg = ""; //执行发送 if (doWhat == "send") { foreach (string item in array) { string[] item_c = item.Split(','); Int64 workid = Int64.Parse(item_c[1].ToString()); SendReturnObjs objSend = null; objSend = BP.WF.Dev2Interface.Node_SendWork(item_c[0].ToString(), workid); Msg += objSend.ToMsgOfHtml(); Msg += "<hr>"; } } //执行删除 if (doWhat == "delete") { foreach (string item in array) { string[] item_c = item.Split(','); Int64 workid = Int64.Parse(item_c[1].ToString()); string mes = BP.WF.Dev2Interface.Flow_DoDeleteFlowByFlag(item_c[0].ToString(), workid, "批量删除", true); Msg += mes; Msg += "<hr>"; } } return(Msg); }
/// <summary> /// 测试案例说明: /// 1, . /// 2, . /// 3,. /// </summary> public override void Do() { //初始化变量. fk_flow = "023"; userNo = "zhanghaicheng"; fl = new Flow(fk_flow); BP.WF.Dev2Interface.Port_Login(userNo); //创建一个工作。 this.workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fk_flow, null, null, userNo, null); objs = BP.WF.Dev2Interface.Node_SendWork(fk_flow, this.workID, null, null, 0, null); #region 检查发送结果是否符合预期. string msgText = objs.ToMsgOfText(); if (msgText.Contains("<")) { throw new Exception("text信息, 具有html标记."); } #endregion 检查发送结果是否符合预期. }