Goal: Create the user interface for an application that runs on a Windows Mobile device, and accesses the database mobile business objects.
If you are viewing this guide as a PDF, you can locate the referenced document at http://infocenter.sybase.com/. Go to Sybase Unwired Platform 1.5.2 > Tutorial: BlackBerry Application Development using Custom Development to launch this PDF.
An empty form, Customers, displays on the Customer.cs [Design] tab.
/// <summary> /// The main entry point for the application. /// </summary>private static Customers _form1 = new Form1();using System; using SampleApp; using System.Windows.Forms; namespace SampleApp { static class Program { private static Customers _form1 = new Customers(); private static Customer_Details _form2 = new Customer_Details(); private static string _custid; public static string getCustomer() { return _custid; } public static void setCustomer(string custid) { _custid = custid; } public static Customers getForm1() { return _form1; } public static Customer_Details getForm2() { return _form2; } static void Main(string[] args) { Application.Run(_form1); } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using SUP101; namespace SampleApp { public delegate void DelegateAddString(String s); public partial class Customers : Form { DelegateAddString m_DelegateAddString; public Customers() { InitializeComponent(); m_DelegateAddString = new DelegateAddString(this.AddString); } private void AddString(String s) { textBox1.Text += s + "\r\n"; textBox1.SelectionStart = textBox1.Text.Length; textBox1.ScrollToCaret(); textBox1.Refresh(); } private void Subscribe_Click(object sender, EventArgs e) { //This checkes to see if the database exists, then deletes it if it does. if (SUP101DB.DatabaseExists()) { SUP101DB.DeleteDatabase(); AddString("Database deleted"); } else { //This creates the database. SUP101DB.CreateDatabase(); } //To receive callbacks, you must register a CallBackHandler //with the generated database class, the entity class, or both. This //code creates and registers a handler to receive callbacks. MyCallbackHandler callback = new MyCallbackHandler(); MyCallbackHandler.textBox1 = textBox1; SUP101DB.RegisterCallbackHandler(callback); //This operation starts background synchronization for the database class. SUP101DB.StartBackgroundSynchronization(); AddString("Background synchronization started"); try { //This calls SUP101, the package database, user name and password to connect to the Unwired Server. SUP101DB.LoginToSync("supAdmin", "s3pAdmin"); } catch (Exception ex) { List<LogRecordImpl> lrs = LogRecordImpl.FindWithQuery(new Sybase.Persistence.Query()); AddString("log record count=" + lrs.Count); for (int i = 0; i < lrs.Count; i++) { AddString(lrs[i].Message); } } //For message-based replication, before you can synchronize MBO changes with the server, you must subscribe to the //mobile application package deployed on the server by calling SampleAppDB.subscribe(). This also downloads certain data //to devices for those that have default values. otify the server of your subscription to a specific package. //If you are not subscribed to the SUP101 package,a message will tell you to subscribe first. SUP101DB.Subscribe(); AddString("Subscribe request sent"); AddListView(); } private void refresh_Click(object sender, EventArgs e) { if (SUP101DB.IsSubscribed()) { Cursor.Current = Cursors.WaitCursor; AddString("Refresh data"); AddDataToListView(); Cursor.Current = Cursors.Default; } else { AddString("Please Subscribe first"); } } private void AddListView() { this.listView1.Clear(); listView1.Columns.Add("Id", listView1.Width / 4, HorizontalAlignment.Left); listView1.Columns.Add("First Name", listView1.Width / 3, HorizontalAlignment.Center); listView1.Columns.Add("Last Name", listView1.Width / 3, HorizontalAlignment.Right); listView1.View = View.Details; listView1.FullRowSelect = true; } private void AddDataToListView() { this.listView1.Clear(); listView1.Columns.Add("Id", listView1.Width / 4, HorizontalAlignment.Left); listView1.Columns.Add("First Name", listView1.Width / 3, HorizontalAlignment.Center); listView1.Columns.Add("Last Name", listView1.Width / 3, HorizontalAlignment.Right); listView1.View = View.Details; listView1.FullRowSelect = true; List<Customer> c = Customer.FindAll(); if (c.Count > 0) { for (int i = 0; i < c.Count; i++) { ListViewItem item = new ListViewItem(c[i].Id.ToString()); item.SubItems.Add(c[i].Fname); item.SubItems.Add(c[i].Lname); listView1.Items.Add(item); } } } private void update_Click(object sender, EventArgs e) { if (listView1.FocusedItem != null) { Program.setCustomer(listView1.FocusedItem.Text); Program.getForm2().Visible = true; Program.getForm1().Visible = false; } else MessageBox.Show("Please select a row"); } private void Send_Click(object sender, EventArgs e) { Customer.SubmitPendingOperations(); } public class MyCallbackHandler : Sybase.Persistence.DefaultCallbackHandler { public static TextBox textBox1 = new TextBox(); private void invokeDelegate(string s) { Customers f = Program.getForm1(); f.Invoke(f.m_DelegateAddString, new Object[] { s }); } // Called when login fails. public override void OnLoginFailure() { invokeDelegate("Login failed"); } //Called when a replay request succeeds. public override void OnReplaySuccess(object o) { invokeDelegate("Operation replay successful"); } //Called when a replay request fails. public override void OnReplayFailure(object o) { invokeDelegate("Operation Replay failed"); } //Called when the last import message is successfully processed regarding the subscribe request. public override void OnImportSuccess() { invokeDelegate("Import successful"); } } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using SUP101; namespace SampleApp { public partial class Customer_Details : Form { Customer thisCustomer; public Customer_Details() { InitializeComponent(); } private void submit_Click(object sender, EventArgs e) { thisCustomer.Fname = textBox2.Text; thisCustomer.Lname = textBox3.Text; //When called, the Save method determines, internally, if it should //insert or update data to the client database. thisCustomer.Save(); Program.getForm1().Visible = true; Program.getForm2().Visible = false; } private void AddDataToForm() { textBox1.Text = Program.getCustomer(); int id = Int32.Parse(Program.getCustomer()); //Retrieves data from the local database. thisCustomer = Customer.FindByPrimaryKey(id); textBox2.Text = thisCustomer.Fname; textBox3.Text = thisCustomer.Lname; } private void Customer_Details_Load(object sender, EventArgs e) { AddDataToForm(); } private void Customer_Details_paint(object sender, PaintEventArgs e) { AddDataToForm(); } } }