SAP ABAP 自定义弹窗文本长度函数

        在使用POPUP_GET_VALUES函数获取用户输入值时,当用户输入超过132个字符时,函数只能接收前132个字符的数据。不满足现有需求。

        在POPUP_GET_VALUES函数基础上进行改造,为不影响原有函数功能,将POPUP_GET_VALUES函数拷贝一份出来修改,改造过程如下(有需要可以跟着一起改造):

目标:让VALUE字段由132长度扩充至255长度

步骤一:将POPUP_GET_VALUES函数复制创建到事先准备好的函数组ZFUNCGOP重命名为ZPOPUP_GET_VALUES_LONG_TEXT,如下:

对结构参数进行修改:SVAL->ZSVAL,SVALD->ZSVALD

对于两个结构只需将VALUE字段改为255即可,其余保持不变:

做完这些修改后,将POPUP_GET_VALUES函数的屏幕、状态栏、标题栏拷贝至ZPOPUP_GET_VALUES_LONG_TEXT函数组下,效果如下:

步骤二:先将声明的参数结构等代码添加到全局变量包含文件中,如图:

代码如下(可直接复制粘贴) 

FUNCTION-POOL ZFUNCGOP MESSAGE-ID s4.                     "MESSAGE-ID ..

INCLUDE <icon>.
TABLES: zsvald, dd07l.

TYPE-POOLS: shlp.                                           "B40K011463
DATA:
  BEGIN OF svali OCCURS 50,
    tabname        LIKE dfies-tabname,
    fieldname      LIKE dfies-fieldname,
    value          LIKE zsval-value,
    field_attr     LIKE sval-field_attr,
    field_obl      LIKE sval-field_obl,
    comp_code      LIKE sval-comp_code,
    comp_tab       LIKE dfies-tabname,
    comp_field     LIKE dfies-fieldname,
    position       LIKE dfies-position,
    offset         LIKE dfies-position,
    keyflag        LIKE dfies-keyflag,
    checktable     LIKE dfies-checktable,
    inttype        LIKE dfies-inttype,
    intlen         LIKE dfies-intlen,
    scrlen1        LIKE dfies-scrlen1,
    scrlen2        LIKE dfies-scrlen2,
    scrlen3        LIKE dfies-scrlen3,
    datatype       LIKE dfies-datatype,
    leng           LIKE dfies-leng,
    outputlen      LIKE dfies-outputlen,
    lowercase      LIKE dfies-lowercase,
    convexit       LIKE dfies-convexit,
    scrtext_s      LIKE dfies-scrtext_s,
    scrtext_m      LIKE dfies-scrtext_m,
    scrtext_l      LIKE dfies-scrtext_l,
    domname        LIKE dfies-domname,
    valexi         LIKE dfies-valexi,
    sign           LIKE dfies-sign,                             "mk
    decimals       LIKE dfies-decimals,                         "mk
    novaluehlp     LIKE sval-novaluehlp,                        "mk
    reftable       LIKE dfies-reftable,                     "B20K058473
    reffield       LIKE dfies-reffield,                     "B20K058473
    f4availabl     LIKE dfies-f4availabl,                   "B20K081005
  END OF svali,

* Interne Tabelle mit Feldern, die nicht anzuzeigen sind
  BEGIN OF sval_not OCCURS 50.
        INCLUDE STRUCTURE svali.
DATA: END OF sval_not.

* Arbeitsbereich für die Tabelle svali                    "B20K058473
DATA:   BEGIN OF wa_svali.                                  "B20K058473
        INCLUDE STRUCTURE svali.                            "B20K058473
DATA:   END OF wa_svali.                                    "B20K058473

* Fehlerleiste für Userexit beim Fb POPUP_GET_VALUES_DB_CHECKED
DATA: BEGIN OF error.
        INCLUDE STRUCTURE svale.
DATA: END OF error,

* Felder mit Werten zur Prüfung gegen die DB oder eine ITAB
  BEGIN OF check_values OCCURS 50,
    tabname        LIKE dfies-tabname,
    fieldname      LIKE dfies-fieldname,
    value          LIKE zsval-value,
    comp_code      LIKE sval-comp_code,
    position       LIKE dfies-position,
    offset         LIKE dfies-position,
    keyflag        LIKE dfies-keyflag,
    intlen         LIKE dfies-intlen,
    leng           LIKE dfies-leng,                         "+012i cpl
  END OF check_values,
