Rfc sap что это

Интеграция с продуктами SAP через вызовы RFC-функций

Подключение

Для подключения к SAP RFC используется SAP.Net Connector 3.0. Важной частью является наличие библиотек sapnco.dll и sapnco_utils.dll. Для получения данных библиотек обратитесь в SAP Market Place, при этом вы должны иметь идентификатор пользователя и пароль для скачивания. Если идентификатор и пароль отсутствуют, то обратитесь к специалистам SAP Basis за помощью в получении указанных библиотек. Разрядность используемой версии «Форсайт. Аналитическая платформа» должна быть такой же, какую имеют полученные библиотеки.

Если всё для использования SAP.Net Connector 3.0 имеется, то выполните следующие действия:

Добавьте ссылку на библиотеки SAP sapnco.dll и sapnco_utils.dll:
Rfc sap что это. sap assembly. Rfc sap что это фото. Rfc sap что это-sap assembly. картинка Rfc sap что это. картинка sap assembly

Добавьте код для подключения к SAP и вызова различных RFC-функций, указанный ниже.

Код для работы с RFC-функциями

При запуске процедуры Main выполняется два действия:

Вызывается процедура Connection, которая осуществляет подключение к серверу SAP.

Вызывается функция executeSAPFunction, которая выполняет RFC-функцию и возвращает результат. Список параметров, формируемых в переменной SAPParams, а также наименование RFC-функции и наименование возвращаемой таблицы, указываемые в процедуре executeSAPFunction, должны соответствовать сигнатуре вызываемой RFC-функции.

Результат выполнения функции будет доступен в переменной DataTable и в дальнейшем может быть использован для получения и обработки данных с помощью различных инструментов «Форсайт. Аналитическая платформа».

Imports System;
Imports Prognoz.Platform.Interop.Metabase;
Imports SAP.Middleware.Connector;

Public Class StartParams
Private m_Metabase: Prognoz.Platform.Interop.Metabase.IMetabase;
Public Property Metabase: Prognoz.Platform.Interop.Metabase.IMetabase
Get
Begin
Return m_Metabase
End Get
Set
Begin
m_Metabase := Value;
End Set
End Property Metabase;
End Class ;

Public Class Program
Public Shared ConfigInitialized: boolean;
Public Shared rfcDestination: RfcDestination;

Private Shared Sub Connection();
Var
config: IDestinationConfiguration;
Begin
If Not ConfigInitialized Then
config := New SAPDestinationConfig();
config.GetParameters( «TEST» );
RfcDestinationManager.RegisterDestinationConfiguration(config);
ConfigInitialized := True ;
End If ;
rfcDestination := RfcDestinationManager.GetDestination( «TEST» );
rfcDestination.Ping();
End Sub ;

Private Shared Function executeSAPFunction(functionName: string; resultTableName: string; Paramarray params: array Of SAPParam): IRfcTable;
Var
func: IRfcFunction;
Begin
func := getSapFunction(functionName, params);
Try
func.Invoke(rfcDestination);
Return func.GetTable(resultTableName);
Except On e: RfcBaseException Do
System.Diagnostics.Debug.WriteLine(e.Message);
Finally
End Try ;
End Function ;

Private Shared Function getSapFunction(functionName: string; Paramarray params: array Of SAPParam): IRfcFunction;
Var
func: IRfcFunction;
param: SAPParam;
Begin
func := rfcDestination.Repository.CreateFunction(functionName);
For Each param In params Do
func.SetValue(param.name, param.value);
End For ;
Return func;
End Function ;
End Class ;

Public Class SAPParam
Public name: string;
Public value: object;

Public Constructor SAPParam(_name: string; _value: object);
Begin
name := _name;
value := _value;
End Constructor ;
End Class ;

Class SAPDestinationConfig: IDestinationConfiguration
Public Function ChangeEventsSupported(): boolean;
Begin
Return False ;
End Function ;

Источник

RFC модули и параллельная обработка

