Buna benzer ipuçları vardır, ama geçen hafta yeni bir XPages geliştiricisinden gelen soru üzerine bunu paylaşmak istedim.

Server-side javascript ile yaptığınız bir işlem sonucu başarılı/başarısız gibi bir mesaj dönmek istediğinizde bunu yapamadığınızı farkedeceksiniz çünkü SSJS üzerinde messagebox gibi bir komut olmaz/olamaz.

Ben bu iş için basit bir custom control tasarladım.

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

       <xp:div styleClass="lotusMessage lotusInfo" role="alert"
               rendered="#{javascript:viewScope.MessageText!=null || sessionScope.MessageText!=null }">
               <xp:image id="image3">
                       <xp:this.url><![CDATA[#{javascript:severity=viewScope.MessageType || sessionScope.MessageType || "";
                                                               viewScope.remove("MessageType");
                                                               sessionScope.remove("MessageType");

                                                               severityseverity==""?"Info":severity;

                                                               return "/icon"+severity+"16.png";}]]></xp:this.url>
               </xp:image>
               <xp:span>
                       <xp:text escape="true" id="computedField4">
                               <xp:this.value><![CDATA[#{javascript:message=viewScope.MessageText || sessionScope.MessageText;
                                                               viewScope.remove("MessageText");
                                                               sessionScope.remove("MessageText");

                                                               return message;}]]></xp:this.value>
                       </xp:text>
               </xp:span>
       </xp:div>
</xp:view>


viewScope ya da sessionScope'a yerleştirdiğimiz MessageText ve MessageType parametrelerini ayarladığımızda bu mesaj görüntüleniyor. SSJS tarafında nasıl kullanıyoruz?

function birFonksiyon() { 

       // Güzel şeyler yapalım...

       if(successful) {
               viewScope.MessageType="Info";
               viewScope.MessageText="İşlem başarılı...";
       } else {
               viewScope.MessageType="Error";
               viewScope.MessageText="Hatalar oluştu...";
       }
}


Sayfa tekrar yüklendiğinde (full/partial refresh), viewScope veya sessionScope parametrelerini kontrol ediyoruz, mesaj varsa gösteriyoruz ve scope parametresini temizleyerek mesajın ikinci kez gösterilmesinin önüne geçiyoruz. Scope değişkeni bu aşamada değil de, eklenecek bir 'kapat' tuşuna basıldığında temizlenebilir. Kontrol farklı şekillerde geliştirilebilir. MessageType değerleri ise (Info, Warning, Error...) ilgili imaj dosyalarına göre belirleniyor.

Burada da çalışan bir örnek verelim. Button'a bastığımızda arka planda bir işlem yapıyor ve kullanıcıya mesaj dönüyoruz.

Image:XPages İpucu: SSJS mesajlarını göstermek için basit bir kontrol

Serdar Basegmez   |   Mayıs 2 2011 03:23:57 AM   |    İpucu  Uygulama Geliştirme  XPages    |  
  |   Sonraki   |   Önceki

Comments (3)

Gravatar Image
Ferhat    http://www.bestcoder.net    05/10/2011 9:40:51 AM

Ustad süper oldu bu ya ... Kötü gözümden kaçmış.

REST i de bir incelemek lazım tabi :)

Sağolasın

Gravatar Image
Serdar Basegmez    http://www.developi.com    05/10/2011 9:37:55 AM

Ferhat,

3rd party Java kütüphanelerini kullanabilirsin. Apache Axis vs gibi bir JAR setini project explorer'dan gömersen performanslı bir sonuç alabilirsin. Örnek:

{ Link }

Web servisini consume eden bir agent'ın varsa bunu da kullanabilirsin.

Uzun vadede web servisleri yerine RESTful uygulamalar geliştirmek daha pratik olacaktır.

Gravatar Image
Ferhat    http://www.bestcoder.net    05/10/2011 9:28:28 AM

SSJS ile Lotus da yazdığımız bir Web Service i -misal LotusScript ile yazmış olduğum- çağırabiliyor muyduk ya ? :)

Sivri akıllılık mı yaptım diye düşünüyorum da. Internette alakalı birşey bulamadım.

"Embedding Java in JavaScript" olayını kullanacakmışım gibi de geliyor bir yandan.

Büyük bir service var elimde 5-6 yüz satırlık LS ile yazdığım. Bunu Client Side da kullanmak isterim diye javascript ile ajax vs kısmını yazmıştım. Ama webservice in sonucunu java class olarak SSJS de scope larda tutmak istesem olmaz mı diye düşünmekteyim.

Bilemedim. Fikrin var mıdır üstad ?