314 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Data;
 | |
| using System.Drawing;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Threading.Tasks;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| using System.DirectoryServices;
 | |
| using System.IO;
 | |
| using CsvHelper;
 | |
| using System.Globalization;
 | |
| 
 | |
| namespace Project._Common
 | |
| {
 | |
| 
 | |
|     public partial class fADSUserList : FCOMMON.fBase
 | |
|     {
 | |
|         public fADSUserList()
 | |
|         {
 | |
|             InitializeComponent();
 | |
|         }
 | |
| 
 | |
|         private void fADSUserList_Load(object sender, EventArgs e)
 | |
|         {
 | |
|             EnsureVisibleAndUsableSize();
 | |
|             this.lbDomain.Text = this.DomainName();
 | |
|             this.btInsert.Visible = (FCOMMON.info.Login.level > 9);
 | |
|             this.tbEntry.Text = "LDAP://OU=Office,OU=Users,OU=People,OU=K4,DC=kr,DC=ds,DC=amkor,DC=com";
 | |
|             this.tbEntry.Enabled = this.btInsert.Visible;
 | |
|         }
 | |
|         public string DomainName()
 | |
|         {
 | |
|             var objRootDSE = new DirectoryEntry("LDAP://RootDSE");
 | |
|             return objRootDSE.Properties["defaultNamingContext"][0].ToString();
 | |
|         }
 | |
| 
 | |
|         private void toolStripButton1_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             this.listView1.Items.Clear();
 | |
|             this.listView1.Columns.Clear();
 | |
|             this.listView1.CheckBoxes = true;
 | |
|             this.listView1.Columns.Add("sn");
 | |
|             this.listView1.Columns.Add("cn");
 | |
|             this.listView1.Columns.Add("disp");
 | |
|             this.listView1.Columns.Add("dept");
 | |
|             this.listView1.Columns.Add("title");
 | |
|             this.listView1.Columns.Add("tel");
 | |
|             this.listView1.Columns.Add("mail");
 | |
|             this.listView1.Columns.Add("pager");
 | |
|             this.listView1.Columns.Add("empno");
 | |
|             this.listView1.Columns.Add("when");
 | |
|             this.listView1.Visible = false;
 | |
| 
 | |
|             this.listView1.View = View.Details;
 | |
| 
 | |
|             string[] propliest = new string[] { "whenCreated", "telephonenumber", "title", "employeeNumber", "department", "displayName", "mail", "pager", "sn", "cn" };
 | |
| 
 | |
|             Boolean skipuser = false;
 | |
|             string dept = string.Empty;
 | |
|             string whencre = string.Empty;
 | |
|             string empno = string.Empty;
 | |
|             string disp = string.Empty;
 | |
|             string cn = string.Empty;
 | |
|             string sn = string.Empty;
 | |
|             string mail = string.Empty;
 | |
|             string title = string.Empty;
 | |
|             string pager = string.Empty;
 | |
|             string tel = string.Empty;
 | |
| 
 | |
|             var deParent = new DirectoryEntry(tbEntry.Text);
 | |
| 
 | |
|             string Nodename = "";
 | |
|             try
 | |
|             {
 | |
|                 Nodename = deParent.SchemaClassName;
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 Util.MsgE(ex.Message + "\n" + tbEntry.Text);
 | |
|                 Nodename = string.Empty;
 | |
|             }
 | |
|             if (Nodename != "")
 | |
|             {
 | |
|                 if (deParent.Name.StartsWith("CN"))
 | |
|                 {
 | |
|                     //특정사용자 조회
 | |
| 
 | |
|                     foreach (string listIter in propliest)
 | |
|                     {
 | |
|                         foreach (object Iter in deParent.Properties[listIter.ToString()])
 | |
|                         {
 | |
|                             string strvalue = Iter.ToString();
 | |
|                             switch (listIter.ToString().ToLower())
 | |
|                             {
 | |
|                                 case "department":
 | |
|                                     dept = strvalue;
 | |
|                                     // var search = toolStripTextBox1.Text.Trim();
 | |
|                                     // if (search != "") if (dept.IndexOf(search) == -1) skipuser = true;
 | |
|                                     break;
 | |
|                                 case "whencreated": whencre = strvalue; break;
 | |
|                                 case "title": title = strvalue; break;
 | |
|                                 case "telephonenumber": tel = strvalue; break;
 | |
|                                 case "employeenumber": empno = strvalue; break;
 | |
|                                 case "displayname": disp = strvalue; break;
 | |
|                                 case "mail": mail = strvalue; break;
 | |
|                                 case "pager": pager = strvalue; break;
 | |
|                                 case "sn": sn = strvalue; break;
 | |
|                                 case "cn": cn = strvalue; break;
 | |
|                             }
 | |
|                             // if (skipuser) break;
 | |
|                         }
 | |
|                         // if (skipuser) break;
 | |
|                     }
 | |
| 
 | |
| 
 | |
|                     var lv = this.listView1.Items.Add(sn);
 | |
|                     lv.Checked = true;
 | |
|                     lv.SubItems.Add(cn);
 | |
|                     lv.SubItems.Add(disp);
 | |
|                     lv.SubItems.Add(dept);
 | |
|                     lv.SubItems.Add(title);
 | |
|                     lv.SubItems.Add(tel);
 | |
|                     lv.SubItems.Add(mail);
 | |
|                     lv.SubItems.Add(pager);
 | |
|                     lv.SubItems.Add(empno);
 | |
|                     lv.SubItems.Add(whencre);
 | |
| 
 | |
| 
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     foreach (DirectoryEntry deChild in deParent.Children)
 | |
|                     {
 | |
|                         skipuser = false;
 | |
|                         dept = string.Empty;
 | |
|                         whencre = string.Empty;
 | |
|                         empno = string.Empty;
 | |
|                         disp = string.Empty;
 | |
|                         cn = string.Empty;
 | |
|                         sn = string.Empty;
 | |
|                         mail = string.Empty;
 | |
|                         title = string.Empty;
 | |
|                         pager = string.Empty;
 | |
|                         tel = string.Empty;
 | |
| 
 | |
|                         foreach (string listIter in propliest)
 | |
|                         {
 | |
|                             foreach (object Iter in deChild.Properties[listIter.ToString()])
 | |
|                             {
 | |
|                                 string strvalue = Iter.ToString();
 | |
|                                 switch (listIter.ToString().ToLower())
 | |
|                                 {
 | |
|                                     case "department":
 | |
|                                         dept = strvalue;
 | |
|                                         var search = toolStripTextBox1.Text.Trim();
 | |
|                                         if (search != "") if (dept.IndexOf(search) == -1) skipuser = true;
 | |
|                                         break;
 | |
|                                     case "whencreated": whencre = strvalue; break;
 | |
|                                     case "title": title = strvalue; break;
 | |
|                                     case "telephonenumber": tel = strvalue; break;
 | |
|                                     case "employeenumber": empno = strvalue; break;
 | |
|                                     case "displayname": disp = strvalue; break;
 | |
|                                     case "mail": mail = strvalue; break;
 | |
|                                     case "pager": pager = strvalue; break;
 | |
|                                     case "sn": sn = strvalue; break;
 | |
|                                     case "cn": cn = strvalue; break;
 | |
|                                 }
 | |
|                                 if (skipuser) break;
 | |
|                             }
 | |
|                             if (skipuser) break;
 | |
|                         }
 | |
| 
 | |
|                         if (sn == "" || pager == "" || sn.ToUpper().StartsWith("k4") || sn.ToUpper().StartsWith("test")) skipuser = true;
 | |
|                         if (skipuser) continue;
 | |
|                         var lv = this.listView1.Items.Add(sn);
 | |
|                         lv.Checked = true;
 | |
|                         lv.SubItems.Add(cn);
 | |
|                         lv.SubItems.Add(disp);
 | |
|                         lv.SubItems.Add(dept);
 | |
|                         lv.SubItems.Add(title);
 | |
|                         lv.SubItems.Add(tel);
 | |
|                         lv.SubItems.Add(mail);
 | |
|                         lv.SubItems.Add(pager);
 | |
|                         lv.SubItems.Add(empno);
 | |
|                         lv.SubItems.Add(whencre);
 | |
| 
 | |
| 
 | |
|                         if (listView1.Items.Count > 500) break;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
| 
 | |
|             FCOMMON.Util.MsgI("exit");
 | |
|             this.listView1.Visible = true;
 | |
|         }
 | |
| 
 | |
|         private void btInsert_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             System.Text.StringBuilder sb = new StringBuilder();
 | |
|             var items = this.listView1.CheckedItems;
 | |
|             sb.AppendLine("현재 목록의 선택된 자료를 입력하시겠습니까?");
 | |
|             sb.AppendLine("건수 : " + items.Count.ToString());
 | |
|             var dlg = FCOMMON.Util.MsgQ(sb.ToString());
 | |
|             if (dlg != System.Windows.Forms.DialogResult.Yes) return;
 | |
| 
 | |
|             this.prb1.Maximum = items.Count;
 | |
|             this.prb1.Value = 0;
 | |
|             foreach (ListViewItem item in items)
 | |
|             {
 | |
| 
 | |
|                 string sn = item.SubItems[0].Text;  //이름
 | |
|                 string cn = item.SubItems[1].Text;  //숏네임
 | |
|                 string disp = item.SubItems[2].Text;// 디스플레이네임
 | |
|                 string dept = item.SubItems[3].Text; // lv.SubItems.Add(dept);
 | |
|                 string title = item.SubItems[4].Text;// lv.SubItems.Add(title);
 | |
|                 string tel = item.SubItems[5].Text; // lv.SubItems.Add(tel);
 | |
|                 string mail = item.SubItems[6].Text; // lv.SubItems.Add(mail);
 | |
|                 string pager = item.SubItems[7].Text; // lv.SubItems.Add(pager);
 | |
|                 string empno = item.SubItems[8].Text; // lv.SubItems.Add(empno);
 | |
|                 string whencre = item.SubItems[9].Text; // lv.SubItems.Add(whencre);
 | |
| 
 | |
|                 try
 | |
|                 {
 | |
|                     //이 대상의 id가 잇는지 체크한다.
 | |
|                     if (taUser.ExistID(pager) > 0)
 | |
|                     {
 | |
|                         taUser.UpdateDept(dept, sn, title, pager);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         taUser.InsertADSInfo(
 | |
|                         pager, disp, sn, dept,
 | |
|                         mail, tel, empno, title,
 | |
|                         whencre,
 | |
|                         "Auto Gen", FCOMMON.info.Login.no, DateTime.Now);
 | |
|                     }
 | |
| 
 | |
|                 }
 | |
|                 catch (Exception eX)
 | |
|                 {
 | |
|                     Console.WriteLine(sn + eX.Message);
 | |
|                 }
 | |
| 
 | |
|                 this.prb1.Value += 1;
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         private void allSelectToolStripMenuItem_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             foreach (ListViewItem item in this.listView1.Items)
 | |
|                 item.Checked = true;
 | |
|         }
 | |
| 
 | |
|         private void deSelectToolStripMenuItem_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             foreach (ListViewItem item in this.listView1.Items)
 | |
|                 item.Checked = !item.Checked;
 | |
|         }
 | |
| 
 | |
|         private void unSelectToolStripMenuItem_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             foreach (ListViewItem item in this.listView1.Items)
 | |
|                 item.Checked = false;
 | |
|         }
 | |
| 
 | |
|         private void toolStripButton2_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             var sd = new SaveFileDialog();
 | |
|             sd.Filter = "csv|*.csv";
 | |
|             if (sd.ShowDialog() != DialogResult.OK) return;
 | |
|             var records = new List<List<string>>();
 | |
|             var data = new List<object>();
 | |
| 
 | |
|             //데이터입력            
 | |
|             foreach (ListViewItem item in this.listView1.Items)
 | |
|             {
 | |
| 
 | |
| 
 | |
|                 data.Add(new
 | |
|                 {
 | |
|                     sn = item.SubItems[0].Text,
 | |
|                     cn =    item.SubItems[1].Text,
 | |
|                     disp =  item.SubItems[2].Text,
 | |
|                     dept =  item.SubItems[3].Text,
 | |
|                     title = item.SubItems[4].Text,
 | |
|                     tel =   item.SubItems[5].Text,
 | |
|                     mail =  item.SubItems[6].Text,
 | |
|                     pager = item.SubItems[7].Text,
 | |
|                     empno = item.SubItems[8].Text,
 | |
|                     when = item.SubItems[9].Text,
 | |
|                 });
 | |
| 
 | |
|                 //records.Add(data);
 | |
|             }
 | |
|             using (var writer = new StreamWriter(sd.FileName,false, System.Text.Encoding.Default))
 | |
|             using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
 | |
|             {
 | |
|                 //foreach (var item in records)
 | |
|                 //{
 | |
|                 //    csv.WriteRecord(item);
 | |
|                 //}
 | |
| 
 | |
|                 csv.WriteRecords(data);
 | |
|             }
 | |
|             FCOMMON.Util.MsgI("저장완료");
 | |
|         }
 | |
|     }
 | |
| }
 | 
