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


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

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

解决思路:

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

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

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

步骤:

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

        

 

  1. /*导出主从结构的COST GROUP 数据。*/  
  2. DECLARE  
  3.   --以上五个变量照搬即可   
  4.   URL               VARCHAR2(2000);  
  5.   DB_FILE           NUMBER;  
  6.   WEB_SERVER_PREFIX VARCHAR2(255);  
  7.   RES               BOOLEAN;  
  8.   MIME_TYPE         VARCHAR2(255);  
  9.    
  10.   L_ORGANZIATION_ID NUMBER;  
  11.   --定义一个包含主从关系数据的CURSOR   
  12.   CURSOR CSR(V_ORGANIZATION_ID IN NUMBER) IS  
  13.     SELECT CST.COST_GROUP_CODE,  
  14.            CST.COST_GROUP_DESCRIPTION,  
  15.            CST.COST_GROUP_DISABLE_DATE,  
  16.            CAP.CAPABILITY,  
  17.            EQP.EQP_CAP_DESC DESCRIPTION,  
  18.            CAP.ACTIVE  
  19.       FROM CUX2_CST_COST_GROUP_ALL      CST,  
  20.            CUX2_CST_COST_GROUP_EQPS_ALL CAP,  
  21.            CUX2_BOM_EQP_CAP_TYPE        EQP  
  22.      WHERE CAP.COST_GROUP_ID(+) = CST.COST_GROUP_ID  
  23.        AND EQP.EQP_CAP_CODE(+) = CAP.CAPABILITY  
  24.        AND EQP.ORGANIZATION_ID(+) = CAP.ORGANIZATION_ID  
  25.        AND CAP.ORGANIZATION_ID(+) = CST.ORGANIZATION_ID  
  26.        AND CST.ORGANIZATION_ID = V_ORGANIZATION_ID  
  27.      ORDER BY CST.ORGANIZATION_ID, CST.COST_GROUP_CODE, CAP.CAPABILITY;  
  28. BEGIN  
  29.   --获取Organzition_id   
  30.   L_ORGANZIATION_ID := FND_PROFILE.VALUE('MFG_ORGANIZATION_ID');  
  31.   --更改鼠标式样:漏斗鼠标(忙状态)   
  32.   SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');  
  33.   --显示进度条窗口,并设置进度为0   
  34.   APP_WINDOW.PROGRESS(0);  
  35.   --创建数据包,并设置文件头类型。   
  36.   DB_FILE := FND_GFM.FILE_CREATE(CONTENT_TYPE => 'text/html',  
  37.                                  PROGRAM_NAME => 'export');  
  38.   /*系统标准的导出功能导出的只能是当前聚焦的BLOCK中已显示item数据。  
  39.     当客制的FORM含有主从关系的两个BLOCK则系统标准的导出则不能导出主从数据。  
  40.     研究系统标准导出后的文本格式如下:  
  41.     Cost Group Code     Cost Group Description    Cost Group Disable Date  
  42.     test-1              a test cost group code    2011-09-09  
  43.     test-2              another codst group code  2011-10-10  
  44.     .......  
  45.     ...  
  46.     ..  
  47.      
  48.     第一行为标题头,中间较长距离的空白为 tab 符,也就是  chr(9),  
  49.     接下来的数据行,数据列之间的分隔符也是 tab.  
  50.     摸清规律,模仿导出数据就很容易了。    
  51.   */  
  52.   --输出题头行    注:chr(9) 为  tab键   
  53.   FND_GFM.FILE_WRITE_LINE(DB_FILE,  
  54.                           'Cost Group Code' || CHR(9) ||  
  55.                           'Cost Group Description' || CHR(9) ||  
  56.                           'Cost Group Disable Date' || CHR(9) ||  
  57.                           'Capability' || CHR(9) || 'Description' || CHR(9) ||  
  58.                           'Active');  
  59.   --循环数据行   
  60.   FOR R IN CSR(L_ORGANZIATION_ID) LOOP  
  61.     FND_GFM.FILE_WRITE_LINE(DB_FILE,  
  62.                             R.COST_GROUP_CODE || CHR(9) ||  
  63.                             R.COST_GROUP_DESCRIPTION || CHR(9) ||  
  64.                             TO_CHAR(R.COST_GROUP_DISABLE_DATE,  
  65.                                     'YYYY-MM-DD HH24:MI:SS') || CHR(9) ||  
  66.                             R.CAPABILITY || CHR(9) || R.DESCRIPTION ||  
  67.                             CHR(9) || R.ACTIVE);  
  68.   END LOOP;  
  69.   --关闭数据包   
  70.   DB_FILE := FND_GFM.FILE_CLOSE(DB_FILE);  
  71.   --将数据包提交给客户端   
  72.   URL := FND_GFM.CONSTRUCT_DOWNLOAD_URL(WEB_SERVER_PREFIX, DB_FILE, TRUE);  
  73.   --DBMS_OUTPUT.PUT_LINE(URL);   
  74.   --打开URL地址下载   
  75.   FND_UTILITIES.OPEN_URL(URL);  
  76.   --更改鼠标式样:默认指针(常规状态)   
  77.   SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');  
  78.   APP_WINDOW.PROGRESS(1); --显示进度条窗口,并设置进度为1(100%)   
  79. END;  

效果:

 




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

OK ,就这样。

相关内容