本章描述通过桌面集成管理器菜单配置Web ADI,环境为12.2.4。配置到第三节后,Web ADI的基本功能就已经实现,可以使用了,之后的小节为进阶使用,非必须配置。
本文档详解通过桌面集成管理器职责来进行Web ADI的客户化开发。
对于流传比较广的通过桌面集成职责来配置的方法,在R12环境中和Excel2013以上的开发环境中BUG比较多,而且配置繁琐,这里不做记录。
使用桌面集成管理器(Desktop Integration Manager)职责定义WEB ADI集成器。
桌面集成管理器>创建集成器
集成器名称:CUX_WEBADI_TEST01
内部名称:CUXWBAT01
应用:CUX Customization Application
不勾选仅报告;
不勾选在“创建文档”页中显示;(是否在“桌面集成”职责“创建文档”功能中供选择)
安全性规则空着;(用于选择该集成器对应的功能,可先空着,后面再补)
接口名称:CUXWBAT01
接口类型:API过程
程序包名称:CUX_WBA_TEST01_PKG
过程/函数名称:import_rec
API返回:FND消息代码
注意:选择“FND消息代码”接口程序中通过以下代码返回错误:
fnd_message.set_name('CUX', 'CUX_WEBADI_MESSAGE01');
fnd_message.set_token('MESSAGESTR', 'FND-MSG01:API调用错误.'); --改成要提示的具体消息
fnd_message.raise_error;
其中'AC_WEBADI_MESSAGE'是自行定义的一个消息,为了显示需要提示的具体消息。
然后,点击“应用”。如果再选中这个新创建的接口,会如下展开接口参数:
这是建立一个新的Integrator的第三步,当然,不是必须要设置的一步。Content的作用是在user下载template的时候,可以把本机的准备好的datafile或从系统中读取的数据,传给这个template,这样的话,download下来的template就是一个有数据的template,也就不需要user输入或copy数据了。
这里我们可以不定义,直接下一步。
这里我们可以不定义,直接提交。
如果你导入的数据不是插入到系统标准的接口表,或者插入到接口表之后要手动提交一个请求,才能将接口表里的数据导入到ERP,则需要设置导入程序。
导入程序是指你一次性导入几十上百条数据之后,再一次性跑请求,将这些数据导入到ERP正式表,千万不要把跑请求的代码写到接口程序里,那样会导致导入非常慢。
这里我们可以不定义,直接提交。
Integrator创建成功。
定义Layout就是定义下载Template的具体布局样式。
在管理集成器页面中搜索创建好的集成器:CUX_WEBADI_TEST01。
选中后,点击定义布局:
然后点击创建:
输入布局名称:CUX_WEBADI_TEST01_LAYOUT,题头数默认1不用管,直接下一步。
要区分两种Filed:一种是从API Procedure Name的参数列表中自动带出来的,并且自动去掉前面的P_;另一种是View Name的视图字段。
“必须字段”区域的字段是API Procedure Name的参数列表中没有Default值的;其他的都是“可选字段”区域的。
注意:
1. 我们可以安排这些字段显示在Header还是Line,Header和Line仅仅是在Excel中的布局问题,实际都是作为Line一起传给API Procedure,一行一次,不管这里是Header还是Line。
2. 视图的字段名和API参数P_XX,参数去掉P_后的部分最好不要和视图里面的字段名相同。
所以在Excel里面显示是分头行的、作为参数传给API Procedure时其实是并列的,至于在API Procedure代码里面,我们又可以人为区分出头字段和行字段,然后插到不同的表中去。
这里我们我们全部改为Line,追加显示DATE。
默认值设置可以参考系统预置的Web ADI设置:
SELECT DISTINCT t.default_type, t.default_value
FROM bne_interface_cols_vl t
WHERE t.default_type IS NOT NULL;
保护表、样式表、应用筛选、图像都不用修改。可以修改字段的显示顺序和是否只读、宽度和冻结列的属性。然后点击应用。
使用应用开发员职责定义Web ADI对应的功能。
应用产品>功能
功能:CUXWBAT01;
用户功能名:CUX:测试导入;
说明:CUX:测试导入;
类型:SSWA servlet函数;
支持维护模式:无;
上下文相关性:责任;
参数:bne:page=BneCreateDoc&bne:viewer=BNE:EXCEL%25&bne:reporting=N&bne:integrator=CUX:CUXWBAT01_XINTG
注:这种定义参数的写法是简易写法,红色部分需要在后台表中找出Integrator Code。
HTML调用:BneApplicationService;
将功能分配给相应职责的菜单:
因为之前配置文件中“BNE Allow No Security Rule”选项,我们设置的是“Y”,所以这里不需要设置安全性规则,用户也可以正常使用ADI。
如果在配置文件中启用了使用功能安全性,就需要为Web ADI定义安全性规则,参考如下:
使用桌面集成管理器(Desktop Integration Manager)职责定义安全性规则。
说明:
在11i里,我们一般是建立一个subfunction做为securityfunciton,然后与integrator建立关联,再把这个securityfunction及ADIfunction一起加入到usermenu中,user即可使用此ADI,当时就觉得挺麻烦。当然,你可以通过设置profile去禁用ADIsecurity.
在R12中,可以很方便的在定义integrator时定义securityfunction了,而且一个integrator可以定义多个securityfunction。但我查了一下诸多的标准integrator,它们用的securityfunction大多是系统标准的form.function和webfunciton,而不是subfunction.这也就意味着,只要usermenu包含在某个职责下,这个职责下有这个form.function的话,即可使用这个ADI,这样的话,我们就不需要再建一个subfunction了,更方便了。
因此我们客制化的integrator也可以选择某一个系统标准的form.function做为securityfunction。比如我建了一个assetmassload的ADI,我希望只要能进行asset常规操作的user都能使用这个ADI。我选择了一个系统标准的form.function:FAXASSET。做为我的ADI的securityfunciton。但布署时要注意:你的ADI的function必须要和FAXASSET这个function在同一个menu里,即在同一个职责下。此项功能大大方便了ADI的布署,非常有用。
参考:
桌面集成管理器 >管理集成器
搜索之前定义好的集成器,选中后点击更新,在安全性规则下添加功能。
在弹出的页面中添加系统标准的功能:创建文档、桌面集成 -创建文档;
点击下一步,然后提交。
再将包含“创建文档”或“桌面集成 -创建文档”功能的菜单分配给包含ADIfunction的菜单。
如果设定安全性规则的时候添加的标准功能本身就在应用葫芦的菜单中,这里就不用再分配了,
这样做的目的是方便大批量的Web ADI统一配置比较方便,都只要挂一个子菜单就OK了。
桌面集成管理器 >管理集成器
搜索之前定义好的集成器,选中后点击更新,选择接口,展开接口属性,然后更新需要添加List功能的属性。这里在P_ATTR03上添加认证状态的List。
验证类型:表;
标识列:MEANING;(实际数据列)
含义列:MEANING;(显示列)
验证实体:FND_LOOKUP_VALUES;(就是表名)
Where子句:LOOKUP_TYPE = 'CUX_CERTIFICATION_STATUS' AND LANGUAGE = 'ZHS' AND LOOKUP_CODE IN ('0','1','2','3');
值列表类型:弹出式列表;
上方提示:认证状态;
用户提示文本:CUX_CERTIFICATION_STATUS;
组名和组件名留空,List验证方式不需要设置组件。
注:这里是支持多表的,类似表值集的定义。
2. 查看实现效果
LOV功能需要先定义组件,然后再修改对应的接口属性来实现。
桌面集成管理器>管理组件,点击创建组件。
显示名:CUX_USER
内部名称:CUX_USER
应用:CUX Customization Application
组件类型:表值列表
组件实体:BneOAValueSet(默认)
点击应用后,设置组件参数。
参数名 |
参数值 |
设置说明 |
table-column-alias |
P_USER_ID,P_USER_NAME, P_USER_DESC |
返回到的接口字段名。如果提取到Lov里的表字段名与接口字段名不一样,需要在这里定义别名,与接口字段名保持一致 |
table-column-sort |
ASCENDING |
排序,使用默认值 |
table-columns |
USER_ID,USER_NAME, DESCRIPTION |
按次序列出需要显示的表字段名,以西文逗号隔开 |
table-headers |
用户ID,用户名,用户姓名 |
按次序列出需要显示的表字段名对应的名称,以西文逗号隔开 |
table-select-column |
P_USER_ID,P_USER_NAME, P_USER_DESC |
返回到的接口字段名 |
window-caption |
请选择用户 |
弹出窗口的标题 |
window-height |
500 |
调整弹出窗口的高度 |
window-width |
400 |
调整弹出窗口的宽度 |
桌面集成管理器 >管理集成器
搜索之前定义好的集成器,选中后点击更新,选择接口,展开接口属性,然后更新需要添加Lov功能的属性。这里在P_USER_ID上添加用户选择的Lov。
验证类型:表;
标识列:USER_ID;(实际数据列)
含义列:USER_NAME;(显示列)
说明列:DESCRIPTION;
验证实体:FND_USER;(就是表名)
Where子句:留空(根据实际填写,参考List设置)
组件名:CUX_USER
上方提示:用户ID;
组名和值列表类型留空。
注:这里是支持多表的,类似表值集的定义。
选择用户后,用户ID,用户名和用户姓名都自动带了出来:
后台客制化或标准Interface中含有Date类型的字段。
通过如下的标准API来创建:
BEGIN
bne_integrator_utils.create_calendar_lov(p_application_id =>20003,--Your custom application
p_interface_code =>'CUXWBAT01_XINTG_INTF1',--Your custom interface code
p_interface_col_name=>'P_DATE',--Your date_item ininterface
p_window_caption =>'选择日期',--Window Prompt
p_window_width =>NULL,--Use default
p_window_height =>NULL,--Use default
p_table_columns =>'ADI_DATE',--Your table date_fields
p_user_id =>0);
END;
内容的作用是用户在下载Web ADI模板的时候可以把本机或系统中的数据传给模板,这样用户下载下来的模板就是一个带有数据的模板。
桌面集成管理器 >管理集成器
搜索之前定义好的集成器,选中后点击更新,下一步到内容定义页面,创建内容。
内容名称:CUX_WEBADI_TEST01_CONTENT;
内容类型:SQL查询; (主要是文本文件和SQL查询,文本文件是要用户提供一个本地的文件。而SQL查询可以直接从系统中抽取数据。)
查询:
SELECT DISTINCT fu.user_name,
frt.responsibility_name
FROM wf_local_user_roles wlur,
fnd_user fu,
fnd_responsibility_tl frt
WHERE wlur.user_name = fu.user_name
AND wlur.role_orig_system_id = frt.responsibility_id
AND frt.language ='ZHS'
AND fu.USER_ID = FND_PROFILE.value('USER_ID')
仅报告,不要勾选。此项仅用于下载数据。
填写完成后,可以点击测试查询检查SQL的正确性。然后点击应用。
映射就是把内容中抽取的字段和需要显示在模板上的字段做一个映射。
桌面集成管理器 >管理集成器
搜索之前定义好的集成器,选中后点击定义映射。
如果有多个内容,这里要选择内容然后定义对应的映射。
映射名称:CUX_WEBADI_TEST01_MP;
映射关键字:CUX_WAT01_KEY;(唯一)
列数:2;(与内容提取列数相等)
左边选内容抽取列,右边选对应的接口列。注意,一定要选,手工输会有问题,点击应用。
这里要注意在win10+Excel2016环境下Template加载会报错,。
原因是excel宏加载时引用了MSXML3.0造成的,手动修改引用MSXML6.0就可以正常加载了。
在win7+Excel2010环境下是正常加载的。
快捷方式的作用就是在功能参数中指定好Web ADI使用的集成器、布局、内容和映射,这样在菜单中点击Web ADI后,就不需要在页面中一步一步的再重新设定了,会直接跳出模板下载。
查找Web ADI对应的功能,然后修改参数为:
bne:page=BneCreateDoc&bne:viewer=BNE:EXCEL%25&bne:reporting=N&bne:integrator=CUX:CUXWBAT01_XINTG&bne:layout=CUX:CUX_WEBADI_TEST01_LAYOUT &bne:content=CUX:CUXWBAT01_CNT1 &bne:map=CUX:CUXWBA01_MP3 &bne:noreview=anything
注:
Integrator:通过以下方式获取:
SELECT t.integrator_code FROM bne.bne_integrators_tl tWHERE t.user_name='CUX_WEBADI_TEST01';
Layout:通过以下方式获取:
SELECT a.layout_code FROM bne_layouts_b aWHERE a.integrator_code='CUXWBAT01_XINTG';
Content:通过以下方式获取:
SELECT t.content_code FROM bne_contents_b tWHERE t.integrator_code='CUXWBAT01_XINTG';
Map:通过以下方式获取:
SELECT t.mapping_code FROM bne_mappings_b tWHERE t.integrator_code='CUXWBAT01_XINTG';