前面写的FPM都是自己练习用的。直到自己正式用了一个,才发现一些小问题。feeder class写在一起和分开写有好有坏,这里就不说了。

自己做了个小的查询报表如下:

现在来按SAP官方的做法来重新做练习。

一.整体结构:

1.search  structure,feeder class,search event process

2.list structure,feeder class

3.Application Controller CLass

这是双主表查询,而且表名较长,沿用了前面练习里的转换模式,所以代码看起来繁琐些。

二:具体实施:

1.查询结构:

结果结构:

Controller的Feeder class:添加接口类,并激活下面的方法。

Search 的Feeder class:添加接口类,并激活下面的方法。

LIST的Feeder class:添加接口类,激活方法。

Search的Feeder class实现:

  METHOD if_fpm_guibb_search~get_definition.
DATA:gt_field TYPE TABLE OF fpmgb_s_searchfield_descr,
gw_field TYPE fpmgb_s_searchfield_descr,
gt_value TYPE fpmgb_t_namevalue,
gw_value TYPE fpmgb_s_namevalue. DEFINE setv.
gw_value-value = &.
gw_value-name = &.
APPEND gw_value TO gt_value.
END-OF-DEFINITION. eo_field_catalog_attr ?= cl_abap_structdescr=>describe_by_name( 'ZCRMJP002' ).
"品牌下拉
gw_field-name = 'ZZZBRAND'.
SELECT line_key AS value value1 AS name INTO CORRESPONDING FIELDS OF TABLE gt_value FROM zcrmt_domain_t WHERE tab_name = 'ZTVS_BRAND' AND spras = sy-langu.
gw_field-enumeration[] = gt_value[].
gw_field-is_of_type = 'EN'.
APPEND gw_field TO et_field_description_attr. "inprogress 下拉
CLEAR:gt_value[],gw_field.
gw_field-name = 'ZZDLYRSN'.
SELECT estat AS value text AS name INTO CORRESPONDING FIELDS OF TABLE gt_value FROM zdelay_reason WHERE spras = 'J'."sy-langu.
gw_field-enumeration[] = gt_value[].
gw_field-is_of_type = 'EN'.
APPEND gw_field TO et_field_description_attr. "inprogress 下拉
CLEAR:gt_value[],gw_field.
gw_field-name = 'DATE_RANGE'.
setv 'D+0' 'D+0 今日'.
setv 'D-1' 'D-1 昨日'.
setv 'M+0' 'M+0 今月'.
setv 'M-1' 'M-1 先月'.
* setv 'W+0' 'W+0 今週'.
* setv 'W-1' 'W-1 先週'.
setv 'Y+0' 'Y+0 今年'.
setv 'Y-1' 'Y-1 去年'.
gw_field-enumeration[] = gt_value[].
gw_field-max_1_value = 'X'.
gw_field-is_of_type = 'EN'.
APPEND gw_field TO et_field_description_attr. "CHARG TYPE 下拉
CLEAR:gt_value[],gw_field.
gw_field-name = 'ZZCHARG_TYPE'.
SELECT line_key AS value value1 AS name INTO CORRESPONDING FIELDS OF TABLE gt_value
FROM zcrmt_domain_t WHERE spras = 'J'"sy-langu.
AND tab_name = 'ZJP_REPAIR_CHARGETPYE'.
gw_field-enumeration[] = gt_value[].
gw_field-is_of_type = 'EN'.
APPEND gw_field TO et_field_description_attr. "Process Type 下拉
CLEAR:gt_value[],gw_field.
gw_field-name = 'PROCESS_TYPE'.
SELECT process_type AS value p_description_20 AS name INTO CORRESPONDING FIELDS OF TABLE gt_value FROM crmc_proc_type_t WHERE langu = sy-langu
AND ( process_type BETWEEN 'ZSV1' AND 'ZSV4' OR process_type EQ 'ZWO3' OR process_type EQ 'ZWO4' ).
gw_field-enumeration[] = gt_value[].
gw_field-ddic_shlp_name = 'ZCRM_PROCESS_TYPE'.
gw_field-is_of_type = 'EN'.
APPEND gw_field TO et_field_description_attr.
ENDMETHOD.
  METHOD if_fpm_guibb_search~process_event.
