ProNovia Produkte Korrekturanleitung
Knowledge Base ID / Version	CFM-190 / V8.0.0	
Ausgabe Korrekturanleitung	I / CG / 29.09.2022	
Farblegende Korrekturen	INSERT	REPLACE THIS	REPLACE WITH	DELETE	

Klasse	/PRONOVIA/CL_ABAP_HELPER	
Methode	_REGEX_RESERVED_CHAR	

Diese Methode wurde mit UTI V9.19.0 ausgeliefert. Falls noch fehlend, muss diese angelegt werden.

IV_CHAR	Importing	Type	CHAR1
RV_CHAR	Returning	Type	STRING

METHOD _regex_reserved_char.

  "CG/UTI-106/neu

  IF `"\.*?+[{|()^$` CS iv_char.
    rv_char = `\` && iv_char.
  ELSE.
    rv_char = iv_char.
  ENDIF.

ENDMETHOD.

Klasse	/PRONOVIA/CL_ABAP_HELPER	
Methode	ESCAPE_CHAR_SET	

Diese Methode wurde mit UTI V9.19.0 ausgeliefert. Falls noch fehlend, muss diese angelegt werden.

IV_ESCAPE_CHAR	Importing	Type	CHAR1
IV_PROTECTED_CHARS	Importing	Type	C
CA_DATA		Changing	Type	ANY

METHOD escape_char_set.

  "CG/UTI-106/neu

  DATA:
      lt_data             TYPE string_table
    , lv_type             TYPE char1
    , lv_regex            TYPE string
    , lt_matches          TYPE match_result_tab
    , lv_off              TYPE i
    , lv_match_line       TYPE sytabix
    , lv_replace          TYPE char2
    .
  FIELD-SYMBOLS:
      <lt_data>           TYPE STANDARD TABLE
    , <lv_char>           TYPE char1
    .

  CHECK NOT iv_escape_char IS INITIAL.

  DESCRIBE FIELD ca_data TYPE lv_type.

  IF lv_type = 'h'.
    ASSIGN ca_data TO <lt_data>.
  ELSEIF 'CNg' CS lv_type.
    APPEND ca_data TO lt_data.
    ASSIGN lt_data TO <lt_data>.
  ELSE.
    RETURN.
  ENDIF.

  "ALLE mit REGEX Escape Char, dann passt es immer
  lv_regex = _regex_reserved_char( iv_escape_char ).
  DO strlen( iv_protected_chars ) TIMES.
    ASSIGN iv_protected_chars+lv_off(1) TO <lv_char>.
    lv_regex = lv_regex && `|` && _regex_reserved_char( <lv_char> ).
    ADD 1 TO lv_off.
  ENDDO.

  FIND ALL OCCURRENCES OF REGEX lv_regex
       IN TABLE <lt_data>
       RESULTS lt_matches.

  "Rückwärts, also unten nach oben, vor allem aber von rechts nach links,
  "da wir ja verlängern
  lv_match_line = lines( lt_matches ).
  WHILE lv_match_line > 0.
    READ TABLE lt_matches ASSIGNING FIELD-SYMBOL(<ls_match>) INDEX lv_match_line.
    READ TABLE <lt_data> ASSIGNING FIELD-SYMBOL(<lv_data>) INDEX <ls_match>-line.

    lv_replace = iv_escape_char && <lv_data>+<ls_match>-offset(1).
    REPLACE SECTION OFFSET 
                <ls_match>-offset LENGTH 1 OF <lv_data> WITH lv_replace IN CHARACTER MODE.

    SUBTRACT 1 FROM lv_match_line.
  ENDWHILE.

  IF 'CNg' CS lv_type.
    READ TABLE lt_data INTO ca_data INDEX 1.
  ENDIF.

ENDMETHOD.

Klasse	/PRONOVIA/CL_PRM_OBJCHNG	
Methode	CHST_CHECK_DATA	

METHOD chst_check_data.

. . .

    , lv_revision_order       TYPE ccsrf                                "CG/ID7223
    , lv_datuv_new            TYPE datuv                                "CG/ID7907
    , lt_obj_cust             TYPE /pronovia/prm_objinfo_tab            "CG/ID9068
>>>START INSERT
    , lv_objkt_sel(100)                                                 "CG/CFM-190
>>>END INSERT
    .
  FIELD-SYMBOLS:
      <ls_revinfo>            TYPE /pronovia/objval_vali_info           "CG/ID7223

. . .

  "if DP, then change number must not be used for any other document
  "version
  IF change_ctrl-int_objty = /pronovia/cl_prm_def=>c_prmint_objty_draw
  AND NOT change_ctrl-draw_key-doknr IS INITIAL             "CG/ID6574
  AND NOT change_ctrl-draw_key-doknr CO ' *'.               "CG/ID6574
>>>REPLACE THIS
    MOVE-CORRESPONDING change_ctrl-draw_key TO ls_ccdok.    
    ls_ccdok-dokvr = '%'.
    SELECT aennr INTO change_ctrl-aennr
           FROM aeoi
           UP TO 1 ROWS
           WHERE aennr = change_ctrl-aennr
             AND aetyp = '31'
             AND objkt LIKE ls_ccdok.
>>>REPLACE WITH
    "<CG/CFM-190
    ls_ccdok-dokvr = space.
    lv_objkt_sel   = ls_ccdok.
    /pronovia/cl_abap_helper=>escape_char_set(
                                       EXPORTING
                                           iv_escape_char     = '#'
                                           iv_protected_chars = '%_'
                                       CHANGING
                                           ca_data            = lv_objkt_sel ).
    lv_objkt_sel = lv_objkt_sel && '%'. "Version am Schluss > beliebig
    SELECT aennr INTO change_ctrl-aennr
           FROM aeoi
           UP TO 1 ROWS
           WHERE aennr = change_ctrl-aennr
             AND aetyp = '31'
             AND objkt LIKE lv_objkt_sel ESCAPE '#'.
      "CG/CFM-190>
>>>END REPLACE
    ENDSELECT.
    IF sy-subrc = 0.
      WRITE change_ctrl-aennr TO sy-msgv2.
      MESSAGE e034 WITH lf_obj_ext
                        sy-msgv2
                   RAISING error.
    ELSE.
      "{CG/ID7223/check in plants
      CALL FUNCTION '/PRONOVIA/PRM_GET_DOC_OBIDE'
        EXPORTING
          pf_dokar  = change_ctrl-draw_key-dokar
          pf_doknr  = change_ctrl-draw_key-doknr
          pf_doktl  = change_ctrl-draw_key-doktl
          pf_dokvr  = change_ctrl-draw_key-dokvr
        IMPORTING
          pfx_orgky = lf_orgky.

. . .

<ENDE>