Monday, April 5, 2010

เรียก BAPI_GOODSMVT_CREATE โดยใช้ PHP

ในบทความนี้เราจะแสดงตัวอย่างของการเรียก BAPI ที่ชื่อ BAPI_GOODSMVT_CREATE ผ่านทางภาษา PHP ก่อนอื่นขออธิบาย BAPI_GOODSMVT_CREATE ก่อน BAPI ตัวนี้ใช้สำหรับสร้าง Material Document จากระบบผ่านนอกผ่านทาง BAPI คล้ายๆกับการทำงานของ Transaction: MB1A, MB1B หรือ MB1C
และทุกครั้งหลังจากเรียนก BAPI ที่กล่าวข้างต้นทำงานแล้ว ไม่พบข้อความผิดพลาด เราจะต้องเรียก BAPI_TRANSACTION_COMMIT เพื่อบันทึกข้อมูลเข้าสู่ระบบจริง แต่หากผลข้อผิดพลาด เราก็สามารถเรียก BAPI_TRANSACTION_ROLLBACK เพื่อดึงข้อมูลย้อนกลับ มาดูตัวอย่างกันดีกว่า

// This function receive refdoc and array of goods movement details
// and return data of material doc, material year and return message
function callissuesap($refdoc, $gmm_detail){

$return = array();

// Create saprfc-instance
$sap = create_connection();

// Import Parameters
$today = date("Ymd");

$header = array();
$header["PSTNG_DATE"] = $today;
$header["DOC_DATE"] = $today;
$header["REF_DOC_NO"] = $refdoc;
$header["HEADER_TXT"] = "";

$code = array();
$code["GM_CODE"] = "03";

$item = array();
$lineitem = array();
foreach ($gmm_detail as $gmm_line) {
$lineitem["ORDERID"] = $gmm_line["orderId"];
$lineitem["MATERIAL"] = $gmm_line["material"];
$lineitem["PLANT"] = $gmm_line["plant"];
$lineitem["STGE_LOC"] = $gmm_line["loc"];
$lineitem["BATCH"] = $gmm_line["batch"];
$lineitem["MOVE_TYPE"] = "261";
$lineitem["ENTRY_QNT"] = $gmm_line["qty"];
$lineitem["ENTRY_UOM"] = $gmm_line["une"];
$item[] = $lineitem;
}

// Call-Function
$result=$sap->callFunction("BAPI_GOODSMVT_CREATE",
array(
array("IMPORT","GOODSMVT_HEADER",$header),
array("IMPORT","GOODSMVT_CODE",$code),
array("EXPORT","MATERIALDOCUMENT",""),
array("EXPORT","MATDOCUMENTYEAR",""),
array("TABLE","GOODSMVT_ITEM",$item),
array("TABLE","RETURN",array())
));

// Call successfull?
if ($sap->getStatus() == SAPRFC_OK) {
$sap->callFunction("BAPI_TRANSACTION_COMMIT",array());
$return["MAT_DOC"] = $result["MATERIALDOCUMENT"];
$return["MAT_DOC_YEAR"] = $result["MATDOCUMENTYEAR"];
$return["RETURN"] = $result["RETURN"];
}
else {
$mess = array();
$messline = array();
$messline["TYPE"] = "E";
$messline["MESSAGE"] = $sap->getStatusTextLong();
$mess[] = $messline;

// $sap->printStatus();
$sap->callFunction("BAPI_TRANSACTION_ROLLBACK",array());
$return["MAT_DOC"] = "";
$return["MAT_DOC_YEAR"] = "";
$return["RETURN"] = $mess;
}
$sap->logoff();

return $return;
}

function create_connection() {
return $sap = new saprfc(array(
"logindata"=>array(
"ASHOST"=>"xxx.xxx.xxx.xxx" // application server
,"SYSNR"=>"xx" // system number
,"CLIENT"=>"xxx" // client
,"USER"=>"xxxxxxxxx" // user
,"PASSWD"=>"xxxxxxxxx" // password
)
,"show_errors"=>false // let class printout errors
,"debug"=>false)) ; // detailed debugging information
}


Information about GM_CODE
GM_Code 01: Goods receipt for purchase order
GM_Code 02: Goods receipt for production order
GM_Code 03: Goods issue
GM_Code 04: Transfer posting
GM_Code 05: Other goods receipts
GM_Code 06: Reversal of goods movements

คุณสามารถอ่านข้อมูลเพิ่มเติมได้ โดยไปที่ TCode: BAPI -> Materials Management -> Inventory Management, Goods Movement, CreateFromData -> Tab Documentation

No comments:

Post a Comment