** Felder zum Lesen der DB-Tabellen                         "*050d+
*  nr_check_values  TYPE i,
*  entries_found    TYPE c,
*  genkeyl          TYPE i,
*  genkey(120)      TYPE c,
** Tabelle für die DB-Zeilen, Very Long
*  BEGIN OF db_tab_vl OCCURS 0,
*        lines(4096),
*      END OF db_tab_vl,
*  tab_very_long    TYPE i VALUE 4096,
** Tabelle für die DB-Zeilen, Long
*  BEGIN OF db_tab_l OCCURS 0,
*        lines(500),
*      END OF db_tab_l,
*  tab_long         TYPE i VALUE 500,
** Tabelle für die DB-Zeilen, Middle
*  BEGIN OF db_tab_m OCCURS 0,
*        lines(100),
*      END OF db_tab_m,
*  tab_middle       TYPE i VALUE 100,
** Tabelle für die DB-Zeilen, Short
*  BEGIN OF db_tab_s OCCURS 0,
*        lines(50),
*      END OF db_tab_s,
*  tab_short        TYPE i VALUE 50,                        "*050d-


* Felder für Dynprogröße und -steuerung zum Blättern, Cursorpostion etc.
  start_row_100          TYPE p,
  start_column_100       TYPE p,
  end_row_100            TYPE p,
  end_column_100         TYPE p,
* first_time_100         TYPE c,                            "*053d
* answer_100             TYPE c,                            "*053d
  first_line_100         TYPE i,                      "*053d"*059i
  index_100              TYPE i,
  quan_entries_100       TYPE i,
  gv_use_paging          type xfeld,                        "*059i
* quan_loops_100         TYPE i,                            "*053d
  nr_entries_to_show     TYPE i,
  max_field_length       TYPE i,
  cur_field(20)          TYPE c VALUE ' ',
  cur_line               TYPE i VALUE 0,
  cur_offset             TYPE i VALUE 0,
  error_tab              LIKE sval-tabname,
  error_field            LIKE sval-fieldname,

* Felder der Schnittstelle, die global genutzt werden
* Schnittstelle darf wg. Rekursion nicht globalisiert werden
  BEGIN OF ifields OCCURS 20.
        INCLUDE STRUCTURE zsval.
DATA: END OF ifields,
  int_check_existence    TYPE c,
  program_name           LIKE trdir-name,
  f1_program_name        LIKE trdir-name,
  f4_program_name        LIKE trdir-name,
  form_name(50)          TYPE c,
  f1_form_name(50)       TYPE c,
  f4_form_name(50)       TYPE c,
  text_title             LIKE rseu1-tit_text,
* text_title             like rs37c-text_line,
* ok_button_text         like svalbutton-buttontext,        "B20K062235
  ok_button_text         LIKE smp_dyntxt,
* icon_okay(20)          type c value 'ICON_CHECKED',       "B20K062235
* 1st_button             like svalbutton-buttontext,        "B20K062235
  1st_button             LIKE smp_dyntxt,
* 2nd_button             like svalbutton-buttontext,        "B20K062235
  2nd_button             LIKE smp_dyntxt,

  g_no_check_for_fixed_values(1)  TYPE c,
*                        Kennzeichen, dass Pruefung gegen Festwerte
*                        abgeschaltet werden soll
  g_no_alpha_exit_for_type_n(1)   TYPE c,
*                        Kennzeichen, dass der alpha_exit fuer
*                        numc-Felder abgeschaltetn werden soll

* Feld gibt an, welcher Fb aktiv ist
* 1 = NO_CHECK
* 2 = DB_CHECK
* 3 = ITAB_CHECK
* 4 = USER_CHECK
* 5 = USER_HELP
  kind_of_popup          TYPE c,

* OK-Code Felder
  ok_code(4)             TYPE c,
  ok_code_save(4)        TYPE c,


* Interne Tabelle mit den unterschiedlichen Tabellennamen, für
* die Werte erfragt werden sollen
  BEGIN OF diff_tab OCCURS 10,
    tabname              LIKE dfies-tabname,
    ref                  TYPE c,
    length               TYPE i,
  END OF diff_tab,

