2016-01-21 9 views
0

Я общаюсь с PHP через RFC с помощью функции module.i пытался отправить китайские символы из функционального модуля в PHP, но на стороне PHP я получаю китайские символы в виде ######,Как отправить китайских символов из SAP на PHP через RFC?

i не понимаете, с какой стороны проблема, либо сторона с PHP, либо сторона SAP? Кто-нибудь дает мне предложение, с какой стороны мне нужно сосредоточиться, чтобы исправить эту проблему? или любой другой способ отправить китайский символ на PHP?

SAP FM Код: FN Имя: ZMM_PHP_TO_SAP

 t_log-msgty = 'E'. 
    CONCATENATE p_uname '用户无检料权限' INTO t_log-msgtx SEPARATED BY space. 
    APPEND t_log. 

PHP код:

$LOGIN = array ("ASHOST"=>$row_login1["sap_server"], 
      "SYSNR"=>$row_login1["sap_system_number"], 
      "CLIENT"=>$row_login1["sap_client"], 
      "USER"=>$row_login1["sap_username"], 
      "PASSWD"=>$row_login1["sap_password"], 
      "CODEPAGE"=>"8300"); 

$rfc = saprfc_open ($LOGIN); 

if(!$rfc){ 
$error=saprfc_error(); 
return "The RFC connection has failed with the following error:".saprfc_error(); 
exit;} 
$fce = saprfc_function_discover($rfc,"ZMM_PHP_TO_SAP"); 
if(!$fce){ 
    return "The function module has failed."; 
    return $rfc; 
    exit;}saprfc_import ($fce,"P_UNAME","demo-china"); 
saprfc_table_init ($fce,"T_LOG"); 

// Call and execute the function 
$rc = saprfc_call_and_receive ($fce); 
if ($rfc_rc != SAPRFC_OK){ 
    if ($rfc == SAPRFC_EXCEPTION){ 
     echo ("Exception raised: ".saprfc_exception($fce)); 
    } else { 
     echo ("Call error: ".saprfc_error($fce)); 
    } 
    echo "failure"; 
    exit; 
} 
$data_row = saprfc_table_rows ($fce,"T_LOG"); 
    $log_msg=''; 
    if($data_row != 0 || $data_row != '') 
    { 
     for ($i=1; $i<=$data_row; $i++) 
     { 
     $DATA = saprfc_table_read ($fce,"T_LOG",$i); 
     echo $DATA['MSGTX']; 
      if($DATA['MSGTY'] == "E") 
      { 
      $log_msg =$DATA['MSGTX']; 
      } 
      if($DATA['MSGNO'] == "D") 
      { 
      $log_msg ="D"; 

      } 

     } 
    } 

когда itry напечатать $ DATA [ 'MSGTX'] выход DEMO-CHINA ¥ Î ## # ®Æ #, как получить точные китайские символы. благодарит заранее.

+0

Какой функциональный модуль вы используете? Какой сервер PHP вы используете? – Suncatcher

+0

Функциональный модуль SAP, который подключается через RFC-соединение, и я использую сервер Apache. –

+0

Вы имеете в виду, что вы вызываете FM с дистанционным управлением снаружи (из среды Apache)? Какой функциональный модуль вы вызываете? Является ли он Z-модулем или стандартным? Вы можете назвать это? – Suncatcher

ответ

0

Прежде всего, вы должны никогда символов или строк жесткого кода на любом языке программирования и, в частности, в ABAP. В большинстве случаев системы SAP представляют собой многоязычные системы, которые утилизируются на международном уровне, поэтому символы, жестко закодированные в одной среде, могут быть интерпретированы по-разному в другой среде. Под термином среда Я имею в виду язык входа, параметры пользователя и т. Д.

Поэтому мы не знаем точно, как, как будут рассматриваться литералов во время вызова вашего FM, возможные шаги, которые мы можем сделать в этом случае следующие:

  1. Прежде всего, конвертировать ваши буквальный в CONCATENATE в text-symbol. Текстовые символы - рекомендуемый способ хранения символьных строк в ABAP.
  2. Затем я рекомендую вам проверить, является ли ваша система SAP Unicode. Это можно сделать с помощью системы System> Status> Unicode. Очень маловероятно, что ваша система не является Юникодом, но, тем не менее, эта проверка очень ценится.

  3. [Дополнительно] Этот шаг является необязательным и имеет смысл только в том случае, если ваша система не является Юникодом, тем не менее, было бы полезно в любом случае. Установите кодировку вашей среды на китайский язык по заявлению

    SET LOCALE LANGUAGE 1. 
    

    Поместите заявление в начало FM.

  4. Также будет разумно убедиться, что в вашем функциональном модуле включена проверка системы Unicode. Для этого вы должны перейти на Перейдите в> Главная программа> Перейдите в> Атрибуты и убедитесь, что Юникод проверяет активный флажок активен.

+0

, как вы сказали, я выполнил ваши шаги, но все же я получаю то же самое, в sap-стороне я получаю правильный выход. но на стороне PHP его не работает. –