Friday, December 11, 2020

Infopath Drop-DownList Box’a Programsal olarak Item Ekleme

Kullanıcı adı ve bölümüne göre kullanıcının bulunduğu bölümdeki yöneticileri Dropdown liste eklemek için öncelikli olarak  userName’i alacağımız metodumuzu yazarız.

DataSource olarak bir XML belgesi kullanacağız

  public void UserName()

        {

           string username = Application.User.UserName;

            DataSet ds = ReadXmlDataAdAllusers();

            DataTable dt = ds.Tables[0];

 

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                if(dt.Rows[i]["userid"].ToString()==username)

                {

                    string b = dt.Rows[i]["Full"].ToString();

                    string c = dt.Rows[i]["Department"].ToString();

 

                    MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:username", NamespaceManager).SetValue(b);

                    MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:dep", NamespaceManager).SetValue(c);

                }

            }

        }

Kullanıcı adını infopath’in Application.User.UserName özelliğini kullanarak   alırız.

Ve kodumuzda kullanıcılara ait bilgileri AdusersAll xml belgesinden okumak için  bir metod tanımlarız.

  public DataSet ReadXmlDataAdAllusers()

        {

 

            DataSet dataSet = new DataSet();

            foreach (DataTable dataTable in dataSet.Tables)

                dataTable.BeginLoadData();

            dataSet.ReadXml(@"\\portalsql\AccessRights\AdUsersAll.xml");

            foreach (DataTable dataTable in dataSet.Tables)

                dataTable.EndLoadData();

            return dataSet;

        }

Daha sonra Dropdownliste yeni Itemlar yazacak metodumuzun kullanacağı XML belgesini yazıp infopath projesinin kullanacağı klasöre bırakır veri bağlantısı olarak bu belgeyi gösteririz.

 

Kaynak.xml

<?xml version="1.0" encoding="utf-8" ?>

<options>

  <option>

      <value/>

    <displayname/>

  </option>

 <option>

      <value/>

    <displayname/>

  </option>

</options>

Kaynak.xml belgesinin repeating grup olması gerekir.

Şimdi dropdownlistbox’ın  özelliklerine girip kaynak.xml belgesini  veri kaynağı olarak gösteririz.

kaynak.xml’in kullanacağı dropdown liste Item ekleyecek metodumuzu yazarız.

private void ADDItem(string mail,string ad)

        {

            XPathNavigator DOM = DataSources["kaynak"].CreateNavigator();

            XPathNavigator group1 = DOM.SelectSingleNode("//options", NamespaceManager);

            XPathNavigator field1 = DOM.SelectSingleNode("//options/option", NamespaceManager);

            XPathNavigator newnode = field1.Clone();

            newnode.SelectSingleNode("value").SetValue(mail);

            newnode.SelectSingleNode("displayname").SetValue(ad);

            group1.AppendChild(newnode);

        }

Kullanıcının bulunduğu bölümdeki yöneticileri ekleyeceğimiz için Açılır liste kutumuza  AddItem metodumuz kullanıcı adı ve bölüm olmak üzere iki değer alır.    

        private void RemoveFirstItem()

        {

            XPathNavigator DOM = DataSources["kaynak"].CreateNavigator();

            XPathNavigator group1 = DOM.SelectSingleNode("//options", NamespaceManager);

            XPathNavigator field1 = DOM.SelectSingleNode("//options/option", NamespaceManager);

            XPathNavigator newnode = field1.Clone();

            field1.DeleteSelf();

        }    

RemoveFirstItem() metodu ile form yüklenirken dropdown liste eklenen Itemlar arasında boşluk olmamasını sağlar.

Dropdown liste bölüm yöneticilerini ekleyecek Metod Maneger();

  private void Managers()

        {

            XPathNodeIterator managers = DataSources["ADmanager"].CreateNavigator().Select("//Table1", NamespaceManager);

            foreach (XPathNavigator manager in managers)

            {

                string department = manager.SelectSingleNode("Department").Value;

                string dep = MainDataSource.CreateNavigator().SelectSingleNode("/my:alanlarım/my:dep", NamespaceManager).Value;

                string name = manager.SelectSingleNode("full").Value;

                string mail = manager.SelectSingleNode("email").Value;          

                if((department == dep))

                {

                    ADDItem(mail,name);

                }         

            }

        }

Form yüklenirken

public void FormEvents_Loading(object sender, LoadingEventArgs e)

        {

           RemoveFirstItem();

            UserName();

            Managers(); 

        }

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ığı ...