SAP ABAP – PHP Connector dan RFC

SAP ABAP – PHP Connector dan RFC
Salam ABAP HR Indonesia !

Kali ini aye mau bahas Interface antara SAP dan PHP. Skenario Applikasinya gini, aye mau bikin semacem ESS untuk employee gunanya untuk employee bisa mengecek sisa cutinya masing-masing melalui WEB, sementara data nye ada di SAP ( background-nye ). Kurang lebih gambarannya gitu aje ye…. Gak usah yg gede-gede dulu nyang penting ketangkep malingnya…… maksudnye idenya. Sebenernya nyang kayak gini sih di SAP versi baru ( netweaver bo ) itu lebih mudah karena udeh ade java nye, atau bisa pake SOAP, atau SOA atau pake .NET atau VB connector tapi nyang ini ni sekarang kita coba pake PHP connector karena gratis dan mudah.




Nyang kite butuhin sekarang sih ya mungkin :
1. SAP, ya emang sebagai background system nya, semua data employee ada di sini, termasuk data cuti employee yang nanti kita butuhkan untuk coba disini ye.
2. Application Server, nah nanti kite coba pake yang simple aje install aje XAMPP biar cepet ye.
3. PHP udah include di nomor 2 diatas tuh kalo kite udah install.
4. PHP Connector bisa di download disini .


Nah kalo nyang kite butuhin udeh ade semua tinggal kita ikutin step-step nye ye, yuk kite mulai, start your engine, get set and …… goooo

Step 1 : Install Application server XAMPP nye, ikutin aje ye, aye anggap udah bisa lah cara install XAMPP ini. Nanti biasenye udan terinstall juga PHP nye disitu.

Step 2 : Taro deh PHP connector DLL nye di PHP server nye. Kalo pake PHP 5 biasenye ada di folder …\xampp\php\ext kalo di php 4 biasenye ada di folder …\xampp\php\extentions

Step 3 : Edit file php.ini tambahin -> extension=php_saprfc.dll di bagian extention nye ye. Bisa di test Saprfc dll itu jalan ape enggak lewat phpinfo() tau kan ? Kalo keliatan ada berarti udah on tuh.




Step 4 : bikin folder working\cuti di htdocs

Step 5 : taro file saprfc.php di folder working\cuti itu ye ( coba baca2 deh saprfc.php nye isinye ye )

Step 6 : bikin file Infocuti.php isinye kayak dibawah ini codingnye.


<html>
<head>
</head>
<body>
<fieldset><legend>Absence Quota</legend>
<?
$zpernr = '';
echo "<form method='POST' action='getcuti.php'>
Employee Number  : <input type='text' name='zpernr' value='$zpernr' size='8' Maxlength='8'>&nbsp&nbsp<input type='submit' name='submit' value='Submit'>
</form>";
?>
</fieldset>
</body>
</html>



Step 7 : Bikin lagi di folder tadi ye file getcuti.php nyang isi nye dibawah niii.

<?php 
include("infocuti.php");
require_once("saprfc.php");
$zpernr = $_POST["zpernr"];
?>

<html>
<head>
</head>

<body>

<fieldset><legend>Information</legend>
<?
//Create Object to login SAP
$rfc = new saprfc(array(
"logindata"=>array(
"ASHOST"=>"10.1.10.11"   // application server
,"SYSNR"=>"00"           // system number
,"CLIENT"=>"805"         // client
,"USER"=>"dicky.z"       // user
,"PASSWD"=>"dickyz"      // password
)
,"show_errors"=>false   // let class printout errors
,"debug"=>false)) ;      // detailed debugging information

if ( ! $rfc ){exit;}

//set date
list($d, $m, $y, ) = split('-', date("d-m-Y"));
$zdesta = $y."0101";
$zdeend = $y."1231";
$zdesta = "18000101";
$zdeend = "99991231";

// Call-Function
$result = $rfc->callFunction("Z_GET_ABSENCE_QUOTA",
array(array("IMPORT","ZPERNR","$zpernr"),
array("IMPORT","ZSUBTY","01"),
array("IMPORT","ZDEDDA","$zdesta"),
array("IMPORT","ZDEDEN","$zdeend"),
array("EXPORT","ZENAME",""),
array("TABLE" ,"ZP2006",array())
));

