Php SAPNWRFC可以';t将字符串转换为RFCTYPE_NUM
我开发了一个PHP7.0程序,并使用sapnwrfc扩展连接到SAP系统 程序在SAP系统上远程执行函数Php SAPNWRFC可以';t将字符串转换为RFCTYPE_NUM,php,sap,saprfc,Php,Sap,Saprfc,我开发了一个PHP7.0程序,并使用sapnwrfc扩展连接到SAP系统 程序在SAP系统上远程执行函数ZCLSC\u SEARCH\u OBJECTS,但方法invoke返回此错误: RFCTYPE\U NUM value=Q1\U NUM类型的ATINN无法转换为RFCTYPE\U NUM类型 如果我尝试使用saprfc扩展使用PHP5.6,它会工作 什么是错的,什么是要纠正的 $connection = $this->connect_sap(); if ($conne
ZCLSC\u SEARCH\u OBJECTS
,但方法invoke
返回此错误:
RFCTYPE\U NUM value=Q1\U NUM类型的ATINN无法转换为RFCTYPE\U NUM类型
如果我尝试使用saprfc扩展使用PHP5.6,它会工作
什么是错的,什么是要纠正的
$connection = $this->connect_sap();
if ($connection->ping() === true) {
try {
$today_str = date("Ymd");
$f = $connection->getFunction('ZCLSC_SEARCH_OBJECTS');
foreach ($query as $key => $val) {
$qualifier = $val['q1'];
$q1 = "Q1_NUMBER";
// $q1 = settype($q1, 'string');
$r = $f->invoke([
"I_CLASSTYPE" => "001",
"I_TOP_CLASS_STRUC" => array(
"MANDT" => $this->client,
"CLINT" => "0000000017",
"KLART" => "001",
"CLASS" => "ZSP_INFO",
"STATU" => "1",
),
"I_KEYDATE" => $today_str,
"I_LANGUAGE" => "EN",
"I_STATUS_FREE" => "X",
"I_R_OBJECTTYPES_TAB" => array([
"SIGN" => "I",
"OPTION" => "EQ",
"LOW" => "MARA",
]),
"I_SELECTION_CRITERIA_TAB" => array([
"ATINN" => $q1,
"ATWRT" => $qualifier,
"ATCOD" => "1",
"STATU" => "H",
"ATFOR" => "CHAR",
"SLCOD" => "1",
]),
"I_R_CHARACTERISTICS_TAB" => array([
"SIGN" => "I",
"OPTION" => "EQ",
"LOW" => $q1,
]),
]);
echo "result";
print_r($r);
exit;
// // if (is_array($r['MATNRLIST']) and sizeof($r['MATNRLIST']) > 0) {
// // $ret['st'] = 0;
// // $ret['msg'] = 'Have description ' . $val['material_description_1'] . ' already';
// // return $ret;
// // }
// // if ($val['q19'] == 'Krones') { //สลับการค้นหา
// // }
}
// $ret['st'] = 1;
// $ret['msg'] = '';
// return $ret;
} catch (SapException $ex) {
print_r($ex);
print_r($ex->getErrorInfo());
exit;
}
}
$connection->close();
数据类型
RFCTYPE\u NUM
意味着变量仅包含数字字符,但您传递的值'Q1\u numer'
包含非数字字符,因此会出现错误
您的SAP ABAP系统可能具有跨应用程序组件“CA-CL”(分类):表CABN
中存在ATINN
列,用于通过数字唯一标识“特征”,而在同一表中,还有ATNAM
列,用于通过名称唯一标识特征
因此,我假设您想要查询特征Q1\u编号
。但是你应该传递它的号码而不是它的名字
要确定其编号,请登录SAP系统,显示表的内容(例如通过交易代码SE16),搜索Q1\u编号,查看其对应编号,并调整代码(更改变量$Q1
)
PS:我不知道为什么SAPRFC没有失败。我猜SAPRFC只是没有实现“类型不匹配”检查。不完全确定,但我猜SAPRFC仍然使用旧的librfc32.dll,它在2016年失去了支持,而不是更新的sapnwrfc.dll。librfc32.dll确实没有对FM参数执行类型检查。(如果将一个4字节的整数传递给CHAR字段,则会产生“有趣”的结果,反之亦然……)