ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SAP BPS: 用Javascript实现数据下载

SAP BPS: 用Javascript实现数据下载

原创 Linux操作系统 作者:leniz 时间:2011-08-26 11:03:52 0 删除 编辑
SAP BPS: 用Javascript实现数据下载
Robin Lei
 
      BPS的上传和下载实在不怎么样,都要写BSP去实现,上传没有办法,虽然我也曾想过用SAP的复制的方法,不过不是很容易控制,就放弃了,选择了网上传播的BPS上传的方法。 
 
     而预算本身的数据量不是很大,所以显示1000行应该不是太大问题。 而正是这一点,我又想起了JS的页面拷贝复制。
(之前的代码可以参照以前的帖子)
 
      目前碰到一个问题是, BPS 的Layout(就是格式)定义,会自动套用合并同值行,即上下行值相同会采用行合并。 这样用户如果把数据导出,显示的就是Excel里面的合并单元格, 这可是大大不行。 于是我又加入了以前为了Xcelsisu而写的代码,即将COLSPAN和ROWSPAN的数据恢复回完整的状态,这一点多亏自己以前把代码保持下来,复制黏贴就可以了。
 
 我们知道最终Web显示的Layout是一个Table,而这个table的名字就是Layout的名字加后缀‘-table’, 掌握这些规律后,整个过程就迎刃有余了。  当然,最后还加了了 列剔除的代码。 这也是针对一些特殊情况下的设计。
 
实现代码如下,(当然这里用到了伟大的jQuery)
1. 实现表格还原
 
$(document).ready(function(){
 
 

var i,j
var col, row,cols,cols_old,rows,len,lp
var text
col = 0
row = 0
//删除BPS Layout特定的CSS class
$("#LAYOUT_DOWNLOAD-table").removeClass("SAPBEXCellspacing");
//初始化装载行内容的数组
len = $("#LAYOUT_DOWNLOAD-table").find("tr").length;
var arr = new Array(len);
var flag = new Array(len);
var index
var findex
for(lp = 0 ; lp < len ; lp++){
   arr[lp] = new Array();
   flag[lp] = new Array();
 }
//对Layout表格进行循环
  $("#LAYOUT_DOWNLOAD-table").find("tr").each(function(i){
    $(this).find("td").each(function(j){
       cols = $(this).attr("colspan");
       if("undefined" == typeof cols){
         cols = 1
        }
       cols_old = cols;
       rows = $(this).attr("rowspan");
       if("undefined" == typeof rows){
         rows = 1
        } 
      text = $(this).text();
       row = i   
       index = -1;
       do{
           index = index + 1              
       }while(flag[row][index] == 'F') ;
       col = index
       do
        {    
          do
            {              
              text = text.replace(/,/g,"");
              arr[row][index] = text;
              flag[row][index] = 'F'   
              cols = cols -1;
              index = index + 1; 
             }while(cols > 0);  
          rows = rows - 1;
          row = row + 1 ;
          index  = col ;
          cols = cols_old
         }while(rows > 0);
   
      });
     row = i;
     index = 0;
     var str = '';
     //新增行
     //删除不需要的列;根据实际情况而定
      do
         {   
           if( index == 4){ 
// 第四列因为不需要进行剔除。
           }else{            
            str = str + "" + arr[row][index] + "";
           }
            index = index + 1; 
          }while( index < arr[row].length); 
       $(this).html(str);
    
  });
 
})
      
 
2.  内容复制函数
 function bringtoexcel(){
     var reg  = new RegExp("]*>","ig");
     var reg1 = new RegExp("","ig");
     var reg2 = new RegExp("     var uttext = document.all('LAYOUT_DOWNLOAD-table').outerHTML;
    // uttext = outtext.replace(reg,"");
    // uttext = outtext.replace(reg1,"");
     uttext = outtext.replace(reg2,"   
     window.clipboardData.setData("Text",outtext);
     var ExApp = new ActiveXObject("Excel.Application") 
     var ExWBk = ExApp.workbooks.add()  
     var ExWSh = ExWBk.worksheets(1)  
     ExApp.DisplayAlerts = false  
     ExApp.visible = true   
     ExWBk.worksheets(1).Paste;
 }
 
3. 加入下载按键
 onclick="bringtoexcel()"
 class="urBtnStd urV"
 id="fb_print"
 ct="Button" style="white-space:nowrap;">数据下载
 
以上测试通过,使用OK。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-705840/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-31

  • 博文量
    448
  • 访问量
    1111555