最近想更深入学习下classic BADI, 以前没玩过BADI屏幕增强, 所以决定玩一下.

这次的屏幕增强主要用到两个BADI: ME_GUI_PO_CUST和ME_PROCESS_PO_CUST

这两个BADI都是有例子的, 可以在se18那里按GoTo->Sample code->Display来查看, 也可以直接在SE24查看类CL_EXM_IM_ME_GUI_PO_CUST和CL_EXM_IM_ME_PROCESS_PO_CUST

现在我们对PO header加上自己的subscreen, SAP的例子提供的是对item增加subscreen.

Step 1: Create Function Group

仿照Function Group MEPOBADIEX建一个Function Group

我建的Function Group如下图所示

Step 2: 在Function Group里建Screen, screen number随便

在TOP里面加入对应屏幕的变量, 这里我是直接用tables.

Step 3: 给BADI ME_GUI_PO_CUST建一个implementation

在Public Section里加上TYPE-POOLS mmmfd .

Step 4: 在Method IF_EX_ME_GUI_PO_CUST~SUBSCRIBE, 加入custom subscreen的设置代码

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~subscribe.
  2. DATA: lw_subscribers TYPE mepo_subscribers.
  3. * we want to add a customer subscreen on the Header tab
  4. CHECK im_application = 'PO'.
  5. CHECK im_element     = 'HEADER'.
  6. CLEAR lw_subscribers.
  7. lw_subscribers-name = subscreen1.
  8. lw_subscribers-dynpro = '0100'.
  9. lw_subscribers-program = 'SAPLZCI_EKKODB'.
  10. lw_subscribers-struct_name = 'CI_EKKODB'.
  11. lw_subscribers-label = 'Zero test2'.
  12. lw_subscribers-position = 11.
  13. lw_subscribers-height = 8.
  14. APPEND lw_subscribers TO re_subscribers.
  15. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~subscribe.DATA: lw_subscribers TYPE mepo_subscribers.* we want to add a customer subscreen on the Header tabCHECK im_application = 'PO'.CHECK im_element     = 'HEADER'.CLEAR lw_subscribers.lw_subscribers-name = subscreen1.lw_subscribers-dynpro = '0100'.lw_subscribers-program = 'SAPLZCI_EKKODB'.lw_subscribers-struct_name = 'CI_EKKODB'.lw_subscribers-label = 'Zero test2'.lw_subscribers-position = 11.lw_subscribers-height = 8.APPEND lw_subscribers TO re_subscribers.
ENDMETHOD.

Step 5: 在IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS, 加入代码, 使field name和它的数字编号关联起来

[plain] view plaincopyprint?
  1. FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.
  2. LOOP AT ch_mapping ASSIGNING <mapping>.
  3. CASE <mapping>-fieldname.
  4. WHEN 'LV_TEST1'. <mapping>-metafield = mmmfd_cust_01.
  5. WHEN 'LV_TEST2'. <mapping>-metafield = mmmfd_cust_02.
  6. WHEN 'LV_TEST3'. <mapping>-metafield = mmmfd_cust_03.
  7. ENDCASE.
  8. ENDLOOP.
  FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.LOOP AT ch_mapping ASSIGNING <mapping>.CASE <mapping>-fieldname.WHEN 'LV_TEST1'. <mapping>-metafield = mmmfd_cust_01.WHEN 'LV_TEST2'. <mapping>-metafield = mmmfd_cust_02.WHEN 'LV_TEST3'. <mapping>-metafield = mmmfd_cust_03.ENDCASE.ENDLOOP.

Custom的field估计只能加9个, 因为我在TYPE-POOLS mmmfd看到最大的是mmfd_cust_09,

这里也可以把一些standard field弄到custom subscreen上.

经过以上五步, 我们可以在ME23N看到custom subscreen, 但在ME21N和ME22N依然是看不到的...这个是为什么, 我还搞不清楚.

Step 6: 给BADI ME_PROCESS_PO_CUST建一个implementation

在Public Section加入TYPE-POOLS mmmfd .

Step 7: 在Method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER加入代码, 改变表ch_fieldselection的field status

'-'代表hidden, '+'或'.'表示editable, '*'代表display

