Merhaba arkadaşlar bugün sizlere sharepoint infopath ortamında people pickerı multiple user olarak nasıl kullanacağımızdan bahsedeceğim. Burada yaşanılan sorun infopath tarafında people picker da birden fazla kişi girildiğinde arka planda birden fazla user field oluşturup diğer kişilerin bilgilerini burada tutmaktadır. Bu veriyide sharepoint list ya da workflow tarafına aktarmak istediğimiz zaman bizde field olarak görülen kısım sadece ilk userı tutacağı için seçilen diğer kullanıcılar alamayacağız.
Bu sorunun çözümü için infopath tarafında ayrı text fieldları oluşturarak yazılan userları ayrı ayrı oluşturulan user filedlarından okuyarak tek formüllerle birleştirerek bu fieldlara yazarak tüm kullanıcılarımızı alabiliyor olacağız.
İlk olarak infopath formumuz da üst menüde “HOME” menüsünden “Input” kısmında “Person/Group Picker” fieldını bularak sayfada eklemek istediğimiz yere ekliyoruz.
Main fild kısmına baktığımız zaman fieldımızın eklendiğini görmekteyiz. Bu aşama da default olarak people picker sadece tek user secilecek şekilde ayarlanmış olarak gelmektedir.
Bu ayarlamaları da infopath formumuz da people pickerımıza sağ tıklayıp açılan menüden “Person/Group Picker Properties…” seçeneğine tıklayarak gidebiliriz.
Karşımıza açılan ayar poppup ında “General” tabın da “SharePoint List Properties” kısmında “Allow multiple selections” checkboxını seçerek “OK” diyerek kaydediyoruz. Bu kısımdan sonra main içerisinde kullanıcıların AccountId ve DisplayName bilgilerini birleştireceğimiz iki text field oluşturuyoruz.
Daha sonraki aşamada sayfa içerisinde bu alanı tetikleyecek olan bir butona action rule tanımlıyoruz. Bu kısımda “Add” butonuna tıklayarak “Set a field’s value” diyoruz.
İlk aşama olarak eklenen kullanıcıların hepsinin AccountId lerini bir fonksiyon kullanarak aralarına noktali virgül ekleyip birleştirerek tüm AccountId lerin birleştirip eklemek için açtığımız fielda set ediyoruz.
Bu kısımda formül olarak
eval(eval(Person; ‘concat(pc:AccountId, “; “)’); “..”)
kullanıyoruz. Burada “Person” kısmını seçerek “Insert Field or Group…” butonu ile people pickerımızı kapsayan “pc:Person” group unu bularak seçiyoruz.
Daha sonra tekrar action kısmında set a fied kısmını kullanarak bu sefer tüm DisplayName bilgilerini yazmak için oluşturmuş olduğumuz field a kullanıcı görünen adlarını aralarında noktalü virgül koyarak birleştirip ekliyoruz.
Burada kullanılan formül olarak
eval(eval(Person; ‘concat(pc:DisplayName, “; “)’); “..”)
kullanıyoruz. Burada “Person” kısmını seçerek “Insert Field or Group…” butonu ile people pickerımızı kapsayan “pc:Person” group unu bularak seçiyoruz.
Bu formüllerden sonra kullanıcı bilgileri kaydediğildiği zaman formülden sonra son kullanıcı AccountId sinden sonra veya DisplayName inden sonra da bir tane noktalı virgül olacaktır ve buda en basiti workflowda bu bilgilere mail ya da task proccess tanımlamaya çalıştığımız zaman noktalı virgülden sonra bir kullanıcı bilgisi daha bekleyeceği ve bunu da bulamayacağı için hata alacaktır.
Bu hataya da düşmemek için sondaki fazla noktalı virgül işaretini silmemiz gerekmektedir.
Bunun için birleştirerek set etme işlemlerini yaptığımız actionların hemen altında bu virgülleri silmek için birer set işlemi daha yapmamız gerekmektedir.
ilk olarak set işlemimizde tüm AccountId lerimizi yazdığımız fieldı alarak bir formül ile sonraki noktalı virgülü silip tekrar bu fielda set ediyor olacağız.
Burada formül olarak
substring(FromAllAccountId; 0; string-length(FromAllAccountId)-1)
kullanıyoruz. Burada “FromAllAccountId” kısmlarında seçerek “Insert Field or Group…” butonu ile tüm AccountId lerimizi set ettiğimiz fieldı bularak seçiyoruz. Bu işlemin sonunda bize sorun yaratacak olan birleşmiş kullanıcı bilgilerin sonundaki fazla noktalı virgül gitmiş olacaktır.
Tekrar bu yapılan işlemin altına bir set etme işlemi daha ekliyoruz ve bu sefer aynı işlemleri bütün DisplayName leri birleştirdiğimiz field için yapıyoruz.
ilk olarak set işlemimizde tüm DisplayName lerimizi yazdığımız fieldı alarak bir formül ile sonraki noktalı virgülü silip tekrar bu fielda set ediyor olacağız.
Burada formül olarak
substring(FromAllDisplayName; 0; string-length(FromAllDisplayName)-1)
kullanıyoruz. Burada “FromAllDisplayName” kısmlarında seçerek “Insert Field or Group…” butonu ile tüm DisplayName lerimizi set ettiğimiz fieldı bularak seçiyoruz. Bu işlemin sonunda bize sorun yaratacak olan birleşmiş kullanıcı bilgilerin sonundaki fazla noktalı virgül gitmiş olacaktır.
Bu kısımları da ekleyip işlemlerimizi tamamladıktan sonra buton actionuna data submit ekliyoruz ve bu verilerin işlemlerini tamamladıktan sonra listeye aktarılmasını sağladıktan sonra isteğe bağlı olarak close from da ekleyebiliriz.
Son olarak butonumuzun aksiyon sıralamasına baktığımız zaman sırası ile seçilen tüm user AccountId lerini ve DisplayName bilgilerini birleştirerek oluşturmuş olduğumuz fieldlara set ediyoruz sonrasında bu birleştirme işleminde sonra kalan fazladan noktalı virgülü silmek için tekrardan filed datalarını alarak bir formülle silip kendine set ediyoruz sonrasında da listemişiz submit edip isteğe göre formumuzu kapatıyoruz.
Daha sonrasında nu seçilen multiple userları oluşturduğumuz fieldları kullanarak ister sharepoint ortamında ister workflow ortamnında rahatlıkla sorun yaşamadan kullanabilirsiniz.
İlk Yorumu Siz Yapın