Esempio n. 1
0
        public static void getProcesser()
        {
            Context       context = Context.Current;
            FlowDataTable table   = context.FormDataSet.Tables["TestFlow"];                                                           //表单中的表名称
            string        fileid  = Convert.ToString(table.Rows[0]["Attachment"]);                                                    //获取附件ID;
            string        file    = System.AppDomain.CurrentDomain.BaseDirectory + @"Attachments\" + Attachment.FileIDToPath(fileid); //获取服务器端系统中存附件的路径
            string        files   = System.AppDomain.CurrentDomain.BaseDirectory + @"sAttachments\" + fileid + ".xls";                //获取新建路径sAttachments(前提是已经有创建好此目录)

            System.IO.File.Copy(file, files, true);                                                                                   //复制到新的路径;

            List <String> name = new List <String>();                                                                                 //定义处理人姓名列表集合

            FileStream   fs    = File.OpenRead(files);                                                                                //打开文件
            HSSFWorkbook book  = new HSSFWorkbook(fs);
            HSSFSheet    sheet = (HSSFSheet)book.GetSheetAt(0);

            for (int r = 1; r <= sheet.LastRowNum; r++)
            {
                HSSFRow  row      = (HSSFRow)sheet.GetRow(r);
                HSSFCell cellname = (HSSFCell)row.GetCell(1);//认为处理人在excel中位于B列,可根据实际情况修改
                if (!name.Contains(Convert.ToString(cellname.StringCellValue)))
                {
                    name.Add(Convert.ToString(cellname.StringCellValue));
                }
            }

            //把集合中的处理人姓名拼接成“A,B,C”格式
            string displayname = "";

            foreach (string disname in name)
            {
                displayname += "'" + disname + "',";
            }
            displayname = displayname.Substring(0, displayname.Length - 1);

            string sqlStr    = string.Format(@"select Account  from BPMSysUsers where DisplayName in ({0})", displayname);
            string fzaccount = "";

            using (IDataReader reader = context.IDataProvider.ExecuteReader(sqlStr.ToString()))
            {
                while (reader.Read())
                {
                    fzaccount += Convert.ToString(reader["Account"]) + ",";
                }
            }
            fzaccount = fzaccount.Substring(0, fzaccount.Length - 1); //把集合中的处理人账号拼接成“A,B,C”格式
            //以上都是从excel中读取数据,然后获取账号

            //以下是根据账号返回流程处理人
            if (fzaccount.Contains(","))//说明有多个处理人
            {
                MemberCollection members = new MemberCollection();
                string[]         value   = fzaccount.Split(',');
                for (int i = 0; i < value.Length; i++)
                {
                    string account = Convert.ToString(value[i]);
                    if (!members.ContainsUser(account))
                    {
                        members.Add(Member.FromAccount(account));
                    }
                }
                return(members);
            }
            else
            {
                return(Member.FromAccount(fzaccount));
            }
        }