Thursday, December 10, 2020

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

Infopath Formlarında Dinamik Kontroller Yaratma

                                  Sharepoint Form Kitaplığında Klasörleme Bir sharepoint Form kitaplığında ki item kayıtlarının fazlalığı ...