SRM的移动端APP制作过程
1、在现有工作流的工作流维护中勾选移动审批,图中所示:
SRM——移动端制作审批过程 随笔 第1张
2、在现有的工作流的审批页面设置中维护AAP审批,点击页面明细,在明细中新建移动端页面代码,选择手机APP。图中所示:
SRM——移动端制作审批过程 随笔 第2张
SRM——移动端制作审批过程 随笔 第3张
3、到此前端设置完成,转至数据库包中操作,打开app_workflow_pkg;
4、在此包中仿照图上例子编写过程。
SRM——移动端制作审批过程 随笔 第4张
5、转至cux_crrc_app_wfl_doc_pkg包中,编写刚刚的过程。

    PROCEDURE pur_rfx_view_1(x_doc_view_clob  OUT CLOB,
                           p_document_id    NUMBER,
                           p_business_group VARCHAR2,
                           p_user_id        NUMBER) IS
    v_line_count NUMBER;
BEGIN
x_doc_view_clob := app_interface_utrl_pkg.start_xml('HEADER');
dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.start_xml('RECORDS'));

FOR header_rec IN (SELECT h.rfx_header_id,
                          h.rfx_number,
                          h.title,
                          (SELECT p.rfx_type_desc
                             FROM pur_bg_rfx_types_vl p
                            WHERE p.rfx_type_id = h.rfx_type_id) rfx_type_desc,
                          (SELECT scv.code_value_name
                             FROM sys_code_values_vl scv, sys_codes_vl sc
                            WHERE sc.code_id = scv.code_id
                              AND scv.code_value = h.rfx_method
                              AND sc.code = 'PUR_RFX_METHOD') rfx_method_desc,
                          (SELECT scv.code_value_name
                             FROM sys_code_values_vl scv, sys_codes_vl sc
                            WHERE sc.code_id = scv.code_id
                              AND scv.code_value = h.auction_direction
                              AND sc.code = 'PUR_RFX_AUCTION_DIRECTION') auction_direction_desc,
                          (SELECT gc.currency_name
                             FROM gld_currency_vl gc
                            WHERE gc.currency_code = h.currency_code) currency_desc,
                          TO_CHAR(h.quote_end_time,
                                  'yyyy-mm-dd hh24:mi:ss') quote_end_time,
                          to_char(h.feedback_end_time, 'yyyy-mm-dd') feedback_end_time,
                          decode(h.sealed_bid_flag, 'Y', '是', '否') sealed_bid_flag_desc,
                          (SELECT scv.code_value_name
                             FROM sys_code_values_vl scv, sys_codes_vl sc
                            WHERE sc.code_id = scv.code_id
                              AND scv.code_value = h.open_rule
                              AND sc.code = 'PUR_RFX_OPEN_RULE') open_rule_desc,
                          (SELECT scv.code_value_name
                             FROM sys_code_values_vl scv, sys_codes_vl sc
                            WHERE sc.code_id = scv.code_id
                              AND scv.code_value = h.auction_ranking
                              AND sc.code = 'PUR_RFX_AUCTION_RANKING') auction_ranking_desc,
                          h.comments,
                          h.valuation_planner
                     FROM pur_rfx_headers h
                    WHERE h.rfx_header_id = p_document_id) LOOP

  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.start_xml('RECORD'));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('TITLE', '基本信息'));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('TYPE', 'SINGLE'));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('ID',
                                                 header_rec.rfx_header_id));

  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.start_xml('DETAIL'));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('RFX_NUMBER',
                                                        'RFx编号',
                                                        header_rec.rfx_number,
                                                        '1',
                                                        1));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('HEADER_TITLE',
                                                        '询价单标题',
                                                        header_rec.title,
                                                        '1',
                                                        2));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('RFX_TYPE_DESC',
                                                        '询价类型',
                                                        header_rec.rfx_type_desc,
                                                        '1',
                                                        3));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('AUCTION_DIRECTION_DESC',
                                                        '竞价方向',
                                                        header_rec.auction_direction_desc,
                                                        '1',
                                                        4));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('RFX_METHOD_DESC',
                                                        '询价方式',
                                                        header_rec.rfx_method_desc,
                                                        '1',
                                                        5));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('CURRENCY_DESC',
                                                        '币种',
                                                        header_rec.currency_desc,
                                                        '1',
                                                        6));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('QUOTE_END_TIME',
                                                        '报价截至时间',
                                                        header_rec.quote_end_time,
                                                        '1',
                                                        7));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('FEEDBACK_END_TIME',
                                                        '还比价截至时间',
                                                        header_rec.feedback_end_time,
                                                        '1',
                                                        8));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('SEALED_BID_FLAG_DESC',
                                                        '密封报价',
                                                        header_rec.sealed_bid_flag_desc,
                                                        '1',
                                                        9));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('OPEN_RULE_DESC',
                                                        '公开规则',
                                                        header_rec.open_rule_desc,
                                                        '1',
                                                        10));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('AUCTION_RANKING_DESC',
                                                        '竞价排名',
                                                        header_rec.auction_ranking_desc,
                                                        '1',
                                                        11));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('COMMENTS',
                                                        '备注',
                                                        header_rec.comments,
                                                        '1',
                                                        12));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('VALUATION_PLANNER',
                                                        '计划员审价过程',
                                                        header_rec.valuation_planner,
                                                        '1',
                                                        13));

  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.end_xml('DETAIL'));

  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.end_xml('RECORD'));
