Showing posts with label Parameter. Show all posts
Showing posts with label Parameter. Show all posts

Sunday, July 1, 2018

Jenkins Build With Parameter

Halo sobat, untuk postingan kali ini, kita akan membahas gimana cara build suatu job pada jenkins dengan tambahan parameter. Nah, dengan fitur ini kita dapat menambahkan parameter-parameter tertentu seperti version, nama, jenis, atau paramater lainnya secara dinamik dan interaktif setiap kali build. Pada jenkins kita menggunakan Active Choices Plugin dimana dapat mengubah parameter secara dinamik yang diimplementasikan dalam combo-boxes, check-boxes, radio-buttons or rich HTML. Oke, untuk lebih jelas nya kita lanjut ke konfigurasi berikut :
  • Active Choices Plugin installed.
  • Setelah plugin tersebut terinstall ada 3 bentuk parameter yang bisa digunakan:
    1. Active Choices Parameter
    2. Active Choices Reactive Parameter
    3. Active Choices Reactive Reference Parameter
  • Pada kofigurasi job centang seperti di bawah ini dan pilih active choice parameter yang kita butuhkan.
  • Tutorial pertama kita pilih active choices paramater dengan paramater nama, centang groovy script dan masukkan nilainya seperti contoh di bawah ini.
 
  • pilih tipe ui paramater yang diinginkan, kali ini saya pilih single seect
  • tambahkan parameter kedua yaitu makanan
  •  pilih tipe ui parameternya radio
  • pada menu build, pilih execute shell. Tambahkan command seperti dibawah ini
 
  • masuk ke project job kembali dan pilih build with parameters dan hasilnya seperti di bawah ini
  • setelah mengisi parameter klik tombol build dan job mulai run
  • buka console output dari job yang selesai di run maka hasilnya akan ditampilkan isi dari variable yang sudah dipilih sebelumnya waktu build.
  • Contoh kedua yaitu Active Choices Reactives Parameter, lakukan hal yang sama seperti contoh pertama. Disini kita akan membuat 2 parameter yaitu parameter Negara dan Pemain.
  • isi dengan script di bawah ini:
  •  return[  
     'Argentina',  
     'Portugal',  
     'Brazil',  
     'Uruguay'  
     ]  



 if (Negara.equals("Argentina")) {  
  return ["Messi", "Aguero","Higuain"]  
 } else if (Negara.equals("Portugal")) {  
  return ["C. Ronaldo", "Pepe", "Nani"]  
 } else if (Negara.equals("Brazil")) {  
  return ["Neymar", "Coutinho", "Marcelo"]  
 } else if (Negara.equals("Uruguay")) {  
  return ["Suarez", "Cavani", "Caceres"]  
 } else {  
  return ["Tidak memilih pemain sepakbola"]  
 }  

  • pada parameter pemain jangan lupa menambahkan referensi parameter dari parameter sebelumnya isi dengan nilai Negara
  • script: echo Negara: $Negara, nama pemain : $Pemain  

  • masuk ke menu job dan tampilannya seperti di bawah ini.
  • jika kita memilih Negara lain seperti Brazil, maka parameter pemain akan berubah juga nilainya
  • Kemudian kita akan mencoba model parameter yang ke 3 yaitu Active Choices Reactive Reference Parameter. kali ini kita memiliki 3 buah parameter yaitu, Menu_Makan, Keterangan, dan Makanan
  • parameter Menu_Makan pilih active choices parameter
  • isi dengan script dibawah ini:
     return[  
     'Nasi',  
     'Ikan',  
     'Roti',  
     'Mie',  
     'Minuman',  
     'Buah'  
     ]
  • parameter Keterangan pilih Active Choices Reactive Reference Parameter.
  • Isi scriptnya seperti di bawah ini:
  •  switch(Menu_Makan){  
      case~/.*Nasi.*/:  
       keterangan='silahkan pilih hidangan makanan yang dipadukan dengan nasi'  
       return "<b>${keterangan}</b>"  
      break  
     case ~/.*Ikan.*/:  
       keterangan='silahkan pilih hidangan-hidangan yang terbbat dari ikan-ikan'  
       return "<b>${keterangan}</b>"  
     break  
      case~/.*Roti.*/:  
       keterangan='silahkan pilih hidangan-hidangan yang terbuat dari ikan-ikan'  
       return "<b>${keterangan}</b>"  
      break  
     case~/.*Mie.*/:  
       keterangan='silahkan pilih hidangan-hidangan yang terbuat dari Mie'  
       return "<b>${keterangan}</b>"  
      break  
     case ~/.*Minuman.*/:  
       keterangan='silahkan memilih minuman yang anda inginkan'  
       return "<b>${keterangan}</b>"  
     break  
     case ~/.*Buah.*/:  
       keterangan='silahkan memilih buah-buahan yang anda inginkan'  
       return "<b>${keterangan}</b>"  
     break  
     }  
    
  • kemudian pilih time choicenya degan formated HTML
  • setelah selesai save, buka kembali job tersebut maka tampilannya seperti dibawah ini.
  • pada keterangan akan menampilkan nilai sesuai dengan menu makanan yang kita pilih

Sekian informasi yang dapat saya sampaikan semoga bermanfaat.

Tuesday, December 15, 2015

ADF LOV with Sub-Query parameter