RFC (Remote Function Call) — протокол обмена данными между системами (подробно о SAP RFC написано в курсе BC415). RFC применяются для интеграции SAP и не SAP систем, обработки данных в новой сессии, параллельной обработки данных и т.п.

Классификация RFC

Вызывать по RFC можно любой функциональный модуль, который объявлен как «дистанционный».
Rfc sap что это. 1. Rfc sap что это фото. Rfc sap что это-1. картинка Rfc sap что это. картинка 1

Целевая система

Целевая система определяется с помощью DESTINATION dest, где dest — название RFC соединения. Для настройки RFC соединений используется транзакция SM59. Если в качестве dest передать пустую строку, то функция будет выполнена локально. В качестве dest можно передать ‘NONE’ или ‘BACK’.

Исключения

В RFC функциях, помимо запрограммированных исключений, можно обработать системные исключения:

Примечание
Системные исключения COMMUNICATION_FAILURE и SYSTEM_FAILURE можно объявить с MESSAGE msg. Тогда, при наступлении исключения в msg вернется любое сообщение из целевой системы.

Синхронный RFC (sRFC)

При синхронном вызове RFC, рабочий процесс приостанавливает свою работу пока вызываемый модуль не завершит свою работу. Вызов выполняется в отдельном DB LUW. При вызове sRFC в основном процессе происходит неявный COMMIT. Поэтому вызовы sRFC не должны находиться между OpenSQL операторами, обновляющие БД.
При повторном вызове sRFC, глобальные данные группы функций вызываемого ФМ будут доступны до тех пор, пока не будет закрыто указанное соединение.
Если в sRFC вызывает CALL SCREEN, CALL TRANSACTION или отображение списка, то вызываемые экраны будут отображены в программе запустившей sRFC, но только если в настройках соединения разрешен диалоговый удаленный доступ, в противном случае возникнет исключение SYSTEM_FAILURE.

Пример ниже демонстрирует синхронный вызов RFC и обработку возможных видов исключений.

Результат
Rfc sap что это. 2 e1584201278580. Rfc sap что это фото. Rfc sap что это-2 e1584201278580. картинка Rfc sap что это. картинка 2 e1584201278580

Аинхронный RFC (aRFC)

Пример ниже демонстрирует вызов нескольких aRFC и возврат результата в основной процесс. Функциональный модуль Z_TEST_RFC взят из примера sRFC.

Источник

Настройка интеграции с ИМ посредством RFC¶

Установка и настройка сервиса SAP RFC¶

Установка сервиса SAP RFC¶

Для установки сервиса SAP RFC необходимо выполнить следующие действия.

Скопируйте файлы из поставки Продукта (содержимое папки SapRfc Windows Service ) в созданную папку.

Сервис SAP RFC может работать под локальной учетной записью, либо от имени пользователя, имеющего права локального администратора на сервере.

Удаление сервиса SAP RFC¶

Настройка подключения к SAP RFC¶

Перед запуском сервиса SAP RFC необходимо настроить конфигурационный файл appsettings.json в папке компонента.

Для этого укажите (измените) параметры:

ApiConnectAddress – адрес REST API Продукта;

Login – имя пользователя Продукта;

Password – пароль пользователя Продукта.

Пример конфигурационного файла:

Настройка служб соединения¶

Таблица 67 Список служб соединения ¶

# SAP System Message Server Port

# SAP System Dispatcher Port

# SAP System Gateway Port

# SAP System Dispatcher Security Port

# SAP System Gateway Security Port

Настройка логирования¶

Для настройки логирования используется конфигурационный файл NLog.config в папке компонента.

Настройки аналогичны настройкам ИМ (см. раздел Настройка логирования ).

Запуск и остановка сервиса SAP RFC¶

Создание сервисного пользователя XDERFCUSER¶

В системе SAP должен быть создан сервисный пользователь XDERFCUSER с постоянно действующим паролем. Для создания сервисного пользователя необходимо выполнить следующие действия.

