通常,在SAP数据维护过程中,有些列或者符合特定条件的单元格需要可编辑。
一般用FIELDCAT-EDIT控制某一列的可编辑状态,用数据内表中的字段T_EDIT TYPE LVC_T_STYL、结合layout的STYLEFNAME = ‘T_EDIT’可以精确某个单元格的可编辑状态。
效果一般如下图所示:
下面是一个Demo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
*&---------------------------------------------------------------------* *& Report ZTEST034 *&---------------------------------------------------------------------* *& 练习ALV字段 / 单元格可编辑功能 *&---------------------------------------------------------------------* REPORT ZTEST034. *字段可编辑可以控制到列或者某一行的某个单元格. *如果只是控制某列是否可编辑,则在fieldcat中设置编辑属性为X即可。 *如果需要控制到具体的单元格是否可编辑,则需要在数据内表中新增类型为LVC_T_STYL *的字段(内表),并且在layout中设置控制字段可编辑属性的字段是哪个。 *如下案例,FIELDCAT中设置了CARRNAME栏位可编辑. *GT_OUT[]中的T_EDIT和layout中的STYLEFNAME控制了具体某一行中可编辑字段的属性. TYPES: BEGIN OF TY_ITAB, BOX_NAME TYPE C, FLAG TYPE C, T_EDIT TYPE LVC_T_STYL, CARRID TYPE SCARR-CARRID, CARRNAME TYPE SCARR-CARRNAME, CURRCODE TYPE SCARR-CURRCODE, URL TYPE SCARR-URL, END OF TY_ITAB. DATA: GT_OUT TYPE TABLE OF TY_ITAB WITH HEADER LINE . DATA: S_EDIT TYPE LVC_T_STYL WITH HEADER LINE. DATA: LR_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR, LR_DATA TYPE REF TO DATA, LT_DFIES TYPE DDFIELDS, LS_DFIES TYPE DFIES, LS_FIELDCAT TYPE LVC_S_FCAT. DATA:GT_FCAT TYPE LVC_T_FCAT, GT_STYLS TYPE LVC_T_STYL. **********begin of sel********** START-OF-SELECTION. SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_OUT FROM SCARR. LOOP AT GT_OUT ASSIGNING FIELD-SYMBOL(<FS1>). CLEAR S_EDIT[]. S_EDIT-FIELDNAME = 'CARRNAME'. S_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. APPEND S_EDIT. S_EDIT-FIELDNAME = 'URL'. S_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. APPEND S_EDIT. "可编辑的条件. IF <FS1>-CARRID(1) EQ 'A'. <FS1>-T_EDIT = S_EDIT[]. ENDIF. "如果航空公司代码为AA,则所有字段不允许编辑. "行可编辑性的优先级比列可编辑性高. "如下,CARRNAME字段在fieldcat中设置为整列可编辑,但以下逻辑限制SR/SQ行不允许编辑. IF <FS1>-CARRID EQ 'SR' OR <FS1>-CARRID EQ 'SQ'. CLEAR <FS1>-T_EDIT. CLEAR S_EDIT[]. S_EDIT-FIELDNAME = 'CARRNAME'. S_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND S_EDIT. S_EDIT-FIELDNAME = 'URL'. S_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND S_EDIT. <FS1>-T_EDIT = S_EDIT[]. ENDIF. ENDLOOP. *************alv************** DATA(LW_LAYOUT) = VALUE LVC_S_LAYO( CWIDTH_OPT = ABAP_TRUE BOX_FNAME = 'BOX_NAME' STYLEFNAME = 'T_EDIT' ZEBRA = ABAP_TRUE ). "build fieldcat. CLEAR GT_FCAT. CREATE DATA LR_DATA LIKE LINE OF GT_OUT. LR_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA_REF( LR_DATA ). LT_DFIES = CL_SALV_DATA_DESCR=>READ_STRUCTDESCR( LR_TABDESCR ). LOOP AT LT_DFIES INTO LS_DFIES. CLEAR LS_FIELDCAT. MOVE-CORRESPONDING LS_DFIES TO LS_FIELDCAT. "字段可编辑. IF LS_FIELDCAT-FIELDNAME = 'URL'. LS_FIELDCAT-EDIT = ABAP_TRUE. ENDIF. "字段显示为复选框. IF LS_FIELDCAT-FIELDNAME = 'FLAG'. LS_FIELDCAT-CHECKBOX = 'X'. LS_FIELDCAT-EDIT = ABAP_TRUE. LS_FIELDCAT-SCRTEXT_L = '选择'. LS_FIELDCAT-SCRTEXT_S = '选择'. LS_FIELDCAT-SCRTEXT_M = '选择'. ENDIF. "字段显示超链接. IF LS_FIELDCAT-FIELDNAME EQ 'URL'. LS_FIELDCAT-HOTSPOT = 'X'. ENDIF. "box_name字段无表头描述. CHECK LS_FIELDCAT-FIELDNAME <> 'BOX_NAME'. APPEND LS_FIELDCAT TO GT_FCAT. ENDLOOP. "output alv. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID * I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' * I_CALLBACK_USER_COMMAND = 'USER_COMMAND' IS_LAYOUT_LVC = LW_LAYOUT IT_FIELDCAT_LVC = GT_FCAT I_SAVE = 'A' TABLES T_OUTTAB = GT_OUT EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. |
本文作者: GavinDong
版权属于: GavinDong博客
文章链接: https://gavindong.com/3911.html
如果使用过程中遇到问题,可 **点击此处** 交流沟通。
版权所有,转载时必须以链接形式注明作者和原始出处及本声明。