最佳实践而不是硬编码 RFC 目的地?
Best practice instead of hard-coded RFC destinations?
是否有使用非硬编码 RFC 目标的好方法?
现在我们的解决方案是检查使用的是哪个系统,然后将目的地分配给变量
IF cl_role EQ 'P'.
p_dest = 'ESW300'.
ELSE.
p_dest = 'EAW300'.
ENDIF.
我们在调用目标函数时使用的。
CALL FUNCTION 'XYZ' DESTINATION p_dest
有没有不使用硬编码目的地的好方法?
感谢您的帮助!
我看到每家公司都创建自己的自定义 table,其中包含 RFC 目标(管理员在每个 SAP 系统中以不同方式维护;最终它可以是标准 table [=11= 中的自定义条目]), 但没有人发表任何关于它的文章。最终这个 blog post 但它是一个非常复杂的解决方案,仅记录在案,但未提供代码。
一种更简单(且足够?)的方法是为每个系统创建一个逻辑系统(事务代码 BD54
),并分配一个 RFC 目标(事务代码 BD97
)。
在你的程序中,做这样的事情:
SELECT SINGLE rfcdest
FROM tblsysdest
WHERE logsys = 'CRM'
INTO @DATA(crm_system).
CALL FUNCTION 'RFC_PING' DESTINATION crm_system
EXCEPTIONS OTHERS = 1.
PS:更喜欢抽象事物,比如用一种方法GET_CRM_SYSTEM
创建全局class而不是在每个程序中硬编码SELECT。
RFC 目标已经是端点的抽象,所以我不建议再次抽象它。出于这个原因,我建议将跨系统使用相同的名称作为主要做法,而不是将它们更改为特定于实例。
否则,如果您真的想跨系统使用不同的 RFC 目标名称(我不会),我建议您动态确定 RFC 目标而不是 hard-coding。如果您查看一些 SAP 标准程序,它们使用特定格式来确定预期的 RFC 目标名称,例如 SolMan 使用 <hostname>_<systemname>_<system number>
,但是如果您查看标准 RFC 目标,您可以找到很多示例。
作为最佳实践,我还建议永远不要像您的示例所示那样内联填充任何硬编码值,而是在 header 常量中。
我知道你可能只是想专注于你的问题,而不是为了其他阅读这篇文章的人。
是否有使用非硬编码 RFC 目标的好方法?
现在我们的解决方案是检查使用的是哪个系统,然后将目的地分配给变量
IF cl_role EQ 'P'.
p_dest = 'ESW300'.
ELSE.
p_dest = 'EAW300'.
ENDIF.
我们在调用目标函数时使用的。
CALL FUNCTION 'XYZ' DESTINATION p_dest
有没有不使用硬编码目的地的好方法?
感谢您的帮助!
我看到每家公司都创建自己的自定义 table,其中包含 RFC 目标(管理员在每个 SAP 系统中以不同方式维护;最终它可以是标准 table [=11= 中的自定义条目]), 但没有人发表任何关于它的文章。最终这个 blog post 但它是一个非常复杂的解决方案,仅记录在案,但未提供代码。
一种更简单(且足够?)的方法是为每个系统创建一个逻辑系统(事务代码 BD54
),并分配一个 RFC 目标(事务代码 BD97
)。
在你的程序中,做这样的事情:
SELECT SINGLE rfcdest
FROM tblsysdest
WHERE logsys = 'CRM'
INTO @DATA(crm_system).
CALL FUNCTION 'RFC_PING' DESTINATION crm_system
EXCEPTIONS OTHERS = 1.
PS:更喜欢抽象事物,比如用一种方法GET_CRM_SYSTEM
创建全局class而不是在每个程序中硬编码SELECT。
RFC 目标已经是端点的抽象,所以我不建议再次抽象它。出于这个原因,我建议将跨系统使用相同的名称作为主要做法,而不是将它们更改为特定于实例。
否则,如果您真的想跨系统使用不同的 RFC 目标名称(我不会),我建议您动态确定 RFC 目标而不是 hard-coding。如果您查看一些 SAP 标准程序,它们使用特定格式来确定预期的 RFC 目标名称,例如 SolMan 使用 <hostname>_<systemname>_<system number>
,但是如果您查看标准 RFC 目标,您可以找到很多示例。
作为最佳实践,我还建议永远不要像您的示例所示那样内联填充任何硬编码值,而是在 header 常量中。
我知道你可能只是想专注于你的问题,而不是为了其他阅读这篇文章的人。