Rfc sap что это. ris45. Rfc sap что это фото. Rfc sap что это-ris45. картинка Rfc sap что это. картинка ris45

Откроется страница Ведение пользователей: первый экран. Введите техническое имя пользователя и нажмите Rfc sap что это. new. Rfc sap что это фото. Rfc sap что это-new. картинка Rfc sap что это. картинка new (Создать).

Rfc sap что это. ris46. Rfc sap что это фото. Rfc sap что это-ris46. картинка Rfc sap что это. картинка ris46

В открывшемся окне Ведение пользователей на закладке Адрес заполните соответствующие поля данными о пользователе, указанными в таблице ниже.

Rfc sap что это. ris47. Rfc sap что это фото. Rfc sap что это-ris47. картинка Rfc sap что это. картинка ris47

Перейдите на закладку Данные входа и заполните соответствующие поля данными, указанными в таблице ниже.

Rfc sap что это. ris48. Rfc sap что это фото. Rfc sap что это-ris48. картинка Rfc sap что это. картинка ris48

Rfc sap что это. ris491. Rfc sap что это фото. Rfc sap что это-ris491. картинка Rfc sap что это. картинка ris491

Таблица 68 Данные о сервисном пользователе XDERFCUSER ¶

TerraLink xDE (заполняется автоматически)

Закладка Данные входа

Создание RFC-адреса назначения TERRALINK_XDE¶

Для осуществления двухстороннего взаимодействия с ИМ необходимо создать RFC-адрес назначения TERRALINK_XDE.

Сервис ИМ должен быть запущен до создания RFC-адреса назначения.

Для создания RFC- адреса назначения необходимо выполнить следующие действия.

Запустите транзакцию SM59.

Rfc sap что это. ris501. Rfc sap что это фото. Rfc sap что это-ris501. картинка Rfc sap что это. картинка ris501

Откроется страница Конфигурация RFC-соединений. Нажмите кнопку Rfc sap что это. new. Rfc sap что это фото. Rfc sap что это-new. картинка Rfc sap что это. картинка new (Создание).

Rfc sap что это. ris511. Rfc sap что это фото. Rfc sap что это-ris511. картинка Rfc sap что это. картинка ris511

В открывшемся окне RFC-адрес назначения заполните соответствующие поля данными, указанными в таблице ниже, и нажмите Rfc sap что это. save. Rfc sap что это фото. Rfc sap что это-save. картинка Rfc sap что это. картинка save.

Таблица 69 Данные RFC-адреса ¶

Terralink xDE Обработка документов ЭП

После сохранения введите следующие данные на закладке Тех. параметры настройки:

Вид активации – Флаг: Зарегистрированная ПрСервера;

Затем снова нажмите Rfc sap что это. save. Rfc sap что это фото. Rfc sap что это-save. картинка Rfc sap что это. картинка save.

Rfc sap что это. ris531. Rfc sap что это фото. Rfc sap что это-ris531. картинка Rfc sap что это. картинка ris531

Внизу экрана появится сообщение Rfc sap что это. message1. Rfc sap что это фото. Rfc sap что это-message1. картинка Rfc sap что это. картинка message1

Проверка RFC-соединения¶

Rfc sap что это. ris541. Rfc sap что это фото. Rfc sap что это-ris541. картинка Rfc sap что это. картинка ris541

Успешное завершение теста свидетельствует об успешно установленном RFC-соединении.

Rfc sap что это. ris551. Rfc sap что это фото. Rfc sap что это-ris551. картинка Rfc sap что это. картинка ris551

При отсутствии соединения страница с результатами теста показывает ошибку.

Rfc sap что это. ris561. Rfc sap что это фото. Rfc sap что это-ris561. картинка Rfc sap что это. картинка ris561

Одной из причин ошибки могут быть настройки безопасности шлюза SAP для RFC-соединения. Чтобы проверить настройки шлюза, выполните следующие действия.

Rfc sap что это. ris57. Rfc sap что это фото. Rfc sap что это-ris57. картинка Rfc sap что это. картинка ris57