[plain] view plaincopyprint?
  1. METHOD if_ex_me_process_po_cust~fieldselection_header.
  2. DATA: lv_persistent TYPE mmpur_bool.
  3. FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.
  4. DEFINE set_input.
  5. read table ch_fieldselection assigning <fs> with table key metafield = &1.
  6. if sy-subrc = 0.
  7. if im_header->is_changeable( ) = mmpur_yes.
  8. <fs>-fieldstatus = '+'.
  9. else.
  10. <fs>-fieldstatus = '*'.
  11. endif.
  12. endif.
  13. END-OF-DEFINITION.
  14. * if the item is already on the database, we disallow to change field badi_bsgru
  15. lv_persistent = im_header->is_persistent( ).
  16. set_input mmmfd_cust_01.
  17. set_input mmmfd_cust_02.
  18. set_input mmmfd_cust_03.
  19. ENDMETHOD.
METHOD if_ex_me_process_po_cust~fieldselection_header.DATA: lv_persistent TYPE mmpur_bool.FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.DEFINE set_input.read table ch_fieldselection assigning <fs> with table key metafield = &1.if sy-subrc = 0.if im_header->is_changeable( ) = mmpur_yes.<fs>-fieldstatus = '+'.else.<fs>-fieldstatus = '*'.endif.endif.END-OF-DEFINITION.* if the item is already on the database, we disallow to change field badi_bsgrulv_persistent = im_header->is_persistent( ).set_input mmmfd_cust_01.set_input mmmfd_cust_02.set_input mmmfd_cust_03.ENDMETHOD.

这里有两点注意下:

1. im_header->is_changeable()可以判断当前这些field是不是处于可编辑状态, 如果是则为'X'. 比如刚进TCODE ME21N, ME22N它们是可编辑的, 但当按save保存成功后, 它们暂时是不可以编辑的, 要再按把它改回编辑状态才可以编辑,这里就实现了这个功能.

2. im_header->is_persistent()可以判断当这些field在数据库里有值了, 它就是'X', 当我们把数据写进表里就不想它被修改时, 可以用这个来判断, 比如把某个field设置成ME21N可编辑, ME22N不可编辑.

经过这七步, ME21N/ME22N/ME23N都可以看到这个custom subscreen, 但所有自建field都是可编辑状态, 必需做完第八步, 才能正常显示

Step 8: 在screen中调用2个module

这两个module存放在下图的程序里

注意: 如果不调用这两个module, BADI ME_GUI_PO_CUST下面的4个method都不会触发

TRANSPORT_FROM_MODEL
TRANSPORT_TO_DYNP
TRANSPORT_FROM_DYNP
TRANSPORT_TO_MODEL

Step 9: 在Method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL加入代码

把header的三个自建field传到attribute dynp_data_pho里

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~transport_from_model.
  2. DATA:     lw_header       TYPE REF TO if_purchase_order_mm,
  3. lw_mepoheader   TYPE mepoheader,
  4. lw_customer     TYPE ci_ekkodb.
  5. *--------------------------------------------------------------------*
  6. * system asks to transport data from the business logic into the view
  7. *--------------------------------------------------------------------*
  8. IF im_name = subscreen1.
  9. * is it an Header? im_model can be header or item.
  10. mmpur_dynamic_cast lw_header im_model.
  11. CHECK NOT lw_header IS INITIAL.
  12. * transport standard fields
  13. lw_mepoheader = lw_header->get_data( ).
  14. * store info for later use
  15. MOVE-CORRESPONDING lw_mepoheader TO dynp_data_pbo.
  16. ENDIF.
  17. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~transport_from_model.DATA:     lw_header       TYPE REF TO if_purchase_order_mm,lw_mepoheader   TYPE mepoheader,lw_customer     TYPE ci_ekkodb.
*--------------------------------------------------------------------*
* system asks to transport data from the business logic into the view
*--------------------------------------------------------------------*IF im_name = subscreen1.
* is it an Header? im_model can be header or item.mmpur_dynamic_cast lw_header im_model.CHECK NOT lw_header IS INITIAL.
* transport standard fieldslw_mepoheader = lw_header->get_data( ).
* store info for later useMOVE-CORRESPONDING lw_mepoheader TO dynp_data_pbo.ENDIF.ENDMETHOD.

Step 10: 在Method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP加入代码

