Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 15th, 2012  |  syntax: None  |  size: 9.01 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Error When Calling from Spreadsheet, works fine from menu
  2. var webhookurl = "";
  3.  
  4. var jsondata = [];
  5.  
  6. function __urlCheck_(str) {
  7.     var v = new RegExp();
  8.     v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\.[A-Za-z0-9-_%&?/.=]+$");
  9.     if (!v.test(str)) {
  10.         return false;
  11.     }
  12.     return true;
  13. }
  14.  
  15. function __getWebHook_(){
  16.     var newwebhookurl = UserProperties.getProperty('webhookurl_HCR');
  17.     if((newwebhookurl == null || newwebhookurl.length==0) && (webhookurl.length==0 || webhookurl==null)){
  18.         var newwebhookurl = Browser.inputBox("Paste your web hook url here");
  19.         var newwebhookurl = newwebhookurl.replace(/^s*/, '').replace(/s*$/, '');
  20.         if('cancel' == newwebhookurl.toLowerCase()){
  21.             Browser.msgBox('Before this connection will work, you will have to enter a webhook url.');
  22.         }else if(newwebhookurl.length==0 || newwebhookurl == null || __urlCheck_(newwebhookurl) == false){
  23.             Browser.msgBox('Sorry, you must specify a webhook url.');
  24.             __getWebHook_();
  25.         }else{
  26.             UserProperties.setProperty('webhookurl_HCR',newwebhookurl);
  27.             webhookurl = newwebhookurl;
  28.         }
  29.     }else if(webhookurl.length==0 || webhookurl==null){
  30.         webhookurl = newwebhookurl;
  31.     }
  32. }
  33.  
  34.  
  35. function __ClearWebHook_(){
  36.     UserProperties.setProperty('webhookurl_HCR','');
  37.     webhookurl = '';
  38.     __getWebHook_();
  39. }
  40.  
  41.  
  42. function onOpen() {
  43.   var ss = SpreadsheetApp.getActiveSpreadsheet();
  44.   var menuEntries = [{name: "Pipeline", functionName: "__PipelineMenu__"},
  45.                      {name: "Activity", functionName: "__ActivityMenu__"},
  46.                      {name: "Reset WebHook", functionName: "__ClearWebHook_"}
  47.                      ];
  48.   ss.addMenu("Heap CRM Reports", menuEntries);
  49.  
  50. }
  51.  
  52.  
  53. function onInstall(){
  54.     onOpen();
  55. }
  56.  
  57. function __PipelineMenu__(){
  58.     var mydoc = SpreadsheetApp.getActiveSpreadsheet();
  59.     var myapp = UiApp.createApplication().setTitle('Pipeline');
  60.     var mygrid = myapp.createGrid(5, 2);
  61.     mygrid.setWidget(0, 0, myapp.createLabel('Category:'));
  62.     mygrid.setWidget(0, 1, myapp.createTextBox().setName('category'));
  63.     mygrid.setWidget(1, 0, myapp.createLabel('Label:'));
  64.     mygrid.setWidget(1, 1, myapp.createTextBox().setName('label'));
  65.     mygrid.setWidget(2, 0, myapp.createLabel('User:'));
  66.     mygrid.setWidget(2, 1, myapp.createTextBox().setName('user'));
  67.     mygrid.setWidget(3, 0, myapp.createLabel('Type:'));
  68.     var lbt = myapp.createListBox(false).setName('type');
  69.     lbt.setVisibleItemCount(1);
  70.     lbt.addItem('Lead');
  71.     lbt.addItem('Opportunity');
  72.     lbt.addItem('Customer');
  73.     mygrid.setWidget(3, 1, lbt);
  74.     mygrid.setWidget(4, 0, myapp.createLabel('Kind:'));
  75.     var lbk = myapp.createListBox(false).setName('kind');
  76.     lbk.setVisibleItemCount(1);
  77.     lbk.addItem('Expected Value');
  78.     lbk.addItem('Value');
  79.     lbk.addItem('Count');
  80.     mygrid.setWidget(4, 1, lbk);
  81.     var panel = myapp.createVerticalPanel();
  82.     panel.add(mygrid);
  83.     var button = myapp.createButton('Submit');
  84.     var handler = myapp.createServerClickHandler('__processPipeline');
  85.     handler.addCallbackElement(mygrid);
  86.     button.addClickHandler(handler);
  87.     panel.add(button);
  88.     myapp.add(panel);
  89.     mydoc.show(myapp);
  90. }
  91.  
  92.  
  93. function __ActivityMenu__(){
  94.     var mydoc = SpreadsheetApp.getActiveSpreadsheet();
  95.     var myapp = UiApp.createApplication().setTitle('Activity');
  96.     var mygrid = myapp.createGrid(7, 2);
  97.     mygrid.setWidget(0, 0, myapp.createLabel('Category:'));
  98.     mygrid.setWidget(0, 1, myapp.createTextBox().setName('category'));
  99.     mygrid.setWidget(1, 0, myapp.createLabel('Label:'));
  100.     mygrid.setWidget(1, 1, myapp.createTextBox().setName('label'));
  101.     mygrid.setWidget(2, 0, myapp.createLabel('User:'));
  102.     mygrid.setWidget(2, 1, myapp.createTextBox().setName('user'));
  103.     mygrid.setWidget(3, 0, myapp.createLabel('Date:'));
  104.     mygrid.setWidget(3, 1, myapp.createDateBox().setId('date'));
  105.     mygrid.setWidget(4, 0, myapp.createLabel('Range:'));
  106.     var lb = myapp.createListBox(false).setName('range');
  107.     lb.setVisibleItemCount(1);
  108.     lb.addItem('Week');
  109.     lb.addItem('Month');
  110.     lb.addItem('Year');
  111.     mygrid.setWidget(4, 1, lb);
  112.     mygrid.setWidget(5, 0, myapp.createLabel('Type:'));
  113.     var lbt = myapp.createListBox(false).setName('type');
  114.     lbt.setVisibleItemCount(1);
  115.     lbt.addItem('Lead');
  116.     lbt.addItem('Opportunity');
  117.     lbt.addItem('Customer');
  118.     mygrid.setWidget(5, 1, lbt);
  119.     mygrid.setWidget(6, 0, myapp.createLabel('Kind:'));
  120.     var lbk = myapp.createListBox(false).setName('kind');
  121.     lbk.setVisibleItemCount(1);
  122.     lbk.addItem('Expected Value');
  123.     lbk.addItem('Value');
  124.     lbk.addItem('Count');
  125.     mygrid.setWidget(6, 1, lbk);
  126.     var panel = myapp.createVerticalPanel();
  127.     panel.add(mygrid);
  128.     var button = myapp.createButton('Submit');
  129.     var handler = myapp.createServerClickHandler('__processActivity');
  130.     handler.addCallbackElement(mygrid);
  131.     button.addClickHandler(handler);
  132.     panel.add(button);
  133.     myapp.add(panel);
  134.     mydoc.show(myapp);
  135. }
  136.  
  137.  
  138. function __processActivity(inputvalues){
  139.     var category = inputvalues.parameter.category;
  140.     var label = inputvalues.parameter.label;
  141.     var user = inputvalues.parameter.user;
  142.     var date = inputvalues.parameter.date;
  143.     var range = inputvalues.parameter.range;
  144.     var type = inputvalues.parameter.type;
  145.     var kind = inputvalues.parameter.kind;
  146.     var answer = Activity(kind,type,date,range,category,user,'',label);
  147.     var mysheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  148.     mysheet.getActiveCell().setValue(answer);
  149.     var app = UiApp.getActiveApplication();
  150.     app.close();
  151.     return app;
  152. }
  153.  
  154. function Activity(kind,type,date,range,category,user,mylabel,label){
  155.     var kind = kind || '';
  156.     var type = type || '';
  157.     var category = category || '';
  158.     var user = user || '';
  159.     var mylabel = mylabel || '';
  160.     var label = label || '';
  161.     var range = range || '';
  162.     var date = date || '';
  163.     var data = __getData_('activity ' + kind,category,user,label,mylabel,date,range);
  164.     var type = type.toLowerCase();
  165.     if(type=='lead' && data.hasOwnProperty('lead')==true){
  166.         return data['lead'];
  167.     }else if(type=='customer' && data.hasOwnProperty('customer')==true){
  168.         return data['customer'];
  169.     }else if(type=='opportunity' && data.hasOwnProperty('opportunity')==true){
  170.         return data['opportunity'];
  171.     }else{
  172.         return 0;
  173.     }
  174. }
  175.  
  176. function Pipeline(kind,type,category,user,mylabel,label){
  177.     var kind = kind || '';
  178.     var type = type || '';
  179.     var category = category || '';
  180.     var user = user || '';
  181.     var mylabel = mylabel || '';
  182.     var label = label || '';
  183.     var data = __getData_('pipeline ' + kind,category,user,label,mylabel);
  184.     var type = type.toLowerCase();
  185.     if(type=='lead' && data.hasOwnProperty('lead')==true){
  186.         return data['lead'];
  187.     }else if(type=='customer' && data.hasOwnProperty('customer')==true){
  188.         return data['customer'];
  189.     }else if(type=='opportunity' && data.hasOwnProperty('opportunity')==true){
  190.         return data['opportunity'];
  191.     }else{
  192.         return 0;
  193.     }
  194. }
  195.  
  196. function __processPipeline(inputvalues){
  197.     var category = inputvalues.parameter.category;
  198.     var label = inputvalues.parameter.label;
  199.     var user = inputvalues.parameter.user;
  200.     var type = inputvalues.parameter.type;
  201.     var kind = inputvalues.parameter.kind;
  202.     var answer = Pipeline(kind,type,category,user,'',label);
  203.     var mysheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  204.     mysheet.getActiveCell().setValue(answer);
  205.     var app = UiApp.getActiveApplication();
  206.     app.close();
  207.     return app;
  208. }
  209.  
  210. function __getData_(mlist,mcategory,muser,label,mlabel,mdate,mrange) {
  211.     var addon = '';
  212.     var mlist = mlist || '';
  213.     var mcategory = mcategory || '';
  214.     var muser = muser || '';
  215.     var label = label || '';
  216.     var mlabel = mlabel || '';
  217.     var mdate = mdate || '';
  218.     var mrange = mrange || '';
  219.     if(mcategory.length>0){
  220.         addon = addon + "&category=" + encodeURIComponent(mcategory);
  221.     }
  222.     if(muser.length>0){
  223.          addon = addon + "&user=" + encodeURIComponent(muser);
  224.     }
  225.     if(mlabel.length>0){
  226.          addon = addon + "&mylabel=" + encodeURIComponent(mlabel);
  227.     }
  228.     if(label.length>0){
  229.         addon = addon + "&label=" + encodeURIComponent(label);
  230.     }
  231.     if(mdate.length>0){
  232.          addon = addon + "&date=" + encodeURIComponent(mdate);
  233.     }
  234.     if(mrange.length>0){
  235.         addon = addon + "&range=" + encodeURIComponent(mrange);
  236.     }
  237.     __getWebHook_();
  238.  
  239.     if(webhookurl.length==0 || webhookurl == null){
  240.         return [];
  241.     }
  242.     addon = "&list=" + encodeURIComponent(mlist) + addon;
  243.     for(i=0;i<jsondata.length;i++){
  244.         if(jsondata[i]['addon'].toLowerCase() == addon.toLowerCase()){
  245.             return jsondata[i]['json'];
  246.         }
  247.     }
  248.  
  249.     var url = webhookurl + addon;
  250.     var response = UrlFetchApp.fetch(url);
  251.     if (response.getResponseCode() == 200) {
  252.         var newid = jsondata.length;
  253.         jsondata[newid] = {};
  254.         jsondata[newid].json = Utilities.jsonParse(response.getContentText());
  255.         jsondata[newid].addon = addon.toLowerCase();
  256.         return jsondata[newid].json;
  257.     }
  258. }