Posts tagged: Silverlight

JVx mit Windows Phone

Post to Twitter

Nachdem die JVx .NET AddOns bereits wunderbar mit Silverlight harmonieren, haben wir einen ersten Versuch mit dem Windows Phone SDK gewagt. In erster Linie wollten wir prüfen ob die AddOns auch mit Windows Phone funktionieren. In der Spezifikation waren keine Stolpersteine zu fnden, daher sollte eine Integration problemlos möglich sein.

In der Praxis sieht die Sache natürlich etwas anders aus. Das SDK enthält (noch) nicht alle Klassen die in den AddOns verwendet wurden. Daher musste für unseren Test auf etwas Komfort verzichtet werden. Nach der Anpassung der AddOns war die Integration jedoch ohne Probleme möglich.

Wir setzten uns ein sehr bescheidenes Ziel für die Entwicklung der ersten App:
Darstellung einer Liste mit den Ländern aus unserer Showcase Anwendung.

Unsere App war überraschend schnell umgesetzt. Hierbei ist jedoch anzumerken, daß das Windows Phone SDK im Moment nicht mit der Konkurrenz mithalten kann. Dazu müssen noch wesentliche Details verbessert werden.
 
Unsere App, gestartet mit dem Windows Phone Emulator:

Windows Phone App

Windows Phone App

 
Der Source Code für den Zugriff auf die Daten ist in üblicher Manier zu schreiben:

private JVxDataAdapter dataSource;
private MasterConnection Connection;

public MainPage()
{
    InitializeComponent();

    SupportedOrientations = SupportedPageOrientation.Portrait
                            | SupportedPageOrientation.Landscape;

    // init connection
    HttpConnection conn = new HttpConnection(new UniversalSerializer(),
                              "http://demo.sibvisions.org/showcase/services/Server");
    MasterConnection master = new MasterConnection(conn);
    master.ApplicationName = "showcase";
    master.LifeCycleName = "com.sibvisions.apps.showcase.frames.Contacts";
    master.UserName = "admin";
    master.Password = "admin";

    // init data adapter
    dataSource = new JVxDataAdapter(master);
    dataSource.OpenComplete += new OpenCompleteEventHandler(OpenComplete);

    // open connection
    dataSource.Open();
}

void OpenComplete(OpenCloseCompleteEventArgs pEvent)
{
    // fetch data
    CommunicationCallback callback = new CommunicationCallback(
                                         new AsyncCallback(EndFetch));

    dataSource.Connection.call("countries", "fetch", callback,
               new object[] {null, new SortDefinition(new String[] {"COUNTRY"}), 0, -1});
}

void EndFetch(IAsyncResult pResult)
{
    CommunicationCallback requestCallback = (CommunicationCallback)pResult.AsyncState;

    ArrayList result = (ArrayList)requestCallback.CallResult[0];

    // fill list
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        foreach (object[] item in result)
        {
            if (item != null)
            {
                ListBox.Items.Add(item[1]);
            }
        }
    });
}

 

Das XAML ist im Vergleich zum Datenzugriff weit komplexer:

<phoneNavigation:PhoneApplicationPage
   x:Class="WindowsPhoneApp.MainPage"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:phoneNavigation="clr-namespace:Microsoft.Phone.Controls;
         assembly=Microsoft.Phone.Controls.Navigation"

   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
   FontFamily="{StaticResource PhoneFontFamilyNormal}"
   FontSize="{StaticResource PhoneFontSizeNormal}"
   Foreground="{StaticResource PhoneForegroundBrush}">

    <Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="162"/>
            <RowDefinition Height="44"/>
            <RowDefinition Height="514*"/>
            <RowDefinition Height="80"/>
        </Grid.RowDefinitions>

        <Border BorderBrush="Silver" BorderThickness="5" Name="border0"
               CornerRadius="20" Background="#18A2E7" Margin="12,0,12,20">
            <Grid x:Name="TitleGrid" Height="147" >
                <TextBlock Text="Windows Phone App" Foreground="Black"
                          x:Name="textBlockPageTitle"
                          Style="{StaticResource PhoneTextPageTitle1Style}"
                          Margin="7,6,12,100" />
                <TextBlock Text="JVx showcase" Foreground="Black"
                          x:Name="textBlockAppTitle"
                          Style="{StaticResource PhoneTextPageTitle2Style}"
                          Margin="-3,26,-3,16" TextAlignment="Center" />
            </Grid>
        </Border>
       
        <TextBlock Text="Countries" x:Name="textBlockListTitle" FontSize="30"
                  HorizontalAlignment="Right" Width="456" Margin="0,148,12,6"
                  VerticalAlignment="Stretch" Padding="0,5,0,0" Grid.RowSpan="2" />
       
        <Border BorderBrush="Silver" BorderThickness="5" Name="border1"
               Grid.Row="1" CornerRadius="20" Margin="12,35,12,0" Grid.RowSpan="2">
            <ListBox Name="ListBox" HorizontalAlignment="Left"
                    VerticalAlignment="Top" Width="480" Margin="5,5,5,5" />
        </Border>
       
        <Image Grid.Row="3" Height="74" Margin="0,6,0,0" Name="image1"
              Stretch="Uniform" VerticalAlignment="Top"
              Source="/WindowsPhoneApp;component/Images/sib_visions.png"/>
    </Grid>
   
</phoneNavigation:PhoneApplicationPage>

Ein erster Blick auf unseren Silverlight Showcase

Post to Twitter

Unsere .NET bzw. MONO Anbindungen an JVx befindet sich bereits auf der Zielgeraden. Und frei nach dem Motto "ein Bild sagt mehr als tausend Worte" präsentieren wir Ihnen die ersten Screenshots von unserem Silverlight Showcase.

Die Anwendung befindet sich zwar noch in der Entwicklung, sowohl am Design als auch Funktional wird sich noch das eine oder andere Detail ändern, aber sehen Sie selbst:

Silverlight Login

Silverlight Login

Die Anmeldung

Die Anmeldung an die Applikation erfolgt durch die Eingabe von Benutzername und Passwort. Selbstverständlich können die gleichen Benutzerdaten wie auch in der Java Applikation verwendet werden.

Der Silverlight Client unterscheidet sich zwar optisch vom Java Client, doch die Business Logik wird ohne Souce Code oder Konfigurations- Anpassungen wiederverwendet.

Ein wesentliches Ziel bei der Entwicklung ist, die Vorteile der jeweiligen Technologie ideal zu nutzen!

 
Die Kontaktverwaltung

Das Foto kann bequem per Drag and Drop vom Desktop in die Anwendung gezogen werden. Und weiters ermöglichen wir die Adress Auswahl über das Map Control (siehe nachfolgenden Screenshot).

Ein nicht gleich auf den ersten Blick ersichtlicher Knüller ist das Data Binding. Die Daten werden nämlich nicht via Webservice oder JSON geladen, sondern direkt von der JVx Business Logik. Und für sämtliche CRUD Anweisungen werden die selben Server Objekte verwendet wie auch für den Java Client.

Silverlight Contacts

Silverlight Contacts

 
Silverlight Map

Silverlight Map

Die Adressauswahl

Eine Adresse einzugeben ist nur halb so viel Spaß wie die Adresse auf einer Karte zu suchen. Aus diesem Grunde haben wir das komfortable Map Control integriert.

Da macht das ganze doch gleich viel mehr Spaß!

 

Den Silverlight Showcase werden wir demnächst veröffentlichen. Bleiben Sie also am laufenden!