通过调用FM:ZCI_EKKODB_PUSH 把attribute

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~transport_to_dynp.
  2. IF im_name = subscreen1.
  3. CALL FUNCTION 'ZCI_EKKODB_PUSH'
  4. EXPORTING
  5. im_dynp_data = dynp_data_pbo.
  6. ENDIF.
  7. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~transport_to_dynp.IF im_name = subscreen1.CALL FUNCTION 'ZCI_EKKODB_PUSH'EXPORTINGim_dynp_data = dynp_data_pbo.ENDIF.
ENDMETHOD.

Step 11: 在IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP加入代码

PAI事件时, 把屏幕的值传到attribute dynp_data_pai, 并且比较dynp_data_pbo和dynp_data_pai, 确定自建field的值有所改变, 把re_changed置为'X', 这样IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER就会触发.

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~transport_from_dynp.
  2. IF im_name = subscreen1.
  3. CALL FUNCTION 'ZCI_EKKODB_POP'
  4. IMPORTING
  5. ex_dynp_data = dynp_data_pai.
  6. ENDIF.
  7. IF dynp_data_pai <> dynp_data_pbo.
  8. * something has changed therefor we have to notify the framework
  9. * to transport data to the model
  10. re_changed = mmpur_yes.
  11. ENDIF.
  12. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~transport_from_dynp.IF im_name = subscreen1.CALL FUNCTION 'ZCI_EKKODB_POP'IMPORTINGex_dynp_data = dynp_data_pai.ENDIF.IF dynp_data_pai <> dynp_data_pbo.
* something has changed therefor we have to notify the framework
* to transport data to the modelre_changed = mmpur_yes.ENDIF.
ENDMETHOD.

Step 12: 在IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL加入代码, 把修改后的数据传到bussiness object里

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~transport_to_model.
  2. DATA: lw_header            TYPE REF TO if_purchase_order_mm,
  3. lw_mepoheader        TYPE mepoheader,
  4. lw_customer          TYPE ci_ekkodb,
  5. lw_po_header_handle  TYPE REF TO cl_po_header_handle_mm.
  6. *--------------------------------------------------------------------*
  7. * data have to be transported to business logic
  8. *--------------------------------------------------------------------*
  9. IF im_name = subscreen1.
  10. * is it an item? im_model can be header or item.
  11. mmpur_dynamic_cast lw_header im_model.
  12. CHECK NOT lw_header IS INITIAL.
  13. lw_mepoheader = lw_header->get_data( ).
  14. * standard fields changed?
  15. IF dynp_data_pbo-lv_test1 <> dynp_data_pai-lv_test1
  16. OR dynp_data_pbo-lv_test2 <> dynp_data_pai-lv_test2
  17. OR dynp_data_pbo-lv_test3 <> dynp_data_pai-lv_test3.
  18. * update standard fields
  19. lw_mepoheader-lv_test1 = dynp_data_pai-lv_test1.
  20. lw_mepoheader-lv_test2 = dynp_data_pai-lv_test2.
  21. lw_mepoheader-lv_test3 = dynp_data_pai-lv_test3.
  22. CALL METHOD lw_header->set_data
  23. EXPORTING
  24. im_data = lw_mepoheader.
  25. ENDIF.
  26. ENDIF.
  27. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~transport_to_model.DATA: lw_header            TYPE REF TO if_purchase_order_mm,lw_mepoheader        TYPE mepoheader,lw_customer          TYPE ci_ekkodb,lw_po_header_handle  TYPE REF TO cl_po_header_handle_mm.
*--------------------------------------------------------------------*
* data have to be transported to business logic
*--------------------------------------------------------------------*IF im_name = subscreen1.* is it an item? im_model can be header or item.mmpur_dynamic_cast lw_header im_model.CHECK NOT lw_header IS INITIAL.lw_mepoheader = lw_header->get_data( ).
* standard fields changed?IF dynp_data_pbo-lv_test1 <> dynp_data_pai-lv_test1OR dynp_data_pbo-lv_test2 <> dynp_data_pai-lv_test2OR dynp_data_pbo-lv_test3 <> dynp_data_pai-lv_test3.
* update standard fieldslw_mepoheader-lv_test1 = dynp_data_pai-lv_test1.lw_mepoheader-lv_test2 = dynp_data_pai-lv_test2.lw_mepoheader-lv_test3 = dynp_data_pai-lv_test3.CALL METHOD lw_header->set_dataEXPORTINGim_data = lw_mepoheader.ENDIF.ENDIF.
ENDMETHOD.