* Tabellen für NAMETAB-Informationen
      BEGIN OF fieldtab OCCURS 100.
        INCLUDE STRUCTURE dfies.
DATA: END OF fieldtab,

      BEGIN OF all_fields OCCURS 300.
        INCLUDE STRUCTURE dfies.
DATA: END OF all_fields,

      BEGIN OF key_all_fields,
        tabname   LIKE dfies-tabname,
        fieldname LIKE dfies-fieldname,
      END OF key_all_fields,

* Felder mit Steuerungsinformation für rekursive Aufrufe der Popups
      BEGIN OF swap OCCURS 10,
        time LIKE sy-uzeit,
      END OF swap,
  swap_counter           TYPE i,

* lokale Hilfsfelder, die aus Performance global definiert sind
* h_i1                   TYPE i,                            "*059d
  h_date                 TYPE d,
  h_date_c(8)            TYPE c,                            "B20K052439
  h_time                 TYPE t,
  h_time_c(6)            TYPE c,                            "B20K052439
  h_formname(30)         TYPE c,
  h_keyword              LIKE help_info-keyword,
  h_value1               LIKE zsval-value,
  h_value2               LIKE zsval-value,
  h_flag                 TYPE c,
  h_client_dep           TYPE c,
  h_cur_line             TYPE i VALUE 0,
  h_tabname              LIKE dfies-tabname,
  h_returncode           TYPE c,
  h_domvalue             LIKE dd07l-domvalue_l,
  h_value_found          TYPE c,
  h_no_value_check       TYPE c,
  h_show_popup           TYPE c,

* Konstante Größen
* Der konstante Teil der Popupbreite bestimmt sich aus der Länge des
* Schlüsselworts = 20 + erster freier Spalte = 1 + eine freie Spalte
* zwischen Schlüsselwort und Wert = 1 + letzte freie Spalte incl. Kombo-
* kz. für F4-Hilfe = 2,  macht insgesamt 24. Zur Berechnung der
* tatsächlichen Breite kommt noch die Länge des längsten Ausgabefeldes
* hinzu.
* const_popup_width      type i value 24,
  const_popup_width      TYPE i VALUE 31,  "Platz fuer Icons
* Max. Anzahl von Feldern in einem Popup, wenn mehr Felder anzuzeigen
* sind, muß geblättert werden
  max_fields_in_loop     TYPE i VALUE 10,
  max_lines_for_scroll   TYPE i VALUE 200,                  "*059i
* Max. Ausgabelänge eines Feldes
  max_field_allowed      TYPE i VALUE 255,       "cpl von 79 auf 132
  max_field_visible      TYPE i VALUE 79,        "cpl
* Typ des Funktionsbausteins
  no_check               TYPE c VALUE '1',   "ohne Prüfung
  db_check               TYPE c VALUE '2',   "mit Prüfung gegen DB
  itab_check             TYPE c VALUE '3',   "mit Prüfung gegen ITAB
  user_check             TYPE c VALUE '4',   "mit Userexit-Prüfung
  user_help              TYPE c VALUE '5',   "mit Userexits und -help
  user_buttons           TYPE c VALUE '6',   "mit Userexits,-help,-but.
* Anzeigeattribute für Wertfelder
  norm_inp(02)           TYPE c VALUE ' ',   "Normal, eingabebereit
  bright_inp(02)         TYPE c VALUE '01',  "Hell, eingabebereit
  norm_noinp(02)         TYPE c VALUE '02',  "Normal, nicht eingabeber.
  bright_noinp(02)       TYPE c VALUE '03',  "Hell, nicht eingabeber.
  do_not_show(02)        TYPE c VALUE '04',  "nicht anzeigen
  show_2_dim(02)         TYPE c VALUE '05',  "normal, nicht eingabeber.
                                             "2-dimensional
* Vergleichsoperatoren
  cond_eq(02)            TYPE c VALUE 'EQ',  "Vgl.Operation =
  cond_ne(02)            TYPE c VALUE 'NE',  "Vgl.Operation <>
  cond_nc(02)            TYPE c VALUE 'NC',  "Vgl.Operation nicht prüfen
  cond_lt(02)            TYPE c VALUE 'LT',  "Vgl.Operation <
  cond_le(02)            TYPE c VALUE 'LE',  "Vgl.Operation <=
  cond_gt(02)            TYPE c VALUE 'GT',  "Vgl.Operation >
  cond_ge(02)            TYPE c VALUE 'GE',  "Vgl.Operation >=