DATA:lr_fpm TYPE REF TO if_fpm,
lr_event_data TYPE REF TO cl_fpm_parameter. IF io_event->mv_event_id = if_fpm_guibb_search=>fpm_execute_search.
"取当前FPM对象实例
lr_fpm = cl_fpm_factory=>get_instance( ).
"创建FPM传输参数对象
CREATE OBJECT lr_event_data.
"将查询条件信息赋值到参数对象
lr_event_data->if_fpm_parameter~set_value(
iv_key = 'SEL_TAB'
iv_value = it_fpm_search_criteria ). lr_event_data->if_fpm_parameter~set_value(
iv_key = 'MAX_NUM'
iv_value = iv_max_num_results ).
"数据抛转
lr_fpm->raise_event_by_id(
iv_event_id = if_fpm_guibb_list=>gc_event_list_filter
io_event_data = lr_event_data ). ENDIF.
ENDMETHOD.

LIST的Feeder Class处理:

定义结构表:

  METHOD if_fpm_guibb_list~get_data.
IF iv_eventid->mv_event_id = if_fpm_guibb_list=>gc_event_list_filter.
ct_data = gt_result.
ev_data_changed = abap_true.
ENDIF.
ENDMETHOD.
  METHOD if_fpm_guibb_list~get_definition.
DATA:gt_table TYPE TABLE OF zcrmjp003.
DATA:gw_field TYPE fpmgb_s_listfield_descr,
gt_value TYPE wdr_context_attr_value_list,
gt_dd03l TYPE TABLE OF dd03l,
gw_dd03l LIKE LINE OF gt_dd03l.
eo_field_catalog ?= cl_abap_tabledescr=>describe_by_data( gt_table ). SELECT * INTO TABLE gt_dd03l FROM dd03l WHERE tabname = 'ZCRMJP003' AND inttype = 'C'.
LOOP AT gt_dd03l INTO gw_dd03l.
gw_field-name = gw_dd03l-fieldname.
gw_field-allow_sort = 'X'.
gw_field-allow_filter = 'X'.
APPEND gw_field TO et_field_description.
ENDLOOP.
ENDMETHOD.
  METHOD if_fpm_guibb_list~process_event.