Step 13: 如果要check这些field的值的话, 可以写在IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER, 这里我要check field1必须是PALM.

[plain] view plaincopyprint?
  1. METHOD if_ex_me_process_po_cust~process_header.
  2. DATA: lw_mepoheader TYPE mepoheader,
  3. lw_customer TYPE ci_ekkodb.
  4. DATA: lv_testflag TYPE c.
  5. INCLUDE mm_messages_mac. "useful macros for message handling
  6. lw_mepoheader = im_header->get_data( ).
  7. IF lw_mepoheader-lv_test1 <> 'PALM'.
  8. * Place the cursor onto field lv_test1. The metafield was defined in BAdI ME_GUI_PO_CUST,
  9. * Method MAP_DYNPRO_FIELDS.
  10. mmpur_metafield mmmfd_cust_01.
  11. mmpur_message_forced 'E' 'ZDEV001' '999' '' '' '' ''.
  12. *    MESSAGE 'This field should be filled ''PALM''' TYPE 'W'.
  13. *    CLEAR lv_testflag.
  14. *    lv_testflag = 'X'.
  15. *    EXPORT lv_testflag FROM lv_testflag TO MEMORY ID 'Z_ZERO_ME22N'.
  16. * invalidate the object
  17. CALL METHOD im_header->invalidate( ).
  18. ENDIF.
  19. ENDMETHOD.
METHOD if_ex_me_process_po_cust~process_header.DATA: lw_mepoheader TYPE mepoheader,lw_customer TYPE ci_ekkodb.DATA: lv_testflag TYPE c.INCLUDE mm_messages_mac. "useful macros for message handlinglw_mepoheader = im_header->get_data( ).IF lw_mepoheader-lv_test1 <> 'PALM'.
* Place the cursor onto field lv_test1. The metafield was defined in BAdI ME_GUI_PO_CUST,
* Method MAP_DYNPRO_FIELDS.mmpur_metafield mmmfd_cust_01.mmpur_message_forced 'E' 'ZDEV001' '999' '' '' '' ''.
*    MESSAGE 'This field should be filled ''PALM''' TYPE 'W'.*    CLEAR lv_testflag.
*    lv_testflag = 'X'.
*    EXPORT lv_testflag FROM lv_testflag TO MEMORY ID 'Z_ZERO_ME22N'.* invalidate the objectCALL METHOD im_header->invalidate( ).ENDIF.ENDMETHOD.

如果按回车来check的话, 它会显示error message,一次改变后按一次回车有反应, 第二次就没反应.


这里有一个缺陷, 当我们按save里, 这条message是不会显示到message表中的(研究了很久, 没研究出来怎么搞), 幸好这里有个功能十分不错, 选中PO header data still faulty这个message, 按Edit, 就可以定位到error message的field.

至此, 增强完成.

补充:

1. IF_EX_ME_PROCESS_PO_CUST~INITIALIZE: initialize function groupZCI_EKKODB的变量语句可以写在这.

[plain] view plaincopyprint?
  1. METHOD if_ex_me_process_po_cust~initialize.
  2. CALL FUNCTION 'ZCI_EKKODB_INIT'
  3. .
  4. ENDMETHOD.
METHOD if_ex_me_process_po_cust~initialize.CALL FUNCTION 'ZCI_EKKODB_INIT'.
ENDMETHOD.

2. IF_EX_ME_PROCESS_PO_CUST~OPEN: 如果要select自建表的东西可以写在这里, 这里有个field IM_TRTYP有一定的控制作用, 具体可以查看它的domain值.

3. IF_EX_ME_PROCESS_PO_CUST~POST: update自建表的语句可以写在这里.

4. Custom subscreen的field必须引用method IF_EX_ME_GUI_PO_CUST~SUBSCRIBE里的定义的那个structure, from dict要勾上.