Rfc sap что это. ris581. Rfc sap что это фото. Rfc sap что это-ris581. картинка Rfc sap что это. картинка ris581

Параметры в записи secinfo должны принимать следующие значения: P TP=* USER=* HOST=*..

Rfc sap что это. ris591. Rfc sap что это фото. Rfc sap что это-ris591. картинка Rfc sap что это. картинка ris591

Параметры в записи reginfo должны принимать следующие значения: P TP=*.

Rfc sap что это. ris601. Rfc sap что это фото. Rfc sap что это-ris601. картинка Rfc sap что это. картинка ris601

Источник

Подробно про SAP ALE

SAP ALE — Application Link Enabling — технология обмена данными, разработанная компанией SAP AG. Технология, потому что это набор инструментов, протоколов, форматов, которые позволяют обмениваться данными в режиме реального времени или оффлайн режиме между САП и не-САП системами. Это огромный пласт настроек, функциональности и возможностей, которыми мы редко пользуемся. Предлагаю рассмотреть технологию комплексно в виде стека.

CPIC — Common Programming Interface for Communication — низкоуровневый коммуникационный протокол. Почитать можно вот тут https://www-01.ibm.com/software/network/commserver/windows/library/cpic.htm
RFC — Remote Function Call — высокоуровневый коммуникационный протокол удаленного вызова
tRFC (tansactional RFC) / qRFC (queued RFC) / aRFC (asynchronous RFC) / sRFC (synchronous RFC) — способ доставки сообщения до получателя и подверждения факта доставки
IDOC — Intermediate DOCument / BAPI (Business Application Programming Interface) — формат сообщения, которое будет доставлено
EDI — Electronic Data Interchange — процедура обмена данными SAP-nonSAP. Международные стандарт по-совместительству.
ALE — Application Link Enabling — процедура обмена данными SAP-SAP.

Вот это и предлагаю обсудить, а спецам меня поправить.
RFC — Remote Function Call, механизм для удаленного вызова функций в системах. Идея простая и заключается в том, что, если мы знаем имя какой-то функции на удаленном сервере, то мы можем сказать: «Привет, удаленный сервер. Я знаю, что у тебя есть вот такая функция, с такими параметрами. Я хочу ее запустить _у тебя_. Вот мои полномочия, вот мои данные для этой функциий, запусти и скажи, что получилось». Удаленный сервер чешет черепушку, шуршит дисками и, удостоверившись, что это не Баба-Яга, запускает у себя, на своих данных эту функцию под логином просящего. При этом программа на том же сервере может запустить эту же самую функцию локально, как бы у себя дома. Наличие галочки в транзакции SE37 для функционального модуля определяет, можно ли запускать эту функцию удаленно или нет.

Допустим мы определили что вызывать: программу или функциональный модуль. Теперь нужно решить как ее вызывать: транзакционно, синхронно, асинхронно, в очереди.

Зачем я все это вам пишу? Чтобы HR консультант понимал начинку того, что он настраивает, как он и что он должен написать в спеке программисту, ибо порядок обработки данных во внешних системах это бизнес-требование.

Поехали дальше. IDOC это структура данных, которая может быть представлена в виде плоского файла, XML, CSV, JSON, котика или любого другого формата. Структура состоит из трех частей:

Как у нас концептуально происходит процедура обмена информацией между системами? По событию или расписанию запускается программа выгрузки данных по HR (для примера). Либо по указателям изменений, либо вручную через PFAL вызывается функциональный модуль, который создает IDOC — на основании селекционного экрана, выбранных данных собирает все и заполняет все структуры IDOC.

Дальше система смотрит на модель распределения в BD64. У каждого IDOC есть свой тип сообщения, который мы указываем в модели распределения по принципу:

система отправитель — система получатель — тип сообщения — фильтры. Если все условия совпали, то IDOC помещается в очередь на отправку в указанную систему. Причем система это не всегда SAP, а виртуальный контейнер — логическая система, под которой может быть SAP, котик, Share Point или еще что угодно.

