Текущее время: Вт, апр 23 2024, 17:44

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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