第八章 启动与执行业务流程(六)

来源:互联网 发布:淘宝教育客户端下载 编辑:程序博客网 时间:2024/06/05 17:43

8.2 启动与执行业务流程

8.2.2 TaskInstance.aspx.cs文件代码

      

     ......(续前页,继续Page_Load()函数内容)

           //显示前面任务已上传的附件
           if(ds.Tables[0].Rows[0]["AboutAttached"].ToString().Trim() == "R"

              || ds.Tables[0].Rows[0]["AboutAttached"].ToString().Trim() == "LR")
           {

              //这里的sql语句的前提是回退并重新选择新的分支(或分支,而且过程逻辑不允许嵌套)

              //执行时要删除原分支的所有任务实例以及它们上传的相关附件等。
              strSql="select ImageID,ImageName from RelatedAttachedImages where

                   ProcessInstanceID="+ds.Tables[1].Rows[0]["ProcessInstanceID"].ToString()

                     +" and TaskInstanceID < "+ViewState["taskinstanceid"].ToString();
              DataSet attachedds=basecode.SQLExeDataSet(strSql);
              if(attachedds != null & attachedds.Tables[0].Rows.Count>=1)
              {
                TableRow tr;
                TableCell tc;
                tr=new TableRow();
                tc=new TableCell();
                tc.HorizontalAlign=HorizontalAlign.Right;
                tc.Width=Unit.Percentage(15);
                tc.Text="相关资料";
                tr.Cells.Add(tc);
                tc=new TableCell();
                tr.Cells.Add(tc);
                Tbl.Rows.Add(tr);
                HyperLink link;
                for(int k=0;k<attachedds.Tables[0].Rows.Count;k++)
                {
                  tr=new TableRow();
                  tc=new TableCell();
                  tc.Width=Unit.Percentage(15);
                  tr.Cells.Add(tc);
                  tc=new TableCell();
                  link=new HyperLink();
                  link.Text=attachedds.Tables[0].Rows[k]["ImageName"].ToString();
                  link.NavigateUrl="DisplayImage.aspx?id="+attachedds.Tables[0]

                         .Rows[k]["ImageID"].ToString();
                  link.Target="_blank";
                  link.ForeColor=Color.CadetBlue;
                  tc.Controls.Add(link);
                  tr.Cells.Add(tc);
                  Tbl.Rows.Add(tr);
                }
              }
           }//结束显示附件链接的if语句

           //显示字段编辑控件
           if((ds.Tables[0].Rows[0]["Writablefields"] != DBNull.Value)

                  & (ds.Tables[0].Rows[0]["Writablefields"].ToString().Length>1))
           {
              string[] writeablefields=new Tools().StringSplit(ds.Tables[0]

                    .Rows[0]["Writablefields"].ToString(),",");
              string[] tablecompletename=

                 new Tools().StringSplit(ds.Tables[1].Rows[0]["RelatedTable"].ToString(),".");
              string tablename=tablecompletename[1];
              string tableower=tablecompletename[0];
              strSql="select FieldName,DataType,DataLenth,FieldAlias,ControlType from

                   RelatedTablesFields where (FieldName='"+writeablefields[0]+"'";

              //i<readablefields.Length-1因为最后一个是空格    
              for(int i=1;i<writeablefields.Length-1;i++)

              {
                  strSql=strSql+" or FieldName='"+writeablefields[i]+"'";
              }
              strSql=strSql+") and TableName='"+tablename+"' and

                      TableOwer='"+tableower+"';select "+writeablefields[0];

              //获取可写字段的值(针对暂时保存和回退任务实例已有字段值的情况)
              for(int i=1;i<writeablefields.Length-1;i++)

              {
                 strSql=strSql+","+writeablefields[i];
              }
              strSql=strSql+" from "+ds.Tables[1].Rows[0]["RelatedTable"].ToString()

                   +" where "+identityname.Tables[0].Rows[0]["IdentifiedField"].ToString()

                      +"="+ds.Tables[1].Rows[0]["IdentityFieldValue"].ToString();
              wfields=basecode.SQLExeDataSet(strSql);
              if(wfields == null)
              {
                 Label2.Text="6:"+basecode.BaseSqlErrDes;
                 return;
              }
              TableRow tr;
              TableCell tc;
              TextBox tx;
              for(int j=0;j<wfields.Tables[0].Rows.Count;j++)
              {
                 tr=new TableRow();
                 tc=new TableCell();
                 tc.HorizontalAlign=HorizontalAlign.Right;
                 tc.Width=Unit.Percentage(15);//注意此处用法
                 tc.Text=wfields.Tables[0].Rows[j]["FieldAlias"].ToString();
                 tr.Cells.Add(tc);
                 tc=new TableCell();
                 tc.HorizontalAlign=HorizontalAlign.Left;
                 tx=new TextBox();
                 tx.ID=wfields.Tables[0].Rows[j]["FieldName"].ToString();

                 //单行文本框
                 if(wfields.Tables[0].Rows[j]["ControlType"].ToString() == "1")
                 {
                    tx.Columns=60;
                 }

                 //多行文本框
                 if(wfields.Tables[0].Rows[j]["ControlType"].ToString() == "2")
                 {
                    tx.TextMode=TextBoxMode.MultiLine;
                    tx.Rows=5;
                    tx.Columns=80;
                 }
                 tx.Text=wfields.Tables[1].Rows[0][wfields.Tables[0]

                          .Rows[j]["FieldName"].ToString()].ToString();
                 tc.Controls.Add(tx);
                 tr.Cells.Add(tc);
                 Tbl2.Rows.Add(tr);
               }//for
               //目前已定义的记录集中后面要用到的:ds(包含任务定义记录表和流程实例记录表)、

               //wfields(包含可写字段中文名、控件类型记录表和可写字段值记录表)、

               //identityname(业务表标识字段名).
            }//结束显示字段编辑框的if语句
            //显示当前用户已上传的附件(针对暂时保存和回退任务实例的情况)
            if(ds.Tables[0].Rows[0]["AboutAttached"].ToString().Trim() == "L"

                 || ds.Tables[0].Rows[0]["AboutAttached"].ToString().Trim() == "LR")
            {
               strSql="select ImageID,ImageName from RelatedAttachedImages where

                    ProcessInstanceID="+ds.Tables[1].Rows[0]["ProcessInstanceID"].ToString()

                      +" and TaskInstanceID = "+ViewState["taskinstanceid"].ToString();
               DataSet attachedds=basecode.SQLExeDataSet(strSql);
               if(attachedds != null & attachedds.Tables[0].Rows.Count>=1)
               {
                  TableRow tr;
                  TableCell tc;
                  tr=new TableRow();
                  tc=new TableCell();
                  tc.HorizontalAlign=HorizontalAlign.Right;
                  tc.Width=Unit.Percentage(15);
                  tc.Text="您上传的资料";
                  tr.Cells.Add(tc);
                  tc=new TableCell();
                  tr.Cells.Add(tc);
                  tc=new TableCell();
                  tr.Cells.Add(tc);
                  Tbl3.Rows.Add(tr);
                  HyperLink link;
                  for(int k=0;k<attachedds.Tables[0].Rows.Count;k++)
                  {
                    tr=new TableRow();
                    tc=new TableCell();
                    tc.Width=Unit.Percentage(15);
                    tr.Cells.Add(tc);
                    tc=new TableCell();
                    tc.Width=Unit.Percentage(30);
                    tc.HorizontalAlign=HorizontalAlign.Center;
                    link=new HyperLink();
                    link.Text=attachedds.Tables[0].Rows[k]["ImageName"].ToString();
                    link.NavigateUrl="DisplayImage.aspx?id="

                          +attachedds.Tables[0].Rows[k]["ImageID"].ToString();
                    link.Target="_blank";
                    link.ForeColor=Color.CadetBlue;
                    tc.Controls.Add(link);
                    tr.Cells.Add(tc);

                    //在处理回退的或暂时保存的任务实例时,用户可以删除自己上传的附件
                    tc=new TableCell();
                    LinkButton lbn=new LinkButton();
                    lbn.Text="删除";
                    lbn.ID=attachedds.Tables[0].Rows[k]["ImageID"].ToString();
                    lbn.Click+=new EventHandler(lbn_Click);
                    lbn.Attributes.Add("onClick","JavaScript:return confirm('确定删除吗?')");
                    tc.Controls.Add(lbn);
                    tr.Cells.Add(tc);
                    Tbl3.Rows.Add(tr);
                  }
               }//if
            }//if   
            //点击暂时保存任务实例按钮时先把沟通栏(留言)信息保存到临时表TempSavedMessage(包

            //括过程实例编号、用户编号和审核信息3个字段,结束任务时删除记录)中

            //因为点击删除按钮后首先调用page_load方法,如果不把设置沟通栏控件值的语句放在

            //ispostback判断中,沟通栏控件将始终显示临时表中的值,控件的输入修改将不能保留.
            if(! IsPostBack)
            {
               string processinstanceid=ds.Tables[1].Rows[0]["ProcessInstanceID"].ToString();
               strSql="select TempMessage from TempSavedMessage where ProcessInstanceID="

                       +processinstanceid+" and UserID="+Session["userid"].ToString ();
               DataSet tempmessage=basecode.SQLExeDataSet(strSql);
               if(tempmessage != null)
               {
                  if(tempmessage.Tables[0].Rows.Count>=1)
                  {
                    if(tempmessage.Tables[0].Rows[0]["TempMessage"] == DBNull.Value

                      || tempmessage.Tables[0].Rows[0]["TempMessage"].ToString().Trim() == "")
                        TextBox1.Text="";
                    else
                        TextBox1.Text=

                            tempmessage.Tables[0].Rows[0]["TempMessage"].ToString().Trim();
                  }
               }
            }
            //显示要打印的表格链接按钮
            if(ds.Tables[0].Rows[0]["PrintedTable"] != DBNull.Value & ds.Tables[0]

                 .Rows[0]["PrintedTable"].ToString().Trim() != "")
            {
               string[] printedtablearray=new Tools().StringSplit(ds.Tables[0]

                    .Rows[0]["PrintedTable"].ToString().Trim(),",");
               strSql="select PrintedTableID,PrintedTableName from PrintedTable

                     where PrintedTableID="+printedtablearray[0];

               //i<printedtablearray因为数组最后一项是空字符串
               for(int i=1;i<printedtablearray.Length-1;i++)

               {
                  strSql=strSql+" or PrintedTableID="+printedtablearray[i];
               }
               DataSet printedtableds=basecode.SQLExeDataSet(strSql);
               TableRow tr;
               TableCell tc;
               for(int j=0;j<printedtableds.Tables[0].Rows.Count;j++)
               {
                  if(j==0)//第一行
                  {
                    tr=new TableRow();
                    tc=new TableCell();
                    tc.Width=Unit.Percentage(15);
                    tc.HorizontalAlign=HorizontalAlign.Right;
                    tc.Text="打印表格:";
                    tr.Cells.Add(tc);
                  }
                  else
                  {
                    tr=new TableRow();
                    tc=new TableCell();
                    tc.Width=Unit.Percentage(15);
                    tr.Cells.Add(tc);
                  }
                  tc=new TableCell();
                  tc.HorizontalAlign=HorizontalAlign.Left;
                  LinkButton lbn=new LinkButton();
                  lbn.Text=printedtableds.Tables[0].Rows[j]["PrintedTableName"].ToString();
                  lbn.ID="lbn"+printedtableds.Tables[0].Rows[j]["PrintedTableID"].ToString();
                  lbn.Click+=new EventHandler(printedtablebutton_Click);
                  tc.Controls.Add(lbn);
                  tr.Cells.Add(tc);
                  PTable.Rows.Add(tr);
               }
             }
             //如果是首任务则不显示退回任务按钮
             string processID=ds.Tables[1].Rows[0]["ProcessDefinitionID"].ToString();
             TaskDefinitionClass task=new TaskDefinitionClass();
             if(task.IsFirstTask(ViewState["taskID"].ToString(),processID))
             {
                Button3.Visible=false;
                DropDownList1.Visible=false;
             }
             //如果是or split任务,则显示迁移按钮(在同一行显示)
             string nodelogic=task.GetLogicTypeOfNode(ViewState["taskID"].ToString());
             ViewState["NodeLogic"]=nodelogic;

             //AndJoin&OrSplit情况针对当前任务既是并行分支的合并节点又是选择路由的分支节点
             if(nodelogic == "OrSplit" || nodelogic == "AndJoin&OrSplit"

                   || nodelogic == "OrJoin&OrSplit")
             {
                //不显示完成任务按钮等
                Button2.Visible=false;

                string taskname=task.GetTaskNameByID(ViewState["taskID"].ToString());
                //获取所有后继节点名称.or split的后继都是任务节点.
                DataSet transds=new Transition().GetNextNodesName(taskname,processID);
                TableRow tr;
                TableCell tc;
                Button btn;
                tr=new TableRow();
                for(int j=0;j<transds.Tables[0].Rows.Count;j++)
                {
                   btn=new Button();
                   btn.Text=transds.Tables[0].Rows[j][0].ToString();
                   btn.ID=transds.Tables[0].Rows[j][0].ToString();
                   btn.Click+=new EventHandler(TransitionBtn_Click);
                   tc=new TableCell();
                   tc.Width=Unit.Percentage(15);
                   tc.HorizontalAlign=HorizontalAlign.Left;     
                   tc.Controls.Add(btn);     
                   tr.Cells.Add(tc);

                }
                TransTbl.Rows.Add(tr);
             }
          }//page_load()

          //暂时保存任务
          private void Button1_Click(object sender, System.EventArgs e)
          {
             //获取业务表数据
             string relatedtable=

                  ds.Tables[1].Rows[0]["RelatedTable"].ToString();
             string identityfield=

                  identityname.Tables[0].Rows[0]["IdentifiedField"].ToString();
             string fieldvalue=ds.Tables[1].Rows[0]["IdentityFieldValue"].ToString();
             string processinstanceid=

                  ds.Tables[1].Rows[0]["ProcessInstanceID"].ToString();   
             //保存可写字段值
             if(! Savefields(relatedtable,identityfield,fieldvalue,processinstanceid))
                return;
             if(! saveTempMessage(processinstanceid))
                return;
             //处理附件上传
             if(ds.Tables[0].Rows[0]["AboutAttached"].ToString().Trim() == "L"

                  || ds.Tables[0].Rows[0]["AboutAttached"].ToString().Trim() == "LR")
             {
                if(! SaveAttached(processinstanceid,relatedtable,identityfield,fieldvalue))
                   return;
             }

             //返回任务列表
             Response.Redirect("TaskInstanceList.aspx");
          }

          ......(待续)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 u盘里东西乱码了怎么办 手机指环支架松了怎么办 运动完放屁很臭怎么办 腾讯柒个我要会员怎么办 海风吹的变黑了怎么办 冻豆角炖不烂糊怎么办 腿被热水烫了怎么办 肉和冰箱冻住了怎么办 解冻的肉臭了怎么办 临时用电电缆线破皮怎么办 阳台按自来水墙面脱落怎么办 墙被暖气熏黑了怎么办 下水管比地砖低怎么办 马桶下水管短了怎么办 下水管比马桶低怎么办? 寻常疣液氮冷冻后该怎么办 寻常疣冷冻后起水泡胀痛怎么办 冷冻后大水泡痒怎么办 19岁的宫颈糜烂怎么办 发面酸了没有碱怎么办 面发时间长酸了怎么办 丽珠兰打完红肿怎么办 美的冰柜冷藏室结冰怎么办 胃下午和晚上痛怎么办 二胡弓毛粗拉外弦触到里弦怎么办 电视成黑白的了怎么办 城市居民无钱入社保医保怎么办 老婆说离婚又找不到怎么办 爱一个人太累了怎么办 车凹陷漏底漆了怎么办 燕子窝掉下来了怎么办 文科没考上一本怎么办 学校午休小学孩子吵闹怎么办 老鼠死在空调里怎么办 公务员老公四十岁想辞职怎么办 打胎5次又怀孕怎么办 墙纸颜色太淡了怎么办 皮子腺囊肿有点疼痛怎么办 地板颜色选浅了怎么办 地板买的太暗了怎么办 木地板贴好后发现颜色不好看怎么办