DATA:lt_fpm_search TYPE fpmgb_t_search_criteria,
lv_max TYPE i,
ls_rsds TYPE rsdsselopt.
TYPES:BEGIN OF ty_part,
guid_hi TYPE crmt_object_guid,
addr_nr TYPE ad_addrnum,
addr_type TYPE ad_adrtype,
partner_fct TYPE crmt_partner_fct,
END OF ty_part,
BEGIN OF ty_adrc,
addrnumber TYPE ad_addrnum,
name1 TYPE ad_name1,
smtp_addr TYPE ad_smtpadr,
tel_number TYPE ad_tlnmbr1,
street TYPE ad_street,
str_suppl1 TYPE ad_strspp1,
str_suppl2 TYPE ad_strspp2,
post_code1 TYPE ad_pstcd1,
city1 TYPE ad_city1,
region TYPE regio,
END OF ty_adrc,
BEGIN OF ty_type,
process_type TYPE crmt_process_type,
p_description_20 TYPE crmt_description_20,
user_stat_proc TYPE j_stsma,
END OF ty_type,
BEGIN OF ty_zso1,
object_id TYPE crmt_object_id,
zzrepchg_type TYPE zsrve_repchg_type,
ref_object_id TYPE crmt_object_id,
END OF ty_zso1,
BEGIN OF ty_item,
guid TYPE crmt_object_guid,
header TYPE crmt_object_guid,
zzzsp_price TYPE zadtel000072,
zzafld00001f TYPE zadtel000073,
quantity TYPE crmt_schedlin_quan,
END OF ty_item,
BEGIN OF ty_head,
guid TYPE crmt_object_guid,
zzafld000005 TYPE zadtel000018,
zzfld00000j TYPE zdtel00003p,
zzfld00000k TYPE zdtel00003q,
zzafld00001c TYPE zadtel000081,
END OF ty_head.
DATA:lt_where TYPE rsds_where_tab,
ls_where LIKE LINE OF lt_where,
vt_where TYPE rsds_where_tab.
DATA:lt_order TYPE TABLE OF zcrmjp003,
ls_order TYPE zcrmjp003.
DATA:lc_para TYPE REF TO cl_fpm_parameter.
DATA:ls_value TYPE string,
rt_zzafld000005 TYPE RANGE OF zadtel000018,
rs_zzafld000005 LIKE LINE OF rt_zzafld000005,
rt_zzztransaid TYPE RANGE OF ztransaid,
rs_zzztransaid LIKE LINE OF rt_zzztransaid,
gt_search_index TYPE fpmgb_t_search_criteria,
gw_search LIKE LINE OF gt_search_index,
gt_search_head TYPE fpmgb_t_search_criteria,
gt_protype TYPE TABLE OF crmc_proc_type_t,
gw_protype TYPE crmc_proc_type_t,
gt_part TYPE TABLE OF ty_part,
vt_part TYPE TABLE OF ty_part,
gw_part LIKE LINE OF gt_part,
gt_adrc TYPE TABLE OF ty_adrc,
gw_adrc LIKE LINE OF gt_adrc,
gt_type TYPE TABLE OF ty_type,
gw_type LIKE LINE OF gt_type,
gt_tj30t TYPE TABLE OF tj30t,
gw_tj30t LIKE LINE OF gt_tj30t,
gt_zso1 TYPE TABLE OF ty_zso1,
gw_zso1 LIKE LINE OF gt_zso1,
gt_zcrmt0046 TYPE TABLE OF zcrmt0046,
gw_zcrmt0046 LIKE LINE OF gt_zcrmt0046,
gt_head TYPE TABLE OF ty_head,
gw_head LIKE LINE OF gt_head,
gt_item TYPE TABLE OF ty_item,
gw_item LIKE LINE OF gt_item,
gt_domain TYPE TABLE OF zcrmt_domain_t,
gw_domain TYPE zcrmt_domain_t,
v_e0075 TYPE datum,
v_e0080 TYPE datum,
v_ss TYPE string,
v_ll TYPE string,
v_flag TYPE c,
gv_index TYPE i. DATA:ls_result TYPE zcrmjp003. IF io_event->mv_event_id = if_fpm_guibb_list=>gc_event_list_filter. io_event->mo_event_data->get_value(
EXPORTING iv_key = 'SEL_TAB'
IMPORTING ev_value = lt_fpm_search ). io_event->mo_event_data->get_value(
EXPORTING iv_key = 'MAX_NUM'
IMPORTING ev_value = lv_max ). REFRESH:gt_result.
gt_search_index[] = lt_fpm_search[]."转移查询条件,待处理.
LOOP AT gt_search_index INTO gw_search.
gv_index = sy-tabix.
IF gw_search-search_attribute = 'ZNOT_CHARGED' AND gw_search-low IS NOT INITIAL.
v_flag = 'X'.
DELETE gt_search_index INDEX gv_index.
ENDIF.
IF gw_search-search_attribute = 'ZZAFLD000005' OR gw_search-search_attribute = 'ZZZTRANSAID'
OR gw_search-search_attribute = 'ZZCANSHIP'.
APPEND gw_search TO gt_search_head.
DELETE gt_search_index INDEX gv_index.
ENDIF.
IF gw_search-search_attribute = 'DATE_RANGE'."时间周期
DATA:v_date TYPE datum.
DELETE gt_search_index INDEX gv_index.
gw_search-search_attribute = 'POSTING_DATE'.
IF gw_search-low = 'D+0'."今天
gw_search-low = sy-datlo.
ELSEIF gw_search-low = 'D-0'."昨天
gw_search-low = sy-datlo - .
ELSEIF gw_search-low = 'M+0'."当月
gw_search-low = sy-datlo+() && ''.
gw_search-high = sy-datlo.
gw_search-operator = .
ELSEIF gw_search-low = 'M-1'."上月
v_date = sy-datlo+() && ''."当月1号
v_date = v_date - ."上月底
gw_search-low = sy-datlo+() && ''.
gw_search-high = v_date.
gw_search-operator = .
ELSEIF gw_search-low = 'Y+0'."今年
gw_search-low = sy-datlo+() && ''.
gw_search-high = sy-datlo+() && ''.
gw_search-operator = .
ELSEIF gw_search-low = 'Y+-1'."去年
v_date = sy-datlo+() && ''."今年1号
v_date = v_date - ."去年年底
gw_search-low = v_date+() && ''.
gw_search-high = v_date.
gw_search-operator = .
ENDIF.
APPEND gw_search TO gt_search_index.
ENDIF.
ENDLOOP.
IF gt_search_index[] IS NOT INITIAL.
TRY .
CALL METHOD cl_fpm_guibb_search_conversion=>to_abap_select_where_tab
EXPORTING
it_fpm_search_criteria = gt_search_index
iv_table_name = 'ZHSB_ORDER_INDEX'
* io_field_catalog = mo_catalog
IMPORTING
et_abap_select_table = lt_where.
CATCH cx_fpmgb.
ENDTRY.
APPEND LINES OF lt_where TO vt_where.REFRESH:lt_where.
ENDIF.
IF gt_search_head[] IS NOT INITIAL.
TRY .
CALL METHOD cl_fpm_guibb_search_conversion=>to_abap_select_where_tab
EXPORTING
it_fpm_search_criteria = gt_search_head
iv_table_name = 'CRMD_ORDERADM_H'
* io_field_catalog = mo_catalog
IMPORTING
et_abap_select_table = lt_where.
CATCH cx_fpmgb.
ENDTRY.
IF vt_where IS NOT INITIAL.
APPEND 'AND' TO vt_where.
ENDIF.
APPEND LINES OF lt_where TO vt_where.REFRESH:lt_where.
ENDIF. LOOP AT vt_where INTO ls_where.
LOOP AT gt_search_index INTO gw_search.
SEARCH ls_where FOR gw_search-search_attribute.
IF sy-subrc = .
CONCATENATE gw_search-search_attribute ` ` INTO v_ll.
CONCATENATE 'a~' gw_search-search_attribute INTO v_ss.
REPLACE ALL OCCURRENCES OF v_ll IN ls_where WITH v_ss .
ENDIF.
ENDLOOP.
LOOP AT gt_search_head INTO gw_search.
SEARCH ls_where FOR gw_search-search_attribute.
IF sy-subrc = .
CONCATENATE gw_search-search_attribute ` ` INTO v_ll.
CONCATENATE 'b~' gw_search-search_attribute INTO v_ss.
REPLACE ALL OCCURRENCES OF v_ll IN ls_where WITH v_ss .
ENDIF.
ENDLOOP.
APPEND ls_where TO lt_where.
ENDLOOP.
REFRESH:vt_where. IF v_flag = 'X'.
IF lt_where[] IS NOT INITIAL.
APPEND 'AND ( A~TXT04 = ''Z075'' )' TO lt_where.
APPEND 'AND ( A~ZZWARRANTY IN (''O'',''E'') )' TO lt_where.
APPEND 'AND ( A~PROCESS_TYPE = ''ZSV1'' )' TO lt_where.
APPEND 'AND ( A~ZZONTIME = '''' )' TO lt_where.
ELSE.
APPEND ' A~TXT04 = ''Z075'' ' TO lt_where.
APPEND 'AND ( A~ZZWARRANTY IN (''O'',''E'') )' TO lt_where.
APPEND 'AND ( A~PROCESS_TYPE = ''ZSV1'' )' TO lt_where.
APPEND 'AND ( A~ZZONTIME = '''' )' TO lt_where.
ENDIF.
ENDIF. SELECT a~guid
a~object_id
a~process_type
a~stat_user AS estat
a~description
* b~zzafld000005
* b~zzfld00000j AS zzfld00000j
* b~zzfld00000k AS zzfld00000k
* b~zzzafld00001c AS zzzafld00001c
a~end_user AS soldto
a~created_at
a~zzzbrand
a~zzwarranty
a~zzcharg_type
a~provider AS zs_provider_id
a~po_number_sold
a~created_by
a~zzzsymptomsgroup
* b~zzfld00000j AS zzfld00000j
* b~zzfld00000k AS zzfld00000k
* b~zzzafld00001c
INTO CORRESPONDING FIELDS OF TABLE lt_order
FROM zhsb_order_index AS a
INNER JOIN crmd_orderadm_h AS b
ON a~guid = b~guid
UP TO lv_max ROWS
WHERE (lt_where).
* INTO CORRESPONDING FIELDS OF TABLE lt_order UP TO iv_max_num_results ROWS WHERE (lt_where).
IF sy-subrc = .
"取品牌描述,取收费类型描述
SELECT * INTO TABLE gt_domain FROM zcrmt_domain_t WHERE tab_name = 'ZTVS_BRAND' AND spras = 'J'.
SELECT * APPENDING TABLE gt_domain FROM zcrmt_domain_t WHERE tab_name = 'ZJP_REPAIR_CHARGETPYE' AND spras = 'J'."sy-langu. SORT lt_order BY object_id ASCENDING. SELECT guid
zzafld000005
zzfld00000j
zzfld00000k
zzzafld00001c
INTO TABLE gt_head
FROM crmd_orderadm_h
FOR ALL ENTRIES IN lt_order
WHERE guid = lt_order-guid. SELECT crmc_proc_type~process_type
crmc_proc_type_t~p_description_20
crmc_proc_type~user_stat_proc
INTO TABLE gt_type
FROM crmc_proc_type
INNER JOIN crmc_proc_type_t
ON crmc_proc_type~process_type = crmc_proc_type_t~process_type
WHERE ( crmc_proc_type~process_type BETWEEN 'ZSV1' AND 'ZSV4' OR crmc_proc_type~process_type EQ 'ZWO3' OR crmc_proc_type~process_type EQ 'ZWO4' )
AND crmc_proc_type_t~langu = 'J'."sy-langu."取单据类型描述. IF gt_type IS NOT INITIAL.
SELECT * INTO TABLE gt_tj30t FROM tj30t FOR ALL ENTRIES IN gt_type WHERE stsma = gt_type-user_stat_proc AND spras = 'J'."sy-langu."取状态描述.
ENDIF. "取partner信息
SELECT crmd_link~guid_hi
crmd_partner~addr_nr
crmd_partner~addr_type
crmd_partner~partner_fct
INTO TABLE gt_part
FROM crmd_link
INNER JOIN crmd_partner
ON crmd_link~guid_set = crmd_partner~guid
FOR ALL ENTRIES IN lt_order
WHERE crmd_link~guid_hi = lt_order-guid
AND crmd_partner~partner_fct IN ('','ZHSI00SP')
AND crmd_link~objtype_set = ''."PARTNER REFRESH:vt_part.
vt_part[] = gt_part[].
SORT vt_part BY addr_nr.
DELETE ADJACENT DUPLICATES FROM vt_part COMPARING addr_nr.
IF vt_part[] IS NOT INITIAL.
SELECT adrc~addrnumber
adrc~name1
adr6~smtp_addr
adrc~tel_number
adrc~street
adrc~str_suppl1
adrc~str_suppl2
adrc~post_code1
adrc~city1
adrc~region
INTO TABLE gt_adrc
FROM adrc
LEFT JOIN adr6
ON adrc~addrnumber = adr6~addrnumber
FOR ALL ENTRIES IN vt_part
WHERE adrc~addrnumber = vt_part-addr_nr.
REFRESH:vt_part.
ENDIF. "取后续符合条件的ZSO1单据
SELECT object_id
zzrepchg_type
ref_object_id
INTO TABLE gt_zso1
FROM zhsb_sales_index FOR ALL ENTRIES IN lt_order
WHERE ref_object_id = lt_order-object_id
AND sales_org = 'O 50000231'
AND process_type = 'ZSO1'
AND stat_user <> 'E0007'. "取In Progress的变更日志
SELECT * INTO TABLE gt_zcrmt0046 FROM zcrmt0046 FOR ALL ENTRIES IN lt_order
WHERE bt_guid = lt_order-guid AND zzdlyrsn IN ('E0075','E0080'). "取项目数量金额
SELECT crmd_orderadm_i~guid
crmd_orderadm_i~header
crmd_orderadm_i~zzzsp_price
crmd_orderadm_i~zzafld00001f
crmd_schedlin~quantity
INTO TABLE gt_item
FROM crmd_orderadm_i
INNER JOIN crmd_schedlin
ON crmd_schedlin~item_guid = crmd_orderadm_i~guid
FOR ALL ENTRIES IN lt_order
WHERE crmd_schedlin~event_type = 'ORDER'
AND crmd_orderadm_i~header = lt_order-guid. LOOP AT lt_order INTO ls_order.
MOVE-CORRESPONDING ls_order TO ls_result.
READ TABLE gt_head INTO gw_head WITH KEY guid = ls_order-guid.
IF sy-subrc = .
ls_result-zzafld000005 = gw_head-zzafld000005.
ls_result-zzfld00000j = gw_head-zzfld00000j.
ls_result-zzfld00000k = gw_head-zzfld00000k.
ls_result-zzafld00001c = gw_head-zzafld00001c.
ENDIF.
READ TABLE gt_type INTO gw_type WITH KEY process_type = ls_order-process_type.
IF sy-subrc = .
ls_result-process_type_txt = gw_type-p_description_20.
READ TABLE gt_tj30t INTO gw_tj30t WITH KEY stsma = gw_type-user_stat_proc estat = ls_result-estat.
IF sy-subrc = .
ls_result-concatstatuser = gw_tj30t-txt30.
ENDIF.
ENDIF.
"取partner信息
READ TABLE gt_part INTO gw_part WITH KEY guid_hi = ls_order-guid partner_fct = ''.
IF sy-subrc = .
READ TABLE gt_adrc INTO gw_adrc WITH KEY addrnumber = gw_part-addr_nr.
IF sy-subrc = .
CONCATENATE gw_adrc-name1 '/' gw_adrc-city1 space gw_adrc-post_code1 INTO ls_result-sold_to_party_list.
ENDIF.
ENDIF. READ TABLE gt_part INTO gw_part WITH KEY guid_hi = ls_order-guid partner_fct = 'ZHSI00SP'.
IF sy-subrc = .
READ TABLE gt_adrc INTO gw_adrc WITH KEY addrnumber = gw_part-addr_nr.
IF sy-subrc = .
ls_result-zs_provider_name = gw_adrc-name1.
ENDIF.
ENDIF. LOOP AT gt_zso1 INTO gw_zso1 WHERE ref_object_id = ls_result-object_id.
IF ls_result-zzwarranty = 'E' AND gw_zso1-zzrepchg_type = ''.
ls_result-zeucorder = gw_zso1-object_id.
ELSEIF ls_result-zzwarranty = 'O' AND ls_result-zzcharg_type <> ''.
ls_result-zeucorder = gw_zso1-object_id.
ELSEIF ls_result-zzcharg_type = ''.
ls_result-zrcorder = gw_zso1-object_id.
ELSEIF ls_result-zzcharg_type <> '' AND ls_result-zzwarranty = 'E' AND ls_result-zzcharg_type = ''.
ls_result-zrcorder = gw_zso1-object_id.
ENDIF.
ENDLOOP. LOOP AT gt_zcrmt0046 INTO gw_zcrmt0046 WHERE bt_guid = ls_order-guid.
IF gw_zcrmt0046-zzdlyrsn = 'E0075'.
v_e0075 = gw_zcrmt0046-crdat.
ELSEIF gw_zcrmt0046-zzdlyrsn = 'E0080'.
v_e0080 = gw_zcrmt0046-crdat.
ENDIF.
ENDLOOP.
IF v_e0075 IS NOT INITIAL AND v_e0080 IS NOT INITIAL.
CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
EXPORTING
i_date_from = v_e0080
i_date_to = v_e0075
IMPORTING
e_days = ls_result-zquote_day.
ENDIF. LOOP AT gt_item INTO gw_item WHERE header = ls_order-guid.
ls_result-zclamun = ls_result-zclamun + gw_item-zzzsp_price * gw_item-quantity.
ENDLOOP. READ TABLE gt_domain INTO gw_domain WITH KEY tab_name = 'ZTVS_BRAND' line_key = ls_order-zzzbrand.
IF sy-subrc = .
ls_result-zzzbrandt = gw_domain-value1.
ENDIF.
READ TABLE gt_domain INTO gw_domain WITH KEY tab_name = 'ZJP_REPAIR_CHARGETPYE' line_key = ls_order-zzcharg_type.
IF sy-subrc = .
ls_result-zzcharg_typet = gw_domain-value1.
ENDIF. APPEND ls_result TO gt_result.
CLEAR:ls_result.
ENDLOOP.
ENDIF.
IF gt_result[] IS NOT INITIAL.
ev_result = 'OK'.
ENDIF.
ENDIF. ENDMETHOD.

