Лучшая практика вместо жестко закодированных RF C направлений? - PullRequest
3 голосов
/ 08 апреля 2020

Есть ли хороший способ использовать не жестко заданные направления RF C?

В настоящее время наше решение состоит в том, чтобы проверить, какая система используется, а затем назначить назначение переменной

IF cl_role EQ 'P'.
      p_dest = 'ESW300'.
   ELSE.
      p_dest = 'EAW300'.
   ENDIF.

, которые мы используем при вызове нашей функции назначения.

CALL FUNCTION 'XYZ' DESTINATION p_dest

Есть ли хороший способ не использовать жестко заданные пункты назначения?

Спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 09 апреля 2020

RF C пункты назначения уже являются абстракцией конечной точки, поэтому я бы не рекомендовал абстрагировать ее еще раз. По этой причине я бы предложил использовать одно и то же имя в разных системах в качестве ведущей практики, а не менять их на спецификацию экземпляра c.

В противном случае я бы предложил вместо жесткого кодирования определить RF * 1011. * назначение динамически, если вы действительно хотите использовать разные имена назначения RF C в разных системах (я бы не стал). Если вы посмотрите на некоторые стандартные программы SAP, они используют указанный формат c, чтобы определить ожидаемое имя получателя RF C, например, <hostname>_<systemname>_<system number> используется SolMan, но есть много примеров, если вы посмотрите на стандартные получатели RF C ты можешь найти.

Я бы также рекомендовал, чтобы любые жестко закодированные значения никогда не вводились в строке, как показано в вашем примере, но в константе заголовка.

Я понимаю, что вы, вероятно, пытались сосредоточиться только на своем вопросе, но для других читающих это.

2 голосов
/ 09 апреля 2020

Я видел, как каждая компания создала свою собственную пользовательскую таблицу, содержащую адресаты RF C (администраторы по-разному поддерживали ее в каждой системе SAP; в конечном итоге это могут быть пользовательские записи в стандартной таблице TVARVC), но никто ничего не опубликовал по этому поводу. , В конце концов это сообщение в блоге , но это очень сложное решение, только документированное, но без предоставленного кода.

Более простой (и адекватный?) Способ - создать логическую систему (код транзакции * 1006). *) для каждой системы и назначьте RF C пункт назначения (код транзакции 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 вместо жесткого кодирования SELECT в каждой программе.

...