Согласно настройке партнера (об этом позже) уже на входящей стороне система определяет какой же функциональный модуль вызвать для обратного преобразования из IDOC в живые данные. Этот обработчик получает на вход IDOC и создает из них данные (где с помощью других функциональных модулей, а где напрямую — зависит от логики и данных).

Если идет удаленный вызов BAPI, то система также по модели распределения ищет кому приписан такой BAPI вызов, а затем осуществляет qRFC вызов или sRFC. Так, например, работает проверка FICO параметров при проводках в заработной плате.

Это очень упрощенно. Отдохнули?

Теперь возьмем скальпель.

IDOC — сегмент — поле, такова структура IDOC. Сам IDOC определяется типом сообщения (HRMD_A, транзакция WE81). Тип сообщения в зависимости от версии системы ссылается на тип IDOC (транзакция WE82).

Тип IDOC состоит из двух частей (транзакция WE30):

Рекламная пауза: создаем расширение IDOC:

Rfc sap что это. we30 01. Rfc sap что это фото. Rfc sap что это-we30 01. картинка Rfc sap что это. картинка we30 01

Rfc sap что это. we31 01. Rfc sap что это фото. Rfc sap что это-we31 01. картинка Rfc sap что это. картинка we31 01

Rfc sap что это. we82 01. Rfc sap что это фото. Rfc sap что это-we82 01. картинка Rfc sap что это. картинка we82 01

Нужно не забыть наполнить этот сегмент данными. Это можно сделать с помощью user-exits или BAdI (смотрите в конце заметки). Нужно не забыть, что при нормальной передачи SAP — SAP данные в сегменте как записываются исходящей системой (один кусок кода), так и обрабатываются принимающей системой (второй кусок кода). Этот код нужно написать самим, а не дать угадывать системе. Для входящих айдоков нужно в транзакции WE57 указать, что IDOC был расширен на такой-то сегмент, поэтому его нужно обрабатывать тем же функциональным модулем (который в свою очередь расширен нижеукзанными user-exits или BAdI).

Допустим мы завершили наполнение IDOC данными. Умеем его наполнять, умеем распаковывать и создавать данные. Осталось самое простое — послать его куда подальше.

Для определения маршрута, куда бы его послать, существует несколько терминов, которые нужно понять, сосредоточить в едином поле и выразить в настройке. Это партнер, порт и модель распределения.

Партнер это отправитель или получатель (WE20). Порт — средство передачи IDOC (WE21). Модель распределения — маршрут, по которому система будет искать, как доставить сообщение от отправителя к получателю (BD64). Центр управления полетами — транзакция BD87.

Открываем WE21 для настройки портов. Здесь мы видим несколько вариантов, например, tRFC (отматываем повыше, чтобы вспомнить, о чем речь), File, XML HTTP, XML File, ABAP PI. По названиям несложно догадаться о форматах передачи данных. Для SAP-SAP мы выбираем tRFC и создаем новый порт. При создании система попросит RFC соединение — адрес, куда отправлять данные. Как вы помните, tRFC работает поверх CPI-C, а это значит, что для передачи данных по нестандартным протоколам можно подключить свою библиотеку, зарегистрировать ее как RFC program в SM59, а здесь указать это соединение. В итоге получится порт с отправкой данных через вашу стороннюю библиотеку. Здесь же можно указать, что данные нужно обрабатывать по схеме qRFC с помощью галочки Queue Processing is supported.

Rfc sap что это. we21 01. Rfc sap что это фото. Rfc sap что это-we21 01. картинка Rfc sap что это. картинка we21 01

Теперь создадим партнеров. Партнер должен быть в исходящей системе для отправки данных и в принимающей для приема. В исходящей системе создаем в транзакции WE20 партнера с типом LS — логическая система. Отправка данных HR будет происходить от имени системы. Обратите внимание на то, что партнер — система приемник, а данные мы пишем в Исходящие. Мы как бы говорим системе, что вот этому партнеру нужно отправлять данные. А для принимающей системы будет наоборот, что вот от этого партнера нужно принимать данные. Чтобы обеспечить целостность в наименовании систем были придуманы так называемые логические системы, которые должны быть уникальны во всем ландшафте ИТ систем, которые интегрируются с САП. Это обязательное требование вендора.

