Friday, 25 May 2018
Wednesday, 31 January 2018
Membuat ALV Grid SAP ABAP
Pada postingan ini saya akan share cara membuat ALV grid di SAP - ABAP, ALV biasanya digunakan untuk menampilkan data dalam bentuk table atau grid dalam web programming atau programming yang lain seperti .Net, java dll.
Ok langsung saja, untuk contoh ini saya akan menampilkan data Purchase Order, berikut source code nya :
*&---------------------------------------------------------------------*
*& Report ZALVEXMP
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
report zalvexmp.
tables : ekpo, ekko, lfa1.
types :
begin of t_data,
ebeln type ebeln,
ebelp type ebelp,
matnr type matnr,
maktx type maktx,
werks type werks_d,
lgort type lgort_d,
menge type menge_d,
meins type meins,
netpr type bprei,
waers type waers,
lifnr type lifnr,
name1 type name1,
end of t_data.
data : it_data type table of t_data,
wa_data type t_data.
data :it_fldcat type lvc_t_fcat,
wa_fldcat type lvc_s_fcat,
wa_layout type lvc_s_layo,
it_list_commentary type slis_t_listheader,
wa_list_commentary type slis_listheader.
selection-screen begin of block b0 with frame title text-001.
"Parameter
*parameters : p_ebeln type ebeln.
"select option
select-options:
s_ebeln for ekpo-ebeln,
s_matnr for ekpo-matnr,
s_lgort for ekpo-lgort,
s_werks for ekpo-werks.
selection-screen end of block b0.
start-of-selection.
perform getdata.
perform setfieldcat.
perform build_alv_header.
perform display_alv.
form getdata.
refresh it_data.
select ekpo~ebeln ekpo~ebelp ekpo~matnr makt~maktx ekpo~menge ekpo~meins ekko~lifnr
ekpo~werks ekpo~lgort ekpo~netpr ekko~waers lfa1~name1 into corresponding fields of table it_data
from ekko inner join ekpo on ekko~ebeln = ekpo~ebeln inner join lfa1 on ekko~lifnr = lfa1~lifnr
inner join makt on ekpo~matnr = makt~matnr
where ekko~ebeln in s_ebeln and ekpo~matnr in s_matnr and ekpo~lgort in s_lgort and ekpo~werks in s_werks
and ekpo~menge > 0.
sort it_data by ebeln ebelp.
endform.
form setfieldcat.
clear wa_fldcat.
wa_fldcat-col_pos = 1.
wa_fldcat-fieldname = 'EBELN'.
wa_fldcat-scrtext_l = 'Purchase Order'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 16.
wa_fldcat-outputlen = 16.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 2.
wa_fldcat-fieldname = 'EBELP'.
wa_fldcat-scrtext_l = 'Item'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 3.
wa_fldcat-fieldname = 'MATNR'.
wa_fldcat-scrtext_l = 'Material'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 40.
wa_fldcat-outputlen = 40.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 4.
wa_fldcat-fieldname = 'MAKTX'.
wa_fldcat-scrtext_l = 'Material Description'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 40.
wa_fldcat-outputlen = 40.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 5.
wa_fldcat-fieldname = 'WERKS'.
wa_fldcat-scrtext_l = 'Plant'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 6.
wa_fldcat-fieldname = 'LGORT'.
wa_fldcat-scrtext_l = 'Str. Loc'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 7.
wa_fldcat-fieldname = 'MENGE'.
wa_fldcat-scrtext_l = 'Quantity'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 15.
wa_fldcat-outputlen = 15.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 8.
wa_fldcat-fieldname = 'MEINS'.
wa_fldcat-scrtext_l = 'Unit'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 9.
wa_fldcat-fieldname = 'NETPR'.
wa_fldcat-scrtext_l = 'Net Price'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 15.
wa_fldcat-outputlen = 15.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 10.
wa_fldcat-fieldname = 'WAERS'.
wa_fldcat-scrtext_l = 'Currency'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 11.
wa_fldcat-fieldname = 'NAME1'.
wa_fldcat-scrtext_l = 'Vendor'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 30.
wa_fldcat-outputlen = 30.
append wa_fldcat to it_fldcat .
endform.
form build_alv_header .
* Type H is used to display headers i.e. big font
clear wa_list_commentary.
wa_list_commentary-typ = 'H'.
wa_list_commentary-info = 'Contoh Report PO'.
append wa_list_commentary to it_list_commentary.
clear wa_list_commentary.
wa_list_commentary-typ = 'H'.
wa_list_commentary-info = 'PT. PErusahaan SAYA'.
append wa_list_commentary to it_list_commentary.
* Type S is used to display key and value pairs
clear wa_list_commentary.
wa_list_commentary-typ = 'S'.
wa_list_commentary-key = 'Date :' .
concatenate sy-datum+6(2) sy-datum+4(2) sy-datum(4) into wa_list_commentary-info separated by '/'.
append wa_list_commentary to it_list_commentary.
* Type A is used to display italic font
clear wa_list_commentary.
wa_list_commentary-typ = 'A'.
concatenate 'Refresh on' sy-uzeit+0(2) into wa_list_commentary-info separated by space.
concatenate wa_list_commentary-info sy-uzeit+2(2) sy-uzeit+4(2) into wa_list_commentary-info separated by ':'.
append wa_list_commentary to it_list_commentary.
endform.
form top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = it_list_commentary
i_logo = 'ENJOYSAP_LOGO'. "ENJOYSAP_LOGO
endform.
form display_alv.
wa_layout-stylefname = 'FIELD_STYLE'.
wa_layout-zebra = 'X'.
call function 'REUSE_ALV_GRID_DISPLAY_LVC'
exporting
i_callback_program = sy-repid
* i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout_lvc = wa_layout
it_fieldcat_lvc = it_fldcat[]
i_save = 'X'
tables
t_outtab = it_data
exceptions
program_error = 1
others = 2.
endform.
*&---------------------------------------------------------------------*
*& Report ZALVEXMP
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
report zalvexmp.
tables : ekpo, ekko, lfa1.
types :
begin of t_data,
ebeln type ebeln,
ebelp type ebelp,
matnr type matnr,
maktx type maktx,
werks type werks_d,
lgort type lgort_d,
menge type menge_d,
meins type meins,
netpr type bprei,
waers type waers,
lifnr type lifnr,
name1 type name1,
end of t_data.
data : it_data type table of t_data,
wa_data type t_data.
data :it_fldcat type lvc_t_fcat,
wa_fldcat type lvc_s_fcat,
wa_layout type lvc_s_layo,
it_list_commentary type slis_t_listheader,
wa_list_commentary type slis_listheader.
selection-screen begin of block b0 with frame title text-001.
"Parameter
*parameters : p_ebeln type ebeln.
"select option
select-options:
s_ebeln for ekpo-ebeln,
s_matnr for ekpo-matnr,
s_lgort for ekpo-lgort,
s_werks for ekpo-werks.
selection-screen end of block b0.
start-of-selection.
perform getdata.
perform setfieldcat.
perform build_alv_header.
perform display_alv.
form getdata.
refresh it_data.
select ekpo~ebeln ekpo~ebelp ekpo~matnr makt~maktx ekpo~menge ekpo~meins ekko~lifnr
ekpo~werks ekpo~lgort ekpo~netpr ekko~waers lfa1~name1 into corresponding fields of table it_data
from ekko inner join ekpo on ekko~ebeln = ekpo~ebeln inner join lfa1 on ekko~lifnr = lfa1~lifnr
inner join makt on ekpo~matnr = makt~matnr
where ekko~ebeln in s_ebeln and ekpo~matnr in s_matnr and ekpo~lgort in s_lgort and ekpo~werks in s_werks
and ekpo~menge > 0.
sort it_data by ebeln ebelp.
endform.
form setfieldcat.
clear wa_fldcat.
wa_fldcat-col_pos = 1.
wa_fldcat-fieldname = 'EBELN'.
wa_fldcat-scrtext_l = 'Purchase Order'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 16.
wa_fldcat-outputlen = 16.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 2.
wa_fldcat-fieldname = 'EBELP'.
wa_fldcat-scrtext_l = 'Item'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 3.
wa_fldcat-fieldname = 'MATNR'.
wa_fldcat-scrtext_l = 'Material'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 40.
wa_fldcat-outputlen = 40.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 4.
wa_fldcat-fieldname = 'MAKTX'.
wa_fldcat-scrtext_l = 'Material Description'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 40.
wa_fldcat-outputlen = 40.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 5.
wa_fldcat-fieldname = 'WERKS'.
wa_fldcat-scrtext_l = 'Plant'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 6.
wa_fldcat-fieldname = 'LGORT'.
wa_fldcat-scrtext_l = 'Str. Loc'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 7.
wa_fldcat-fieldname = 'MENGE'.
wa_fldcat-scrtext_l = 'Quantity'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 15.
wa_fldcat-outputlen = 15.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 8.
wa_fldcat-fieldname = 'MEINS'.
wa_fldcat-scrtext_l = 'Unit'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 9.
wa_fldcat-fieldname = 'NETPR'.
wa_fldcat-scrtext_l = 'Net Price'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 15.
wa_fldcat-outputlen = 15.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 10.
wa_fldcat-fieldname = 'WAERS'.
wa_fldcat-scrtext_l = 'Currency'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 10.
wa_fldcat-outputlen = 10.
append wa_fldcat to it_fldcat .
clear wa_fldcat.
wa_fldcat-col_pos = 11.
wa_fldcat-fieldname = 'NAME1'.
wa_fldcat-scrtext_l = 'Vendor'.
wa_fldcat-ref_table = 'IT_DATA'.
wa_fldcat-intlen = 30.
wa_fldcat-outputlen = 30.
append wa_fldcat to it_fldcat .
endform.
form build_alv_header .
* Type H is used to display headers i.e. big font
clear wa_list_commentary.
wa_list_commentary-typ = 'H'.
wa_list_commentary-info = 'Contoh Report PO'.
append wa_list_commentary to it_list_commentary.
clear wa_list_commentary.
wa_list_commentary-typ = 'H'.
wa_list_commentary-info = 'PT. PErusahaan SAYA'.
append wa_list_commentary to it_list_commentary.
* Type S is used to display key and value pairs
clear wa_list_commentary.
wa_list_commentary-typ = 'S'.
wa_list_commentary-key = 'Date :' .
concatenate sy-datum+6(2) sy-datum+4(2) sy-datum(4) into wa_list_commentary-info separated by '/'.
append wa_list_commentary to it_list_commentary.
* Type A is used to display italic font
clear wa_list_commentary.
wa_list_commentary-typ = 'A'.
concatenate 'Refresh on' sy-uzeit+0(2) into wa_list_commentary-info separated by space.
concatenate wa_list_commentary-info sy-uzeit+2(2) sy-uzeit+4(2) into wa_list_commentary-info separated by ':'.
append wa_list_commentary to it_list_commentary.
endform.
form top_of_page.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = it_list_commentary
i_logo = 'ENJOYSAP_LOGO'. "ENJOYSAP_LOGO
endform.
form display_alv.
wa_layout-stylefname = 'FIELD_STYLE'.
wa_layout-zebra = 'X'.
call function 'REUSE_ALV_GRID_DISPLAY_LVC'
exporting
i_callback_program = sy-repid
* i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout_lvc = wa_layout
it_fieldcat_lvc = it_fldcat[]
i_save = 'X'
tables
t_outtab = it_data
exceptions
program_error = 1
others = 2.
endform.
tampilan diatas adalah untuk memasukkan paramter filter data yang akan di tampilkan, jika tidak ada yang diisi maka akan menampilkan semua data. Berikut tampilan ALV Grid nya :
Sekian Semoga Bermanfaat. :D
Wednesday, 6 September 2017
Membuat CRUD sederhana dengan Laravel
Pada postingan kali ini saya akan sharing cara membuat proses Create, Read, Update, Delete atau yang lebih dikenal dengan istilah CRUD :D.
Ok langsung saja :
Create new project
untuk nama project-nya saya buat dengan nama crud
composer create-project --prefer-dist laravel/laravel crud
Create database
setelah membuat project laravel, selanjutnya kita buat database dan table di mysql, untuk nama databasenya kita buat sama denga nama projectnya yaitu : crud. Setelah itu kita buat table dengan nama Books dan struktur tablenya seperti berikut :
sampai disini persiapan awal sudah selesai, selanjutnya buka folder project laravel yang sudah kita buat dan ikut step-step berikut :
Setting koneksi
untuk setting koneksi kita buka file .env dan kita rubah menjadi seperti berikut :
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crud
DB_USERNAME=root
DB_PASSWORD=
Tambahkan bootstrap css
agar tampilan web yang akan kita buat lebih baik, kita tambahkan css bootstrap di project kita. jika belum punya boostrap bisa di download Disini. Setelah itu copy file bootstrap.css yang ada di folder css ke folder public/css yang ada di project kita.
Membuat View
dalam view ini kita bisa mengatur tampilan website yang akan kita buat, view ini terletak di folder resource/views, adapun view-view yang akan kita buat disini adalah :
1. View index
view index ini berfungsi sebagai tampilan awal dari website kita, tambahkan kode berikut di view index.blade.php
<!DOCTYPE html>
<html>
<head>
<title>CRUD Laravel</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{asset('css/bootstrap.css')}}">
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h4>Tutorial CRUD Laravel</h4>
</div>
<div class="panel-body">
<form action="{{url('create')}}" method="get">
<div class="form-group">
<input type="submit" name="new" id="new" value="Entry Baru" class="btn btn-success">
</div>
</form>
<table class="table table-striped">
<thead>
<tr>
<th>Kode Buku</th>
<th>Judul</th>
<th>Deskripsi</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@foreach($data as $key => $d)
<tr>
<td>{{ $d->kode_buku }}</td>
<td>{{ $d->judul }}</td>
<td>{{ $d->deskripsi }}</td>
<td>
<a href="{{url('read',array($d->id))}}">Read</a>
<a href="{{url('delete',array($d->id))}}">Delete</a>
<a href="{{url('edit',array($d->id))}}">Edit</a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
2. view create.blade.php
<!DOCTYPE html>
<html>
<head>
<title>CRUD Laravel</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{asset('css/bootstrap.css')}}">
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h4>Tutorial CRUD Laravel</h4>
</div>
<div class="panel-body">
<form action="{{url('insert')}}" method="post">
<div class="form-group">
<label for="kode">Kode Buku</label>
<input type="text" name="kode" id="kode" class="form-control" required="require">
</div>
<div class="form-group">
<label for="judul">Judul Buku</label>
<input type="text" name="judul" id="judul" class="form-control">
</div>
<div class="form-group">
<textarea id="deskripsi" name="deskripsi" class="form-control"></textarea>
</div>
<div class="form-group">
<input type="submit" name="send" id="send" value="Simpan" class="btn btn-success">{!!csrf_field()!!}
</div>
</form>
</div>
</div>
</div>
</body>
</html>
3. view edit.blade.php
<!DOCTYPE html>
<html>
<head>
<title>CRUD Laravel</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{asset('css/bootstrap.css')}}">
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h4>Tutorial CRUD Laravel</h4>
</div>
<div class="panel-body">
<form action="{{url('update', $data->id)}}" method="post">
<!-- <input type="hidden" name="id" id="id" value="{{$data->id}}"> -->
<div class="form-group">
<label for="kode">Kode Buku</label>
<input type="text" name="kode" id="kode" value="{{$data->kode_buku}}" class="form-control">
</div>
<div class="form-group">
<label for="judul">Judul Buku</label>
<input type="text" name="judul" id="judul" value="{{$data->judul}}" class="form-control">
</div>
<div class="form-group">
<textarea id="deskripsi" name="deskripsi" class="form-control">
{!!$data->deskripsi!!}
</textarea>
</div>
<div class="form-group">
<input type="submit" name="send" id="send" value="Simpan" class="btn btn-success">{!!csrf_field()!!}
</div>
</form>
</div>
</div>
</div>
</body>
</html>
4. view read.blade.php
<!DOCTYPE html>
<html>
<head>
<title>CRUD Laravel</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{asset('css/bootstrap.css')}}">
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h4>Tutorial CRUD Laravel</h4>
</div>
<div class="panel-body">
<!-- <input type="hidden" name="id" id="id" value="{{$data->id}}"> -->
<div class="form-group">
<label for="kode">Kode Buku</label>
<input type="text" name="kode" id="kode" value="{{$data->kode_buku}}" class="form-control" readonly>
</div>
<div class="form-group">
<label for="judul">Judul Buku</label>
<input type="text" name="judul" id="judul" value="{{$data->judul}}" class="form-control" readonly>
</div>
<div class="form-group">
<label for="desk">Deskripsi</label>
<input type="text" name="desk" id="desk" value="{{$data->deskripsi}}" class="form-control" readonly>
</div>
<form action="{{url('back')}}" method="get">
<div class="form-group">
<input type="submit" value="Back" class="btn btn-success">
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Membuat Controller
controller ini berfungsi untuk menuliskan logic program (contohnya : query ke database)
untuk membuat controller kita jalan command line dan tuliskan command berikut :
php artisan make:controller BooksController
setelah itu dalam project kita akan terbentuk sebuah controller dengan nama BooksController yang trsimpan di folder app/Http/Controllers dan tambahkan kode berikut :
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; use App\Books; class BooksController extends Controller { public function index(){ $data=Books::all(); return view('index',compact('data')); } public function back(){ return redirect ('/'); } public function create(){ return view('create'); } public function insert(Request $request){ $data=new Books(); $data->kode_buku=$request->get('kode'); $data->judul=$request->get('judul'); $data->deskripsi=$request->get('deskripsi'); $data->save(); return redirect ('/'); } public function delete($id){ $data=Books::find($id); $data->delete(); return back(); } public function edit($id){ $data=Books::find($id); return view('edit',compact('data')); } public function update(Request $request, $id){ $data = Books::findOrFail($id); $data->kode_buku=$request->get('kode'); $data->judul=$request->get('judul'); $data->deskripsi=$request->get('deskripsi'); $data->save(); return redirect ('/')->with('alert-success','Data berhasil Diubah.'); } public function read($id){ $data=Books::find($id); return view('read',compact('data')); } }
Membuat model
untuk membuat model tuliskan command berikut di command line :
php artisan make:model Books
Tuliskan kode berikut di model Books
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Books extends Model { protected $table="Books"; protected $primaryKey="id"; protected $fillable=['kode_buku','judul','deskripsi']; }
Routing
routing ini berfungsi untuk menghubungkan controller dengan view, routing ini kita tambahkan didalam folder routes/web.php dan tambahkan kode berikut :
Route::get('/','BooksController@index');
Route::get('back','BooksController@back');
Route::get('create','BooksController@create');
Route::post('insert', 'BooksController@insert');
Route::get('delete/{id}','BooksController@delete');
Route::get('edit/{id}','BooksController@edit');
Route::post('update/{id}', 'BooksController@update');
Route::get('read/{id}','BooksController@read');
jika sudah selesai semua, coba jalankan programnya melalui web browser.
Berikut screen shot dari aplikasi ini :
index
Read
Edit
Sekian sharing kali ini, semoga bermanfaat.
keep sharing..... :D
Tuesday, 5 September 2017
Membuat Project Baru di Laravel
Setelah membahas mengenal laravel pada postingan Sebelumnya, pada postingan kali ini saya akan sharing cara membuat project baru di laravel. Sebelum membuat project baru pastikan sudah meng-install composer laravel jika belum bisa di download Disini. untuk IDE saya sarankan menggunakan Visual Studio Code.
Sebelum membuat project laravel, Pastikan komputer/laptop terhubung internet.
Ok lansung saja kita mulai step-step membuat project baru di laravel :
Buka command line di folder tempat kita akan meletakkan file project kita dengan cara klik kanan + tombol shift kemudian tuliskan command berikut :
contoh disini saya akan membuat project seperti digambar berikut :
Setelah command line dijalankan, tuliskan command berikut :
composer create-project --prefer-dist laravel/laravel nama_project
nama project yang saya buat adalah Latihan1, setelah itu tekan enter dan tunggu proses instalasi laravel sampai selesai.
Setelah proses instalasi selesai maka akan tercreate satu folder baru dengan Latihan1 dan strukture foldernya seperti berikut :
Sampai disini kita sudah berhasil membuat project baru di laravel dan kita bisa langsung menjalankan project melalui web browser, untuk menjalankan projectnya kita buka command line didalam folder project Latihan1 kemudian tuliskan command berikut :
php artisan serve
Setelah itu jalankan : http://localhost:8000/ di browser maka akan muncul tampilan seperti berikut :
Ok, sekian sharing kali ini semoga bermanfaat.
:D
Mengenal Laravel
Laravel merupakan salah satu framework PHP yang banyak digunakan oleh para web developer untuk membangun sebuah sistem berbasis web. Laravel juga sudah menerapkan konsep MVC (model view controller).
MVC adalah sebuah pendekatan perangkat lunak yang memisahkan aplikasi logika dari presentasi. MVC memisahkan aplikasi berdasarkan komponen- komponen aplikasi, seperti : manipulasi data, controller, dan user interface.
- Model, Model mewakili struktur data. Biasanya model berisi fungsi-fungsi yang membantu seseorang dalam pengelolaan basis data seperti memasukkan data ke basis data, pembaruan data dan lain-lain.
- View, View adalah bagian yang mengatur tampilan ke pengguna. Bisa dikatakan berupa halaman web.
- Controller, Controller merupakan bagian yang menjembatani model dan view.
Beberapa fitur yang terdapat di Laravel :
- Bundles, yaitu sebuah fitur dengan sistem pengemasan modular dan tersedia beragam di aplikasi.
- Eloquent ORM, merupakan penerapan PHP lanjutan menyediakan metode internal dari pola “active record” yang menagatasi masalah pada hubungan objek database.
- Application Logic, merupakan bagian dari aplikasi, menggunakan controller atau bagian Route.
- Reverse Routing, mendefinisikan relasi atau hubungan antara Link dan Route.
- Restful controllers, memisahkan logika dalam melayani HTTP GET and POST.
- Class Auto Loading, menyediakan loading otomatis untuk class PHP.
- View Composer, adalah kode unit logikal yang dapat dieksekusi ketika view sedang loading.
- IoC Container, memungkin obyek baru dihasilkan dengan pembalikan controller.
- Migration, menyediakan sistem kontrol untuk skema database.
- Unit Testing, banyak tes untuk mendeteksi dan mencegah regresi.
- Automatic Pagination, menyederhanakan tugas dari penerapan halaman.
Menurut tulisan akun “kursuswebdesign” di Kompasiana.com, ada beberapa kelebihan PHP Framework Laravel, antara lain:
Tampilan Sintak Lebih Artistic
Berbagai sintaks pada Laravel tersaji dengan sangat artistik, laravel memperhatikan dengan betul tampilan sintaks yang digunakan, sehingga bukan hanya terlihat lebih rapi juga lebih indah dipandang.
Blade Tamplating
Blade templating akan membantu developer dalam membuat template yang lebih terstruktur serta dinamis, yaitu dengan cara memotong struktur pada template agar lebih mudah dalam pengembangan.
Sintak Mudah Dipahami
Selama menggunakan Laravel maka akan dipastikan kita tidak akan merasa kesulitan ketika harus membaca sintaks. Mamahami sintaks pada beberapa framework yang biasanya akan terasa sulit tidak berlaku pada Laravel. Penggunaan bahasa untuk pengoperasiaannya tergolong mudah untuk dipahami dan juga singkat. Kondisi ini akan lebih memudahkan para programmer dalam menggunakan sintaks meski pada awalnya termasuk yang belum pernah menggunakannya.
Dilengkapi dengan Aplikasi Eloquent ORM
Aplikasi Eloquent ORM akan Aplikasi Eloquent ORM akan melakukan penyederhanaan proses query ke database, sehingga SQL query sama sekali tidak akan digunakan. Terdengar sangat praktis bukan? Hal ini berlaku ketika kita akan mengambil semua data pada tabel users.
Mempunyai Dokumentasi yang Lengkap.
Laravel merupakan salah satu Framework PHP yang dirancanng dengan dokumentasi yang sangat lengkap, sehingga membuatnya lebih mudah ketika digunakan.
Composer yang Sangat Lengkap
Programmer pastinya sudah tidak asing lagi dengan package manager bagi PHP yang satu ini. Laravel didukung dengan composer yang sangat support, penggunaannya pun sangat mudah untuk diaplikasikan. Composer ini akan secara otomatis menginstall library yang dibutuhkan tanpa harus mendownload library atau fitur baru bagi aplikasi yang sedang dibuat. Sehingga proses mengupdate aplikasi pun akan lebih mudah dilakukan.
Menggunakan Kosep Model View Controller (MVC)
Laravel merupakan framework yang menerapkan penggunaan konsep MVC pada struktur aplikasi yang akan dibangun. Penggunaan konsep MVC ini sangat diperlukan untuk menghasilkan kode program yang lebih bersih dan juga terstruktur tertutama bagi pengembangan aplikasi dengan skala yang besar. Hal ini sangat berguna ketika akan melakukan update.
Framework Laravel ini bisa dipelajari dengan bimbingan NF Computer (NF Computer) dengan durasi training 28 jam. Model kelas ada 3 pilihan yaitu Public Training dengan minimal jumlah peserta 6 orang, Exclusive Training dengan peserta minimal 2 orang secara full day training selama 4 hari kerja (weekday), dan Inhouse Training dengan peserta maksimal 10 orang per group dari satu institusi atau perusahaan. Kelebihan inhouse training dibanding 2 model kelas yang lain adalah waktu dan lokasi pelaksanaan sesuai dengan kesepakatan. (YTN)
Link Terkait :
https://idcloudhost.com/pengertian-dan-keunggulan-framework-laravel/
http://www.kompasiana.com/kursuswebdesign/kelebihan-php-laravel_5667e266d87a61cf2268c692
Friday, 17 February 2017
CRUD MS SQL SERVER ANDROID
Pada postingan kali ini, saya akan membahas membuat Insert, Update, Delete dengan android Studio dan Microsoft SQL Server. Biasanya programming dengan android menggunakan middleware untuk komunikasi antara aplikasi dengan database yaitu web service, tapi pada postingan kali ini saya akan memberikan contoh dimana aplikasi android akan langsung konek ke database tanpa perantara middleware (Webservice).
Ok Pertama Buat database di SQL Server dengan nama DBProducttbl, Kemudian buat table dengan nama Producttbl
Atau bisa copy script berikut untuk membuat table di Sql Server :
CREATE TABLE [dbo].[Producttbl](
[Id]
[int] IDENTITY(1,1) NOT NULL,
[ProName]
[varchar](50) NULL,
[ProDesc]
[varchar](50) NULL,
[OnDate]
[datetime] NULL
)
Ok Selanjutnya Create New Project di Android Studio :
Pertama buat layout seperti gambar berikut :
Atau bisa copy xml file berikut :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#282828" android:orientation="vertical" tools:context="app.app.com.droidsql2.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_alignParentTop="true" android:padding="2dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ADD PRODUCTS" android:layout_marginTop="7dp" android:typeface="sans" android:textSize="35sp" android:textColor="#ffffff" android:gravity="center" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:textColor="#ffffff" android:textColorHint="#ffffff" android:textStyle="bold" android:background="#5d5d5d" android:padding="10dp" android:hint="PRODUCT NAME" android:textSize="20sp" android:id="@+id/edtproname" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:hint="DESCRIPTION" android:textColor="#ffffff" android:textColorHint="#ffffff" android:textStyle="bold" android:background="#5d5d5d" android:padding="10dp" android:inputType="textMultiLine" android:maxLines="3" android:minLines="2" android:layout_gravity="top|left" android:layout_marginTop="5dp" android:id="@+id/edtprodesc" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="3" android:layout_marginTop="5dp" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textColor="#ffffff" android:textSize="20sp" android:layout_margin="2dp" android:padding="7dp" android:layout_marginTop="10dp" android:id="@+id/btnadd" android:text="Add" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_margin="2dp" android:textColor="#ffffff" android:textSize="20sp" android:padding="7dp" android:layout_marginTop="10dp" android:id="@+id/btnupdate" android:text="Update" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textColor="#ffffff" android:textSize="20sp" android:layout_margin="2dp" android:padding="7dp" android:layout_marginTop="10dp" android:id="@+id/btndelete" android:text="Delete" /> </LinearLayout> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/pbbar" /> <ListView android:id="@+id/lstproducts" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#808080" android:layout_marginTop="5dp" android:dividerHeight="1dp" android:padding="5dp"> </ListView> </LinearLayout> </RelativeLayout> |
Tambahkan satu layout baru dengan nama lsttemplate.xml
kemudian masukkan code xml berikut :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="5" android:padding="5dp" android:layout_marginTop="2dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:textColor="#ffffff" android:layout_weight="1" android:textSize="15sp" android:text="1" android:id="@+id/lblproid"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" android:textColor="#ffffff" android:textSize="15sp" android:text="MOTOROLA" android:id="@+id/lblproname"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0" android:textColor="#ffffff" android:textSize="0sp" android:text="MOTOROLA" android:id="@+id/lblprodesc"/> </LinearLayout> |
Selanjutnya tambahkan class baru dengan nama : ConnectionClass.java
Berikut detail source code dari ConnectionClass.java
package app.app.com.droidsql2; import android.annotation.SuppressLint; import android.os.StrictMode; import android.util.Log; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * Created by IT on 2/17/2017. */ public class ConnectionClass { String ip = "192.168.88.197"; String classs = "net.sourceforge.jtds.jdbc.Driver"; String db = "ERP120"; String un = "sa"; String password = "Admin123456kr"; @SuppressLint("NewApi") public Connection CONN() { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build(); StrictMode.setThreadPolicy(policy); Connection conn = null; String ConnURL = null; try { Class.forName(classs); ConnURL = "jdbc:jtds:sqlserver://" + ip + ";" + "databaseName=" + db + ";user=" + un + ";password=" + password + ";"; conn = DriverManager.getConnection(ConnURL); } catch (SQLException se) { Log.e("ERRO", se.getMessage()); } catch (ClassNotFoundException e) { Log.e("ERRO", e.getMessage()); } catch (Exception e) { Log.e("ERRO", e.getMessage()); } return conn; } } |
Kemudian di MainActivity.java tuliskan source code seperti berikut :
package app.app.com.droidsql2; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.SimpleAdapter; import android.widget.Toast; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; public class MainActivity extends AppCompatActivity { ConnectionClass connectionClass; EditText edtproname, edtprodesc; Button btnadd,btnupdate,btndelete; ProgressBar pbbar; ListView lstpro; String proid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); connectionClass = new ConnectionClass(); edtproname = (EditText) findViewById(R.id.edtproname); edtprodesc = (EditText) findViewById(R.id.edtprodesc); btnadd = (Button) findViewById(R.id.btnadd); btnupdate = (Button) findViewById(R.id.btnupdate); btndelete = (Button) findViewById(R.id.btndelete); pbbar = (ProgressBar) findViewById(R.id.pbbar); pbbar.setVisibility(View.GONE); lstpro = (ListView) findViewById(R.id.lstproducts); proid = ""; FillList fillList = new FillList(); fillList.execute(""); btnadd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AddPro addPro = new AddPro(); addPro.execute(""); edtproname.setText(""); edtprodesc.setText(""); } }); btnupdate.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { UpdatePro updatePro = new UpdatePro(); updatePro.execute(""); edtproname.setText(""); edtprodesc.setText(""); } }); btndelete.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { DeletePro deletePro = new DeletePro(); deletePro.execute(""); edtproname.setText(""); edtprodesc.setText(""); } }); } public class FillList extends AsyncTask<String, String, String> { String z = ""; List<Map<String, String>> prolist = new ArrayList<Map<String, String>>(); @Override protected void onPreExecute() { pbbar.setVisibility(View.VISIBLE); } @Override protected void onPostExecute(String r) { pbbar.setVisibility(View.GONE); Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show(); String[] from = { "A", "B", "C", "D" }; int[] views = { R.id.lblproid, R.id.lblproname, R.id.lblprodesc, R.id.lbldesc }; final SimpleAdapter ADA = new SimpleAdapter(MainActivity.this,
prolist, R.layout.lsttemplate, from, views); lstpro.setAdapter(ADA); lstpro.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { HashMap<String, Object> obj = (HashMap<String, Object>)
ADA.getItem(arg2); proid = (String) obj.get("A"); String proname = (String) obj.get("B"); String prodesc = (String) obj.get("C"); edtprodesc.setText(prodesc); edtproname.setText(proname); // qty.setText(qtys); } }); } @Override
protected String doInBackground(String... params) { try { Connection con = connectionClass.CONN(); if (con == null) { z = "Error in connection with SQL server"; } else { String query = "select Id,ProName,ProDesc from Producttbl"; PreparedStatement ps = con.prepareStatement(query); ResultSet rs = ps.executeQuery(); //ArrayList data1 = new ArrayList();
while (rs.next()) { Map<String, String> datanum = new HashMap<String, String>(); datanum.put("A", rs.getString("Id")); datanum.put("B", rs.getString("ProName")); datanum.put("C", rs.getString("ProDesc")); prolist.add(datanum); } //z = "Success"; } } catch (Exception ex) { z = "Error retrieving data from table"; } return z; } } public class AddPro extends AsyncTask<String, String, String> { String z = ""; Boolean isSuccess = false; String proname = edtproname.getText().toString(); String prodesc = edtprodesc.getText().toString(); @Override
protected void onPreExecute() { pbbar.setVisibility(View.VISIBLE); } @Override protected void onPostExecute(String r) { pbbar.setVisibility(View.GONE); Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show(); if(isSuccess==true) { FillList fillList = new FillList(); fillList.execute(""); } } @Override
protected String doInBackground(String... params) { if (proname.trim().equals("") || prodesc.trim().equals("")) z = "Please enter User Id and Password"; else { try { Connection con = connectionClass.CONN(); if (con == null) { z = "Error in connection with SQL server"; } else { String dates = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH) .format(Calendar.getInstance().getTime()); String query = "insert into Producttbl (ProName,ProDesc,OnDate)
values ('" + proname + "','" + prodesc + "','" + dates + "')"; PreparedStatement preparedStatement = con.prepareStatement(query); preparedStatement.executeUpdate(); z = "Added Successfully"; isSuccess = true; } } catch (Exception ex) { isSuccess = false; z = "Exceptions"; } } return z; } } public class UpdatePro extends AsyncTask<String, String, String> { String z = ""; Boolean isSuccess = false; String proname = edtproname.getText().toString(); String prodesc = edtprodesc.getText().toString(); @Override
protected void onPreExecute() { pbbar.setVisibility(View.VISIBLE); } @Override
protected void onPostExecute(String r) { pbbar.setVisibility(View.GONE); Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show(); if(isSuccess==true) { FillList fillList = new FillList(); fillList.execute(""); } } @Override
protected String doInBackground(String... params) { if (proname.trim().equals("") || prodesc.trim().equals("")) z = "Please enter User Id and Password"; else { try { Connection con = connectionClass.CONN(); if (con == null) { z = "Error in connection with SQL server"; } else { String dates = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH) .format(Calendar.getInstance().getTime()); String query = "Update Producttbl set ProName='"+proname+"',
ProDesc='"+prodesc+"' , OnDate='"+dates+"' where Id="+proid; PreparedStatement preparedStatement = con.prepareStatement(query); preparedStatement.executeUpdate(); z = "Updated Successfully"; isSuccess = true; } } catch (Exception ex) { isSuccess = false; z = "Exceptions"; } } return z; } } public class DeletePro extends AsyncTask<String, String, String> { String z = ""; Boolean isSuccess = false; String proname = edtproname.getText().toString(); String prodesc = edtprodesc.getText().toString(); @Override
protected void onPreExecute() { pbbar.setVisibility(View.VISIBLE); } @Override
protected void onPostExecute(String r) { pbbar.setVisibility(View.GONE); Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show(); if(isSuccess==true) { FillList fillList = new FillList(); fillList.execute(""); } } @Override
protected String doInBackground(String... params) { if (proname.trim().equals("") || prodesc.trim().equals("")) z = "Please enter User Id and Password"; else { try { Connection con = connectionClass.CONN(); if (con == null) { z = "Error in connection with SQL server"; } else { String dates = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH) .format(Calendar.getInstance().getTime()); String query = "delete from Producttbl where Id="+proid; PreparedStatement preparedStatement = con.prepareStatement(query); preparedStatement.executeUpdate(); z = "Deleted Successfully"; isSuccess = true; } } catch (Exception ex) { isSuccess = false; z = "Exceptions"; } } return z; } } }
Terakhir rubah Manifest menjadi seperti berikut :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.app.com.droidsql2"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Jika sudah jalankan aplikasinya :D
Untuk source code project lengkapnya bisa Di Download Disini
Terimakasih, Semoga Bermanfaat :D
Subscribe to:
Comments (Atom)
Belajar SAP ABAP RAP
Belajar SAP ABAP RAP: Pengenalan dan Konsep Dasar Restful ABAP Programming Model Kalau kamu seorang ABAPer yang mulai terjun ke dunia SAP...
-
Menurut Ginting (2007: 255) penjadwalan adalah pengurutan pembuatan atau pengerjaan produk secara menyeluruh yang dikerjakan pada beberap...
-
Customer Exit : MBCFC004 ( EXIT_SAPMM07M_004) Set Up Customer Exit for Classification of User-Defined Characteristics You use SAP enhancem...
-
Enhance SAP FBL1N, FBL3N & FBL5N: Add Custom Fields in 3 Easy Steps (ABAP Guide) ...


















