Infopath Formlarında Kimlik Doğrulaması ile programsal olarak Form Görüntüsünü Değiştirme
Formda, hangi
kullanıcının hangi görüntüyü görmesi gerektiğini belirlemek için öncelikli
olarak kimlik doğrulamaları yapacağımız görünümleri tasarlamamız gerekir.
Mesela ,ilk
görünümde kullanıcı kendisi için gerekli talebi yapmış, yöneticisini seçmiş ve formun
yayınlandığı form kitaplığına kaydetmiştir.
View1
Form
kitaplığına kaydedilien form iş akışlarının çalışmasıyla, seçtiği Birim yöneticisine
yönlendirilir.
View2
Kişi
doğrulamaları form yüklenirken yapılacağı için yükleme olayını tetikleyecek
metod yazıyoruz.
private void View2(LoadingEventArgs
e)
{
//dorop-down
list box'ta seçilen yöneticinin adını b değişkenine atıyoruz.Kısaltma için.
string
b = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:per",
NamespaceManager).Value;
string department = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:dep", NamespaceManager).Value;
if((b
!= "Seçiniz"))
{
//Formu
açan yöneticinin userid'sini c değişkenine eşitliyoruz.
string c = Application.User.UserName;
//ADManagers()
metoduyla ADmanager.xml belgesini okutuyoruz.
DataSet ds =ADManagers();
DataTable
dt = ds.Tables[0];
//onay
ve red değişkenleriyle değişiklik talebi yapılan formun onay veya red
değerlerini tutuyoruz.
bool
onay = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:birimmuduronay",
NamespaceManager).ValueAsBoolean;
bool
red = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:birimmudurred",
NamespaceManager).ValueAsBoolean;
for
(int i = 0; i < dt.Rows.Count; i++)
{
//userid
yöneticiid esit ise ve onay ve red alanları işaretli değilse yöneticiye
2.görüntüyü açtırıyoruz.
if
(dt.Rows[i]["userid"].ToString()
== c && (onay==false) && (red==false))
{
//Department
değerine göre yöneticileri filtreliyoruz
//iş
akışlarında kullanılmak için bu bölümdeki yöneticilerin mail adreslerini
//"/my:alanlarım/my:byoneticiler"
alanına set ediyoruz.
DataRow[]
z = dt.Select("Department='"+department+"'");
for
(int j = 0; j < z.Length; j++)
{
string bymail = z[j].ItemArray[1].ToString();
bymail += ";" +
MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:byoneticiler",
NamespaceManager).Value;
MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:byoneticiler",
NamespaceManager).SetValue(bymail);
}
e.SetDefaultView("view2");
}
}
}
}
Ve bu metoduda form yüklenirken çağırıyoruz.
public void FormEvents_Loading(object
sender, LoadingEventArgs e)
{
View2(e);
}
Bölüm yöneticisi Formu onaylarsa,
kullanıcının talebinin gerçekleşmesi için onay Bilgi işlem Yöneticilerine iş akışları
ile yönlendirilecek.
View3
public void
Bilgiislemyoneticiler(LoadingEventArgs e)
{
DataSet
ds = ADManagers();
DataTable dt = ds.Tables[0];
DataRow[]
z = dt.Select("Department='Bilisim
Teknolojileri Mudurlugu'");
string onayadı = "";
string
a = "";
string
userid = "";
string
appuser = "";
for
(int j = 0; j < z.Length; j++)
{
a = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:username", NamespaceManager).Value;
userid =
z[j].ItemArray[0].ToString();
appuser = Application.User.UserName;
bool onay MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:birimmuduronay", NamespaceManager).ValueAsBoolean;
bool
red = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:birimmudurred",
NamespaceManager).ValueAsBoolean;
bool
bimonay = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:bimonay",
NamespaceManager).ValueAsBoolean;
bool bimred = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:bimred", NamespaceManager).ValueAsBoolean;
//birim
yöneticisi tarafından onaylanan form bilgiişlem yöneticisinin
//onayına
sunulması için gereken şartlar.
if
((onay == true) && (userid == appuser)
&& a != "" &&
(bimonay == false))
{
string
bymail = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:byoneticiler",
NamespaceManager).Value;
e.SetDefaultView("view3");
//Form
onaylandığı zaman diğer yöneticilere formun onaylandığına dair
//bilgi
mailinin gönderilmesi
onayadı =
z[j].ItemArray[1].ToString();
MainDataSource.CreateNavigator().SelectSingleNode("my:alanlarım/my:onayadi",
NamespaceManager).SetValue(onayadı);
//GetFilteredData
metoduyla yöneticiler arasından formu onaylayan yöneticiyi filtereleme
string filteredData = kd.GetFilteredData(bymail, onayadı); MainDataSource.CreateNavigator().SelectSingleNode("my:alanlarım/my:bilgimail", NamespaceManager).SetValue(filteredData);
}
//birim
müdürü Kullanıcının talebini red ettiği zaman kullanıcının göreceği form
görüntüsü
if
((red == true))
{
e.SetDefaultView("userred");
}
//bilgi
işlem yöneticisi talebi red ettiği zaman birim müdürünün göreceği form
görüntüsü
if
(bimred == true)
{
e.SetDefaultView("YoneticiRed");
}
}
}
public string
GetFilteredData(string source, string filter)
{
string[]
sourceSplitList = source.Split(new string[] { ";"
}, StringSplitOptions.RemoveEmptyEntries);
string[]
filterSplitList = filter.Split(new string[] { ";"
}, StringSplitOptions.RemoveEmptyEntries);
List<string> filterList = new
List<string>(filterSplitList);
StringBuilder
builder = new StringBuilder();
for (int i = 0; i < sourceSplitList.Length; ++i)
{
if
(!filterList.Contains(sourceSplitList[i]))
{
builder.Append(sourceSplitList[i]);
builder.Append(";");
}
}
return
builder.ToString();
}
}
Ve bu metoduda form yüklenirken çağırıyoruz.
public void
FormEvents_Loading(object sender, LoadingEventArgs e)
{
View2(e);
Bilgiislemyoneticiler(e);
}
Eger Form birim müdürü tarafından form Red edilirse kullanıcıya ilgili iş akışları yönlendirilir ve userred görünümü açılır.
userred
Eğer bilgi işlem yöneticisi formu onaylarsa ;gerekli işlemlerin
yapılması için form bu işlemi tamamlayacak destek personellerine yönlendirilir.
View4
Bu görünümler
kişi doğrulamasıyla belirlendiği için, form yüklenirken yükleme olayını
tetikleyecek metod sql serverda tutulan staff tablosundaki pesonelleri tanıyarak view4 açılır.
Eger Staff tablosunda tanımlı user değilse, görünüm viewyetkisiz olur.
(Datasource
olarak istediğinizi kulanabilirsiniz. XML,SQL,List kitaplıkları vb.)
viewyetkisiz
Staff
tablosu
Yükleme olayında çağrılacak Staff metodu.
public void
bStaff(LoadingEventArgs e)
{
//sql
bağlantısını tanımlıyoruz.
SqlConnection
con = new SqlConnection("data source=PORTALSQL;initial
catalog=infopathDB;User id=erisimuser;password=iso27001");
//kullanılacak
tabloyu seçiyoruz
SqlDataAdapter
da = new SqlDataAdapter("select*from Staff", con);
DataTable
dt = new DataTable();
da.Fill(dt);
bool
bimonay = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:bimonay",
NamespaceManager).ValueAsBoolean;
bool
bimred = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:bimred",
NamespaceManager).ValueAsBoolean;
bool tonay = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:tonay", NamespaceManager).ValueAsBoolean;
string appuserid = Application.User.UserName;
DataRow[] z = dt.Select("Department='Bilisim Teknolojileri Mudurlugu'");
string[]
userid =new string[z.Length];
//form
açıldığında destekteki elemanı tanıyor ama staff tablosundaki eleman kadar
döngü dönüyor
//useid1
ile bu döngünün dışına çıkıyoruz ve staff tablosundaki userı userid olarak set
ediyoruz
string
userid1 ="";
for
(int i = 0; i < z.Length; i++)
{
userid[i] = z[i].ItemArray[2].ToString();
//destekid alanına userid set ediyoruz. MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:destekid", NamespaceManager).SetValue(userid[i]);
userid[i] = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:destekid", NamespaceManager).Value;
//staff
tablosundaki kullanıcı ise view4
if
((appuserid == userid[i]) && (bimonay == true)
&& (bimred == false))
{ userid1= MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:destekid", NamespaceManager).Value;
e.SetDefaultView("view4");
}
//staff
tablosundaki kullanıcı degilse viewyetkisiz
if
((bimonay == true) && (appuserid !=
userid1))
{
e.SetDefaultView("viewyetkisiz");
}
}
//işlem
tamamlanışsa kullanıcının görmesi gereken form görüntüsü
if
((tonay == true))
{
e.SetDefaultView("view5");
}
}
ve bu metoduda form yüklenirken çağırıyoruz.
public void
FormEvents_Loading(object sender, LoadingEventArgs e)
{
View2(e);
Bilgiislemyoneticiler(e);
bStaff(e);
}
işlem tamamlanışsa kullanıcının görmesi gereken form görünümü
view5
Eğer bilgi işlem yöneticisi formu red ederse YöneticiRed
görünümü kullanıcıya açılacak.
Hazırlayan:Güler
ONUK
No comments:
Post a Comment