Передача экземпляров объекта в функциональные модули RFC - PullRequest
4 голосов
/ 04 июля 2011

С помощью ABAP

call function 'functionname' 
  starting new task 'taskname' 
  exporting ... tables ...

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

Я хотел бы передать экземпляр Object, но по умолчанию функции RFC не принимают такие параметры.

Есть ли кто-нибудь, кто тоже хотел обойти экземпляр объекта и нашел обходной путь к этому?

Сегодня мой обходной путь: я пропускаю Workareas / структурированные данные, и в вызываемой функции я воссоздаю объекты и даю им данные, я выполняю «сортировку» вручную.

Возможно, есть более хороший путь к этому?

ИЛИ - в качестве альтернативы - можно ли запустить методы экземпляра объекта в отдельной фоновой задаче?

Я использую SAP R3 4.6C

Ответы [ 3 ]

5 голосов
/ 04 июля 2011

В 4.6C нет решения передать экземпляр в функциональный модуль с поддержкой RFC. Это возможно только восстановить его с нуля внутри функционального модуля.

Но из ABAP 6.20 можно сериализовать экземпляр в переменную STRING или XSTRING, включив интерфейс IF_SERIALIZABLE_OBJECT в класс экземпляра и вызвав ID преобразование через CALL TRANSFORMATION, как объяснено в этой части документации ABAP :

Чтобы экспортировать объекты, на которые ссылаются ссылочные переменные, используйте оператор CALL_TRANSFORMATION для сериализации и экспорта этих объектов, если класс этих объектов реализует интерфейс IF_SERIALIZABLE_OBJECT.

Таким образом, вы можете передать сериализованный экземпляр в функциональный модуль с поддержкой RFC через параметр типа STRING или XSTRING.

3 голосов
/ 10 февраля 2017

Я понимаю, что этой ветке около 5 лет, поэтому здесь я делаю небольшую некромантию потоков, но она все еще встречается в первых парах хитов для "abap rfc objects", поэтому я надеюсь, что все меня прощают.

Правильный способ сделать это в современном ABAP - использовать интерфейс IF_SERIALIZABLE_OBJECT. В основном это позволит вам преобразовать ваш объект в строку XML, которую затем можно передать в FM как параметр строки импорта и десериализовать обратно в объект в целевой системе.

Руководство: https://rvanmil.wordpress.com/2011/05/20/serialization/

0 голосов
/ 04 августа 2011

Я не знаю, будет ли это работать в 4.6C (я использую более свежую версию), но я бы сделал следующее:

я) Создать структуру с помощью SE11.
ii) Компоненты (поля) структуры должны поддерживать параметр TYPE REF TO. Это означает, что вы должны быть в состоянии указать имя класса здесь.
iii) Передайте структуру (которую вы только что создали) в RFC.

Надеюсь, что работает в 4.6C.

...