Rfc sap что это. we20 01. Rfc sap что это фото. Rfc sap что это-we20 01. картинка Rfc sap что это. картинка we20 01

Также создадим партнера в принимающей системе. Только теперь указываем Inbound параметр.

Rfc sap что это. we20 02. Rfc sap что это фото. Rfc sap что это-we20 02. картинка Rfc sap что это. картинка we20 02

Осталось указать маршрут.
Открываем транзакцию BD64 в исходящей системе и создаем вот такую схему для отправки данных из системы ER1 манданта 100 в ER1 мандант 200.

Rfc sap что это. bd64 01. Rfc sap что это фото. Rfc sap что это-bd64 01. картинка Rfc sap что это. картинка bd64 01

Если после сохранения и попытки распределения (Edit — Model View — Distribute) система вас отругает, то пугаться не стоит. Распределение модели это тоже передача IDOC. Нужно создать партнера для этого.

Rfc sap что это. we20 03. Rfc sap что это фото. Rfc sap что это-we20 03. картинка Rfc sap что это. картинка we20 03

Открываем транзакцию PFAL и пробуем отправить. Вроде все проходит без ошибок. Так как мы в настройке порта указали, что отправка идет через формирование очереди (то есть не сразу отправляется, а по расписанию), то смотрим в BD87 наш IDOC. Выбираем его и нажимаем кнопку Process для отправки. Все улетело.

А вот во входящей системе в BD87 нас ждет ошибка.
Rfc sap что это. bd 87. Rfc sap что это фото. Rfc sap что это-bd 87. картинка Rfc sap что это. картинка bd 87

Все дело в том, что я в системе приемнике в данных партнера указал код обработки APLI Inbound IDoc: Individual Processing. А этот код применим для типовых IDOC, но не работает для HR. Для нас есть отдельный HRMD. Код обработки нужны для того, чтобы система могла понять, как обрабатывать входящий IDOC. На один и тот же тип IDOC может быть несколько разных кодов с разной логикой обработки. Например, одни сегменты обрабатывать в единичном случае так, а при пакетном вводе иначе. Меняем в партнере код обработки на HRMD и заново запускаем обработку IDOC уже в системе получателе. Заново отправлять данные не нужно.

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

Описание статусов IDOC можно посмотреть в таблице TEDS1.

В следующие разы мы поговорим о сериализации, фильтрации, конвертации IDOC. Что-то я уже рассказывал, поэтому обобщим и сведем воеидино.

Репост, лайки, шары, решары, донаты и печеньки очень приветствуются. Вам не сложно, а мне приятно 😉

P.S. Принимаются заявки на новые темы 😉

Полезные user-exits и BAdI

•EXIT_SAPLRHA0_001: HR-CA: ALE Outbound Processing With Receiver Enhancement
•EXIT_SAPLRHA0_002: HR-CA: Export Parameters for ALE Inbound Processing IDOC_INPUT_HRMD
•EXIT_SAPLRHA0_003: HR-CA: Import Parameters for ALE Inbound Processing IDOC_INPUT_HRMD
•EXIT_SAPLRHA0_004: HR-CA: ALE Outbound Processing: Control Record
•EXIT_SAPLRHA0_005: HR-CA: ALE Inbound Processing: Check Object
•EXIT_SAPLRHA0_006: HR-CA: ALE Outbound Processing: Check Object
•EXIT_SAPLRHAL_001: HR-CA: ALE Outbound Processing: Change IDoc
•EXIT_SAPLRHAL_002: HR-CA: ALE Inbound Processing: Change Infotype Data
•EXIT_SAPLRHAL_003: HR-CA: ALE Outbound Processing: Convert Infotype / Segment
•EXIT_SAPLRHAL_004: HR-CA: ALE Inbound Processing: Convert Segment / Infotype

