<xi:include href="../bindings/www.backbase.com.2006.btl/codeHighlighter/codeHighlighter.xml"></xi:include> <d:tdl xmlns:d="http://www.backbase.com/2006/tdl" xmlns:test="http://observer_test/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- definition of timer class --> <d:namespace name="http://www.backbase.com/alarm_example/"> <d:element name="alarm"> <d:constructor type="text/javascript"> bb.callMethod(this, 'getAlarm'); var slf = this; setInterval( function() { var dNow = new Date, oClock = bb.callMethod(bb.document, 'getElementById', ['clock_time']) iAlarm = slf._alarm; oClock.viewNode.innerHTML = dNow; if (iAlarm) { var iNow = dNow.getTime(), iRemain = 0, oAlarm = bb.callMethod(bb.document, 'getElementById', ['alarm_time']), oCountdown = bb.callMethod(bb.document, 'getElementById', ['countdown']); var dAlarm = new Date; dAlarm.setTime(iAlarm); oAlarm.viewNode.innerHTML = dAlarm; if (iNow &gt; iAlarm) { alert('Alarm'); slf._alarm = 0; } else iRemain = iNow - iAlarm; oCountdown.viewNode.innerHTML = parseInt(iRemain / 1000) + ' s'; } }, 125 // ms ); </d:constructor> <!-- gets alarm from offline storage --> <d:method name="getAlarm"> <d:body type="text/javascript"> var iAlarm = 0; if (window.google &amp;&amp; google.gears) { var db = google.gears.factory.create('beta.database', '1.0'); db.open('database_alarm_example'); db.execute('create table if not exists Alarm (Timestamp int)'); var rs = db.execute('select * from Alarm'); while (rs.isValidRow()) { iAlarm = parseInt(rs.field(0)); rs.next(); } rs.close(); } var iNow = (new Date).getTime(); if (iNow &gt; iAlarm) iAlarm = 0; this._alarm = iAlarm; </d:body> </d:method> <!-- set alarm --> <d:method name="setAlarm"> <d:argument name="iDateTime" type="number"></d:argument> <d:body type="text/javascript"> this._alarm = iDateTime; bb.callMethod(this, 'storeAlarm', [iDateTime]); </d:body> </d:method> <!-- stores alarm value to offline storage --> <d:method name="storeAlarm"> <d:argument name="iDateTime" type="number"></d:argument> <d:body type="text/javascript"> if (window.google &amp;&amp; google.gears) { var db = google.gears.factory.create('beta.database', '1.0'); db.open('database_alarm_example'); db.execute('create table if not exists Alarm (Timestamp int)'); db.execute('insert into Alarm values (?)', [iDateTime]); } </d:body> </d:method> </d:element> </d:namespace> </d:tdl>

Content

  • Author: Backbase
  • Revision: 1
  • Core Compatibility: 4.1+
  • Browsers: IE6+, FF1.5+
  • Tags:

Integrating with Google Gears

Introduction

One of the great advantages of Backbase is that it easily integrates with third-party widgets. In this example we will demonstrate how you can combine Backbase with the Google Gears library.

This example uses the context of a simple alarm application to showcase several useful techniques for creating Backbase applications:

  • using precreated TDL components
  • creating TDL components from scratch
  • writing handlers on common events
  • optional interfacing to the Google Gears API

Live Example

