IBM i und mobile Geräte Teil 2

22. Oktober 2013 | Von | Kategorie: Cloud, Social Media, Devices, Load`n`go

Nachdem ich Ihnen im vorangegangenen Artikel („IBM i und mobile Geräte Ausgabe 06-07/13“) einen Überblick über die Entwicklung von mobilen Anwendungen gegeben habe, erhalten Sie hier ein konkretes Beispiel. Ziel dieses Artikels ist es, Ihnen die nötigen Schritte zu demonstrieren, um eine Client Server App zu realisieren sowie Einblick in die Technologien und Entwicklungsumgebungen zu geben um das gesetzte Ziel zu erreichen.

mobilVON DENIS KOHL

Das Beispiel ist eine einfache App (Mobile-Anwendung), die Daten an die AS/400 übertragen kann und in einer physikalischen Datei bzw. SQL Tabelle ablegt. Von dort können die Daten dann weiter bearbeitet werden. Damit das Beispiel ein wenig interessanter wird, werden wir Barcodes scannen und mit Daten ergänzen. An dieser Stelle möchte ich der UBR Unternehmensberatung Reetmeyer in Bonn danken, für die Möglichkeit auf ihren Systemen zu testen. Gelesen werden die bekannten EAN 13 Strichcodes.

Als Plattform werde ich der Einfachheit halber ein iPad benutzen. Die gesendeten Daten werden auf der IBM i mit einem PHP Programm empfangen. Ziel ist, daß die Anwendung die im Barcode kodierte Zahlenkombination ausliest und mit weiteren Informationen und Daten verbindet und kombiniert und dann in einer Datenbank ablegt. An dieser Stelle weise ich darauf hin, dass die Kameras in diesen Geräten sich sehr gut eignen, einzelne Etiketten zu scannen, hingegen nicht für Massenscanner geeignet sind. Dafür sind die Kameras zu langsam.

Planung

Welche Funktionen soll die mobile Applikation (App) haben?

mobil2

Es soll möglich sein, Barcodes mit der Kamera zu scannen und zu erkennen. An dieser Stelle sollte man versuchen, eine bestehende Bibliothek (Sammlung von Teilprogrammen) zu verwenden. Vergleichsweise schnell fi ndet man zwei Bibliotheken. Erstens Open- VC http://www.opencv.org/ eine frei verfügbare Bildund Videobearbeitungsbibliothek von intel. Diese ist kostenfrei erhältlich, ist in der Programmiersprache C implementiert und ist somit direkt native für Apples iOS (Betriebssystem für iPhone iPad) verfügbar. Zweitens zbar http://zbar.sourceforge.net/ eine ebenfalls frei verfügbare Bibliothek, sie ist ebenfalls in C implementiert und kostenfrei erhältlich. Ich wähle den Weg des geringsten Widerstands und benutzezbar.

Wie sollen die Daten gespeichert werden?

Hierbei ist besonders wichtig im Auge zu behalten: Welches Programm soll diese Daten später nutzen? Man kann sich durch die IBM i wieder viel Arbeit abnehmen lassen, da alle Daten im Datenbankkontext gespeichert werden können. Somit kann ein anderes Programm jederzeit auf die Daten zugreifen, ohne dass man auf Zugriffsfenster oder Serialisierbarkeit achten muss. Hier enden die Vorab-Überlegungen auch schon. Die erfassten Daten werden in einer Tabelle (physikalische Datei) gespeichert und dann entsprechend durch andere Programme weiter verarbeitet.

Wie kann der Barcode gelesen werden, handelt es sich um selbstgenerierte Barcodes oder sind diese international registriert?

Barcodes sind ein umfassendes Thema. Grundsätzlich kann man sie in zwei Lager teilen. Erstens die international registrierten Barcodes. Diese fi ndet man auf nahezu allen Produkten im Supermarkt und auf der Rückseite der meisten Bücher. Diese sind zum einen in der GEPIR (Global Electronic Party Information) Datenbank gespeichert. Der Zugang zu dieser Datenbank ist kostenpflichtig. Zweitens gibt es die Möglichkeit jederzeit eigene Barcodes zu erstellen. Der Barcode steht für eine Ziffernkolonne bzw. eine Zahl, dieser Zahl-Wert kann gespeichert und mit weiteren Informationen bzw. Daten verknüpft werden. Damit kann z.B. ein Lager- und/oder Produktionsprozess leichter elektronisch erfasst werden.