BAdI: Inbound Processing for HR Master Data

Business Add-In in inbound processing for HR master data (used in the function module IDOC_INPUT_HRMD).

BAdI: Check/Additional Processing of Object in Inbound Proce

The CHECK_OBJECT method of this Business Add-In enables checks to be performed for an HR object in the RH_IDOC_OBJECTS_SAVE inbound function module. The method is accessed after customer exit SAPLRHA0_005.

BAdI: Customer-Defined Inbound Processing

SAP-internal inbound processing for HR master data:

The system determines which HR objects should be removed from standard processing because no data structures exist for them in the receiving system. Irrespective of the type of receiving system, you can further process these HR objects.

BAdI: Fine Tuning of Original System Mechanism

Business Add-In for Original System Mechanism

BAdI: Outbound Processing HR Master Data

Business Add-In in output processing for HR Master Data (used in the function module RH_MASTER_IDOC_DISTRIBUTE_HRMD).

Источник

ABAP Blog

Все о разработке в решениях от SAP

ABAP Blog

Все о разработке в решениях от SAP

Ссылки

Цитаты

В информатике существует две реальные проблемы: управление кэшем и присвоение имен.

Фил Карлтон, программист Netscape

Новое

Последние комментарии

Remote Function Call

Remote Function Call (RFC, удалённый вызов функций) – стандартный интерфейс для обмена данными между SAP и не SAP системами. Интерфейс передачи данных основан на CPI-C или TCP/IP. Стандартная справка по теме RFC или курс BC415.

Особенности RFC функций

Настроить назначение для RFC вызова можно через транзакцию SM59 (Таблица RFCDES). Подробнее о настройке RFC соединений можно посмотреть в курсе BC415.

Назначение RFC вызовов

Назначение RFC вызова определяется с помощью ключевого слова DESTINATION. В качестве параметра может принимать имя удаленной системы, SPACE, NONE, BACK.

Обработка исключений при вызовах RFC

При вызове RFC модуля могут возникать следующие исключения:

Типы RFC функций:

В случае, когда вы вызываете несколько sRFC подряд из одной группы функций, глобальные данные группы функций будут доступны до тех пор, пока не будет вызвана последняя функция из данной группы.

Если в sRFC внутри себя вызывает CALL SCREEN, CALL TRANSACTION или отображение списка, вызываемые экраны будут отображены в программе запустившей sRFC, но только если в SM59 указан диалоговый удаленный доступ, иначе система выдаст исключение SYSTEM_FAILURE.

Процедура не должна иметь в своем теле операторы, прерывающие выполнение программы, такие как: CALL SCREEN, SUBMIT, COMMIT WORK, WAIT, RFC вызовы, сообщения с типами W и I.

Пример программы запускающей 2 aRFC функции и ожидающей выполнение обоих:

Если в качестве имени задачи в вызове aRFC указать TASK3, условия выполнены не будут.

Пример распараллеливания вычислений с помощью групп:

aRFC вызовы так же как и sRFC могут вызывать внутри себя диалоги, но их использование в данном контексте выглядит сомнительно, более подробно рассмотрено в курсе (BC415).

Все tRFC вызовы сохраняются в таблицах: ARFCSSTATE и ARFCSDATA. Если вы не хотите вызывать tRFC немедленно после COMMIT WORK, вы можете вызвать ФМ START_OF_BACKGROUNDTASK (до COMMITWORK) и задать время и дату запуска для накопленных tRFC вызовов.

После выполнения COMMIT WORK в случае успешного локального обновления (в рамках LUW основной программы), накопленные данные создают фоновую задачу, в случае успешного выполнения этой задачи все данные из таблиц tRFC удаляются. Если задача не была выполнена, срабатывает механизм повтора или отката.