// Call successfull?
if ($rfc->getStatus() == SAPRFC_OK) {

if ($result["ZENAME"]==''){
echo "Employee number not found, please verify...";
$rfc->logoff();
exit;
}

echo "<table><tr><td>Employee Number</td><td>:</td><td>",$zpernr,"</td></tr>";
echo "<tr><td>Name</td><td>:</td><td>",$result["ZENAME"],"</td></tr></table><br>";
?>
<table border='1' bordercolorlight='#000000'>
<tr><th>Start</th><th>End</th><th>Deduction Start</th><th>Deduction End</th><th>Quota</th><th>Quota used</th></tr>
<?
echo "<caption>Quota : ",$zdesta," - ",$zdeend,"</caption>";

$zquota = 0;
$zused = 0;
$zn = 0;
foreach ($result["ZP2006"] as $detail) {
if ($zn==0){ 
echo "<tr CLASS='a'>"; $zn++; }
else{
echo "<tr CLASS='b'>"; $zn--; }
echo "<td>", $detail["BEGDA"],"</td>
<td>", $detail["ENDDA"],"</td>
<td>", $detail["DESTA"],"</td>
<td>", $detail["DEEND"],"</td>
<td align='right'>", $detail["ANZHL"]," day(s)</td>
<td align='right'>", $detail["KVERB"]," day(s)</td></tr>";
$zquota = $zquota + $detail["ANZHL"];
$zused = $zused + $detail["KVERB"];
}

echo "<tr><td colspan=4>Total</td><td align='right'>",$zquota," day(s)</td><td align='right'>",$zused," day(s)</td></tr>";
echo "<tr><td colspan=5>Balance</td><td align='right'>",$zquota-$zused," day(s)</td></tr>";
?></table><?

} else {
// No, print long Version of last Error
$rfc->printStatus();
// or print your own error-message with the strings received from
//   $sap->getStatusText() or $sap->getStatusTextLong()
}

$rfc->logoff();

?>

</fieldset>
</body></html>




Step 8 : Untuk file getcuti.php perhatikan coding nye nyang bagian


$rfc = new saprfc(array(
"logindata"=>array(
"ASHOST"=>"10.1.10.11" // application server
,"SYSNR"=>"00" // system number
,"CLIENT"=>"805" // client
,"USER"=>"dicky.z" // user
,"PASSWD"=>"dickyz" // password
)
,"show_errors"=>false // let class printout errors
,"debug"=>false)) ; // detailed debugging information

Harus di sesuaikan dengan login yang nantinye ente pake di SAP nye ye..


Step 9 :
Kite bikin Coding RFC di SAP nye ye, lewat SE37 kita bikin function namenye Z_GET_ABSENCE_QUOTA.









Coding Abap nye dibawah ini
FUNCTION Z_GET_ABSENCE_QUOTA.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(ZPERNR) LIKE  P2006-PERNR
*"     VALUE(ZSUBTY) LIKE  P2006-SUBTY
*"     VALUE(ZDEDDA) LIKE  P2006-DESTA
*"     VALUE(ZDEDEN) LIKE  P2006-DEEND
*"  EXPORTING
*"     VALUE(ZENAME) LIKE  P0002-CNAME
*"  TABLES
*"      ZP2006 STRUCTURE  PA2006
*"----------------------------------------------------------------------

* Get Quota infty 2006

SELECT * FROM PA2006 INTO zp2006 WHERE PERNR eq zpernr
AND SUBTY eq zsubty
AND DESTA ge zdedda
AND DESTA le zdeden.
*                         AND DEEND ge zdeden.
APPEND zp2006.
CLEAR zp2006.
ENDSELECT.

* Get Personnal Data Infty 0002
INFOTYPES: 0002.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
TCLAS     = 'A'
PERNR     = zpernr
INFTY     = '0002'
BEGDA     = zdedda
ENDDA     = zdeden
TABLES
INFTY_TAB = p0002.
READ TABLE p0002 INDEX 1.
ZENAME = p0002-CNAME.

ENDFUNCTION.




Step 10 :
Nanti tinggal di test kurang lebih hasilnye kayak gini.





silahkan.... selamat mencoba
Kalo ade salah salah mohon di koreksi ye…. Namanya juga sama-sama belajar.

ini ada link yg thema nya same





2 Responses to "SAP ABAP – PHP Connector dan RFC"

chris says
December 28, 2009 11:06 AM

great post. thank for share. I really need something like this.

and dont forget to pay a visit here

Anonymous

mas link SAP Connector nya mana ne?
di coba gak ada phprfc.dll nya gak ada. thx.