예제 #1
0
    public string GenerWorkNode(string fk_flow, int fk_node, Int64 workID, Int64 fid, string userNo)
    {
        try
        {
            Emp emp = new Emp(userNo);
            BP.Web.WebUser.SignInOfGener(emp);

            MapData md = new MapData();
            md.No = "ND" + fk_node;
            if (md.RetrieveFromDBSources() == 0)
            {
                throw new Exception("装载错误,该表单ID=" + md.No + "丢失,请修复一次流程重新加载一次.");
            }

            DataSet myds = md.GenerHisDataSet();

            // 节点数据.
            Node nd = new Node(fk_node);
            myds.Tables.Add(nd.ToDataTableField("WF_Node"));

            //节点标签数据.
            BtnLab btnLab = new BtnLab(fk_node);
            myds.Tables.Add(btnLab.ToDataTableField("WF_BtnLab"));

            // 流程数据.
            Flow fl = new Flow(fk_flow);
            myds.Tables.Add(fl.ToDataTableField("WF_Flow"));

            //.工作数据放里面去, 放进去前执行一次装载前填充事件.
            BP.WF.Work wk = nd.HisWork;
            wk.OID = workID;
            wk.RetrieveFromDBSources();
            wk.ResetDefaultVal();
            // 执行一次装载前填充.
            string msg = md.FrmEvents.DoEventNode(FrmEventList.FrmLoadBefore, wk);
            if (string.IsNullOrEmpty(msg) == false)
            {
                return(msg);
            }
            myds.Tables.Add(wk.ToDataTableField("Main"));

            #region 获取明细表数据,并把它加入dataset里.
            if (md.MapDtls.Count > 0)
            {
                foreach (MapDtl dtl in md.MapDtls)
                {
                    GEDtls      dtls = new GEDtls(dtl.No);
                    QueryObject qo   = null;
                    try
                    {
                        qo = new QueryObject(dtl);
                        switch (dtl.DtlOpenType)
                        {
                        case DtlOpenType.ForEmp:      // 按人员来控制.
                            qo.AddWhere(GEDtlAttr.RefPK, workID);
                            qo.addAnd();
                            qo.AddWhere(GEDtlAttr.Rec, WebUser.No);
                            break;

                        case DtlOpenType.ForWorkID:     // 按工作ID来控制
                            qo.AddWhere(GEDtlAttr.RefPK, workID);
                            break;

                        case DtlOpenType.ForFID:     // 按流程ID来控制.
                            qo.AddWhere(GEDtlAttr.FID, workID);
                            break;
                        }
                    }
                    catch
                    {
                        dtls.GetNewEntity.CheckPhysicsTable();
                    }
                    DataTable dtDtl = qo.DoQueryToTable();
                    dtDtl.TableName = dtl.No; //修改明细表的名称.
                    myds.Tables.Add(dtDtl);   //加入这个明细表.
                }
            }
            #endregion

            //把流程信息表发送过去.
            GenerWorkFlow gwf = new GenerWorkFlow();
            gwf.WorkID = workID;
            myds.Tables.Add(gwf.ToDataTableField("WF_GenerWorkFlow"));

            if (gwf.WFState == WFState.Forward)
            {
                //如果是转发.
                BP.WF.ForwardWorks fws = new ForwardWorks();
                fws.Retrieve(ForwardWorkAttr.WorkID, workID, ForwardWorkAttr.FK_Node, fk_node);
                myds.Tables.Add(fws.ToDataTableField("WF_ForwardWork"));
            }

            if (gwf.WFState == WFState.ReturnSta)
            {
                //如果是退回.
                ReturnWorks rts = new ReturnWorks();
                rts.Retrieve(ReturnWorkAttr.WorkID, workID, ReturnWorkAttr.ReturnToNode, fk_node);
                myds.Tables.Add(rts.ToDataTableField("WF_ForwardWork"));
            }

            if (gwf.WFState == WFState.HungUp)
            {
                //如果是挂起.
                HungUps hups = new HungUps();
                hups.Retrieve(HungUpAttr.WorkID, workID, HungUpAttr.FK_Node, fk_node);
                myds.Tables.Add(hups.ToDataTableField("WF_HungUp"));
            }

            //放入track信息.
            Paras ps = new Paras();
            ps.SQL = "SELECT * FROM ND" + int.Parse(fk_flow) + "Track WHERE WorkID=" + BP.SystemConfig.AppCenterDBVarStr + "WorkID";
            ps.Add("WorkID", workID);
            DataTable dt = DBAccess.RunSQLReturnTable(ps);
            dt.TableName = "Track";
            myds.Tables.Add(dt);

            //写入数据.
            myds.WriteXml("c:\\sss.xml");

            //转化成它所能识别的格式.
            return(Silverlight.DataSetConnector.Connector.ToXml(myds));
        }
        catch (Exception ex)
        {
            Log.DebugWriteError(ex.StackTrace);
            return("@生成工作FK_Flow=" + fk_flow + ",FK_Node=" + fk_node + ",WorkID=" + workID + ",FID=" + fid + "错误,错误信息:" + ex.Message);
        }
    }