440 likes | 547 Vues
Discover the advantages of creating cross-platform mobile applications with AppForge and UltraLite. This session addresses the increasing demand for mobile solutions, driven by the need for "anywhere, anytime" access to information, and outlines the challenges faced by businesses, such as resource limitations and data communication issues. Learn how UltraLite provides a small footprint, robust data storage, and seamless synchronization for various handheld devices, while AppForge allows developers to leverage existing skills in Visual Basic and C++. Gain insights into successful strategies for mobile application development.
E N D
M406Developing Cross-Platform Applications for Handhelds • Paul Fast • Software Engineer • iAnywhere Solutions • Paul.Fast@sybase.com • Bob Holt • Product Manager • AppForge, Inc. • rhh@appforge.com
Agenda • Why use UltraLite? • What is AppForge MobileVB? • UltraLite For AppForge • Object descriptions and hierarchy • How to carry out tasks with UltraLite for AppForge • Future • Summary
Why are businesses “going mobile?” “Anywhere, anytime” access to information translates to: • Increased productivity and flexibility • Efficient - eliminate redundancies of data input • More accurate - less prone to error • Improved customer service • Convenience of user experience • Gain competitive advantage • Timely information allows companies to react to market conditions
What are some of the challenges? Device resource limitations • No hard disk, limited memory, slow processors, limited power, wireless connection Data communications concerns • Low bandwidth networks means slow applications • Limited battery life for wireless transmissions • Unreliable and costly wireless coverage
Overcoming the challenges Customers are using smart clients (persistent data store) Product characteristics required: • Resource efficiency - minimal footprint • Reliable storage of data • Data collected is often mission critical • Consider impact if data is lost • Seamless data synchronization • Heterogeneous data environments • New systems must complement existing systems • Good performance • Cross-platform
Limitations in Other Mobile Data Storage Options Custom-coded solutions • Build vs. buy: very resource intensive • Increased risk: proprietary • Increased maintenance costs: porting and testing ‘Shrunk-down’ enterprise database • Architecture not geared for mobile and wireless devices
Why use UltraLite? Relational database • Maintains extremely small footprint Reliable data storage • Transactional – support for commit/rollback • Referential integrity Excellent performance • Indexing support Cross-platform • Support for PalmOS, PocketPC and other handheld platforms
Why use UltraLite? • Provides flexible and robust bi-directional synchronization • Integration with Enterprise • Support Sybase, Oracle, IBM DB2, Microsoft SQL Server • Secure • Built-in authentication • 128-bit encryption of communication stream • Support for sub-setting and partitioning of data • Scalable to thousands of remote users • Conflict detection and resolution • Robust error handling
UltraLite APIs Today UltraLite for C/C++ • Embedded SQL • UltraLite C++ API UltraLite for Java • JDBC But what if your organization makes use of other languages and tools?
Topics • What is MobileVB? • Demonstration • Creating Cross-platform mobile applications • An overview of the Mobile VB architecture
AppForge Mobile VB • Platform for building and deploying mobile applications • Extends standard Microsoft Visual Basic product • Developer advantages • Rich IDE for application creation and debugging • Familiar language and object model • Common source to variety of mobile platforms
AppForge Leverages Existing Developers • AppForge enables 8 million existing Visual Basic and C++ developers to use the standard enterprise tools that they already know to create rich mobile and wireless applications. • By using applications written in AppForge, enterprises are not locked in to any one hardware device. Key Programming Languages for Professional Developers AppForge enables 75% of existing developers to easily write sophisticated mobile applications
Demonstration AppForge MobileVB 3.0
Fundamental Components Visual Basic “Add-in” Visual Basic Compiler Supporting Services Graphics Win32 Design/Debug Windowing Device Specific “Booster” Mem. Mgmt. . . . Virtual Machine
Cross-platform Data-centric Applications Presentation Palm OS Nokia iPAQ Device/UI Abstraction ISuperGrid Application Logic Appl. Specific Rules Backing Store Data Access UltraLite Synchronization
Summary • MobileVB targets largest base of trained developers • Leverages familiar tools, but brings new opportunities • Rapid application development -- Even more rapid application porting • Through Piedmont framework, iAnywhere seamlessly adds true database and synchronization support to product
UltraLite Component Suite The evolution of UltraLite • Existing UltraLite with new interface • Does not replace, but complements existing UltraLite Key differences in this offering • Database schema not compiled into the application • Database schema can change after initial deployment • A well-defined API provides data on a per-table basis
UltraLite and AppForge UltraLite integrates with AppForge • Allows development of UltraLite applications in Microsoft Visual Basic • Gives AppForge programmers a cross platform relational database with built-in synchronization • Requires the AppForge Booster+ VM
Databases and Schemas • Schema is just the definition of a database • For NT/Pocket PC stored as a .usm file • For Palm stored as a Palm database (PDB) • Database is the definition (schema) and data • For NT/Pocket PC stored as a .udb file • For Palm stored as a Palm database or file on an expansion card • Identified by Palm creator ID
Databases and Schemas • Connecting to a database that does not exist creates it • Newly created database has no schema • Schema is assigned to a connected database • Schema file or PDB is typically deployed with an application • Schema can be applied to a database that already has one • Means schema upgrades are possible • No maintained link between schema and database
UltraLite Schema Creation • Based on an Adaptive Server Anywhere database; or • Created via a GUI tool
Object Hierarchy ULDatabaseManager ULConnection ULDatabaseSchema ULPublicationSchema ULSyncInfo ULTable ULTableSchema ULIndexSchema ULColumn ULColumnSchema
Managing Connections • ULDatabaseManager object returns database connections • ULDatabaseManager.OpenConnection takes connection string: • “DBF=\CustDB\mydb.udb;UID=DBA;PWD=SQL” • “palm_db=Syb1;UID=DBA;PWD=SQL” • Returns a ULConnection object
Connections and Databases ULConnection represents a connection to one database • Controls transactions (Commit, Rollback, AutoCommit) • Used to retrieve tables and publications • Used to synchronize ULDatabaseSchema • Contains information about the database • Can be “upgraded”
Connecting to an UltraLite Database • Create your schema file • Write something like: Dim DbMgr as New ULDatabaseManager Dim Conn as ULConnection … #If APPFORGE Then connparms = “palm_db=CRID” schema = “schema” #Else connparms = "DBF=" & App.Path & “\db.udb“ schema = App.Path & “\schema.usm“ #End If Set Conn = DbMgr.OpenConnection( connparms ) If Conn.DatabaseNew Then Conn.schema.UpgradeFromFile schema, “” End If • Include the schema file as an AppForge dependency
Tables and Columns ULTable represents a cursor over all the rows of a table • Contains methods to position at rows in the table • Contains methods to insert, update or delete rows • On Palm OS, tables can be left open on application shutdown, and reopened on startup ULColumn used to retrieve or set a value from a column in a table • Return value type must be specifically requested • BLOBs are supported
Table Schema ULTableSchema represents the schema of a table • Returns column count, index count, name, etc. ULColumnSchema represents the schema of a column in the table • Indicates data type, size, default value, nullability, etc. ULIndexSchema represents the schema of an index • Can be unique or not • Index could be a foreign key
Fetching Data Dim id As Integer Dim salary As Single Dim table As ULTable Dim col_id As ULColumn Dim col_salary As ULColumn Set table = Conn.GetTable("salary") table.Open "" Set col_id = table.GetColumn("id") Set col_salary = table.GetColumn("salary") While table.MoveNext id = col_id.IntegerValue salary = col_salary.RealValue ' Process values Wend t.Close • Tip: Use variable for ULColumn if fetching in a loop • Tip: Use return value of MoveNext instead of EOF
Finding Values • Find all rows with “last_name” set to “Smith” Dim table As ULTable Set table = Conn.GetTable("customer") table.OpenByIndex "lname_idx", "" table.FindBegin table.GetColumn("last_name").StringValue = "Smith" If table.FindFirst Then Do ' Process the row Loop While table.FindNext Else ' row not found End If table.Close
Fetching BLOB data • For columns declared “binary” or “long binary” Dim table As ULTable Dim col As ULColumn Dim data(1 To 1024) As Byte Dim data_fit As Boolean Dim size As Long Set table = Conn.GetTable("image") table.Open "" size = 1024 Set col = table.GetColumn(“img_data") data_fit = col.GetBytes(VarPtr(data(1)), size) If data_fit Then ' No truncation. Size of data stored in size Else ' data truncated at 1024 End If table.Close
Inserting a row Dim t As ULTable Dim the_date As Date Set t = Conn.GetTable("employee") t.Open "" t.InsertBegin t.GetColumn("lname").StringValue = "Doe" t.GetColumn("start_date").DatetimeValue = Now t.Insert t.Close Conn.Commit • Columns with defaults do not need to be set • Omit the Commit if AutoCommit is True
Updating a row Dim table As ULTable Set table = Conn.GetTable("employee") table.OpenByIndex "salary_idx", "" table.MoveLast table.UpdateBegin table.GetColumn("salary").LongValue = 75000 table.GetColumn("manager").SetNull table.GetColumn("vacation").SetToDefault table.Update Conn.Commit table.Close • Commit is unnecessary if AutoCommit is True
Publications A Publication is a collection of tables used for synchronization ULPublicationSchema represents a publication in the database • Each publication has a unique identifier (mask) • Several publications can be OR’d together to produce a unique mask • Use for priority synchronization
Synchronizing UltraLite Databases ULSyncInfo • Writable properties control synchronization • Read-only properties give status of last synchronize • Works with MobiLink Synchronization Server • Synchronizes with most ODBC-compliant databases • Sybase Adaptive Server Anywhere & Enterprise • Oracle • Microsoft SQL Server • IBM DB2
Synchronizing • Setup the SyncInfo structure once Dim HPPub As ULPublicationSchema Set HPPub = Conn.Schema. _ GetPublicationSchema("HighPriorityTables") With Conn.SyncInfo .UserName = "jdoe" .Password = "banana" .Stream = ulSocket .SendColumnNames = True .Version = "ul_default“ .PublicationMask = HPPub.Mask End With • Call Synchronize on the connection (unless Palm HotSync is used) Conn.Synchronize
Handling Errors • Use the Visual Basic Error Object • Err.Number contains the SQLCODE On Error Resume Next Set table = Conn.GetTable("BadTable") If Err.Number < 0 Then ' Handle the error End If • Optionally On Error GoTo label • Error handling will be enhanced to include description
Development Tips • Include the control in VB’s References dialog • Make a dependency on the schema file • For Pocket PC • If using AppForge version earlier than 3.0, manually copy the file ultralite\tools\appforge\ce\arm\ulingot8.dll to your device in \Program Files\AppForge
Tips for Palm OS • Do not close connection if you want state saved • Fill in unique names for “persistent name” parameter of ULTable.Open and ULTable.OpenByIndex • To synchronize with HotSync • Register the conduit with dbcond8c.exe • Configure SyncInfo • Set Stream to ulPalmConduit • No need to call ULConnection.Synchronize
Future • Support for Dynamic SQL • Default Synchronization dialog • One application with connections to multiple databases • Ability to modify schema through the API • Support for Symbian OS
Summary Easy and quick development with AppForge MobileVB A robust mobile data store with enterprise synchronization for handheld developers Integration of two award-winning products • AppForge – Best Application Development Tool • iAnywhere Solutions – Best Mobile Database www.appforge.com www.ianywhere.com/ultralitebeta