php - SAPNWRFC 无法将字符串转换为 RFCTYPE_NUM
问题描述
我开发了一个 PHP 7.0 程序并使用 sapnwrfc 扩展连接到 SAP 系统。
ZCLSC_SEARCH_OBJECTS
该程序在 SAP 系统上远程执行该函数,但该方法invoke
返回此错误:
RFCTYPE_NUM value=Q1_NUMBER 类型的 ATINN 不能转换为 RFCTYPE_NUM 类型
如果我尝试使用 saprfc 扩展的 PHP 5.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_NUM
意味着该变量仅包含数字字符,但您传递的值'Q1_NUMBER'
包含非数字字符,因此会出现错误。
您的 SAP ABAP 系统可能具有跨应用程序组件“CA-CL”(分类):该ATINN
列存在于表中CABN
以通过数字唯一标识“特征”,并且在同一个表中存在ATNAM
唯一标识特征的列由一个名字。
所以我假设你想查询特性Q1_NUMBER
。但是你应该传递它的编号而不是它的名字。
要确定它的编号,请登录您的 SAP 系统,显示表的内容CABN
(例如通过事务代码SE16
),搜索Q1_NUMBER
,查看其对应的编号,然后调整您的代码(更改变量$q1
)。
PS: I don't know why SAPRFC doesn't fail. I guess that SAPRFC just doesn't implement "type mismatch" checks.
推荐阅读
- c# - WCF方式与多个服务器通信客户端
- javascript - 附加 [i] 命名项目
- python - 如何将 valuesqueryset 转换为带有日期时间的 JSON?
- java - Javers 在比较 java.sql.Timestamp 和 java.util.Date 字段时显示差异,即使日期字段没有更改
- thingsboard - 如何更改 Thingsboard 中的现有别名
- oop - 我对相互依赖的类使用什么模式
- c# - 如何将多键哈希从 perl 移植到 ac# 等效项?
- gnuplot - Gnuplot multiplot 中的双列图
- php - 如何使用 preg_replace 和 preg_quote 处理字符串(不区分大小写)?
- content-management-system - 如何在 Magnolia 应用程序中使用 FreeMarker 模板?