5. 如果有自建表里面的field, 必须在method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL判断自建表的field改变时, 加上语句CALL METHOD lw_header->set_changed( ), 不这样的话, 你的自建表的field怎么变在保存时都会提示No data changed. 下面代码是例子.

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~transport_to_model.
  2. DATA: lw_header            TYPE REF TO if_purchase_order_mm,
  3. lw_mepoheader        TYPE mepoheader,
  4. lw_customer          TYPE ci_ekkodb,
  5. lw_po_header_handle  TYPE REF TO cl_po_header_handle_mm.
  6. *--------------------------------------------------------------------*
  7. * data have to be transported to business logic
  8. *--------------------------------------------------------------------*
  9. IF im_name = subscreen1.
  10. * is it an item? im_model can be header or item.
  11. mmpur_dynamic_cast lw_header im_model.
  12. CHECK NOT lw_header IS INITIAL.
  13. lw_mepoheader = lw_header->get_data( ).
  14. * standard fields changed?
  15. IF dynp_data_pbo-lv_test1 <> dynp_data_pai-lv_test1
  16. OR dynp_data_pbo-lv_test2 <> dynp_data_pai-lv_test2
  17. OR dynp_data_pbo-lv_test3 <> dynp_data_pai-lv_test3.
  18. * update standard fields
  19. lw_mepoheader-lv_test1 = dynp_data_pai-lv_test1.
  20. lw_mepoheader-lv_test2 = dynp_data_pai-lv_test2.
  21. lw_mepoheader-lv_test3 = dynp_data_pai-lv_test3.
  22. CALL METHOD lw_header->set_data
  23. EXPORTING
  24. im_data = lw_mepoheader.
  25. ENDIF.
  26. IF dynp_data_pbo-zdamon <> dynp_data_pai-zdamon.
  27. CALL FUNCTION 'ZCI_EKKODB_SET_DATA'
  28. EXPORTING
  29. im_damon = dynp_data_pai-zdamon.
  30. CALL METHOD lw_header->set_changed( ).
  31. ENDIF.
  32. ENDIF.
  33. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~transport_to_model.DATA: lw_header            TYPE REF TO if_purchase_order_mm,lw_mepoheader        TYPE mepoheader,lw_customer          TYPE ci_ekkodb,lw_po_header_handle  TYPE REF TO cl_po_header_handle_mm.
*--------------------------------------------------------------------*
* data have to be transported to business logic
*--------------------------------------------------------------------*IF im_name = subscreen1.* is it an item? im_model can be header or item.mmpur_dynamic_cast lw_header im_model.CHECK NOT lw_header IS INITIAL.lw_mepoheader = lw_header->get_data( ).
* standard fields changed?IF dynp_data_pbo-lv_test1 <> dynp_data_pai-lv_test1OR dynp_data_pbo-lv_test2 <> dynp_data_pai-lv_test2OR dynp_data_pbo-lv_test3 <> dynp_data_pai-lv_test3.
* update standard fieldslw_mepoheader-lv_test1 = dynp_data_pai-lv_test1.lw_mepoheader-lv_test2 = dynp_data_pai-lv_test2.lw_mepoheader-lv_test3 = dynp_data_pai-lv_test3.CALL METHOD lw_header->set_dataEXPORTINGim_data = lw_mepoheader.ENDIF.IF dynp_data_pbo-zdamon <> dynp_data_pai-zdamon.CALL FUNCTION 'ZCI_EKKODB_SET_DATA'EXPORTINGim_damon = dynp_data_pai-zdamon.CALL METHOD lw_header->set_changed( ).ENDIF.ENDIF.
ENDMETHOD.

6.Method IF_EX_ME_GUI_PO_CUST~EXECUTE可以处理function code.

[plain] view plaincopyprint?
  1. METHOD if_ex_me_gui_po_cust~execute.
  2. IF im_fcode = 'ZZZZ'.
  3. MESSAGE 'Zero test' TYPE 'I'.
  4. ENDIF.
  5. ENDMETHOD.
METHOD if_ex_me_gui_po_cust~execute.IF im_fcode = 'ZZZZ'.MESSAGE 'Zero test' TYPE 'I'.ENDIF.
ENDMETHOD.