Pada ADF biasanya sebuah LOV (List Of Value) berasal dari sebuah VO (View Object).
Apabila sebuah LOV memiliki dependensi parameter dari field lainnya pada UI, maka biasanya query pada VO nya akan memiliki :param.

Misalnya seperti berikut:
select distinct xx.kolom_1, xx.kolom_2
from table_xx xx, (
    select kolom_a, kolom_b
    from table
    where kolom_c = :param1
) yy
where 
xx.kolom_3 = yy.kolom_a
yy.kolom_b = :param2 

pada umumnya untuk menghandle masalah depedensi ini kita akan menggunakan view criteria atau bindParameter.

Cara kerja dari view criteria adalah membungkus query vo dan menambahkan where clause menjadi seperti berikut:

select * from (
    select distinct xx.kolom_1, xx.kolom_2
    from table_xx xx, (
        select kolom_a, kolom_b
        from table
        where kolom_c = :param1
    ) yy
    where 
    xx.kolom_3 = yy.kolom_a
    yy.kolom_b = :param2
    )
where ....
 
dan sebuah viewcriteria membutuhkan query yang memiliki kolom yang akan menjadi filter.
jadi untuk query yang menggunakan distinct akan bermasalah, karena mungkin saja kolom yang akan menjadi filter tersebut mempengaruhi jumah data hasil query

select * from (
    select distinct xx.kolom_1, xx.kolom_2, yy.kolom_b
    from table_xx xx, (
        select kolom_a, kolom_b
        from table
        where kolom_c = :param1
    ) yy
    where 
    xx.kolom_3 = yy.kolom_a
    yy.kolom_b = :param2
    )
where kolom_b = :parameter

Tidak hanya untuk query DISTINCT saja, karena ada beberapa sql lainnya yang tidak bisa dibungkus oleh where clause contohnya seperti START WITH dan CONNECT BY 

Sedangkan bind parameter untuk parameter pada where clause itu sejauh yang saya coba tidak bisa di implement pada sebuah LOV dengan VO yang memiliki query seperti diatas.

Lalu apa bagaimana caranya?
VO di ADF kan hanya bisa menggunakan viewcriteria dan bind parameter untuk mengisi parameter pada query?

Setelah bertukar pikiran dalam diskusi masalah ini, akhirnya di temukan sebuah trik untuk menyelesaikan masalah ini.
Yaitu dengan mengganti query dari VO tersebut secara programmatic pada saat pop-up dialog LOV muncul, atau dengan kata lain adalah meng-harcode parameter kedalam query tersebut.

berikut gambarannya :

select distinct xx.kolom_1, xx.kolom_2
from table_xx xx, (
    select kolom_a, kolom_b
    from table
    where kolom_c = 'ABCDEF'
) yy
where 
xx.kolom_3 = yy.kolom_a
yy.kolom_b = 'GHIJK' 


Oke diatas adalah overview dari apa yang akan di jelaskan secara detail selanjutnya.

Pertama-tama akan saya berikan contoh untuk mengganti query dari sebuah VO.
Pada contoh berikut query VO diganti didalam sebuah method di dalam ViewObjectImpl

public class VoTableSearchImpl {
  /**
   * This is the default constructor (do not remove).
   */
  public VoTableSearchImpl() {
  }

  public void execSearchQuery(String param1, String param2) {
   
    setFullSqlMode(FULLSQL_MODE_AUGMENTATION); 
    setQuery("select distinct xx.kolom_1, xx.kolom_2
            from table_xx xx, (
                select kolom_a, kolom_b
                from table
                where kolom_c = '"+ param1 +"'
            ) yy
            where 
            xx.kolom_3 = yy.kolom_a
            yy.kolom_b = "+ param2 +"'");
    executeQuery();
  }

}

yang perlu diperhatikan adalah semua nama kolom, jumlah kolom, dan type data nya harus sama antara query awal dengan query yang baru


selanjutnya adalah mengimplementasikannya kedalam sebuah LOV

akan ditaruh dalam sebuah method listener pada LOV yaitu launchPopupListener
dan ada satu method tambahan yang diperlukan untuk bisa mendapatkan VO dari suatu LOV

private ViewObject getLovVo(String attributeBinding) {
        BindingContext bctx = BindingContext.getCurrent();
        BindingContainer bindings = bctx.getCurrentBindingsEntry();
        FacesCtrlLOVBinding lov = (FacesCtrlLOVBinding)bindings.get(attributeBinding);
        return lov.getListIterBinding().getViewObject();
    }

dan berikut adalah isi dari method launchPopupListener

public void onLaunchLovNama(LaunchPopupEvent launchPopupEvent) {
    String param1 = (String)getAttrBinding("param1").getAttributeValue();
    String param2 = (String)getAttrBinding("param2").getAttributeValue();
   
    VoTableSearchImpl vo = (VoTableSearchImpl)getLovVo("lovNama");           
    vo.setFullSqlMode(VoTableSearchImpl.FULLSQL_MODE_AUGMENTATION);
    vo.setQuery("select distinct xx.kolom_1, xx.kolom_2
            from table_xx xx, (
                select kolom_a, kolom_b
                from table
                where kolom_c = '"+ param1 +"'
            ) yy
            where 
            xx.kolom_3 = yy.kolom_a
            yy.kolom_b = "+ param2 +"'");
    vo.executeQuery();
}

Sekian dulu dan selamat mencoba.