END LOOP;

dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.end_xml('RECORDS'));
dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.end_xml('HEADER'));

--统计物料行数量
SELECT COUNT(*)
  INTO v_line_count
  FROM pur_rfx_ln_items l
 WHERE l.rfx_header_id = p_document_id
   AND (l.attribute3 IN ('Y', 'S') OR l.attribute3 IS NULL);

dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.start_xml('LINE_1'));
dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.start_xml('RECORDS'));

--循环行
FOR line_1_rec IN (SELECT *
                     FROM (SELECT v.*,
                                  ceil(rownum / 10) AS page_num,
                                  rownum
                             FROM (SELECT l.rfx_line_item_id,
                                          l.line_num,
                                          l.attribute1 bale_number,
                                          l.attribute2 bale_name,
                                          l.item_code,
                                          l.item_desc,
                                          nvl((SELECT ic.category_name
                                                FROM mtl_categories_user_defined_vl ic
                                               WHERE ic.category_udf_id =
                                                     l.item_category_id),
                                              (SELECT udv.category_name
                                                 FROM mtl_category_classify_items    cci,
                                                      mtl_categories_user_defined_vl udv
                                                WHERE cci.category_udf_id =
                                                      udv.category_udf_id
                                                  AND cci.item_id =
                                                      l.item_id
                                                  AND cci.category_udf_id =
                                                      (SELECT MIN(cci.category_udf_id)
                                                         FROM mtl_category_classify_items cci
                                                        WHERE cci.item_id =
                                                              l.item_id))) AS item_category_desc,
                                          l.attribute20 project_code,
                                          (SELECT v.code_value_name
                                             FROM sys_code_values_v v
                                            WHERE v.code = 'SAP_PROJECT'
                                              AND v.code_value =
                                                  l.attribute20) project_name,
                                          l.attribute24 quantity_jbdw,
                                          l.quantity quantity_jgdw,
                                          to_char(l.need_by_date,
                                                  'yyyy-mm-dd') need_by_date,
                                          (SELECT mi.c_attribute40
                                             FROM mtl_system_items mi
                                            WHERE mi.item_id = l.item_id) c_attribute40,
                                          (SELECT mi.c_attribute41
                                             FROM mtl_system_items mi
                                            WHERE mi.item_id = l.item_id) c_attribute41,
                                          (SELECT unit_price
                                             FROM (SELECT la.unit_price
                                                     FROM pur_lines_all   la,
                                                          pur_headers_all h
                                                    WHERE la.item_code =
                                                          l.item_code
                                                      AND la.pur_header_id =
                                                          h.pur_header_id
                                                      AND h.type_lookup_code NOT IN
                                                          ('CK05',
                                                           'CK09',
                                                           'CK20',
                                                           'CK31')
                                                      AND nvl(la.cancel_flag,
                                                              'N') = 'N'
                                                    ORDER BY h.erp_creation_date DESC)
                                            WHERE rownum = 1) history_price
                                     FROM pur_rfx_ln_items l
                                    WHERE l.rfx_header_id = p_document_id
                                      AND (l.attribute3 IN ('Y', 'S') OR
                                          l.attribute3 IS NULL)
                                    ORDER BY rfx_line_item_id) v)
                    WHERE ((1 IS NOT NULL AND 1 = page_num) OR
                          (1 IS NULL AND 1 = 1))) LOOP
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.start_xml('RECORD'));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('TITLE', '物品明细'));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('TYPE', 'MULTIPLE'));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('COUNT', v_line_count)); -- 行总数
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('LINE_CODE',
                                                 c_pur_rfx_ln_items_1)); --行代码
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('ID',
                                                 line_1_rec.rfx_line_item_id)); --行ID
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('ROWNUM',
                                                 line_1_rec.rownum)); --行序号
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.element('PAGE_NUM',
                                                 line_1_rec.page_num)); --行序号

  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.start_xml('DETAIL'));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('LINE_NUM',
                                                        '行号',
                                                        line_1_rec.line_num,
                                                        '1',
                                                        1));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('BALE_NUMBER',
                                                        '打包编号',
                                                        line_1_rec.bale_number,
                                                        '1',
                                                        2));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('BALE_NAME',
                                                        '打包名称',
                                                        line_1_rec.bale_name,
                                                        '1',
                                                        3));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('ITEM_CODE',
                                                        '物品编码',
                                                        line_1_rec.item_code,
                                                        '1',
                                                        4));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('ITEM_DESC',
                                                        '物品描述',
                                                        line_1_rec.item_desc,
                                                        '1',
                                                        5));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('ITEM_CATEGORY_DESC',
                                                        '物品类型',
                                                        line_1_rec.item_category_desc,
                                                        '1',
                                                        6));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('C_ATTRIBUTE40',
                                                        '大小量纲',
                                                        line_1_rec.c_attribute40,
                                                        '1',
                                                        7));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('C_ATTRIBUTE41',
                                                        '材质规格',
                                                        line_1_rec.c_attribute41,
                                                        '1',
                                                        8));
  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('PROJECT_CODE',
                                                        '项目代码',
                                                        line_1_rec.project_code,
                                                        '1',
                                                        9));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('PROJECT_NAME',
                                                        '项目描述',
                                                        line_1_rec.project_name,
                                                        '1',
                                                        10));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('QUANTITY_JBDW',
                                                        '需求数量(基本单位)',
                                                        line_1_rec.quantity_jbdw,
                                                        '1',
                                                        11));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('QUANTITY_JGDW',
                                                        '需求数量(价格单位)',
                                                        line_1_rec.quantity_jgdw,
                                                        '1',
                                                        12));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('HISTORY_PRICE',
                                                        '历史价格',
                                                        line_1_rec.history_price,
                                                        '1',
                                                        13));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element('NEED_BY_DATE',
                                                        '需求日期',
                                                        line_1_rec.need_by_date,
                                                        '1',
                                                        14));

  dbms_lob.append(x_doc_view_clob,
                  app_workflow_pkg.get_document_element(c_pur_rfx_ln_vendors_1,
                                                        '报价方',
                                                        '查看',
                                                        '0',
                                                        15,
                                                        c_pur_rfx_ln_vendors_1));
  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.end_xml('DETAIL'));

  dbms_lob.append(x_doc_view_clob,
                  app_interface_utrl_pkg.end_xml('RECORD'));

END LOOP; --Line_1
dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.end_xml('RECORDS'));
dbms_lob.append(x_doc_view_clob,
                app_interface_utrl_pkg.end_xml('LINE_1'));

END pur_rfx_view_1;
6、解析上面的过程,此过程中包含投行结构和超链接跳转显示,简单来说就是头行,行(头行)。
7、此处需要替换头查询语句
SRM——移动端制作审批过程 随笔 第5张
8、此处取值展示,需替换的内容
SRM——移动端制作审批过程 随笔 第6张
9、至此头解析完,解析行
SRM——移动端制作审批过程 随笔 第7张
10、此处替换行数据查询
SRM——移动端制作审批过程 随笔 第8张
SRM——移动端制作审批过程 随笔 第9张
11、此处是行数据处理,重点有个超链接,定义一个页面代码,此时在这个方法中get_document_line_view定义,然后跑类似的流程,至此一个APP页面设置完成
SRM——移动端制作审批过程 随笔 第10张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