Tidigare i det här forumet så fick jag hjälp med att populera (Weeeeeee! Jag har greppat ett fackord för att fylla värden i olika objekt) en listView.
Efter en del funderande och pulande så har jag noterat att jag skulle vilja använda detta på fler ställen i min lilla AD Applikation. Och det gör att jag vill ha det gjort redan vid inläsningen från AD:et till den första arraylisten... (Om det går)
Under denna tid som flutit förbi har den förändrats något också. Nu har jag fösökt att göra den mer skalbar. Alltså delat in koden i olika nivåer för att kunna "modifiera på en mindre yta" vid eventuella förändringsbehov.
/Gui (Vad användaren ser, innehåller mest formulär)
/Regler (Metoder som anropas utifrån vad användren gör)
/HamtaData (En våning som bara tar hand om AD & Databas åtkomst)
Denna kod ligger nu i det nedersta "lagret/våningen" HamtaData
internal IList HamtaADPersoner(string fNamn, string eNamn, string avd)
{
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry("LDAP://domän.se", "User", "Password");
System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry);
mySearcher.Filter = "(&(objectCategory=person)(objectClass=user)(givenname="+fNamn +"*" +")(sn="+eNamn +"*" +")(department="+ avd +"*" +")(samaccountname=*))";
ArrayList personList = new ArrayList();
foreach(System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
{
System.DirectoryServices.DirectoryEntry de = resEnt.GetDirectoryEntry();
// Läs in värden till arrayen som nyttjas av ListViewern några lager upp.
personList.Add(new SSAB.EFH.Common.EFHClasses.Person(de.Properties["department"].Value.ToString(), de.Properties["name"].Value.ToString(), string.Empty, string.Empty, de.Properties["samaccountname"].Value.ToString()));
}
return personList;
}
Och så här ser det ut i Gui nivån:
ArrayList personer = personHamtare.HamtaADPerson(textBoxFornamn.Text, textBoxEfternamn.Text, textBoxAvdelning.Text);
char[] testchar = {'.', ',', ' '};
foreach (EFHClasses.Person person in personer)
{
int pos = person.Namn.IndexOfAny(testchar);
if (pos > -1)
{
string[] namn = person.Namn.Split(testchar);
if (namn[1].Length > 1)
{
ListViewItem personListItem = new ListViewItem(namn[1]);
personListItem.SubItems.Add(namn[0]);
personListItem.SubItems.Add(person.AvdelningsNummer);
personListItem.SubItems.Add(person.EnhetAlias);
listViewAnvandare.Items.Add(personListItem);
}
}
}
Tack för uppmärksamheten
Mvh /T
Ps. Fortsätter givetvis med mitt tunga "Trial And Error"
Med samma foreach som ovan vill jag bara ha följande...
// splitta name i 2 delar där... {' ', ',', '.'} förekommer (samma för båda)
// Om person.ForNamn efterfrågas returnera fNamn
// Om person.EfterNamn efterfrågas returnera eNamn