Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема начата: shirakz от Август 03, 2017, 02:29:50 pm

Название: Автоматическое(!!!) расширение дебиторов на все БЕ и сбытовые ракурсы
Отправлено: shirakz от Август 03, 2017, 02:29:50 pm
Из системы CRM при репликации мы получаем только основные данные деловых партнеров, и  один или несколько сбытовых ракурсов. А далее пользователи вручную расширяют дебиторов на  БЕ и Сбыт. Необходимо чтоб при репликации автоматически происходило расширение ДП или дебиторов на все БЕ и сбытовые ракурсы.
Сделать это надо как я понимаю либо через 1) BAdI, либо 2) user-exit, либо 3) BTE.

Искал такие ФМ, где есть CHANGING/EXPORT параметры KNB1 (для расширения на все БЕ) и KNVV (для расширения на все сбытовые ракурсы).

1) Есть 2 вроде как подходящие BAdI:
    CUSTOMER_ADD_DATA
    CUSTOMER_ADD_DATA_BI
Ещё есть CUSTOMER_ADD_DATA_CS, но там нет в её методах CHANGING/EXPORT параметров KNB1 и KNVV.
В CUSTOMER_ADD_DATA есть 2 метода:

PRESET_VALUES_CCODE   Preassign KNB1 Dependent of the General Data
PRESET_VALUES_SAREA   Preassign KNVV Dependent of the General Data
и в них есть CHANGING параметры E_KNB1 и E_KNVV, но это структуры, а не таблицы, нельзя несколько записей туда вставить, а мне же надо расширять на все БЕ и сбытовые ракурсы.

В CUSTOMER_ADD_DATA_BI есть метод
PROCESS_ALE_OWN_CHANGE_POINTER   Evaluate Own Change Pointer
И в нём есть CHANGING параметры-таблицы T_KNB1_KEY и T_KNVV_KEY, но в описании метода что-то про ALE говорится - мне кажется это не подходит - с ALE не сталкивался.

2) user-exit
есть SAPMF02D - но там KNB1 и KNVV передаются как входные параметры

3) BTE есть такие:
00001310 CUSTOMER MASTER DATA: GUI Callup
00001320 CUSTOMER MASTER DATA: Save
00001321 CUSTOMER MASTER DATA: Save with data transfer
00001330 CUSTOMER MASTER DATA: Key texts
00001340 CUSTOMER MASTER DATA: Final checks
00001350 CUSTOMER MASTER DATA: Individual duplication check
00001360 CUSTOMER MASTER DATA: Auth. check: Acct group
Но здесь также как и в юзер экзите KNB1 и KNVV передаются как входные параметры.
Название: Re: Автоматическое(!!!) расширение дебиторов на все БЕ и сбытовые ракурсы
Отправлено: Uukrul от Август 04, 2017, 01:46:01 am
Ну я через BADI не делал, я в моменте создания запускал в отдельном процессе программу, которая ждала создания записи нового дебитора/кредитора а уже дальше выполняла его расширение, на необходимые мне ракурсы. Из минусов, отдельный процесс мог слететь или не дождаться создания, ну если честно такое было пару раз, когда были в целом проблемы с блокировками объектов, из плюсов, программу можно было запустить в ручном режиме в диалоге, с указанием конкретной записи которую следовало расширить. В общем у меня была такая вот реализация.
Название: Re: Автоматическое(!!!) расширение дебиторов на все БЕ и сбытовые ракурсы
Отправлено: shirakz от Август 04, 2017, 08:00:31 am
You are not allowed to view links. Register or Login
я в моменте создания запускал
это Вы из юзер экзита или из BTE запускали?

You are not allowed to view links. Register or Login
запускал в отдельном процессе программу
это как? я такого не делал ещё

You are not allowed to view links. Register or Login
которая ждала создания записи нового дебитора
что-то не слышал про такое в абапе - каким образом абап-программа может ожидать какого-то события?

You are not allowed to view links. Register or Login
дальше выполняла его расширение, на необходимые мне ракурсы
с помощью BAPI?
сперва BAPI_CUSTOMER_CREATE, потом BAPI_CUSTOMER_EDIT, так?

P.S.
Из БАДИ и БТЕ нельзя делать COMMIT, то есть нельзя менять стандартные таблицы и запускать бапи типа BAPI_CUSTOMER_CREATE
и из юзерэкзитов скорее всего тоже.
Название: Re: Автоматическое(!!!) расширение дебиторов на все БЕ и сбытовые ракурсы
Отправлено: Uukrul от Август 04, 2017, 10:12:54 am
You are not allowed to view links. Register or Login
это Вы из юзер экзита или из BTE запускали?
Из экзита создания запускалось.
You are not allowed to view links. Register or Login
это как? я такого не делал ещё
Это делаются два модуля, модуль обновления и модуль RFC которое запускаются последовательно, при этом RFC запускается уже отдельным потоком.
You are not allowed to view links. Register or Login
что-то не слышал про такое в абапе - каким образом абап-программа может ожидать какого-то события?
А чего там слышать то? В модуле RFC пытаетесь проверить возможность установки блокировки на созданного клиента, если получилось значит клиент создан, можно расширять.
You are not allowed to view links. Register or Login
с помощью BAPI?
Нет это давно было, поэтому там вообще запускался пакетный ввода через CALL TRANSACTION все делалось.
You are not allowed to view links. Register or Login
Из БАДИ и БТЕ нельзя делать COMMIT, то есть нельзя менять стандартные таблицы и запускать бапи типа BAPI_CUSTOMER_CREATE
и из юзерэкзитов скорее всего тоже.
Ну для отдельного процесса в RFC это уже не распространяется, там можно делать что угодно и сколько угодно раз. Это уже отдельный процесс который не зависит от процесса создания запущенного из CRM, в вашем случае.
Название: Re: Автоматическое(!!!) расширение дебиторов на все БЕ и сбытовые ракурсы
Отправлено: shirakz от Август 04, 2017, 03:32:33 pm
Цитировать
модуль обновления и модуль RFC
что за модуль обновления? через него запускается модуль RFC?
почему нельзя напрямую из BTE запустить модуль RFC?
Название: Re: Автоматическое(!!!) расширение дебиторов на все БЕ и сбытовые ракурсы
Отправлено: Uukrul от Август 05, 2017, 09:48:04 pm
You are not allowed to view links. Register or Login
что за модуль обновления? через него запускается модуль RFC?
Обычный модуль обновления, фактически запускается при выполнении команды COMMIT WORK, при этом не важно где физически вставлен вызов такого модуля. В общем фактически вы знаете что если код выполняется значит была выполнена фиксация изменений. В общем в объявлении FM галки правильно расставляем и получим модуль обновления.

You are not allowed to view links. Register or Login
почему нельзя напрямую из BTE запустить модуль RFC?
Потому что RFC в новом потоке желательно запустить как можно ближе к коммиту, идаельно после него, поэтому запуск его из модуля обновления в целом говорит, что коммит прошел и можно начинать работать с созданными данными. В общем из практики самый удобный вариант получается.