首页 > 解决方案 > 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();

标签: phpsapsaprfc

解决方案


数据类型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.


推荐阅读