nsinject.js
[app.wkmirror] / nsinject.js
1 NS = {
2     
3     rungrab : function(id)
4     {
5         this.id = id;
6         var frameload = function()
7         {
8             var ifd = ifr.contentWindow.document;
9             var chk = ifd.getElementById('lines');
10             if (!ifd.getElementById('rptdataarea') || !ifr.contentWindow.reportTable
11                 ) {
12                 console.log('report not ready?');
13                 window.setTimeout(frameload,1000);
14                 return;
15                 
16             }
17             
18             
19             console.log('report ready?');
20             
21             if (chk.value !='T') {
22                 chk.value= 'T';
23                 ifd.getElementById('date1').value = '1/1/2008';
24                 ifd.getElementById('date2').value = '1/1/2013';
25                 
26                 ifd.getElementById('footerform').submit();
27                 
28                 return;
29             }
30             
31             if (   ifr.contentWindow.reportTable.oContentProvider.bRequestPending
32                 || !ifr.contentWindow.reportTable.isInLoadedState()) {
33                 console.log('report not ready?');
34                 window.setTimeout(frameload,1000);
35                 return;
36                 
37             }
38             
39             
40             
41             console.log("TRY downloading!");
42             
43             var ar = ifd.getElementById('footerform').elements;
44             var data= {};
45             for(var i =0; i < ar.length; i++) {
46                 var e = ar[i];
47                 data[e.name] = e.value;
48             }
49             console.log(data);
50             console.log(ifr.contentWindow.reportTable.getTotalRowCount());
51              NS.downloaddata(
52                 'https://system.netsuite.com/app/reporting/reportrunner.nl',
53                 {
54                     id: data.id,
55                     reportaction: 'exportcsv',
56                     apptype: 'html',
57                     visibleranges: '0,' +  ifr.contentWindow.reportTable.getTotalRowCount()
58                 }
59                 
60             );
61             
62         }
63         
64         // do stuff..
65         // we really just want to send a series of download requests..
66         //https://system.netsuite.com/app/reporting/reportrunner.nl?reporttype=REGISTER&acctid=403
67         
68         var ifr = document.createElement('iframe');
69         
70         ifr.setAttribute('src','https://system.netsuite.com/app/reporting/reportrunner.nl?reporttype=REGISTER&acctid=' + id);
71         ifr.setAttribute('width','900');
72         ifr.setAttribute('height','700');
73         ifr.addEventListener('load', frameload);
74         document.body.innerHTML = '';
75         
76         document.body.appendChild(ifr);
77         
78         /*
79         var ifd = ifr.contentWindow.document;
80         ifd.getElementById('lines_chkbox').
81         
82         var ar = ifd.getElementById('footerform').elements;
83         for(var i =0; i < ar.length; i++) {
84             var e = ar[i];
85             data[e.name] = e.value;
86         }
87         console.log(data);
88         
89         data.lines_chkbox = 'T';
90         data.reportaction = 'exportcsv'
91         //data.visibleranges =
92         data.apptype = 'html';
93         this.downloaddata(
94             'https://system.netsuite.com/app/reporting/reportrunner.nl?reporttype=REGISTER&acctid=403',
95             data
96         )
97         */
98         
99         
100     },
101     downloaddata : function (url,data) {
102         
103        
104         var xmlhttp = new XMLHttpRequest();
105                     
106         xmlhttp.open("POST", url,true);
107         xmlhttp.responseType = 'arraybuffer';
108         xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
109         var kv = [];
110         for(var i in data) {
111             kv.push(i +'=' + encodeURIComponent(  data[i]));
112         }
113         
114
115         xmlhttp.onload=function() {
116            
117             var ar= [];
118              
119             var r = new Uint8Array(xmlhttp.response);
120             for (i=0;i<r.byteLength;i++) {
121                 ar.push(r[i]);
122             }
123             
124             console.log(
125                 JSON.stringify ({
126                     requesturl : url,
127                     method: 'nsdownloadpage',
128                     filename : NS.id + '.csv',
129                     headers : xmlhttp.getAllResponseHeaders(),
130                     contentType:xmlhttp.getResponseHeader("Content-Type"),
131                     data: ar
132                 }));
133            
134         }
135         
136         xmlhttp.send(kv.join('&'));
137            
138     }
139     
140 }