Zugriff auf Profile
Man kann auf Profilgruppen oder einzelne Profile gefiltert nach Berechtigungsart zugreifen.
Profile werden nicht über eine Liste ausgelesen, sondern über eine Baumstruktur. Das höchste Element (root) ist wiederrum ein leeres PrintingProfile Objekt, dessen Kind (Child) Objekte die tatsächlichen Profile repräsentieren.
Verwenden der PrintingPool Klasse
Nur über das PrintingPool Objekt kann auf die Profile zugegriffen werden. Die Klasse vefügt zudem über gängige Funktionen zum arbeiten mit Profilen.
Beispiel: Das Root Element einer Berechtigungsgruppe abrufen
public void main()
{
// Private Profile (Root Element)
PrintingProfile privateProfiles = GetPrivateProfiles();
// Public Profile (Root Element)
PrintingProfile publicProfiles = GetPublicProfiles();
// Globale Profile (Root Element)
PrintingProfile globalProfiles = GetGlobalProfiles();
// Alle Kind Elemente des privaten Root Profiles
ObservableCollection<PrintingProfile> children = privateProfiles.Children;
}
// Gibt das Root Element der privaten Profile zurück
public PrintingProfile GetPrivateProfiles()
{
return pool.PrintingProfiles[AccessLevel.Private];
}
// Gibt das Root Element der public Profile zurück
public PrintingProfile GetPublicProfiles()
{
return this.Pool.PrintingProfiles[AccessLevel.Public];
}
// Gibt das Root Element der globalen Profile zurück
public PrintingProfile GetGlobalProfiles()
{
return this.Pool.PrintingProfiles[AccessLevel.Global];
}
Beispiel: ein bestimmtes Profil einer Berechtigungsgruppe abrufen
public void main()
{
// Hole das Root Profilelement aus einer Berechtigungsgruppe Public
PrintingProfile publicRoot = pool.GetProfileRoot(AccessLevel.Public);
// Hole das Profil mit dem Namen "XY-Plot"
PrintingProfile xyPlot = pool.GetProfile(AccessLevel.Public, "XY-Plot");
// Hole das Profil anhand der ID mit ID = 23
PrintingProfile plot23 = pool.GetProfile(AccessLevel.Private, 23);
PrintingProfile privateProfileToday = GetProfileByDate(DateTime.Today)
}
Verwenden der PrintingProfile Klasse
Mit dem PrintingProfile Objekt stehen weitere Methoden zur verfügung, mit denen man detailiertere Logik bauen kann
Hole Profil anhand des Namen oder der ID
public void main()
{
PrintingProfile profile = pool.PrintingProfiles[AccessLevel.Global];
// Holt sich das erste gefundene Profil mit dem namen = "idontknow"
string name = "idontknow";
PrintingProfile pByName = profile.First(name);
// Holt sich das erste gefundene Profil mit der ID = 3
int id = 3;
PrintingProfile pById = profile.First(id);
}
So könnte man z.B eine Methode bauen, mit der man überprüft ob ein bestimmtes Profil existiert, egal in welcher Berechtigungsgruppe
public bool Exists(string name)
{
bool exists = false;
// Gehe alle Berechtigungsgruppen durch
foreach (PrintingProfile prof in Pool.PrintingProfiles.Values)
{
// Prüfe ob Profil mit dem Namen name existiert
if(prof.First(name) is PrintingProfile)
{
exists = true;
break;
}
}
return exists;
}
Verwenden eines Lambda
Die Klasse PrintingProfile enthält eine ForEach implementierung, mit der es möglich ist, alle elemente in der Baumstruktur zu iterieren. Damit kann man komplexere Suchfunktionen oder Überprüfungen einbauen.
// Gib das erste Element zurück, das Heute erstellt wurde (DateTime.Today)
private PrintingProfile GetProfileByDate(DateTime date)
{
PrintingProfile profile = PrintingProfile.Default;
pool.PrintingProfiles[AccessLevel.Private].ForEach(p =>
{
if (p.CreationDate.Equals(date.ToString()))
{
profile = p;
return;
}
});
return profile;
}
// Anzahl der Profile die von einem Benutzer (parameter username) erstellt wurden
public int CountProfilesByUser(string username)
{
int count = 0;
PrintingProfile profile = pool.PrintingProfiles[AccessLevel.Global];
profile.ForEach(p =>
{
if(p.User.Equals(username))
{
count++;
}
});
return count
}