ME21N/ME22N/ME23N屏幕增强BADI ME_GUI_PO_CUST相关推荐

  1. SAP ABAP QA11屏幕增强 BADI QEVA_SUBSCREEN_1101

    QA11屏幕增强: 效果图: BADI: QEVA_SUBSCREEN_1101 SE11添加客制化字段:QALS或者决策表. 创建自定义函数组,添加屏幕信息: 全局定义: FUNCTION-POOL ...

  2. ME21N,ME22N,ME23N之BADI增强ME_PROCESS_PO_CUST

    一.需求背景:采购订单创建.修改时,根据所选订单类型不同,给抬头附加数据里的字段赋默认值.如下图所示: 二.实现方式:实现的方式可以有很多种,这里讲一下用BADI增强ME_PROCESS_PO_CUS ...

  3. SAP 采购订单抬头屏幕增强(ME21N/ME22N/ME23N)

    转载自:http://blog.sina.com.cn/s/blog_778401470101efep.html 内容摘要:为采购订单增加一个页标签,在其中放入客户自定义字段,1. CMOD增强接口: ...

  4. SAP 采购订单行项目屏幕增强(BADI)

    导语:前面写了一个采购订单抬头增强,用SMOD的方式实现的

  5. SAP采购订单抬头、行项目屏幕增强的两种方法

    对SAP系统中采购订单抬头进行屏幕增强,在抬头上增加了几个customer fields,但是实现方法有点怪,是一个Z report程序,其下创建了一个屏幕,屏幕中放的就是这几个customer fi ...

  6. 【转】SAP采购订单屏幕增强

    为采购订单增加一个页标签,在其中放入客户自定义字段, 1. CMOD 增强接口: MM06E005 EXIT_SAPMM06E_006 为子屏幕参数传入出口(抬头) EXIT_SAPMM06E_008 ...

  7. SAP 采购订单抬头屏幕增强

    内容摘要:为采购订单增加一个页标签,在其中放入客户自定义字段,1. CMOD增强接口:MM06E005 EXIT_SAPMM06E_006 为子屏幕参数传入出口(抬头)EXIT_SAPMM06E_00 ...

  8. ABAP 交货单屏幕增强

    需求描述: 在内向交货单(VL31N / VL32N / VL33N) 与外向交货单(VL01N / VL02N / VL03N) 的抬头和行项目增加"自定义字段"页签,如下图所示 ...

  9. ABAP ME21N屏幕增强

    ME21N屏幕增强 XM06函数组 加屏幕 ZXM06ZZZ

  10. 供应商主数据屏幕增强

    场景:给供应商主数据增加分个按钮,实现自定义的其他的客制化数据如下截图,需要的BADI增强: VENDOR_ADD_DATA_CS 和  VENDOR_ADD_DATA 步骤如下: 1.在LFA1增加 ...

最新文章

  1. 漫画:禅道程序员的一天
  2. 如果不知道MySQL当前使用配置文件(my.cnf)的路径的解决方法
  3. EIGRP的AD(管理距离)、AD(宣告距离)、FD(可行距离)
  4. 32位机器下面各类型的取值范围(sizeof值)
  5. 在线自动下载最新版本jquery
  6. 【HDU - 4786 】Fibonacci Tree (最小生成树变形,上下界贪心,tricks)
  7. 集群、分布式、微服务概念和区别
  8. 常用计算机检索技术的例子,专业检索常用方法及应用实例
  9. EditText常用属性总结
  10. 计算机应用技术参加文献,面向科技文献的机器翻译(4)-计算机应用技术专业毕业论文.docx...
  11. Python爬虫实战源码合集(持续更新)
  12. Android动画居然还能这么写
  13. 漏洞复现|CVE-2021-40444(Microsoft MSHTML 远程代码执行漏洞)
  14. python电影系统管理-Python 爬取电影网站的信息【如有重复请管理删帖】
  15. xp如何开启系统打印服务器配置,XP系统设置打印机共享的方法有哪些
  16. 华为服务器如何登录修改密码,服务器登录修改密码
  17. matlab神经网络43个案例PDF,matlab神经网络预测模型
  18. 【智能制造】李培根院士:2017-2018中国制造业及智能制造十大热点
  19. WLAN学习小笔记-WAC旁挂三层组网直接转发示例配置
  20. 音频文件格式转换 转为 wav格式

热门文章

  1. 网络安全中常见的攻击方式
  2. 小米(MUUI)备份文件使用MT管理器打开
  3. ureport2报错/by zero的解决方法
  4. 杀毒软件工作原理 及 现在主要杀毒技术
  5. KIS迷你版软件用户常见问题
  6. 有钱任性的农夫山泉,被迫踏上IPO?
  7. 《江村经济》读书摘记
  8. mysql sphinx_Sphinx的安装和使用(仅学习)
  9. 迅雷后门 迅雷签名可疑文件 请大家关注 内部邮件大爆料 过全部杀毒软件
  10. 对你快速了解恶意软件以及病毒和反病毒