下面开始FPM页面配置。

T-code:FPM_WB.

点击创建空的FPM程序。

输入程序名称和描述,选择OverView Page

保存本地。

点击编辑配置。

....剩下的好像搞了几百遍了,添加SEARCH UIBB.LIST UIBB.配置,添加字段。。。不写了,浪费时间。

最后结果如下图:

FPM 1.1正式版 Search & List的更多相关文章

  1. Java 开源博客——B3log Solo 0.6.6 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版公布了!欢迎大家下载. 该版本号引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也很欢迎大家參与 ...

  2. Java 开源博客——B3log Solo 0.6.7 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ...

  3. 按钮的图标 Button icons-JQUERY MOBILE 1.0正式版中文手册

    按钮的图标 Button icons-JQUERY MOBILE 1.0正式版中文手册 data-icon属性可以被用来创建如下所示的图标 左箭头data-icon="arrow-l&quo ...

  4. Java 开源博客——B3log Solo 0.6.1 正式版发布了!

    Java 开源博客 —— B3LOG Solo 0.6.1 正式版发布了!欢迎大家下载. 该版本主要是改善细节体验,并加入了一款 Metro 风格的皮肤. 特性 基于标签的文章分类 Ping Goog ...

  5. 最强 IDE Visual Studio 2017 正式版发布

    Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等 ...

  6. Android Studio 3.1 正式版

    欢迎大家推荐自己在Android开发过程中用的好用的工具.学习开发教程.用到设计素材.如果你觉得本站对你有用,你可以点击底部的分享按钮,把本站分享到社交网络让你的小伙伴和更多的人知道. 或者可以考虑捐 ...

  7. 终于等到你,最强 IDE Visual Studio 2017 正式版发布

    Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等 ...

  8. Java 开源博客——B3log Solo 0.6.7 正式版发布了!

    Java 开源博客 -- B3log Solo 0.6.7 正式版发布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也非常欢迎大家参与进来 :-) 特性 基于标签的文章分类 ...

  9. Java 开源博客——B3log Solo 0.6.6 正式版发布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版发布了!欢迎大家下载. 该版本引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也非常欢迎大家参与 ...