* Routinennamenkonstanen für Exits, XYZ wird zur Laufzeit durch den
* Konvertierungsexitnamen ersetzt
  formconst_out(30)      TYPE c VALUE 'CONVERSION_EXIT_XYZ_OUTPUT',
  formconst_inp(30)      TYPE c VALUE 'CONVERSION_EXIT_XYZ_INPUT',
* Synonyme
  c_true                 TYPE xfeld VALUE 'X',              "049i
  yes                    TYPE c     VALUE '1',
  no                     TYPE c     VALUE '0'.

* Hilfspointer
FIELD-SYMBOLS: <h1>, <h2>.



* mk begin  ----------------------------------------------- "B20K043473
** Strukturen/Tabellen fuer Schnittstelle HELP_START         "B20K014551
DATA: BEGIN OF help_infos.                                  "B20K014551
        INCLUDE STRUCTURE help_info.                        "B20K014551
DATA: END OF help_infos.                                    "B20K014551
*DATA: BEGIN OF DYNPSELECT OCCURS 0.                         "B20K014551
*        INCLUDE STRUCTURE DSELC.                            "B20K014551
*DATA: END OF DYNPSELECT.                                    "B20K014551
*DATA: BEGIN OF DYNPVALUETAB OCCURS 0.                       "B20K014551
*        INCLUDE STRUCTURE DVAL.                             "B20K014551
*DATA: END OF DYNPVALUETAB.                                  "B20K014551
* mk end  ------------------------------------------------- "B20K043473

* Parameter fuer DYNP_VALUES_UPDATE
DATA: dyname      LIKE d020s-prog  VALUE 'SAPLSPO4',
      dynpro_no   LIKE d020s-dnum,
      BEGIN OF  dynpfields  OCCURS 1.
        INCLUDE STRUCTURE dynpread.
DATA: END OF dynpfields.

DATA: h_index LIKE sy-tabix.

* Parameter fuer HELP_OBJECT_SHOW_FOR_FIELD                 "B20K043473
DATA: batch_input LIKE help_info-dynprofld                  "B20K043473
                  VALUE 'SVALD-VALUE',                      "B20K043473
      BEGIN OF links OCCURS 0.                              "B20K043473
        INCLUDE STRUCTURE tline.                            "B20K043473
DATA: END OF links.                                         "B20K043473
DATA: h_title LIKE dsyst-doktitle.                          "B20K043473

DATA: update_flag(1) TYPE c.                                "B20K052439

* Eclude-Tabelle für Status dynp_3_4                        "B20K062235
DATA: BEGIN OF exclude OCCURS 10,                           "B20K062235
        func LIKE rsnewleng-fcode,                          "B20K062235
      END OF exclude.                                       "B20K062235

* Hilfsfelder, werden benötigt für F4-Hilfe nach Namensraumverlängerung
DATA: help_fieldname   LIKE help_info-fieldname,            "B20K069688
      help_field_star  TYPE c,
      help_type_single TYPE c.


* INCLUDE LZFUNCGOPD...                      " Local class definition

步骤三:将函数里缺失的FORM以及MODULE按照以下代码补全即可(以下代码均可直接复制粘贴,无需修改任何代码,简单快捷)

首先是ZPOPUP_GET_VALUES_LONG_TEXT函数的源码(可直接复制粘贴)

FUNCTION ZPOPUP_GET_VALUES_LONG_TEXT.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(NO_VALUE_CHECK) DEFAULT SPACE
*"     VALUE(POPUP_TITLE)
*"     VALUE(START_COLUMN) DEFAULT '5'
*"     VALUE(START_ROW) DEFAULT '5'
*"  EXPORTING
*"     VALUE(RETURNCODE)
*"  TABLES
*"      FIELDS STRUCTURE  ZSVAL
*"  EXCEPTIONS
*"      ERROR_IN_FIELDS
*"----------------------------------------------------------------------

  DATA: dummy TYPE c.
***Hilfe
  h_no_value_check = no_value_check.

