利用workflow发送类似数据报表内容的通知页面
当我们发送一个审批请求时,如果审批人在通知页面就能看到要审批的数据信息就不用登录到系统中查看相关信息了,可直接在通知中审批掉。
相关代码如下:
创建package:
create or replace package QTESTWF as
procedure start_workflow (item_id in number,user_name in varchar2) ;
procedure get_line_detail(document_id in varchar2,
display_type in varchar2,
document in out NOCOPY varchar2,
document_type in out NOCOPY varchar2);
end QTESTWF;
/
create or replace package body QTESTWF as
procedure start_workflow (item_id in number,user_name in varchar2)
IS
l_asset_number VARCHAR2(100) :='D';
l_ItemType varchar2(100) := 'QTESTWF';--'QTESTWF';--流程内部名称
l_ItemKey varchar2(100) ;
v_url varchar2(1000) := 'http://61.144.28.248';
P_CONTENT VARCHAR2(3000) :='测试工作流';
begin
select QTESTWF_SEQ.nextval into l_ItemKey from dual;--获取序列号
wf_engine.createProcess(ItemType => l_ItemType, --流程名
ItemKey => l_ItemKey, --项目关键字
process => 'QTESTWF', --process内部名称
user_key => l_ItemKey, --用户关键字
owner_role => 'D' --流程责任人
);
--以下是参数
wf_engine.SetItemAttrText(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'USERNAME',--对应的都是内部名称
avalue => l_asset_number);
wf_engine.SetItemAttrText(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'P_CONTENT',
avalue => P_CONTENT);
wf_engine.StartProcess(ItemType => l_ItemType, ItemKey => l_ItemKey);
commit;
end start_workflow;
----------------------------------------------------------------------------------------
--Get workflow attribute
----------------------------------------------------------------------------------------
procedure get_line_detail(document_id in varchar2,
display_type in varchar2,
document in out NOCOPY varchar2,
document_type in out NOCOPY varchar2) is
l_document VARCHAR2(32000) := '';
l_user_name varchar2(30);
l_org_id number := fnd_profile.value('ORG_ID');
max_lines_dsp NUMBER := 20;
l_line_count number :=0;
v_url_str varchar2(254);
v_req_url_str varchar2(254);
NL VARCHAR2(1) := fnd_global.newline;
l_item_type wf_items.item_type%TYPE;
l_item_key wf_items.item_key%TYPE;
l_doc_type varchar2(40);
cursor c_test is
select * from CMCC_FLEXFIELD_TEST ;
begin
-- max_lines_dsp:= to_number(fnd_profile.value('PO_NOTIF_LINES_LIMIT'));
if max_lines_dsp is NULL then
max_lines_dsp := 20;
end if;
l_item_type := substr(document_id, 1, instr(document_id, ':') - 1);
l_item_key := substr(document_id, instr(document_id, ':') + 1,
length(document_id) - 2);
l_user_name := wf_engine.GetItemAttrNumber(itemtype => l_item_type,
itemkey => l_item_key,
aname => 'USERNAME');
l_document := '<table border="1" width="100%">' || '<caption>' ||
'<p align="center">' || l_doc_type || '测试信息</p>' ||
'</caption>' || '<tr>' || '<td width="12%">' ||
'<p align="center">名字</td>' || '<td width="12%">' ||
'<p align="center">Item ID</td>' ||
'<td width="12%">组织</td>' ||
'<td width="13%">段1</td>' ||
'<td width="13%">段2</td>' ||
'<td width="13%">段3</td>' || '</tr>';
for c1 in c_test loop
l_document := l_document || '<tr>' || '<td width="12%">' ||
c1.username || '</td>' ||
'<td width="12%">' || c1.inventory_item_id||
'</td>' || '<td width="12%">' ||
c1.organization_id || '</td>' ||
'<td width="12%">' || c1.segment1||
'</td>' || '<td width="13%">' ||
c1.segment2|| '</td>' ||'<td width="13%">'||
c1.segment3 || '</td>' ||
'</tr>';
end loop;
l_document := l_document ||'</table>';
l_document := l_document ||'<p> </p>';
l_document := l_document ||'<table border="1" width="100%">' || '<caption>' ||
'<p align="center">' || l_doc_type || '行内容</p>' ||
'</caption>' || '<tr>' || '<td width="12%">' ||
'<p align="center">事务类型</td>' || '<td width="12%">' ||
'<p align="center">任务编号</td>' ||
'<td width="12%">支出类型</td>' ||
'<td width="13%">帐户别名</td>' ||
'</tr>';
l_document := l_document || '</table>';
l_document := l_document ||'<p> </p>';
l_document := l_document ||'<table border="1" width="100%">' || '<caption>' ||
'<p align="center">' || l_doc_type || '物料明细</p>' ||
'</caption>' || '<tr>' || '<td width="12%">' ||
'<p align="center">行号</td>' || '<td width="12%">' ||
'<p align="center">物料编码</td>' ||
'<td width="12%">物料说明</td>' ||
'<td width="13%">需求数量</td>' ||
'<td width="13%">单位</td>' ||
'</tr>';
l_line_count :=0;
l_document := l_document || '</table>';
document:=l_document;
end get_line_detail;
end QTESTWF;
/
2,调用workflow:
Declare
l_asset_number VARCHAR2(100) :='SYSADMIN';
l_ItemType varchar2(100) := 'QTESTWF';--'QTESTWF';--流程内部名称
l_ItemKey varchar2(100) ;
v_url varchar2(1000) := 'http://61.144.28.248';
P_CONTENT VARCHAR2(32000) :='测试工作流';
begin
select QTESTWF_SEQ.nextval into l_ItemKey from dual;--获取序列号
wf_engine.createProcess(ItemType => l_ItemType, --流程名
ItemKey => l_ItemKey, --项目关键字
process => 'QTESTWF', --process内部名称
user_key => l_ItemKey, --用户关键字
owner_role => 'D' --流程责任人
);
--以下是参数
wf_engine.SetItemOwner(itemtype => l_itemtype,
itemkey => l_itemkey,
owner => 8439);
wf_engine.SetItemAttrText(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'USERNAME',--对应的都是内部名称
avalue => l_asset_number);
wf_engine.SetItemAttrText(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'SEND_EMPLOYEE',
avalue => 'D');
wf_engine.SetItemAttrText(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'OPEN_FORM',
avalue => 'CTESTHM:inventory_item_id=2'); --带参数调用FORM
--'QINVISSRAP:X_HEADER_ID="'||to_char(l_header_id)||'"MFG_ORGANIZATION_ID="'||to_char(l_organization_id)||'"';
wf_engine.SetItemAttrText(itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'P_SUBJECT',
avalue => '通知汇总');
wf_engine.SetItemAttrText (itemtype => l_itemtype,
itemkey => l_itemkey,
aname => 'P_CONTENT',
avalue => 'plsql:QTESTWF.get_line_detail/'||l_itemtype||':'||l_itemkey);
wf_engine.StartProcess(ItemType => l_ItemType, ItemKey => l_ItemKey);
commit;
end ;
相关推荐
在本文中,我们将深入探讨如何利用Visual Studio 2008在Microsoft Office SharePoint Server (MOSS) 2007环境中开发自定义Workflow相关的页面。MOSS 2007是一个强大的企业级协作平台,而Workflow是其核心功能之一,...
工作流(Workflow)是一种自动化处理任务的技术,它在IT领域被广泛应用,特别是在企业管理、项目协作和数据处理等方面。工作流的核心在于定义并管理业务过程,确保任务按照预设的规则和顺序有效地执行。在这个“请假...
SMTP 是电子邮件的标准协议,它允许 SAP Workflow 将邮件发送到外部邮箱。配置步骤包括在 SAP 中设置邮件服务器的相关参数,如主机名、端口号、用户名和密码等,这些步骤通常参照《SAP 采购订单外发给供应商邮箱》...
2. **流程自动化**:Workflow 7支持自动执行常规任务,例如文档审批、数据录入和通知发送。通过预定义的规则,系统可以自动将任务分派给合适的人员,提高工作效率。 3. **任务管理**:用户可以方便地跟踪和管理自己...
4. **通知与提醒**:当任务到达截止日期或需要采取行动时,系统会通过电子邮件或其他通信方式发送通知,确保团队成员不会错过任何关键步骤。 5. **报表与分析**:Workflow 7 提供丰富的报表和数据分析工具,帮助...
鼎新WORKFLOW GP3.1.6.41是一款先进的工作流程管理系统,它集成了全面的功能模块,旨在提升企业的业务效率和管理水平。该系统不仅支持繁体和简体双语界面,更展现了其对不同地区用户的友好性,使得在多语言环境中...
- **系统开发**:探讨如何利用WorkFlow平台进行更深层次的定制化开发。 - **引擎功能模块**: - **流程模板管理**:维护模板库。 - **用户工作项管理**:跟踪用户任务。 - **表单管理**:管理表单设计和数据。 ...
【Idoc+Workflow实例】是SAP ABAP接口技术中的一种常见应用场景,主要涉及SAP系统内部以及与其他系统之间的数据交换。在这个实例中,我们关注的是如何通过IDoc(Intermediate Document)来处理采购部门与供应商之间...
该表的字段包括ITEM_DATA等,用于描述数据的内容。 7. flow_run_feedback表:该表用于存储流程实例会签信息,每个会签都有一个唯一的FEED_ID,它们之间可以是一对多的关系。该表的字段包括RUN_ID、FEEDBACK等,用于...
1. **图形化界面**:工作流设计器通常提供一个可视化的画布,用户可以通过拖放活动(如审批、分配任务、发送通知等)来构建流程图。 2. **自定义节点**:用户可以定义不同类型的业务操作节点,比如开始节点、结束...
- **Email Task** 用于发送电子邮件通知,常用于工作流状态的报告。 2. **Worklet Developer** 允许创建 Worklet,这是一个包含多个 Task 的组合,可以在多个 Workflow 中重复使用,提高了工作效率。 3. **...
在提供的"WinForms"示例中,我们可以预见到,可能是一个基于Windows桌面应用程序的客户端,它利用C# Workflow来驱动业务逻辑,并通过WCF与远程服务进行交互。 在WinForms项目中,开发者通常会创建一个用户界面,...
Hue的Workflow(工作流)组件则是用于构建和管理复杂的Hadoop作业流程,允许用户通过拖拽操作来设计数据处理任务,而无需编写复杂的命令行脚本或Java代码。在本文中,我们将深入探讨如何使用Hue配置和运行一个...
Oracle Workflow 是 Oracle 数据库系统中的一个关键组件,它主要用于创建、管理和执行业务流程。这个强大的工具使得企业...通过深入理解和熟练应用这些知识点,企业可以更好地利用 Oracle Workflow 实现其业务目标。
代理可以在指定的时间或特定事件触发时自动执行任务,如发送通知邮件或更新数据。 接下来,我们进入表单的设计环节: 1.2.1 图例1展示了创建表单的界面,表单是用户与流程交互的主要界面。开发者需要考虑表单的...
6. **数据持久化**:Snaker Workflow将流程实例、任务、变量等信息存储在数据库中,保证了数据的安全性和一致性。 现在,我们来探讨一下压缩包中的源码部分: 源码通常包含以下几个关键部分: - **Engine模块**:...
【标题】"workflow实现的源代码"涉及到的是工作流(Workflow)系统在信息技术中的实际应用,尤其是OA(Office Automation)系统的开发。工作流系统是一种自动化业务流程的技术,它能够管理和控制文档、信息或任务在...
例如,销售订单确认后,Workflow可以自动通知库存管理系统准备发货。 6. **监控与报告**:Workflow提供了对业务流程的实时监控,管理者可以通过报表了解流程执行情况,发现瓶颈,进行优化。例如,分析平均处理时间...