随机推荐

  1. day31_8.12并发编程二线程

    一.进程间的通信 在进程中,可以通过Queue队列进行通信,队列有两个特点: 1.先进先出.(先来的数据先被取出) 2.管道式存取.(数据取出一次后就不会在有了) 在python中有以下方法来操作数据 ...

  2. luoguP3312 [SDOI2014]数表

    题意 默认\(n\leqslant m\). 设\(f(i)\)表示\(i\)的约数和,因为是积性函数,可以用线性筛求. 先不考虑\(a\)的限制,我们推下式子: \(\sum\limits_{i=1 ...

  3. window.open()与window.showModuleDialog()

    一.window.showModalDialog()     模态对话框. (只支持IE浏览器)window.showModelessDialog()   非模态对话框. 基本语法:vReturnVa ...

  4. 关于const关键字

    const:ES6新增关键字,用于声明创建一个值的只读引用. 我们都知道,const一般用来定义常量,在声明的时候需要赋初始值,而且初始值一旦赋值,便不能改变. 但是以上说的是针对于基本类型数据的定义 ...

  5. calc()在less中编译报错

    calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢? calc() 函数用于动态计算长度值. 需要注意的是,运算符前后都 ...

  6. 复杂模拟 | 1017 模拟N个顾客M个柜台进行排队

    #include <stdio.h> #include <memory.h> #include <math.h> #include <string> # ...

  7. Codeforces Round 584 题解

    -- A,B 先秒切,C 是个毒瘤细节题,浪费了很多时间后终于过了. D 本来是个 sb 题,然而还是想了很久,不过幸好没什么大事. E1,看了一会就会了,然而被细节坑死,好久才过. 感觉 E2 很可 ...

  8. [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

  9. wpf “{DependencyProperty.UnsetValue}”不是属性“Background”的有效值。异常

    , 在wpf模板中, 有一个Background绑定的值不存在导致的异常, 我的是有这个没有导致的错误,  自己添加之后就没有了

  10. (十三)golang--程序流程控制

    1.顺序控制 若没有判断,没有跳转,程序由上至下依次执行 2.分支控制 单分支if 条件表达式 { 执行代码块} 双分支if 条件表达式 { 执行代码块1} else { 执行代码块2} 多分支if ...