* prüfen, ob lok. Ged. gesichert werden muß und Sicherungsparameter
* versorgen.
  PERFORM handle_save_data.

  kind_of_popup      = no_check.

* DDIC-Informationen lesen, Ausgabelänge des längsten Feldes für die
* spätere Bestimmung der Größe des Popups berechnenen, FIELDS über-
* prüfen und ggf. Ausnahme erzeugen.
  PERFORM prepare_and_check TABLES fields.

  nr_entries_to_show = quan_entries_100.

* Determine whether we use scroll bars or paging mode in    "*059i
* case too many entries are on the popup.                   "*059i
  PERFORM determine_paging_mode.                            "*059i

* Exclude Tabelle für Status füllen                        "B20K062235
  PERFORM fill_exclude.                                     "B20K062235

* Ok-Icon auf die Drucktaste bringen                       "B20K062235
  CLEAR ok_button_text.                                     "B20K062235
  PERFORM append_icon_to_button USING    icon_okay          "B20K062235
                                         dummy
                                         text-100           "009u cpl
                                CHANGING ok_button_text.    "B20K062235

* Koordinaten des Popups berechnen
  PERFORM comp_coord USING start_column start_row.

  text_title = popup_title.
  index_100  = 1.                                           "*053u
  first_line_100 = 1.                                       "*059i
  PERFORM call_popup.
  IF ok_code_save = 'CANC'.
    returncode = 'A'.
  ELSE.
*    übergebene Tabelle mit Werten füllen
    PERFORM fill_values TABLES fields.
    returncode = space.
  ENDIF.

* prüfen, ob lok. Ged. geholte werden muß und Sicherungsparameter
* versorgen.
  PERFORM handle_restore_data.
  CLEAR h_no_value_check.

ENDFUNCTION.

FORM handle_save_data.
* Die Routine prüft, ob das lokale Gedächtnis zu sichern ist und ruft
* die Sicherung ggf. auf. Außerdem werden die Steuerinformationen zur
* Sicherung versorgt.
*
* INPUT  SWAP_COUNTER             Anzahl bisheriger Aufrufe
*        SWAP                     Tab. mit Ids der bisherigen Aufrufe
* INPUT  SWAP_COUNTER             Anzahl aktueller Aufrufe
*        SWAP                     Tab. mit Ids der aktuellen Aufrufe
*
  IF swap_counter > 0.
    READ TABLE swap INDEX 1.
    PERFORM save_global_date USING swap-time.
  ENDIF.
  swap_counter = swap_counter + 1.
  swap-time    = sy-uzeit.
  INSERT swap INDEX 1.
ENDFORM.                    "HANDLE_SAVE_DATA

FORM save_global_date USING id.
* Die Routine sichert das aktuelle lokale Gedächtnis
*
* INPUT  ID                       Id unter der das lok. Ged. gesichert
*                                 werden soll.
  EXPORT svali
         sval_not
         ifields
         diff_tab
         start_row_100
         start_column_100
         end_row_100
         end_column_100
*        first_time_100                                     "*053d
*        answer_100                                         "*053d
         first_line_100                               "*053d"*059i
         index_100
         quan_entries_100
         gv_use_paging                                      "*059i
*        quan_loops_100                                     "*053d
         nr_entries_to_show
         max_field_length
         cur_field
         cur_line
         cur_offset
         kind_of_popup
         text_title
         int_check_existence
         program_name
         f1_program_name
         f4_program_name
         form_name
         f1_form_name
         f4_form_name
         ok_button_text
         1st_button
         2nd_button
         ok_code_save
         g_no_check_for_fixed_values                              "mk
         g_no_alpha_exit_for_type_n                               "mk
         exclude "2075263

         TO MEMORY ID id.

  program_name    = space.
  f1_program_name = space.
  f4_program_name = space.
  form_name       = space.
  f1_form_name    = space.
  f4_form_name    = space.
  ok_button_text  = space.
  1st_button      = space.
  2nd_button      = space.

ENDFORM.                    "SAVE_GLOBAL_DATE

