Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE18/SE19 - BAdI-Builder => Тема начата: Uukrul от Ноябрь 14, 2008, 12:56:59 pm
-
В общем сдела метод LINE_MODIFY и в нем соответсвенно изменяю значение одного из полей. При этом получаю ошибку типа:
BAdI: поле GOITEM-UMLGO не готово для ввода (изменение не копируется)
№ сообщения MIGO050
В общем где можно ей/ему сказаь, что поле таки готово к вводу? По коду (LMIGOKL3):
IF <f1> <> <f2>.
l_fieldname = <comp>-name.
CONCATENATE 'GOITEM-' <comp>-name INTO l_fieldname.
CALL METHOD lcl_migo_screenmodification=>get
EXPORTING
i_field = l_fieldname
i_global_counter = cs_goitem-global_counter
i_badi = x
RECEIVING
r_status = l_status.
CASE l_status.
* Field is 'visible + input' (-> change in BAdI allowed)
WHEN 6.
<f1> = <f2>.
l_change = x.
* Field is not used on any screen in MIGO
WHEN 8.
ENHANCEMENT-SECTION lmigokl3_01 SPOTS es_saplmigo.
MESSAGE w049 WITH l_fieldname.
END-ENHANCEMENT-SECTION.
* Field was not 'on input' (l_status = 0 or 2)
WHEN OTHERS.
ENHANCEMENT-SECTION lmigokl3_02 SPOTS es_saplmigo.
MESSAGE w050 WITH l_fieldname.
END-ENHANCEMENT-SECTION.
ENDCASE.
ENDIF.
Короче, у этого поля, как и у кучи других статус 2, а надо чтобы был 6. Из кода пока не вкурил где это устанавливается, точнее откуда тянутся эти значения... Из настройки для MIGO, этих полей тоже нет.
-
Есть ноты на эту тему:
Note 1020876 - BADI MB_MIGO_ITEM_BADI processed during display mode
Note 1029951 - BAdI MB_MIGO_BADI processed in display mode
Note 1136344 - MB_MIGO_BADI: Method LINE_MODIFY in display mode
-
Есть ноты на эту тему:
Note 1020876 - BADI MB_MIGO_ITEM_BADI processed during display mode
Note 1029951 - BAdI MB_MIGO_BADI processed in display mode
Note 1136344 - MB_MIGO_BADI: Method LINE_MODIFY in display mode
Так там про программные ошибки... а к моему вопросу это отношения не имеет... у меня так сказать концептуально, если в программе статусы проверяют, то может сделали все таки что эти статусы где-то ведутся?
-
Так там про программные ошибки... а к моему вопросу это отношения не имеет... у меня так сказать концептуально, если в программе статусы проверяют, то может сделали все таки что эти статусы где-то ведутся?
Я к тому, что может в них подсмотреть: что/почём...
-
Я к тому, что может в них подсмотреть: что/почём...
Да смотрел... ничего там нет, там типа ошибку правят при вызове бади, если документ находится в режиме просмотра... в отладчике пока завис. Там зараза динамическая генерация кода используется местами (типа кусок кода создан автоматически другим кодом при изменении чего-то, а вот чего?), короче ничего не ясно пока...
-
Ну судя по всему менять можно только поля представленные в настройке... Все остальное тянет за собой получение ключика разработчика на объект, ну если хочется добавить свои поля... ::)
-
Если кого-то ещё интересует данный вопрос..
Я решил эту проблему следующим образом:
assign ('(SAPLMIGO)lcl_migo_screenmodification=>c_input') to <c_input>.
assign ('(SAPLMIGO)lcl_migo_screenmodification=>t_fieldselection') to <fieldselection>.
" Выбираем шаблон по i_line_id
loop at <fieldselection> assigning <fs>.
assign component 'GLC' of structure <fs> to <id>.
if <id> = i_line_id.
" Так как field-symbol не типизирован, для поиска строки по значению name извращаемся через цикл
assign component 'TABLE' of structure <fs> to <table>.
loop at <table> assigning <line>.
assign component 'NAME' of structure <line> to <name>.
if <name> = '<ИМЯ_ПОЛЯ>'.
" Наконец-то добрались до нужного поля. Делаем его доступным для ввода.
assign component 'WORK' of structure <line> to <work>.
<work> = <c_input>.
exit.
endif.
endloop.
exit.
endif.
endloop.
" Меняем значение в cs_goitem
cs_goitem-<ИМЯ_ПОЛЯ> = <ЗНАЧЕНИЕ>.
Коряво, конечно, но работает..
-
Коряво, конечно, но работает..
Ну почему же коряво.. это единственный метод как добраться до полей из других модулей, если знаешь что делаешь, то очень даже и работает все правильно, но само собой при патчах и апгрейде надо все проверять.
-
Небольшая инструкция как создавать расширения для MIGO.
Вопрос был в следующем, есть два завода на одно из них материал оцениваемый, на другом не оцениваемый, если делать проводку перемещения с завода где материал без стоимости, на завод где у него стоимость есть, то цена материала будет браться из ОЗМ ракурс БухУчет1 для оцениваемого завода. По условиям же стоимость должна была браться из плановой инфо-записи закупки. Вот для этого и используем BADI, в котором будем подменять цену движения. Из ограничений, цена по стандарту вводится в поле «Внешняя сумма во ВВ», которое было открыто для вида движения перемещения запаса, т.е. пользователь вводит документ а сумма должна быть заполнена правильным значением из инфо-записи, а ограничением является то, что если оценка ведется в нескольких валютах, то данная реализация будет работать не совсем корректно, так как поля для ввода второй валюты в документах ММ нет и вторая валюта будет формироваться из валюты один по курсу на дату проводки документа.
Используем транзакцию SE19 – Badi Builder, в нем у нас есть два вариант новый BADI Badi или классический, берем новый, так как даже если вы выберите классический, на следующем шаге придется пройти по пути миграции его в новый BADI. Причина в том, что все BADI с версии 6.0, кажется, сделаны уже через так называемые энхансменты (подробнее написано тут: http://sapforum.biz/index.php/topic,546.0.html), а поэтому, чем делать лишние шаги, лучше сразу идем по правильной новой дороге. Нас интересует BADI для MIGO, ищем его само собой по маске *MIGO*, будет найдена одна запись MB_MIGO_BADI, которая нас и интересует. Рисунок SE19-0.png.
Выбираем режим создания, после чего появится диалог, где надо будет сказать, какое будет название у нашего расширения и описание, рисунок SE19-1.png. Я рекомендую оставлять в названии, если это возможно имя внедрения, например как в этом случае, потом проще будет искать, какие уже сделаны расширения к интересующей BADI.
Затем нажимаем ОК и переходим к следующему экрану где спросят имя реализации, имя класса реализации и к какому определению BADI все это будем создавать. В нашем случае у нас одно определение BADI, поэтому имя реализации оставляем такое же как и на предыдущем шаге, класс реализации, ну я назвал как на рисунке SE19-2.png, а определение BADI получено из выпадающего списка, оно там одно.
После чего жмем снова ОК и переходим к следующему шагу, где нам будет предложено то, как создавать наше определение, вариантов три, унаследовать из примере класса, скопировать пример класса и просто создать чистый класс. Чтобы не тянуть весь пример я выбрал режим «Пустой класс». А примеры, ну это когда изучаешь, то можно копировать пример класса реализации, рисунок SE19-3.png.
После копирования/создания попадаем в саму реализацию нашего расширения, должно быть похожее что-то на рисунке ниже. Собственно говоря, практически реализация класса с методами, рисунок SE19-4.png. Открываем дерево слева и делаем клик мышью на ветке «Реализующий класс», после чего откроются все методы класса которые мы можем начать реализовывать и которые определены нам в классе, рисунок SE19-5.png.
-
Так как задача подставить правильную сумму в поле позиции документа материала, то нас интересуют метод LINE_MODIFY, выделено на рисунке, делаем по этому методу двойной клик мышью и система сообщит, что типа реализация не найдена и тут же по дружески предложит ее создать, рисунок SE19-6.png.
Соглашаемся на создание внедрения и попадаем в редактор где можем уже писать наш код, объявление будет такое:
method if_ex_mb_migo_badi~line_modify.
endmethod.
Но перед тем как что-то писать, не плохо бы узнать что нам передают на вход и что хотя узнать на выходе. Для этого идем на закладку Technical Details и там находим наш класс и делаем двойной клик мышью на имени класса, рисунок SE19-7.png. Попадаем в привычную реализацию классов, находим наш метод, ставим на него курсор и нажимаем кнопку «Параметры», рисунок SE19-8.png. Как видим два параметра номер строки и изменяемый параметр сама строка позиции документа, рисунок SE19-9.png.
Саму структуру можно посмотреть сделав клик мышью на поле ссылочного типа… полей там много, в общем типа все что есть в MSEG и еще даже больше. Нас интересует поле EXBWR – Сумма проводки внешний ввод. Вот его то мы и будем заполнять из инфо-записи, рисунок SE19-10.png.
В коде будет что-то такое как на рисунке ниже, однако по правильному конечно надо бы проверить заводы, вид движения и там уже определять нужно или нет выполнять замещение поля суммы. Как минимум поставьте там точку останова и посмотрите что передается в структурах, рисунок SE19-11.png.
После ввода кода надо еще бы все это активировать. Количество объектов само собой будет большим, поэтому выбираем выделить все после чего жмем кнопку активации. Если ошибок нет, а я рекомендую, прежде чем что-то писать в коде, сделать общую активацию, то наше расширение будет рабочим и система начнет туда каждый раз заходить как только что-то будет изменяться в позиции документа при вводе через транзакцию MIGO, рисунок SE19-12.png.
PS: Собственно говоря все, и это о хорошем, а еще немного о плохом. Как видим, полей передается много, но вот изменять значения в них можно не во всех, если поле изменять нельзя, то будет выдаваться сообщение, что-то типа изменение поля запрещено, и ваши правки будут сбрасываться после выхода из метода. Какое есть решение этой проблемы, ну можно воспользоваться решением от такого человека как printfalex (http://sapforum.biz/index.php?action=profile;u=358), на форуме он показал как можно сбросить флаги запрета модификации полей для расширения: http://sapforum.biz/index.php/topic,375.msg7311.html#msg7311.
-
Ну и как обычно предыдущих два поста в виде одного файла Badi MB_MIGO_BADI MIGO.pdf
-
Кстати, если нужно в методе LINE_MODIFY получить данные из заголовка документа, кстати какого индусы не передают этих данных в этот метод, можно воспользоваться таким кодом:
* Данные
DATA: ls_gohead TYPE gohead.
FIELD-SYMBOLS: <fs_gohead> TYPE ANY.
* Код
ASSIGN ('(SAPLMIGO)GOHEAD') TO <fs_gohead>.
ls_gohead = <fs_gohead>.
UNASSIGN <fs_gohead>.
В переменной ls_gohead, будут данные заголовка документа.
-
Если кого-то ещё интересует данный вопрос..
Я решил эту проблему следующим образом:
assign ('(SAPLMIGO)lcl_migo_screenmodification=>c_input') to <c_input>.
assign ('(SAPLMIGO)lcl_migo_screenmodification=>t_fieldselection') to <fieldselection>.
" Выбираем шаблон по i_line_id
loop at <fieldselection> assigning <fs>.
assign component 'GLC' of structure <fs> to <id>.
if <id> = i_line_id.
" Так как field-symbol не типизирован, для поиска строки по значению name извращаемся через цикл
assign component 'TABLE' of structure <fs> to <table>.
loop at <table> assigning <line>.
assign component 'NAME' of structure <line> to <name>.
if <name> = '<ИМЯ_ПОЛЯ>'.
" Наконец-то добрались до нужного поля. Делаем его доступным для ввода.
assign component 'WORK' of structure <line> to <work>.
<work> = <c_input>.
exit.
endif.
endloop.
exit.
endif.
endloop.
" Меняем значение в cs_goitem
cs_goitem-<ИМЯ_ПОЛЯ> = <ЗНАЧЕНИЕ>.
Коряво, конечно, но работает..
А у меня дамп в том месте, где <work> = <c_input>
.
... из-за того, что в защищенное поле пытаюсь писать данные
-
А у меня дамп в том месте, где <work> = <c_input>
.
... из-за того, что в защищенное поле пытаюсь писать данные
Ну похоже SAP прикрыл эту дырку в изоляции с какого-то обновления, кстати параметры системы и пакеты не подскажете какие у вас стоят?
-
SAP ECC 6.0 , но возможно и дело в поле, которое я обрабатываю .
Это 'GOITEM-EXBWR' для 101 вдв, которое при 101 всегда блокируется/скрывается.
Уважаемый, Uukrul, можешь выслать в личку кусок кода, где описаны объявления
FIELD-SYMBOLS процедурки "открытия" доступа для поля.
Дело в том, что мы циклим loop at <fieldselection> assigning <fs>. ...
, а
в локальном классе lcl_migo_screenmodification для неё такое объявление
CLASS-DATA:
* Main fieldselection table with global counter. Public to be
* visibe in the debugger every time.
t_fieldselection TYPE ty_t_fst READ-ONLY
И у меня большие сомнения, что можно делать в ней изменения. Или я что-то путаю?!
-
Это 'GOITEM-EXBWR' для 101 вдв, которое при 101 всегда блокируется/скрывается.
Вечером гляну... что с этим полем не так...
-
И у меня большие сомнения, что можно делать в ней изменения. Или я что-то путаю?!
Ссори, что встряю в Вашу дискуссию, но эксперименты с полем о котором Вы говорите, чреваты... помнится, Уукрул сильно уж ругалcя.. да и по опыту чревато, в 101 еще не сталкивался, а 301 – да, в копиях 261 и 101
-
Ссори, что встряю в Вашу дискуссию, но эксперименты с полем о котором Вы говорите, чреваты... помнится, Уукрул сильно уж ругалcя.. да и по опыту чревато, в 101 еще не сталкивался, а 301 – да, в копиях 261 и 101
Я многократно обращал на это внимание "постановщика задачи". Сошлись на том, что необходимо завести поле подобное тому, о котором мы говорим (чтоб и на 200м и на 305м экране). Поле денежное, в которое юзер вносит "Цену". Потом нужно сделать проверку этой цены с той , что в заказе (EKPO-NETPR). Если она будет больше "заказной", то блокируем такой ввод.
Полагаю, что для "своего" поля тоже будет такой же месседже
BAdI: поле GOITEM-ZZXXXX не готово для ввода (изменение не копируется)
№ сообщения MIGO050
Как лучше это сделать? Как впихнуть своё поле? Достаточно ли сделать проверку условия в if_ex_mb_migo_badi~check_item ?
-
А у меня дамп в том месте, где <work> = <c_input>
.
... из-за того, что в защищенное поле пытаюсь писать данные
А у меня дамп в том месте, где <work> = <c_input>
.
... из-за того, что в защищенное поле пытаюсь писать данные
Тоже выскакивает дамп на этом же месте
Краткий текст
Error at assignment: Overwritten protected field.
Пытаюсь поменять поле ТипОценки
в связи с проблемой обязательности типа оценки в заказе перемещения
http://sapboard.ru/forums/viewtopic.php?ys=193088&f=1&t=28798&p=193088#p193088
if sy-tcode = 'MIGO' and
CS_GOITEM-BWART = '101' AND CS_GOITEM-BWTAR = '*'.
..................
""""""""""""""""""""""""""""""""""""""""""""""" ОТКРЫТИЕ ПОЛЯ ДЛЯ РЕДАКТИРОВАНИЯ,
" иначе будет сообщение MIGO050
FIELD-SYMBOLS: <C_INPUT> TYPE ANY, <ID> TYPE ANY, <FS2> TYPE ANY, <LINE> TYPE ANY, <NAME> TYPE ANY, <WORK> TYPE ANY,
<FIELDSELECTION> TYPE ANY TABLE, <TABLE> TYPE ANY TABLE.
assign ('(SAPLMIGO)lcl_migo_screenmodification=>c_input') to <c_input>.
assign ('(SAPLMIGO)lcl_migo_screenmodification=>t_fieldselection') to <fieldselection>.
" Выбираем шаблон по i_line_id
loop at <fieldselection> assigning <fs2>.
assign component 'GLC' of structure <fs2> to <id>.
if <id> = i_line_id.
" Так как field-symbol не типизирован, для поиска строки по значению name извращаемся через цикл
assign component 'TABLE' of structure <fs2> to <table>.
loop at <table> assigning <line>.
assign component 'NAME' of structure <line> to <name>.
if <name> = 'GOITEM-BWTAR'.
" Наконец-то добрались до нужного поля. Делаем его доступным для ввода.
assign component 'WORK' of structure <line> to <work>.
<work> = <c_input>.
exit.
endif.
endloop.
exit.
endif.
endloop.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Меняем значение в cs_goitem
cs_goitem-BWTAR = CS_GOITEM-CHARG.
endif.
версия SAP ECC 6.0
Есть какие-то идеи?
-
Есть какие-то идеи?
Есть, изоляция классов построена более лучше чем изоляция модулей, поэтому шара с доступом через FIELD-SYMBOLS похоже уже не работает, да и SAP никогда не обещал, что это будет работать таким образом, так что надо искать другие энхансмены, где можно сделать то что вы хотите. Вообще тип оценки вы меняете зачем?
-
.... шара с доступом через FIELD-SYMBOLS похоже уже не работает...
система 6,0, и у нас все еще работает... (но если или когда перестанет работать, наступит армагидец в системе) :)
-
система 6,0, и у нас все еще работает... (но если или когда перестанет работать, наступит армагидец в системе) :)
Именно в этом месте и именно этот код? Может уровень патчей другой, может это какая-то настройка на уровне базиса есть?
-
Именно в этом месте и именно этот код? Может уровень патчей другой, может это какая-то настройка на уровне базиса есть?
Именно код "<work> = <c_input>." не работает - тоже валиться в дамп.
А если сделать ASSIGN <c_input> TO <work>. - то все ок
-
А если сделать ASSIGN <c_input> TO <work>. - то все ок
Нуууу вот и подождем автора вопроса, поможет ли ему это...
-
Есть, изоляция классов построена более лучше чем изоляция модулей, поэтому шара с доступом через FIELD-SYMBOLS похоже уже не работает, да и SAP никогда не обещал, что это будет работать таким образом, так что надо искать другие энхансмены, где можно сделать то что вы хотите. Вообще тип оценки вы меняете зачем?
связано это с перемещением между заводами по заказу.
При создании ММзаказа с типом UB (перемещение) SAP требует заполнения поля Тип оценки.
Потом по этому заказу делается отпуск товара в MIGO (вд 351) и через какое-то время приход (вд 101)
Так вот вводимый в заказ тип оценки копируется в документ прихода (причем на экране в МИГО не редактируется)
Вариант указывать существующий тип оценки не подходит, нужен новый.
Поэтому в заказ записываем тип оценки = "*", а уже в документе прихода с помощью расширения после создания партии меняем звезду на конкретное значение (равное партии).
-
Поэтому в заказ записываем тип оценки = "*", а уже в документе прихода с помощью расширения после создания партии меняем звезду на конкретное значение (равное партии).
Так ясно, а что предложенный вариант: http://sapforum.biz/index.php/topic,375.msg10866.html#msg10866 тоже не работает?
-
Именно код "<work> = <c_input>." не работает - тоже валиться в дамп.
А если сделать ASSIGN <c_input> TO <work>. - то все ок
Дамп в этом месте не вылазит. Значение поля типОценки в расширении меняется,
но на экране всеравно вылазит то же сообщение MIGO050 что поле не готово для ввода.
Т.е взлом не работает.
Информация по версии сапа
-
но на экране всеравно вылазит то же сообщение MIGO050 что поле не готово для ввода.
Т.е взлом не работает.
Из этого делаем вывод, что операции доступа к атрибутам объектов через FIELD-SYMBOLS работают, что не может не радовать. Далее значит место замен вида оценки выбрано не правильно и надо искать другие точки включения.
-
при более детальном дебаге обнаружено что в нашем lineModify код ASSIGN <c_input> TO <work> вообще ничего не меняет в <fieldselection>. :-\
т.е. для GOITEM-BWTAR как было work = 2 так и осталось хотя должно было стать 6(<C_INPUT> = 6).
После выхода из IF_EX_MB_MIGO_BADI~LINE_MODIFY в индуском коде идет как раз таки проверка на эту шестерку и только тогда изменения принимаются сапом. А оно натыкается на 2. :(
*Note 1079123 ->Method item_modify to be used for country INDIA
* Call BAdI
ls_goitem_badi = cs_goitem.
CALL METHOD lcl_migo_globals=>if_badi->line_modify
EXPORTING
i_line_id = ls_goitem_badi-global_counter
CHANGING
cs_goitem = ls_goitem_badi.
* Are there any changes?
* - If NO: Leave this method.
* - If YES: Check fieldselection, whether field is 'visible + input'.
CHECK cs_goitem <> ls_goitem_badi.
descr_ref ?= cl_abap_typedescr=>describe_by_data( ls_goitem_badi ).
LOOP AT descr_ref->components ASSIGNING <comp>.
* Following fields are checked in method line_badi_special_fields
CHECK NOT <comp>-name = 'LGORT'.
CHECK NOT <comp>-name = 'LGOBE'.
CHECK NOT <comp>-name = 'WERKS'.
CHECK NOT <comp>-name = 'NAME1'.
CHECK NOT <comp>-name = 'MATNR'.
CHECK NOT <comp>-name = 'MAKTX'.
CHECK NOT <comp>-name = 'LIFNR'.
CHECK NOT <comp>-name = 'VENDORNAME'.
CHECK NOT <comp>-name = 'KUNNR'.
CHECK NOT <comp>-name = 'CUSTNAME'.
CONCATENATE 'CS_GOITEM-' <comp>-name INTO l_name1.
CONCATENATE 'LS_GOITEM_BADI-' <comp>-name INTO l_name2.
ASSIGN (l_name1) TO <f1>.
ASSIGN (l_name2) TO <f2>.
IF <f1> <> <f2>.
l_fieldname = <comp>-name.
CONCATENATE 'GOITEM-' <comp>-name INTO l_fieldname.
CALL METHOD lcl_migo_screenmodification=>get
EXPORTING
i_field = l_fieldname
i_global_counter = cs_goitem-global_counter
i_badi = x
RECEIVING
r_status = l_status.
CASE l_status.
* Field is 'visible + input' (-> change in BAdI allowed)
WHEN 6.
<f1> = <f2>.
l_change = x.
* Field is not used on any screen in MIGO
WHEN 8.
ENHANCEMENT-SECTION lmigokl3_01 SPOTS es_saplmigo.
MESSAGE w049 WITH l_fieldname.
END-ENHANCEMENT-SECTION.
* Field was not 'on input' (l_status = 0 or 2)
WHEN OTHERS.
ENHANCEMENT-SECTION lmigokl3_02 SPOTS es_saplmigo.
MESSAGE w050 WITH l_fieldname. " то самое сообщение о нипринятии изменения
END-ENHANCEMENT-SECTION.
ENDCASE.
ENDIF.
ENDLOOP.
PS. можно конечно сделать дикий enchncement после отработки METHOD lcl_migo_screenmodification=>get ;D
-
Если кого-то ещё интересует данный вопрос..
В общем исходя из написанного ранее printfalex решения, реализовал аналогичную штуку через метод класса, для удобства использования, так сказать. Можно возвращать структуру параметров, чтобы возвращать сразу все статусы. Ну это уже как кому будет проще.
CLASS zcl_migo_check DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS cn_invisible TYPE migo_fs_status VALUE 0 ##NO_TEXT.
CONSTANTS cn_visible TYPE migo_fs_status VALUE 2 ##NO_TEXT.
CONSTANTS cn_input TYPE migo_fs_status VALUE 6 ##NO_TEXT.
CONSTANTS cn_not_valid TYPE migo_fs_status VALUE 8 ##NO_TEXT.
CLASS-METHODS class_constructor .
CLASS-METHODS check_mode
IMPORTING
!iv_line_id TYPE mb_line_id
!iv_name TYPE migo_fieldname
RETURNING
VALUE(rv_mode) TYPE migo_fs_status .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_migo_check IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MIGO_CHECK=>CHECK_MODE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_LINE_ID TYPE MB_LINE_ID
* | [--->] IV_NAME TYPE MIGO_FIELDNAME
* | [<-()] RV_MODE TYPE MIGO_FS_STATUS
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD check_mode.
FIELD-SYMBOLS: <fs_fieldselection_t> TYPE ANY TABLE,
<fs_fieldselection_s> TYPE any,
<fs_line_id> TYPE mb_line_id,
<fs_table_t> TYPE ANY TABLE,
<fs_table_s> TYPE any,
<fs_name> TYPE migo_fieldname,
<fs_mode> TYPE migo_fs_status.
ASSIGN ('(SAPLMIGO)lcl_migo_screenmodification=>t_fieldselection') TO <fs_fieldselection_t>.
LOOP AT <fs_fieldselection_t> ASSIGNING <fs_fieldselection_s>.
ASSIGN COMPONENT 'GLC' OF STRUCTURE <fs_fieldselection_s> TO <fs_line_id>.
IF <fs_line_id> = iv_line_id.
ASSIGN COMPONENT 'TABLE' OF STRUCTURE <fs_fieldselection_s> TO <fs_table_t>.
LOOP AT <fs_table_t> ASSIGNING <fs_table_s>.
ASSIGN COMPONENT 'NAME' OF STRUCTURE <fs_table_s> TO <fs_name>.
IF <fs_name> = iv_name.
ASSIGN COMPONENT 'MODE' OF STRUCTURE <fs_table_s> TO <fs_mode>.
rv_mode = <fs_mode>.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDMETHOD.
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD class_constructor.
ENDMETHOD.
Вызываем для проверки очень просто:
IF zcl_migo_check=>check_mode( iv_line_id = i_line_id iv_name = 'GOITEN-LSMEH' ) = zcl_migo_check=>cn_visible.
* Поле видимое на экране MIGO
ENDIF.