SRM——移动端制作审批过程
SRM的移动端APP制作过程
1、在现有工作流的工作流维护中勾选移动审批,图中所示:
2、在现有的工作流的审批页面设置中维护AAP审批,点击页面明细,在明细中新建移动端页面代码,选择手机APP。图中所示:
3、到此前端设置完成,转至数据库包中操作,打开app_workflow_pkg;
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、此处需要替换头查询语句
8、此处取值展示,需替换的内容
9、至此头解析完,解析行
10、此处替换行数据查询
11、此处是行数据处理,重点有个超链接,定义一个页面代码,此时在这个方法中get_document_line_view定义,然后跑类似的流程,至此一个APP页面设置完成

更多精彩