FORM prepare_and_check TABLES fields STRUCTURE zsval.
* Die Routine bestimmt zu den übergebenen Feldern die DDIC-Informationen
* und bestimmt die Ausgabelänge des längsten Feldes für die spätere
* Bestimmung der Größe des Popups.
* Außerdem werden die übergebenen Felder geprüft und bei Fehlern die
* Ausnahme ERROR_IN_FIELDS mit MESSAGE E... RAISING ... erzeugt.
* Die Prüfung kann aus Performancegründen nicht von der Übernahme der
* Schnittstellenfelder und dem Lesen der DDIC-Information getrennt
* werden.
*
* INPUT  FIELDS                   Schnittstellenfelder
* OUTPUT SVALI                    Steploopzeilen und zus. Infos
*        SVAL_NOT                 nicht anzuzeigende Felder
*        DIFF_TAB                 unterschiedliche Tabellen in Fields
*        QUAN_ENTRIES_100         Anz. Zeilen in SVALI

  DATA:
    tabname_old LIKE dfies-tabname,
    h_intlen    TYPE i,
    h_offset    TYPE i,
    h_i         TYPE i.

  REFRESH diff_tab.
  REFRESH svali.
  tabname_old = space.
  LOOP AT fields.
    IF fields-tabname <> tabname_old.
      tabname_old = fields-tabname.
      READ TABLE diff_tab WITH KEY fields-tabname.
      IF sy-subrc <> 0.
        CLEAR diff_tab.
        diff_tab-tabname = fields-tabname.
        IF fields-comp_tab <> space AND
           ( fields-comp_code = space OR fields-comp_code = 'EQ' ).
          diff_tab-ref = 'X'.
        ENDIF.
        APPEND diff_tab.
      ENDIF.
    ENDIF.

*   prüfen, ob Feld mehrfach angegeben wurde
    key_all_fields-tabname     = fields-tabname.
    key_all_fields-fieldname   = fields-fieldname.
    READ TABLE svali WITH KEY key_all_fields.
    IF sy-subrc = 0.
      MESSAGE e108 WITH fields-fieldname fields-tabname
                        RAISING error_in_fields.
    ENDIF.

    IF kind_of_popup =  db_check OR
       kind_of_popup =  itab_check.
*      prüfen, ob Vergleichsoperator zulässig.
      IF fields-comp_code = space.
        fields-comp_code = cond_eq.
      ELSEIF  fields-comp_code <> cond_eq AND
              fields-comp_code <> cond_ne AND
              fields-comp_code <> cond_nc AND
              fields-comp_code <> cond_lt AND
              fields-comp_code <> cond_le AND
              fields-comp_code <> cond_gt AND
              fields-comp_code <> cond_ge.
        MESSAGE e109 WITH fields-comp_code fields-fieldname
                          fields-tabname
                          RAISING error_in_fields.
      ENDIF.
*      Wenn ein Referenzfeld angegeben wird, dann darf dieses Feld
*      nicht angezeigt werden.
      IF fields-comp_tab <> space AND fields-field_attr <> do_not_show.
        MESSAGE e112 WITH fields-tabname fields-fieldname
                          RAISING error_in_fields.
      ENDIF.
    ENDIF.

    CLEAR svali.
    svali-tabname      =  fields-tabname.
    svali-fieldname    =  fields-fieldname.
    svali-value        =  fields-value.
    IF fields-fieldtext <> space.
      svali-scrtext_m    =  fields-fieldtext.
    ENDIF.

    svali-field_attr   =  fields-field_attr.
    IF fields-field_obl <> space.
      svali-field_obl = 'X'.
    ELSE.
      svali-field_obl = space.
    ENDIF.
    svali-comp_code    =  fields-comp_code.
    svali-comp_tab     =  fields-comp_tab.
    svali-comp_field   =  fields-comp_field.
    svali-novaluehlp   =  fields-novaluehlp.
    APPEND svali.
  ENDLOOP.

  LOOP AT diff_tab.
    IF diff_tab-tabname(1) = '*'.
      h_tabname = diff_tab-tabname+1.
    ELSE.
      h_tabname = diff_tab-tabname.
    ENDIF.
    READ TABLE all_fields WITH KEY h_tabname BINARY SEARCH.
    IF sy-subrc NE 0.
*     NAMETAB für Felder wurde noch nicht gelesen
      DATA: l_tabname TYPE ddobjname.
      MOVE h_tabname TO l_tabname.
      CALL FUNCTION 'DDIF_FIELDINFO_GET'
        EXPORTING
          tabname
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值