(Listing 1) M8ViewController.h
M8ViewController.h
//
// M8ViewController.h
// BarCodeScanner400
//
// Created by denis kohl on 15.08.13.
// Copyright (c) 2013 denis kohl. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "ZBarSDK.h"
@interface M8ViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UILabel *serverAdresse;
@property (weak, nonatomic) IBOutlet ZBarReaderView *ReaderView;
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
@property (weak, nonatomic) IBOutlet UITextField *produktTextField;
@property (weak, nonatomic) IBOutlet UITextField *anzahlTextField;
@property (weak, nonatomic) IBOutlet UILabel *barcodeTextField;
@property NSString * server;
- (IBAction)sendSave:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *sendSaveButton;
- (void)receivedData:(NSData *)data;
- (void)emptyReply;
- (void)timedOut;
- (void)downloadError:error;
@end

abb1

Welche zusätzlichen Eingabefunktionen werden benötigt?

Auch hier vereinfache ich. Wir werden nur zwei Werte ergänzen – zum einen die Anzahl, dann den Namen. Sollte der Barcode noch nicht mit einem Produktnamen verknüpft sein, soll der Bediener aufgefordert werden, diesen anzugeben.

Wie sollen die eingegebenen Daten verwaltet werden?

Auf dem Ziel-System, einer IBM Minimum Release 5.4, wird ein kleines PHP Programm installiert. Das Lizenz Programm für OS 400 7.1 ist 2ZSVRPI *BASE 5001 Zend Server for IBM i 5.6.0 ( PHP 5.3 ). Es wäre auch möglich, eine Implementierung in JAVA zu verwenden. Mit entsprechendem Mehr-Aufwand ist auch RPG möglich. Das Server Programm hat alleine die Aufgabe die empfangenen Daten in eine vorbereitete Tabelle (physikalische Datei) einzutragen. Entweder direkt mit der bestehenden Applikation, oder in eine temporäre Tabelle und anschließend einen Transport der Daten vorzunehmen, nach einer Eingabekontrolle. Diese Entscheidung wird je Anwendungsfall getroffen.

Umsetzung

Welche Plattform ist die Richtige? Welche Infrastruktur und Software wird gebraucht? Die Wahl der Plattform wird von vielen Kriterien beeinfl usst. Auf welcher Plattform bzw. Umgebung basiert die bestehende IT?

Abbildung 2

Abbildung 2

Hier gehe ich davon aus, dass es Ziel des Unternehmens ist, die eigene IT nicht weiter zu diversifi zieren sondern Bestehendes zu nutzen, bzw. zu ergänzen, also die neuen Funktionen auf die IBM i zu integrieren. Ohne zusätzliche Software Lizenzgebühren ist der einfachste Weg die Implementierung einer HTTP bzw. REST Schnittstelle in PHP.

Hierbei werden die gesendeten und empfangenen Pakete behandelt wie Anfragen an einen Webserver. Nur enthalten die übermittelten Daten keine vollständigen Webseiten, sondern nur Teile von einer HTML Datei oder sogar nur strukturierte Daten. Wir werden an dieser Stelle eine einfaches Datenformat benutzen das in den letzten Jahren immer stärker zum Einsatz kommt. Und auf der Objekt Notation von Javascript basiert – JSON (JavaScript Objekt Notation).

Welche Endgeräte sollen benutzt werden?

Es bestehen hier zwei beziehungsweise drei Möglichkeiten. Erstens mit einem Apple iPad, zweitens ein Android Tablet und drittens ein Microsoft RT Tablet. Für den Prototyp nutze ich ein Apple iPad und die XCode Entwicklungsumgebung von Apple. XCode ist kostenfrei. Allerdings nur unter Apple MacOS ausführbar. Um die App im Apple App Store veröffentlichen zu können erwirbt man ein Apple Entwickler Konto (Apple Developer Account). Weiterhin wird noch eine Möglichkeit benötigt, die Barcodes zu decodieren. Ich nutze hier die API (Applikation Programming Interface) von zbar http://zbar.sourceforge. net/iphone/sdkdoc/index.html. Diese ist eine frei verfügbare Bibliothek, welche Barcodes decodieren kann.

Das App Design der Oberfläche.

Die Oberfläche kann mit XCode bzw. Interface Builder durch drag and drop erstellt werden. Hier ist besonders auf die Benutzbarkeit zu achten! Die genaue Positionierung und farbige Gestaltung ist hier absolut unabhängig von der Implementierung. Dann wird das ZBarSDK importiert. Dieses benötigt als Grundlage weitere Bibliotheken (API‘s): Quartz-Core (Bildbearbeitung), CoreVideo (Bildaufzeichnung und Speicherung), CoreMedia (Bildaufzeichnung und Bilderkennung), AVFoundation (Grundlage für QuartzCore, CoreVideo und CoreMedia). Die libiconv.dylib dient zur Zeichenerkennung.

Schlagworte: , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.