为 MESSAGE 语句设置语言

Set Language for MESSAGE statement

我通过 RFC 使用设置的系统用户以批处理模式访问我的代码,其登录语言设置为 'DE'。如果出现错误,我使用消息语句,以便其他系统上的应用程序可以处理此错误。

MESSAGE i001(ztest) INTO DATA(e_error).

该消息已翻译成多种语言。根据其他系统上用户的语言,我需要翻译消息。但是无论更改sy-langu还是使用SET(LOCALE)LANGUAGE语句,消息仍然以德语返回,系统用户原始设置(如关键字文档所述'If the text environment is set using the statement SET LOCALE, this is ignored by the language in which the message is displayed. '

在此更改之前,我们使用文本元素,它可以与之一起工作。
是否可以在运行时更改 MESSAGE 语句使用的语言?

一种解决方法是,不使用 MESSAGE,只需选择具有您需要的语言的消息文本(在我的示例中为英语):

SELECT SINGLE text
       INTO @DATA(e_error)
       FROM t100
       WHERE sprsl EQ 'E'
         AND arbgb EQ 'ZTEST'
         AND msgnr EQ '001'.

显然,如果消息有占位符,您还有更多工作要做。

第二种可能的解决方法是:

  • 使您的 RFC 功能模块 (RFM 1) return 消息 ID + 消息编号 + 4 个可选变量
  • 调用 RFM 1 后,调用程序调用支持 RFC 的功能模块 BAPI_MESSAGE_GETDETAIL 以获取所需语言的文本(参数 LANGUAGE 或 LANGUAGE_ISO)。