Автор Тема: Badi MB_MIGO_BADI  (Прочитано 57197 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 751
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Badi MB_MIGO_BADI
« Ответ #25 : Июль 10, 2012, 07:36:21 pm »
You are not allowed to view links. Register or Login
Поэтому в заказ записываем тип оценки = "*", а уже в документе прихода с помощью расширения после создания партии меняем звезду на конкретное значение (равное партии).
Так ясно, а что предложенный вариант: You are not allowed to view links. Register or Login тоже не работает?

Оффлайн alexey11

  • Newbie
  • *
  • Сообщений: 16
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Badi MB_MIGO_BADI
« Ответ #26 : Июль 11, 2012, 10:50:14 am »
You are not allowed to view links. Register or Login
Именно код "<work> = <c_input>." не работает - тоже валиться в дамп.

А если сделать ASSIGN <c_input> TO  <work>. - то все ок


Дамп в этом месте не вылазит. Значение поля типОценки в расширении меняется,
но на экране всеравно вылазит то же сообщение MIGO050 что поле не готово для ввода.
Т.е взлом не работает.


Информация по версии сапа

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 751
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Badi MB_MIGO_BADI
« Ответ #27 : Июль 11, 2012, 11:08:14 am »
You are not allowed to view links. Register or Login
но на экране всеравно вылазит то же сообщение MIGO050 что поле не готово для ввода.
Т.е взлом не работает.
Из этого делаем вывод, что операции доступа к атрибутам объектов через FIELD-SYMBOLS работают, что не может не радовать. Далее значит место замен вида оценки выбрано не правильно и надо искать другие точки включения.

Оффлайн alexey11

  • Newbie
  • *
  • Сообщений: 16
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Badi MB_MIGO_BADI
« Ответ #28 : Июль 23, 2012, 02:47:21 pm »
при более детальном дебаге обнаружено что в нашем lineModify код ASSIGN <c_input> TO  <work> вообще ничего не меняет в <fieldselection>.  :-\

т.е. для GOITEM-BWTAR как было work = 2 так и осталось хотя должно было стать 6(<C_INPUT> = 6).

После выхода из IF_EX_MB_MIGO_BADI~LINE_MODIFY в индуском коде  идет как раз таки проверка на эту шестерку и только тогда изменения принимаются сапом. А оно натыкается на 2.  :(

Код: You are not allowed to view links. Register or Login

*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

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 751
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Badi MB_MIGO_BADI - Доступ к статусам полей
« Ответ #29 : Апрель 14, 2020, 01:05:54 pm »
You are not allowed to view links. Register or Login
Если кого-то ещё интересует данный вопрос..
В общем исходя из написанного ранее printfalex решения, реализовал аналогичную штуку через метод класса, для удобства использования, так сказать. Можно возвращать структуру параметров, чтобы возвращать сразу все статусы. Ну это уже как кому будет проще.

Код: You are not allowed to view links. Register or Login
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.

Вызываем для проверки очень просто:
Код: You are not allowed to view links. Register or Login
  IF zcl_migo_check=>check_mode( iv_line_id = i_line_id iv_name = 'GOITEN-LSMEH' ) = zcl_migo_check=>cn_visible.
*   Поле видимое на экране MIGO
  ENDIF.