Так, например если связь с удаленной системой не была установлена, срабатывает автоматический повтор выполнения задания. По умолчанию количество повторов равно 30, интервал ожидания равен 15 минутам.

В случае если во втором из двух tRFC вызовов произошел сбой, сообщение с типом A или X или вызов исключения через RAISE после успешного выполнения первого происходит следующее:

Для принудительного отката всех изменений или отмены tRFC-LUW служит ФМ — RESTART_OF_BACKGROUNDTASK.

В случае если вызовы tRFC происходят на разных системах (DESTINATION ‘A’, DESTIONATION ‘B’), для каждой из них создается свой tRFC-LUW, вызовы tRFC группируются в зависимости от назначения.

Для вызова tRFC отдельно от остальных можно воспользоваться ключевым словом: AS SEPARATE UNIT.

Каждый tRFC-LUW имеет свой уникальный ID, для его получения можно использовать ФМ: ID_OF_BACKGROUNDTASK (вызывать перед COMMIT WORK). Используя данный ID можно определить статус для tRFC-LUW через ФМ — STATUS_OF_BACKGROUNDTASK.

Для размещения tRFC вызовов в порядке FIFO (первый пришел, первый вышел) необходимо перед каждым tRFC вызовом указывать имя очереди, делается это с помощью ФМ: TRFC_SET_QUEUE_NAME:

Имя очереди может содержать 24 символа, исключая % и *.

Для администрирования qRFC вместо транзакции SM58 используется транзакция — SMQ1. Таблица, в которой хранятся данные qRFC — TRFCQOUT.

Более подробная информация о bgRFC находится тут.

Транзакции, используемые при работе с RFC

BAPI функции

Для обмена бизнес данными, между SAP и не SAP системами, был создан так называемый Business Framework. Центральной его частью является хранилище бизнес объектов (BOR – Business Object Repository). Каждый бизнес объект обеспечивает объектно-ориентированный подход к хранению бизнес данных и работы с бизнес процессами. Например, вызывая методы бизнес объектов, мы тем самым манипулируем бизнес данными, за которые он отвечает, не заботясь о техническом вопросе (связях в таблицах и т.п.)

Бизнес объект состоит из следующих частей:

BAPI – реализация метода бизнес объекта, представляет собой функциональный модуль RFC. BAPI могут вызываться как синхронно (COMMIT WORK AND WAIT), так и асинхронно т.е. ожидая выполнения работы функции или нет.

BAPI могут представлять различные действия над объектом:

BAPI могут вызываться из различных приложений: офисных приложений (через VBA), JAVA и С++ программ и т.п.

Все BAPI после своей работы возвращают результат в виде внутренней таблицы с одной из структур: BAPIRETURN, BAPIRETURN1, BAPIRET1, BAPIRET2, BAPIRET1_FIX. В связи с этим в BAPI нет обработки исключений как в стандартных ФМ. Все эти структуры содержат в себе следующие поля:

Если транзакция выполнена успешно, то в таблице RETURN не будет существовать записей с типом ошибки «Е». Должно присутствовать сообщение с типом ошибки «S».

Обновление в BAPI всегда происходит в IN UPDATE TASK (см. документацию по ключевому слову IN UPDATE TASK или курс по обновлению БД – BC414). Внутри BAPI никогда не вызывается COMMIT WORK. Для подтверждения или отката LUW всегда должны использоваться ФМ: BAPI_TRANSCATION_COMMIT, BAPI_TRANSACTION_ROLLBACK, разница между данными ФМ и COMMIT WORK (ROLLBACK WORK) в том что они чистят внутренние переменные используемые при вызовах BAPI, если этого не делать могут возникать проблемы при повторном вызове BAPI. Все BAPI вызванные в программе до вызова BAPI_TRANSCATION_COMMIT (BAPI_TRANSCATION_ROLLBACK) вызываются в одном LUW. Для просмотра всех имеющихся в системе BAPI служит транзакция BAPI (запускает BAPI EXPLORER).

Курс, в котором рассматривается создание собственных BAPI — BC417.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *