Текущее время: Пт, апр 19 2024, 06:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: BAPI для передачи значений Z-овских полей в IE01: как победить ограничение по длине?
СообщениеДобавлено: Пн, сен 16 2019, 13:07 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 08:43
Сообщения: 780
Откуда: South Kazakhstan
Пол: Мужской
Добрый день, уважаемые Консультанты ТОРО и ABAP-еры.

В общем, столкнулся с одной проблемкой, не смог понять, как ее решить.

Есть внедряемый бизнес-процесс по ТОРО, нужно сделать пакетник для создания единиц оборудования. Для более или менее понятного и удобного интерфейса пытаюсь использовать BAPI BAPI_EQUI_CREATE. Как с ним работать - тут всё вроде бы понятно, и всё создаётся, но из за специфических хотелок юзеров пришлось добавлять в транзакции по работе с основными записями ЕО Z-овские поля, причём таковых полей ни много - ни мало 23 штуки, распиханных по вкладкам на одном Z-овском экране. Для того, чтобы передать значение Z-овских полей в эту BAPI, использую в ней EXTENSIONIN. Это структура, которая содержит в себе 5 полей: первое размером в 30 символов и 4 поля каждое размером в 240 символов.

В первое поле передаётся название структуры, в которой созданы Z-овские поля, а во все остальные 4 поля передаются значения. Так вот, данный инструмент буквально считает количество символов типа данных Z-овских полей, ну т.е. 240*4 = 960. У меня же в сумме количество символов, которые заложены в типах данных Z-овских полей, - 1050. Т.е., по сути, BAPI берёт ровно столько символов, сколько в сумме будет составлять 960, остальное просто отрезает. Можно, конечно, стандартным функционалом воспользоваться через SHDB, но он достаточно сильно раздражает.

Может, кто сталкивался с чем-то похожим?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI для передачи значений Z-овских полей в IE01: как победить ограничение по длине?
СообщениеДобавлено: Чт, сен 19 2019, 14:39 
Гуру-маршал
Гуру-маршал
Аватара пользователя

Зарегистрирован:
Пт, янв 30 2009, 09:59
Сообщения: 1580
Откуда: Москва, Минск
Пол: Мужской
Привет!
Сделать Z-класс в нем 2 метода SET/GET.
Перед вызовом bapi вызвать метод SET и в атрибуты класса сложить нужные тебе данные в нужном тебе виде
В точке расширения, где стандартно предполагается обрабатывать EXTENSIONIN(наверное BADI_EAM_ITOB_BAPI_CUST_FIELD) с помощью метода GET получить значения атрибутов твоего класса и записать их в поля ЕО.

_________________
Лучше быть умным и иногда тупить, чем быть тупым и постоянно умничать!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI для передачи значений Z-овских полей в IE01: как победить ограничение по длине?
СообщениеДобавлено: Пт, сен 20 2019, 07:30 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, янв 24 2013, 08:43
Сообщения: 780
Откуда: South Kazakhstan
Пол: Мужской
DED_MOROZ написал:
Привет!
Сделать Z-класс в нем 2 метода SET/GET.
Перед вызовом bapi вызвать метод SET и в атрибуты класса сложить нужные тебе данные в нужном тебе виде
В точке расширения, где стандартно предполагается обрабатывать EXTENSIONIN(наверное BADI_EAM_ITOB_BAPI_CUST_FIELD) с помощью метода GET получить значения атрибутов твоего класса и записать их в поля ЕО.

Я может быть что то не допонимаю, но я и так передаю значения z-овских полей в EXTENSIONIN через созданный мной класс и передаёт он, как я уже и говорил, символов больше чем предусмотрено в EXTENSIONIN. В общем то я сделал уже через стандарт SHDB, но если Вы более подробней объясните что ли?
Вот я в самом вызове BAPI заполняю контейнер значениями z-овских полей
Code:
ls_extensionin-structure = 'CI_EQUI'.
  call method cl_abap_container_utilities=>fill_container_c
    exporting
      im_value     = ls_item
    importing
      ex_container = ls_extensionin+30.
*  append ls_extensionin to t_extensionin.

  t_extensionin = ls_extensionin.
  append t_extensionin.


Далее я создал класс и указываю в нём метод IF_EX_BADI_EAM_ITOB_CUST_FIELD~EXTENSIONIN_EQUI_CREATE и пытаюсь считать контейнер
Code:
method if_ex_badi_eam_itob_cust_field~extensionin_equi_create.
    data: zls_extensionin type bapiparex
          , ls_item type ci_equi.

    loop at it_extensionin into zls_extensionin.
      call method cl_abap_container_utilities=>read_container_c
        exporting
          im_container = zls_extensionin+30
        importing
          ex_value     = ls_item.
    endloop.
cs_object-zzito_man     = ls_item-zzito_man.
cs_object-zzmodel     = ls_item-zzmodel.
и т.д.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI для передачи значений Z-овских полей в IE01: как победить ограничение по длине?
СообщениеДобавлено: Пн, сен 23 2019, 22:33 
Гуру-маршал
Гуру-маршал
Аватара пользователя

Зарегистрирован:
Пт, янв 30 2009, 09:59
Сообщения: 1580
Откуда: Москва, Минск
Пол: Мужской
Ну если я правильно понял, то тебе не хватает длины полей в EXTENSIONIN для передачи всех нужных полей.
Если это так - то, НЕ используй EXTENSIONIN, а попробуй сделать как я писал выше - свой класс с методами для заполнения данных перед вызовом бапи и использования этих данных в точке расширения.

_________________
Лучше быть умным и иногда тупить, чем быть тупым и постоянно умничать!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB