Ремоделирование куба с помощью USER EXIT

Для ремоделирования куба с помощью user exit
1) создайте свой класс на основе стандартного демо класса (он как раз для этих целей). Построитель классов SE24
Наименование стандартного демо класса: CL_RSCNV_USER_EXIT_SAMPLE
копирование класса

2)Откройте Новый, скопированный класс
В этом классе, есть метод IF_RSCNV_EXIT~EXIT. Этот метод будет вызываться при ремоделировании измерения куба. Соответственно, в него и потребуется вносить изменения.
Откройте исходный код метода, двойным кликом по нему.
create method

Пример кода для метода (при добавлении нового поля в измерение)

  1. METHOD IF_RSCNV_EXIT~EXIT.
  2.  
  3. FIELD-SYMBOLS: TYPE ANY, " структура измерения (его таблицы) до ремоделирования
  4. TYPE ANY, " какое нить поле из этой таблицы SID
  5. TYPE ANY. " новое (добовляемое поле) SID
  6.  
  7. DATA: l_chavl TYPE rschavl, " значение какого нить поля для логики (из того измерения которое ремоделируем)
  8. l_zpl_line_chavl TYPE rschavl, " значения нового поля
  9. l_attr TYPE string.
  10. *****************************************************************************
  11. * i_r_old->* - это структура таблицы измерения, до ремоделирования.
  12. * присвойте ее соответствующему символическому указателю.
  13. * Присвойте результат / значение полю C_R_NEWFIELD.
  14. *если вы хотите использовать этот юзер екзит для нескольких правил ремоделированя.
  15. * то используйте параметр I_CNVTABNM - содержащий таблицу измерения
  16. * для ремоделирования.
  17. *****************************************************************************
  18. ASSIGN c_r_newfield->* TO .
  19. ASSIGN i_r_old->* TO .
  20. *****************************************************************************
  21. * мы можем использовать отдельные поля, таблицы (измерения) которое мы ремоделируем
  22. * для этого надо присвоить(из структуры таблицы до ремоделирования)
  23. * символической ссылке - желаемое к использованию поле из таблицы
  24. * это поле может быть использовано в логике для ремоделирования
  25. * в этом примере я использую поле SID_0ABCKEY.
  26. *****************************************************************************
  27. ASSIGN COMPONENT 'SID_0ABCKEY' OF STRUCTURE TO .
  28. ******************************************************************************
  29. * теперь у нас есть SID values для 0ABCKEY.
  30. * Теперь с помощью них мы можем получить реальные значения этого признака 0ABCKEY.
  31. * Сделать это мы можем с помощью ФМ: RRSI_SID_VAL_SINGLE_CONVERT.
  32. ******************************************************************************
  33. CALL FUNCTION 'RRSI_SID_VAL_SINGLE_CONVERT'
  34. EXPORTING
  35. i_iobjnm = '0ABCKEY'
  36. * I_S_COB_PRO =
  37. i_sid =
  38. IMPORTING
  39. e_chavl = l_chavl
  40. * E_S_NODESID =
  41. EXCEPTIONS
  42. no_value_for_sid = 1
  43. x_message = 2
  44. OTHERS = 3
  45. .
  46. IF sy-subrc <> 0.
  47. l_attr = text-001.
  48. RAISE EXCEPTION TYPE cx_rscnv_exception " это для отловки исключений
  49. EXPORTING
  50. attr1 = 'CL_RSCNV_USER_EXIT_SAMPLE' " это текст исключения
  51. attr2 = 'EXIT-1'
  52. attr3 = l_attr
  53. * ATTR4 = sy-subrc
  54. .
  55. ******************************************************************************
  56. * здесь мы описываем логику ремоделирования
  57. * для примера - если старое знаениче 0ABCKEY было = 03
  58. * то тогда значение нового поля будет = 2
  59. ******************************************************************************
  60. IF l_chavl >= '03'.
  61. l_zpl_line_chavl = '2'.
  62. ******************************************************************************
  63. * Получение SID ов для новых поле
  64. * и последующая их запись
  65. * С помощью FM: RRSI_VAL_SID_SINGLE_CONVERT.
  66. ******************************************************************************
  67. CALL FUNCTION 'RRSI_VAL_SID_SINGLE_CONVERT'
  68. EXPORTING
  69. i_iobjnm = 'YB_PREABC'
  70. i_chavl = l_zpl_line_chavl
  71. * I_S_COB_PRO =
  72. * I_CHECKFL = RS_C_FALSE
  73. * I_WRITEFL = RRSI_C_WRITEFL-NO
  74. * I_MASTERDATA_CREATE = RS_C_TRUE
  75. * I_RNSID =
  76. * I_NEW_VALUES = RS_C_FALSE
  77. IMPORTING
  78. e_sid =
  79. EXCEPTIONS
  80. no_sid = 1
  81. chavl_not_allowed = 2
  82. chavl_not_figure = 3
  83. chavl_not_plausible = 4
  84. x_message = 5
  85. interval_not_found = 6
  86. foreign_lock = 7
  87. inherited_error = 8
  88. OTHERS = 9
  89. .
  90. IF sy-subrc <> 0.
  91. l_attr = text-002.
  92. RAISE EXCEPTION TYPE cx_rscnv_exception
  93. EXPORTING
  94. attr1 = 'CL_RSCNV_USER_EXIT_SAMPLE'
  95. attr2 = 'EXIT-2'
  96. attr3 = l_attr
  97. * ATTR4 = sy-subrc
  98. .
  99.  

При ремоделировании нельзя обращаться к признакам других измерений, кроме ремоделируемого.

Комментарии