|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
这两天回顾工作流开发过程中看到以前项目中在工作流的通知中显示附件链接的功能,整理如下:
1、Oracle ERP标准的附件存放机制为:在表 FND_DOCUMENT% 和 FND_ATTACH% 中存放附件相关的设置和数据;最后在 FND_DOCUMENTS_TL 中 MEDIA_ID 链接至 FND_LOBS.FILE_ID,而LOB文件则存储在 FND_LOBS.LOB_DATA 中。
2、在工作流通知中,则可以通过 URL 的链接下载对应LOB对象。当然,不用我们自己写LOB程序,用Oracle API:FND_DOCUMENT_MANAGEMENT.GET_LAUNCH_DOCUMENT_URL 就可以了。
以下以采购订单为例:
通过以下SQL查询对应PO的附件:(标准PO通知输出程序 PO_WF_PO_NOTIFICATION.GET_PO_LINES_DETAILS)
SELECT fd.datatype_id,
fdt.file_name,
fdt.media_id,
fdt.description
FROM fnd_attached_documents fad,
fnd_documents fd,
fnd_documents_tl fdt
WHERE fad.document_id = fd.document_id
AND fad.document_id = fdt.document_id
AND fdt.LANGUAGE = 'US'
AND fad.entity_name = 'PO_HEADERS'
AND fad.pk1_value = l_document_id;
再在通知中添加以下HTML标记:
'<B>点击此处,可以查看该采购订单的附件</B>'|| ' <A href="' || v_url || '">' || to_char(v_flag) || '.' || c1rec.description ||'</A><br>';
而 v_url 的生成方式为:
IF p_datatype_id = 5 THEN
/* Check to see if the user specified a token in the URL. If so, strip out the token. */
IF upper(p_file_name) like '-$PROFILE$%' THEN
v_prof_name := substrb(p_file_name,instrb(p_file_name,'.')+1,(instrb(p_file_name,'-',1,2)-2-instrb(p_file_name,'.')+1));
/* Get the value of the token */
FND_PROFILE.GET(v_prof_name, v_token);
IF v_token is null then
RETURN NULL;
END IF;
/* Open the url after making sure the token ends with a trailing slash */
v_url := fnd_web_config.trail_slash(v_token)||substrb(p_file_name,instrb(p_file_name,'-',1,2)+2);
RETURN v_url;
ELSE
RETURN p_file_name;
END IF;
ELSIF p_datatype_id = 6 THEN
IF (p_file_name IS NULL) THEN
RETURN NULL;
ELSIF (p_file_name = 'INTERNAL') THEN
v_gfm_agent := fnd_web_config.gfm_agent;
v_url := fnd_gfm.construct_download_URL(v_gfm_agent,p_media_id, FALSE);
RETURN v_url;
END IF; -- end if filename not null.
ELSIF p_datatype_id = 7 THEN
-- Separate document id and file name.
v_separator := instr(p_file_name,':',-1);
-- Get the HTML text for displaying the document
fnd_document_management.get_launch_document_url (
fnd_profile.value('USERNAME'),
substr(p_file_name, 1,v_separator-1 ),
FALSE,
v_url);
--fnd_utilities.open_url (v_url);
RETURN v_url;
ELSE
-- open custom document
RETURN NULL;
END IF;
|
|