<xi:include xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" href="../bindings/config.xml"></xi:include> <e:script xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> if (!window.google || !google.gears)) { var oInstall = bb.callMethod(bb.document, 'getElementById', ['installation']); bb.setProperty(oInstall, 'display', 'block'); } </e:script> <example:alarm xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="alarm"></example:alarm> <table xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tr> <td rowspan="1" colspan="1">Current time:</td> <td id="clock_time" rowspan="1" colspan="1"></td> </tr> <tr> <td rowspan="1" colspan="1">Alarm is set at:</td> <td id="alarm_time" rowspan="1" colspan="1"></td> </tr> <tr> <td rowspan="1" colspan="1">Countdown timer:</td> <td id="countdown" rowspan="1" colspan="1"></td> </tr> </table> <hr xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> <br xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> <input xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="text" id="alarm_input" value="dd-mm-yyyy hh:mm" maxlength="16" /> <b:button xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> Now <e:handler event="click" type="text/javascript"> var dNow = new Date oInput = bb.callMethod(bb.document, 'getElementById', ['alarm_input']), iDate = dNow.getDate(), iMonth = dNow.getMonth() + 1, iYear = dNow.getFullYear(), iHours = dNow.getHours(), iMinutes = dNow.getMinutes(); if (iDate &lt; 10) iDate = '0' + iDate; if (iMonth &lt; 10) iMonth = '0' + iMonth; if (iHours &lt; 10) iHours = '0' + iHours; if (iMinutes &lt; 10) iMinutes = '0' + iMinutes; bb.setProperty(oInput, 'value', iDate + '-' + iMonth + '-' + iYear + ' ' + iHours + ':' + iMinutes); </e:handler> </b:button> <br xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> <b:button xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" margin="15px 0px 0px 0px"> Set alarm <e:handler event="click" type="text/javascript"> try { var oInput = bb.callMethod(bb.document, 'getElementById', ['alarm_input']), sInput = bb.getProperty(oInput, 'value'), aDateTime = sInput.split(' '), sDate = aDateTime[0], sTime = aDateTime[1], aDate = sDate.split('-'), aTime = sTime.split(':'); if (aDate.length != 3 || aTime.length != 2) throw 1; if (aDate[0].length != 2 &amp;&amp; aDate[1].length != 2 &amp;&amp; aDate[3].length != 4) throw 2; if (aTime[0].length != 2 &amp;&amp; aTime[1].length != 2) throw 3; var iDay = parseInt(aDate[0]), iMonth = parseInt(aDate[1] - 1), iYear = parseInt(aDate[2]), iHours = parseInt(aTime[0]), iMinutes = parseInt(aTime[1]), oAlarm = bb.callMethod(bb.document, 'getElementById', ['alarm']); dDateTime = new Date; if (iDay &lt; 1 || iDay &gt; 31 || iMonth &lt; 0 || iMonth &gt; 11) throw 4; dDateTime.setDate(iDay); dDateTime.setMonth(iMonth ); dDateTime.setYear(iYear); dDateTime.setHours(iHours); dDateTime.setMinutes(iMinutes); dDateTime.setSeconds(0); dDateTime.setMilliseconds(0); bb.callMethod(oAlarm, 'setAlarm', [dDateTime.getTime()]); } catch(oError) { alert('Error ' + oError + ': Invalid format, please use dd-mm-yyyy hh:mm'); } </e:handler> </b:button> <div xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="installation" display="none"> <div style="margin-top: 40px;margin-bottom:15px;"> <b:button> Install Google Gears <e:handler event="click" type="text/javascript"> location.href = 'http://gears.google.com/?action=install&amp;message=Backbase Alarm Example&amp;return=' + location.href; </e:handler> </b:button> </div> If you don't install the Google Gears software the example will still work. However, the alarm time will not be stored when closing the browser or navigating away from the page. </div> <hr xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> <em xmlns:b="http://www.backbase.com/2006/btl" xmlns:c="http://www.backbase.com/2006/command" xmlns:e="http://www.backbase.com/2006/xel" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:example="http://www.backbase.com/alarm_example/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> Disclaimer: This example includes optional interfacing to Google Gears offline storage. In order for this interface to work, an external program from Google needs to be installed. Backbase does not support this software, recommend its installation or take responsibility for any damage caused by installing Google Gears software. You are strongly encouraged to read the license terms and other information related to Google Gears, on the Google site. Moreover, Google Gears software is in beta, and has been observed to cause causing problems with Venkman debugger. We also noticed googleupdate.exe being silently installed and run as service under local system account. After uninstalling Google Gears, googleupdate.exe service is not uninstalled but continues to run. </em>