Posts tagged: WindowsPhone

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>