解决EBS FORM 无法导出主从关系(Master Detail)数据到EXCEL。

来源:互联网 发布:软件设计师难不难 编辑:程序博客网 时间:2024/05/20 18:43

    以下是关于解决EBS标准导出功能无法导出主从关系数据的方法。

 

解决思路:

1.  在form上增加一个导出按钮,或者在工具栏注册一个菜单项。

2.  用制作一个报表,或者模仿系统标准的导出功能。然后用上面的按钮或者菜单项直接调用。

 

这里主要介绍模仿系统标准导出功能。

 

步骤:

       1.  直接修改form级trigger EXPORT,把默认的 app_standard.event('EXPORT')注释掉。把下面的代码复制进去。

        

/*导出主从结构的COST GROUP 数据。*/DECLARE  --以上五个变量照搬即可  URL               VARCHAR2(2000);  DB_FILE           NUMBER;  WEB_SERVER_PREFIX VARCHAR2(255);  RES               BOOLEAN;  MIME_TYPE         VARCHAR2(255);   L_ORGANZIATION_ID NUMBER;  --定义一个包含主从关系数据的CURSOR  CURSOR CSR(V_ORGANIZATION_ID IN NUMBER) IS    SELECT CST.COST_GROUP_CODE,           CST.COST_GROUP_DESCRIPTION,           CST.COST_GROUP_DISABLE_DATE,           CAP.CAPABILITY,           EQP.EQP_CAP_DESC DESCRIPTION,           CAP.ACTIVE      FROM CUX2_CST_COST_GROUP_ALL      CST,           CUX2_CST_COST_GROUP_EQPS_ALL CAP,           CUX2_BOM_EQP_CAP_TYPE        EQP     WHERE CAP.COST_GROUP_ID(+) = CST.COST_GROUP_ID       AND EQP.EQP_CAP_CODE(+) = CAP.CAPABILITY       AND EQP.ORGANIZATION_ID(+) = CAP.ORGANIZATION_ID       AND CAP.ORGANIZATION_ID(+) = CST.ORGANIZATION_ID       AND CST.ORGANIZATION_ID = V_ORGANIZATION_ID     ORDER BY CST.ORGANIZATION_ID, CST.COST_GROUP_CODE, CAP.CAPABILITY;BEGIN  --获取Organzition_id  L_ORGANZIATION_ID := FND_PROFILE.VALUE('MFG_ORGANIZATION_ID');  --更改鼠标式样:漏斗鼠标(忙状态)  SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');  --显示进度条窗口,并设置进度为0  APP_WINDOW.PROGRESS(0);  --创建数据包,并设置文件头类型。  DB_FILE := FND_GFM.FILE_CREATE(CONTENT_TYPE => 'text/html',                                 PROGRAM_NAME => 'export');  /*系统标准的导出功能导出的只能是当前聚焦的BLOCK中已显示item数据。    当客制的FORM含有主从关系的两个BLOCK则系统标准的导出则不能导出主从数据。    研究系统标准导出后的文本格式如下:    Cost Group Code     Cost Group Description    Cost Group Disable Date    test-1              a test cost group code    2011-09-09    test-2              another codst group code  2011-10-10    .......    ...    ..       第一行为标题头,中间较长距离的空白为 tab 符,也就是  chr(9),    接下来的数据行,数据列之间的分隔符也是 tab.    摸清规律,模仿导出数据就很容易了。    */  --输出题头行    注:chr(9) 为  tab键  FND_GFM.FILE_WRITE_LINE(DB_FILE,                          'Cost Group Code' || CHR(9) ||                          'Cost Group Description' || CHR(9) ||                          'Cost Group Disable Date' || CHR(9) ||                          'Capability' || CHR(9) || 'Description' || CHR(9) ||                          'Active');  --循环数据行  FOR R IN CSR(L_ORGANZIATION_ID) LOOP    FND_GFM.FILE_WRITE_LINE(DB_FILE,                            R.COST_GROUP_CODE || CHR(9) ||                            R.COST_GROUP_DESCRIPTION || CHR(9) ||                            TO_CHAR(R.COST_GROUP_DISABLE_DATE,                                    'YYYY-MM-DD HH24:MI:SS') || CHR(9) ||                            R.CAPABILITY || CHR(9) || R.DESCRIPTION ||                            CHR(9) || R.ACTIVE);  END LOOP;  --关闭数据包  DB_FILE := FND_GFM.FILE_CLOSE(DB_FILE);  --将数据包提交给客户端  URL := FND_GFM.CONSTRUCT_DOWNLOAD_URL(WEB_SERVER_PREFIX, DB_FILE, TRUE);  --DBMS_OUTPUT.PUT_LINE(URL);  --打开URL地址下载  FND_UTILITIES.OPEN_URL(URL);  --更改鼠标式样:默认指针(常规状态)  SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');  APP_WINDOW.PROGRESS(1); --显示进度条窗口,并设置进度为1(100%)END;

 

效果:

 




至于这种办法与 跑请求的 方法相比。个人感觉这种办法比较快。只是个人看法。。。。。

OK ,就这样。

原创粉丝点击