Infopath formlarında fonksiyonlar genel olarak işimizi görecek şekilde hazırlanmıştır. Ancak bazı istisna durumlar da fonksiyonlar ile işlem yapmak güçleşir. Ya işlemleri uzatmış oluruz, ya da işin içinden çıkılamaz bir hale gidebiliriz. Bu konuda excelin kendi fonksiyonlarının kabiliyeti herkesçe bilinir. Özellikle hesaplama işlemlerin de işimizi kolaylaştıracak çok fazla fonksiyonu kendi içinde zaten barındırır. Makalemiz de Infopath ile özelleştireceğimiz formda excel servicesi kullanarak web servis aracılığı ile hesap yaptıracağız.
Öncelikle makalemizin anlaşılabilmesi için elimiz de bir seneryo olsun.
Seneryomuz şöyle; Bizden infopath ile yapacağımız form üzerinde bir tarih hesaplaması isteniyor, ancak bu tarih hesaplamasında herhangi bir tarihe ekleyeceğimiz gün sayısının sonucunu İŞ GÜNÜ olarak istiyorlar. Yani tatil günlerinin hesaplanmamasını istiyorlar.
Öncelikle formumuz da kullanacağımız alanları belirleyelim.
Tarih: Bizim hesaplamamızda gün ekleyeceğimiz sütundur. Date türü olarak ayarlıyoruz.
İş Günü Sayısı: Tarihe ekleyeceğimiz iş günü sayısı sütunudur. Number olarak ayarlıyoruz.
Süre Sonu Tarihi: Tarihe iş gününün eklenmesi ile çıkacak sonucu yazacağımız sütundur. Date olarak türünü ayarlıyoruz.
Infopath formumuzda kullanacağımız alanlar artık hazır. Bizden istenen kısmı artık yerine getirmek üzere başlayabiliriz. Öncelikle eğer biz den günü tarihe eklememiz istense idi, "gün ekle" fonksiyonu ile bunu rahatlıkla halledebilirdik. Ancak bizden istenen iş günlerinin eklenmesi. Yani ekleyeceğimi gün sayısı 5 ise, bu 5 güne denk gelen tatil günlerinin hesaba dahil edilmemesidir. Senaryonun anlaşılması açısından bu kısımda bunu da açıklamış olalım.
Bu hesaplama işini Sharepoint 2010 üzerinde yer alan excel services i yaptıracağımızı söylemiştik. Bunu yapabilmek için öncelikle bu hesabı bir excel dosyasında yapıp bu dosyayı Sharepoint 2010 üzerinde bir belge kitaplığına aktarmalıyız.
Yani hesaplamayı sanki excel de yapacakmışız gibi bir excel dosyayı hazırlayalım.
Microsoft Excel de, infopathde yaptığınız gibi 3 alan üzerinde hesap yaptıracağız. Microsoft Office Excel' i açalım, ardından işlemleri yaptıracağımız 3 alanın hücrelerini biçimlendirelim. Aşağıdaki resimdeki gibi alanları biçimlendirin.
Şimdi excel dosyamızda alanlarımız da normal hesabı yaptıralım. Burada excelin iş günü fonksiyonunu kullanacağız.
İngilizce ise Office programınız "WORKDAY" olarak fonksiyonu kullanabilirsiniz. Microsoft Office Excel sayfamızda "WORKDAY" fonksiyonu ile artık TARİH(C1)+İş Günü Sayısı(C2) = Süre Sonu Tarihi(C3) şeklinde işlemimizi yaptırmış olduk.
Son olarak excel services web servisinde bu alanları kullanabilmek için alanları adlandıracağız.
C1: exceldate
C2: excelworkday
C3: sonuc şeklinde ben adlandırıyorum. İstediğiniz gibi adlandırabilirsiniz.
Buraya kadar herşey yolunda ise excel dosyanızı Sharepoint 2010 içerisinde bir belge kitaplığına kaydedin.
Şimdi Infopath formumuza geri dönüp hesaplama için gerekenleri yapmaya başlayabiliriz.
Yeni bir data connection eklememiz gerekiyor. Bu veri bağlantısı ile excel services web servisini rest servisi olarak ekleyeceğiz. Burada bağlantıda belli bir standart servis adresimiz var siz bu bağlantı adresinizi kendi verilerinize düzenleyin. Düzenlemeniz gereken alanları bold olarak işaretliyorum.
http://sharepointadresiniz/_vti_bin/ExcelRest.aspx/hesaplamalar/workdayws.xlsx/Model/Ranges('sonuc')?$format=atom&Ranges('exceldate')=01.01.2011&Ranges('excelworkday')=6
Servisi data connection olarak eklemek için herhangi bir tarih ve gün verdiğimi göreceksiniz. Bunun tek sebebi web servis olarak ekleyebilmem orada vereceğiniz tarih ve günün bir önemi yok boş kalmaması yeterli. Eğer excel dosyanızı Sharepoint 2010 sunucunuzda alt siteleriniz de bir kitaplığa eklediyseniz, http://sharepointadresiniz/altsiteadiniz/ şeklinde yolu düzenleyin. Bold olarak işaretlediğim alanları dediğim gibi kendi dosyalarınıza göre düzenleyebilirsiniz. Ben burada kullandığımız senaryoya göre hazırladım.
Veri bağlantısı eklemeniz için adımlar;
Infopath formunuzda sağ alt kısımda yer alan veri bağlantıları butonuna basınız.
Gelecek olan veri bağlantılarınız ekranında ekle butonuna tıklayın.
Yeni bağlantı oluştur seçeneklerinden Veri Al' ı seçiniz.
Veri kaynaklarından REST Web Hizmeti' ni seçiniz.
Yukarıda vermiş olduğum web servis adresini kendinize göre düzenleyip buraya yapıştırın ve ileri diyerek bağlantınızı eklemeyi sonlandırın.
Servis artık veri bağlantısı olarak eklenmiş oldu.
Şimdi hesaplama yapmak üzere bir buton oluşturacağım. Bu butona kurallar ekleyerek işlemi yaptıracağım. Siz isterseniz buton eklemek zorunda değilsiniz. Örneğin infopath formunuz da ki iş günü sayısı alanınıza kural ekleyerek de işlem yaptırabilirsiniz.
Infopath denetimlerinden butonu ekleyelim. Ardından butonunuza gerekli kuralları ekleyelim.
3 kuralımız olacak.
1.Kuralımız Rest servisimizdeki tarih ve gün hanelerini bizim infopath formumuzdaki alanlarla değiştirecek.
2.Kuralımız rest servisimizde sorgu çalıştırarak hesaplamayı yaptıracak.
3.Kuralımız çıkan sonucu formumuzdaki Süre Sonu Tarihi alanına taşıyacak.
1.Kural : a- Butonu seçin ve Kuralları yönet seçeneği ile yeni bir eylem ekleyin.
b- Eylemler menüsünde yer alan "REST URL değiştir" seçeneğini seçin.
c- Veri bağlantısı kısmında eklediğiniz web servisini seçin.
d- Adres kısmında Infopath FX lerimizden birleştiri kullanarak REST servisimiz deki Tarih ve iş günü sayısını Infopath deki ile değiştirmesini sağlayacağız.
"XPATH Düzenle" olarak kuralı kopyalıyorum. Bu şekilde siz de kendi alanınızda kullanabilirsiniz;
concat("http://Sharepointadresiniz/_vti_bin/ExcelRest.aspx/hesaplamalar/workdayws.xlsx/Model/Ranges('sonuc')?$format=atom&Ranges('exceldate')=", my:Tarih, "&Ranges('excelworkday')=", my:İşGünü)
Bold ile belirtilen kısımları kendi sisteminize göre değiştirin. "My:Tarih" gibi görülen alanlar bizim senaryomuzda infopath formumuzdaki alanlar. Web servisi işlem yaparken artık buradaki dataları kullanacak. "XPATH düzenle" seçilmeden görünecek hali de aşağıdaki gibidir.
e- Doğru yerlere alanlarınızı yerleştirdikten sonra tamam diyerek birinci kuralımızı bitirmiş olalım.
2. Kural: Butonumuza yine yeni bir eylem ekliyoruz. Çalıştırılacak eylem olarak "sorgula" seçip REST Servisimizin sorgulanmasını sağlıyoruz.
Tamam diyerek bu kuralımızı da bitiriyoruz.
3.Kural : Şu ana kadar ki kurallarımız ile , önce rest servisinde alanları Infopath de ki alanlarımız ile değiştirdik(1.kural), sonra sorguyu çalıştırdık ve bu değerlerle hesabı yaptırmış olduk(2.kural), şimdi ise hesaplanan değeri Süre Sonu Tarihi alanımıza yazdırmak olacak.
Bu yüzden yeni eylem ekleyip çalışacak eylem olarak da" yeni alan değeri ayarla " yı seçiyoruz. Süre Sonu tarihi alanımıza sonucu yazdıracağımız için, alan kısmına SüreSonu Tarihini getiriyoruz. Değer hanesine ise, REST Servisinizde contentàns2:rangeàrowàcàfv yi getiriyoruz.
Bu nereden çıktı demeyin J bu da bir standart. REST Servisi sonucu FV ye getiriyor. Biz de FV yi istediğimiz alana yazmasını sağlamış oluyoruz.
FV alanını seçip tamam diyerek son kuralımızı da bitirmiş olalım.
Sonuç olarak kurallarımızın son görünüşü aşağıdaki gibi olacaktır. Kuralların sırası önemlidir.
Şimdi denememizi yapalım.
Başarılı şekilde hesaplama yapıldı. Tatil günleri dışarıda bırakılarak 5 iş günü eklendi ve sonuç döndürüldü.
Bu bir örnekti. Siz istediğiniz farklı hesaplamaları excel services yetenekleri ile hiç kod yazmadan yapabilirsiniz. Normal de bunu infopath üzerinde kodlama kullanarak yapsaydık yarım sayfadan fazla kod yazacaktık . Ve form şablonumuz artık administrative template olacak ve yayınlamamız çok zorlaşacaktı. Bu şekilde hiç kod kullanmadan işlemlerimizi yaptırabileceğimizi gördük. Bu özellikler liste den özelleştirilmiş infopath formların dada geçerlidir. Sharepoint e formunuzu yayınlayabilir kullandırabilirsiniz.
Faydalı olması dileğiyle…