Properties SourceCde
txt
1
*---------------------------------------------------------------------*
2
*       FORM PREPARE_READ_REQUEST                                     *
3
*---------------------------------------------------------------------*
4
*       prepare global data for read request                          *
5
*---------------------------------------------------------------------*
6
FORM prepare_read_request.
7
 
8
  DATA: action TYPE activ_auth, oc_to_be_checked TYPE xfeld,
9
        sellines TYPE i.
10
 
11
  PERFORM init_state_vector.
12
  PERFORM vim_reset_texttab USING view_name.           "SW Texttransl
13
  PERFORM vim_bc_logs_get USING view_name x_header x_namtab[]
14
                          CHANGING vim_bc_entry_list.
15
  IF vim_adjust_middle_level_mode EQ subset. "ignore subsets
16
    vim_adj_header = x_header[].
17
    CLEAR x_header-subsetflag. MODIFY x_header INDEX 1.
18
    vim_adj_namtab = x_namtab[].
19
    LOOP AT x_namtab WHERE readonly EQ subset AND keyflag NE space.
20
      CLEAR x_namtab-readonly. MODIFY x_namtab.
21
    ENDLOOP.
22
    vim_adj_dbasellist = dba_sellist[].
23
    LOOP AT dba_sellist WHERE ddic CO vim_subset_marks.
24
      IF dba_sellist-value IS INITIAL AND dba_sellist-initial EQ space.
25
        DELETE dba_sellist. "unvollständige Subsetbedingungen löschen
26
      ELSE.
27
        TRANSLATE dba_sellist-ddic USING 'S BX'. "'S A BXMX'.
28
        MODIFY dba_sellist.
29
      ENDIF.
30
    ENDLOOP.
31
    DESCRIBE TABLE dba_sellist.
32
    IF sy-tfill GT 0.
33
      READ TABLE dba_sellist INDEX sy-tfill.
34
      CLEAR dba_sellist-and_or.
35
      MODIFY dba_sellist INDEX sy-tabix.
36
    ENDIF.
37
  ENDIF.
38
* remove old selections from authorisation
39
*  if not vim_dba_sel_kept is initial and vim_called_by_cluster = space.
40
*    refresh dba_sellist[].                                 "UF210200b
41
*    append lines of vim_dba_sel_kept to dba_sellist.
42
*  endif.
43
*  DELETE dba_sellist WHERE ddic = 'M'.
44
  IF vim_called_by_cluster = space.
45
    DELETE dba_sellist WHERE from_auth <> space
46
     AND ddic <> 'S' and ddic <> 'B'.                       "UF210200e
47
    DESCRIBE TABLE dba_sellist LINES sellines.
48
    IF sellines GT 0.
49
      READ TABLE dba_sellist INDEX sellines.
50
      CLEAR dba_sellist-and_or.
51
      MODIFY dba_sellist INDEX sy-tabix.
52
    ENDIF.
53
  ENDIF.                                                     "UF210200
54
  IF NOT vim_oc_inst IS INITIAL.
55
* insert selection from authorisation into sellist
56
    IF <status>-st_action = anzeigen.
57
      action = svorg_read.
58
    ELSE.
59
      action = svorg_maint.
60
    ENDIF.
61
    CALL METHOD vim_oc_inst->combine_vimsel_with_auth
62
      EXPORTING
63
        action  = action
64
      CHANGING
65
        sellist = dba_sellist[].
66
    CALL METHOD vim_oc_inst->get_to_be_checked
67
      IMPORTING
68
        to_be_checked = oc_to_be_checked.
69
    IF oc_to_be_checked <> space or x_header-bastab <> space.
70
* check TOTAL vs. authorisation after reading
71
      PERFORM vim_maint_selflag USING    'S'
72
                                CHANGING x_header-selection.
73
    ENDIF.
74
  ENDIF.
75
ENDFORM.