Benutzerhandbuch Client API

Transcription

Benutzerhandbuch Client API
Webservice «Barcode»
Benutzerhandbuch Client API
Version 2.2
November 2013
1
Inhaltsverzeichnis
1
Einleitung
3
1.1 Dokumentation Client API Webservice «Barcode»3
1.2
Webservice-Dokumentation3
1.3
Beispiel-Sources3
2
Konfiguration
4
2.1 Proxykonfiguration5
2.1.1 Proxykonfiguration in Java5
2.1.2 Proxykonfiguration in C#/.NET6
3
Lese-Operationen7
3.1 Operation «Lese Dienstleistungsgruppen»7
3.2
Operation «Lese Basisleistungen»8
3.3
Operation «Lese Basisleistungen einer Frankierlizenz»10
3.4
Operation «Lese Zusatzleistungen»12
3.5
Operation «Lese Zustellanweisungen»13
3.6
Operation «Lese Darstellungsarten»15
4
Validierungsoperation
18
5
Label / Barcode-Generierung
20
5.1 Label Generierung20
5.2
Einzelbarcode Generierung24
5.3
Operation «Generiere Barcode»27
5.4
Beispiele für Beleglose Nachnahme (BLN)29
Referenzen
[1]
Webservice «Barcode», Handbuch, http://www.post.ch/post-barcode-handbuch.pdf
[2]
Dokumentationen zu Webservice «Barcode», http://www.post.ch/post-barcode-cug.htm
2
1Einleitung
Diese Dokumentation erklärt die Anbindung des
Webservice «Barcode», Version 2.2, unter
Verwendung der Client API Libraries für Java und
C# / .NET. An einigen typischen Beispielen wird
die Verwendung der Libraries zum Zugriff auf
den Webservice erklärt. Die Beispiele sind jeweils
in C# und Java aufgeführt.
1.2Webservice-Dokumentation
Diese Dokumentation ist weder eine vollständige
Client-API-Dokumentation noch eine vollständige
Beschreibung des Webservice.
Die Beispiele zur Verwendung der Client Library liegen ebenfalls
als Sources der Library Distribution bei, und zwar im Verzeichnis
examples.
1.1
Für eine vollständige Dokumentation des Webservice «Barcode»
verweisen wir auf das Webservice-Benutzerhandbuch [1]. Dort
werden auch sämtliche Begriffe, Attribute, Dienstleistungscodes,
usw. erklärt. Weitere Ressourcen und Hilfsmittel zum Webservice
«Barcode» finden Sie auf der Webservice-Barcode-Webseite [2].
1.3Beispiel-Sources
Dokumentation Client API Webservice «Barcode»
Für eine vollständige Dokumentation der gesamten Client API
Library verweisen wir auf die Source-Code-Dokumentation der
Libraries, die als HTML-Dokumentation in der Distribution
beiliegen.
– Java: Die Javadoc-API-Dokumentation befindet sich im
Verzeichnis doc, die Sources sind im Source-ZIP-Archiv
enthalten.
– C#/.NET: Die C#-API-Dokumentation befindet sich im
Verzeichnis doc, die Sources sind im Source-ZIP-Archiv im
Verzeichnis src enthalten.
3
2 Konfiguration
Das folgende Beispiel zeigt die einfache Initialisierung des
Webservice «Barcode».
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“your username”, “your password”);
// Now the web service operations can be called on the service instance.
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “your username”;
service.Password = “your password”;
// Now the web service operations can be called on the service instance.
Im Konstruktor des Webservice «Barcode» wird die gewünschte
Sprache für allfällige Fehler- und Warnmeldungen vom Server
ausgewählt. Folgende Einstellungen sind ausserdem zwingend
vorzunehmen:
– setLoginCredentials – Basic Authentication: Username und
Passwort für die Authentifizierung mit dem Webservice
(Bemerkung: In C# werden diese Werte über die entsprechenden Eigenschaften UserName und Password gesetzt)
– setFrankingLicense – Frankierlizenz: Eine gültige Frankierlizenz für das Generieren von Barcodeetiketten. Diese Einstellung ist allerdings nur für Aufrufe der generateLabel Operationen zwingend nötig
(Bemerkung: In C# wird die Frankierlizenz über die Eigenschaft
FrankingLicense gesetzt)
4
Nach der Instanziierung eines Webservice-Barcode-Objekts
können über entsprechende Setter-Methoden diverse weitere
Einstellungen des Webservice einfach vorgenommen werden.
Folgende Einstellungen stehen zur Verfügung und sind bereits
mit sinnvollen Voreinstellungen vorinitialisiert. Wird eine Einstellung nicht explizit gesetzt, so werden die voreingestellten
Standardwerte verwendet.
Einstellungs-Property
Bedeutung
Voreingestellter Standardwert
WebserviceEndpointURL
Die URL, unter der der Webservice angesprochen werden soll.
Diese Einstellung kann zum Beispiel für Testzwecke mit einem
speziellen Testserver nützlich sein.
Produktive URL des Webservice «Barcode»:
https://wsbc.post.ch/wsbc/barcode/v2_2
LabelLayout
Layout der zu erstellenden Adressetiketten:
A5, A6, A7 oder FE
A6
ImageFileType
Bild- oder Dateiformat der Adressetiketten:
PNG, GIF, PDF, SPDF, EPS, ZPL2 oder JPG
PNG
ImageResolution
Auflösung der Adressetiketten in DPI:
200, 300 oder 600
300
PrintAddresses
Einstellung, welche Adressen auf den Adressetiketten
gedruckt werden sollen:
RECIPIENT_AND_CUSTOMER (Empfänger und Absender),
ONLY_RECIPIENT (nur Empfänger), NONE (keine)
RECIPIENT_AND_CUSTOMER
PPFranking
Gibt an, ob der Vermerk «PP Frankierung» auf dem Label
aufgedruckt werden soll.
False
CustomerSystem
Dient dazu das Kundensystem des WSBC Services zu identifizieren. Ermöglicht einfacheres Nachvollziehen bei Problemen.
null
2.1Proxykonfiguration
Falls der Internetzugang über einen Proxy erfolgt, muss dieser
entsprechend konfiguriert werden.
In den folgenden Abschnitten ist diese Konfiguration für Java
und C# beschrieben.
2.1.1 Proxykonfiguration in Java
Der Proxy kann in Java global über System-Properties konfiguriert werden. Folgende System-Properties können einfach über
entsprechende VM-Argumente gesetzt werden:
System-Property
Beschreibung
Beispiel für VM-Argument
proxyHost
Die URL des Web-Proxy-Hosts
– DproxyHost=“proxy.mycompany.com”
proxyPort
Der Port des Web-Proxies
– DproxyPort=8080
proxyUser
Username für Authentifizierung mit dem Web-Proxy
– DproxyUser=“myusername”
proxyPassword
Passwort für Authentifizierung mit dem Web-Proxy
– DproxyPassword=“mypassword”
5
Es ist auch möglich, diese System-Proxy-Einstellungen gemäss
folgendem Beispiel programmatisch zu setzen.
== Java Code: ==
// Example: Setting proxy “proxy.mycompany.com” on port 8080
System.setProperty(“proxyHost”, “proxy.mycompany.com”);
System.setProperty(“proxyPort”, “8080”);
// Optional: username and password for web proxy that requires authentication
System.setProperty(“proxyUser”, “your proxy username”);
System.setProperty(“proxyPassword”, “your proxy password”);
Weitere Informationen zur Proxykonfiguration in Java finden Sie unter
http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html.
2.1.2 Proxykonfiguration in C#/.NET
In C# kann die Proxykonfiguration direkt auf der Klasse
WebRequest vorgenommen werden.
== C# Code: ==
// Example: Setting proxy “proxy.mycompany.com” on port 8080
WebProxy wProxy = new WebProxy(“http://proxy.mycompany.com:8080”);
WebRequest.DefaultWebProxy = wProxy;
// Optional: username and password for web proxy that requires authentication
NetworkCredential credentials =
new NetworkCredential(“myProxyUsername”, “myProxyPassword”);
WebRequest.DefaultWebProxy.Credentials = credentials;
Dem Konstruktor der BarcodeWebService Klasse kann zusätzlich
ein Parameter übergeben werden, ob der Default Proxy des
Betriebssystem (kann im Internet Explorer konfiguriert werden,
wird in der Registry gespeichert) verwendet wird:
== C# Code: ==
// Use Proxy (configured by OS or manually configured)
BarcodeWebService service = new BarcodeWebService(Language.de, true);
// Don’t use any proxy (default)
BarcodeWebService service = new BarcodeWebService(Language.de, false);
Der Parameter ist optional, der Default ist false. Bei einem produktiven Einsatz und Verwendung eines Proxys wird empfohlen
diesen manuell zu konfigurieren. Die Verwendung des Default
Proxy des Betriebssystems kann zu längeren Antwortzeiten führen.
6
3Lese-Operationen
Mit den Lese-Operationen können alle aktuell unterstützten
Dienstleistungscodes und Labellayouts des Webservice
abgefragt werden. Alle Lese-Operationen werfen eine
BarcodeErrorException, falls der Webservice-Barcode-Aufruf
mit Fehlermeldungen (in der gewählten Sprache) vom Server
beantwortet wurde.
3.1Operation «Lese Dienstleistungsgruppen»
Mit der Operation readServiceGroups können die momentan
verfügbaren Dienstleistungsgruppen mit entsprechender
serviceGroupID abgefragt werden.
Die folgenden Kapitel enthalten jeweils ein kurzes Beispiel für
den Aufruf jeder Lese-Operation.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
try {
List<ServiceGroup> groups = service.readServiceGroups();
System.out.println(“Available Service-Groups:”);
for (ServiceGroup group : groups) {
System.out.print(group.getServiceGroupID() + “: “);
System.out.println(group.getDescription());
}
} catch (BarcodeErrorException e) {
System.out.println(“Error in call to readServiceGroups:”);
System.out.println(e.getErrorMessages());
}
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
try
{
List<PostLogistics.WebServiceBarcode.Client.ServiceGroup> groups =
service.ReadServiceGroups();
Console.WriteLine(“Available Service-Groups:”);
foreach (PostLogistics.WebServiceBarcode.Client.ServiceGroup group in groups)
{
Console.WriteLine(“{0}: {1}”, group.ServiceGroupID,
group.Description);
}
}
catch (BarcodeErrorException ex)
{
Console.WriteLine(“Error in call to ReadServiceGroups():”);
Console.WriteLine(ex.GetErrorMessages());
}
7
3.2Operation «Lese Basisleistungen»
Mit der Operation readBasicServices können die momentan
verfügbaren Basisleistungen mit entsprechenden Servicecodes
jeder Dienstleistungsgruppe abgefragt werden.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// First read all service groups with ServiceGroupID
List<ServiceGroup> groups;
try {
groups = service.readServiceGroups();
} catch (BarcodeErrorException e) {
System.out.println(“Error in readServiceGroups:”);
System.out.println(e.getErrorMessages());
return;
}
// basic services per service group
System.out.println(“Available basic service codes:”);
System.out.println(“==============================”);
for (ServiceGroup group : groups) {
System.out.println(“Basic Services for ‘“ + group.getDescription() + “’:”);
try {
List<BasicService> basicServices =
service.readBasicServices(group.getServiceGroupID());
for (BasicService basicService : basicServices) {
System.out.println(“ - “ + concatStrings(basicService.getPRZL())
+ “: “ + basicService.getDescription());
}
} catch (BarcodeErrorException e) {
// usually means that this service group is not available yet
System.out.println(e.getErrorMessages());
}
}
8
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// First read Service-Groups with ServiceGroupID
List<PostLogistics.WebServiceBarcode.Client.ServiceGroup> groups;
try
{
groups = service.ReadServiceGroups();
}
catch (BarcodeErrorException ex)
{
Console.WriteLine(“Error in ReadServiceGroups():”);
Console.WriteLine(ex.GetErrorMessages());
}
Console.WriteLine(“Available basic service codes:”);
Console.WriteLine(“------------------------------”);
foreach (PostLogistics.WebServiceBarcode.Client.ServiceGroup group in groups)
{
// basic services per service group
Console.WriteLine(“Basic Services for {0}:”, group.Description);
try
{
List<PostLogistics.WebServiceBarcode.Client.BasicService> basicServices =
service.ReadBasicServices(group.ServiceGroupID);
foreach (PostLogistics.WebServiceBarcode.Client.BasicService basicService in
basicServices)
{
Console.WriteLine(“ - {0}”, basicService.PRZL);
}
}
catch (BarcodeErrorException ex)
{
// usually means that this service group is not available yet
Console.WriteLine(ex.GetErrorMessages());
}
}
9
3.3
Operation «Lese Basisleistungen einer Frankierlizenz»
Mit der Operation readAllowedServicesByFrankingLicense
können die für eine bestimmte Frankierlizenz verfügbaren
Dienstleistungsgruppen und Basisleistungen abgefragt werden.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Read the allowed services for a given franking license
String frankingLicense = “franking license”;
try {
List<ReadAllowedServicesByFrankingLicenseResponse.ServiceGroups> allowedServices =
service.readAllowedServicesByFrankingLicense(frankingLicense, Language.DE);
System.out.println(“Allowed services for the franking license 60022220:”);
for (ReadAllowedServicesByFrankingLicenseResponse.ServiceGroups sgs :
allowedServices) {
ServiceGroup sg = sgs.getServiceGroup();
System.out.println(“ServiceGroupDescription: “ + sg.getDescription());
System.out.println(“PostID: “ + sg.getServiceGroupID());
System.out.println(“Associated BasicServices with Description and PRZLs”);
for (BasicService bs : sgs.getBasicService()) {
System.out.println(“BasicServiceDescription: “+bs.getDescription());
System.out.println(“Associated PRZLs: “);
int counter = 1;
for (String s : bs.getPRZL()) {
System.out.println(“PRZL “ + counter + “: “ + s);
counter++;
}
}
}
} catch (BarcodeErrorException e) {
// this occurs if the basic service does not exist.
System.out.println(“Errors: “);
System.out.println(e.getErrorMessages());
}
10
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// Read allowedServices with a test franking license
List<AllowedService> allowedServices;
int listCounter = 1;
try
{
allowedServices = service.ReadAllowedServicesByFrankingLicense(FrankingLicense);
foreach (AllowedService allowedService in allowedServices)
{
PostLogistics.WebServiceBarcode.Client.ServiceGroup sg =
allowedService.ServiceGroup;
Console.WriteLine(“********** ServiceGroups Element Nr. “ + listCounter +
“ **********”);
Console.WriteLine(“ServiceGroupDescription: “ + sg.Description);
Console.WriteLine(“PostID: “ + sg.ServiceGroupID);
Console.WriteLine(“********** List of BasicServices **********”);
foreach (PostLogistics.WebServiceBarcode.Client.BasicService bs in
allowedService.BasicServices)
{
Console.WriteLine(“********** BasicService Element **********”);
Console.WriteLine(“BasicServiceDescription: “ + bs.Description);
int counter = 1;
if (bs.PRZL != null)
{
foreach (String przl in bs.PRZL)
{
Console.WriteLine(“PRZL “ + counter + “: “ + przl);
counter++;
}
}
}
Console.WriteLine(“”);
Console.WriteLine(“********** (END ServiceGroups Element Nr. “ + listCounter +
“) **********”);
Console.WriteLine(“”);
listCounter++;
}
}
catch (BarcodeErrorException ex)
{
Console.WriteLine(Fehler in WebService Aufruf
ReadAllowedServicesByFrankingLicense():”);
Console.WriteLine(ex.GetErrorMessages());
}
11
3.4
Operation «Lese Zusatzleistungen»
Mit der Operation readAdditionalServices können die
momentan verfügbaren Zusatzleistungen mit entsprechenden
Servicecodes zu einer Basisleistung abgefragt werden.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Read available additional service codes for “Sperrgut Priority”.
try {
List<AdditionalService> additionalServices = service.readAdditionalServices
(BasicServiceCode.PRI, BasicServiceCode.SP);
System.out.println(“Available additonal services for PRI, SP:”);
for (AdditionalService additionalService : additionalServices) {
System.out.println(additionalService.getPRZL() + “: “ +
additionalService.getDescription());
}
} catch (BarcodeErrorException e) {
// this occurs if the basic service does not exist
System.out.println(“Error in readAdditionalServices(): “ + e.getErrorMessages());
}
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// Read available additional service codes for “Sperrgut Priority”.
try
{
List<AdditionalService> additionalServices =
service.ReadAdditionalServices(BasicServiceCode.PRI,
BasicServiceCode.SP);
Console.WriteLine(“Available additional services for PRI, SP:”);
foreach (AdditionalService additionalService in additionalServices)
{
Console.WriteLine(“{0} : {1}”, additionalService.PRZL,
additionalService.Description);
}
}
catch (BarcodeErrorException ex)
{
// this occurs if the basic service does not exist.
Console.WriteLine(“Error in ReadAdditionalServices():”);
Console.WriteLine(ex.GetErrorMessages());
}
12
3.5Operation «Lese Zustellanweisungen»
Mit der Operation readDeliveryInstructions können die
momentan verfügbaren Zustellanweisungen mit entsprechenden
Servicecodes zu einer Basisleistung abgefragt werden.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Read available delivery instruction codes for basic service PRI, SP:
try {
List<DeliveryInstructions> deliveryInstructions =
service.readDeliveryInstructions(BasicServiceCode.PRI,
BasicServiceCode.SP);
System.out.println(“Available delivery instructions for
basic service PRI, SP:”);
for (DeliveryInstructions zaw : deliveryInstructions) {
System.out.println(zaw.getPRZL() + “: “ + zaw.getDescription());
}
} catch (BarcodeErrorException e) {
// this occurs if the basic service does not exist.
System.out.println(“Errors: “);
System.out.println(e.getErrorMessages());
}
13
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// First get all available service groups.
List<PostLogistics.WebServiceBarcode.Client.ServiceGroup> groups =
service.ReadServiceGroups();
// Get available label layouts for each service group and display them
Console.WriteLine (“Supported delivery instructions per basic service ...”);
Console.WriteLine (“=====================================================”);
foreach (PostLogistics.WebServiceBarcode.Client.ServiceGroup group in groups)
{
Console.WriteLine(“for ServiceGroup ‘” + group.Description + “’:”);
try {
List<PostLogistics.WebServiceBarcode.Client.BasicService> basicServices =
service.ReadBasicServices(group.ServiceGroupID);
foreach (PostLogistics.WebServiceBarcode.Client.BasicService basicService in
basicServices)
{
Console.WriteLine(“ - “ + basicService.PRZL + “: “);
String[] basicServiceCodes = basicService.PRZL;
List<DeliveryInstruction> deliveryInstructions =
service.ReadDeliveryInstructions(basicServiceCodes);
foreach (DeliveryInstruction deliveryInstruction in deliveryInstructions)
{
Console.WriteLine(deliveryInstruction.PRZL);
Console.WriteLine(“, “);
}
Console.WriteLine (“”);
}
}
catch (BarcodeErrorException ex)
{
// This usually means, that this service group is currently not supported at all.
Console.WriteLine(“Error in WebService call to ReadDeliveryInstructions:”);
Console.WriteLine(ex.GetErrorMessages());
}
}
14
3.6Operation «Lese Darstellungsarten»
Mit der Operation readLabelLayouts können die momentan
verfügbaren Darstellungsarten für eine gültige Kombination von
PRZLs abgefragt werden.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// First get all available service groups with serviceGroupID.
List<ServiceGroup> groups;
try {
groups = service.readServiceGroups();
} catch (BarcodeErrorException e) {
System.out.println(“Error in readServiceGroups(): “);
System.out.println(e.getErrorMessages());
return;
}
// Get available label layouts for each service group and display them
System.out.println(“Available Label Layouts:”);
System.out.println(“========================”);
for (ServiceGroup group : groups) {
System.out.println(“LabelLayouts for ‘” + group.getDescription() + “’:”);
List<BasicService> basicServices;
try {
basicServices = service.readBasicServices(group.getServiceGroupID());
} catch (BarcodeErrorException e) {
System.out.println(“Error in readBasicServices(): “);
System.out.println(e.getErrorMessages());
return;
}
for (BasicService basicService : basicServices) {
try {
System.out.println(“for BasicService “ + basicService.getDescription());
// read label layouts with a valid combination of PRZLs (here extracted from a
given BasicService)
List<LabelLayoutResponse> layouts = service.readLabelLayouts
(basicService.getPRZL());
for (LabelLayoutResponse layout : layouts) {
System.out.print(“ - “ + layout.getLabelLayout() + “: “);
System.out.print(“ max. “ + layout.getMaxServices() + “ services “);
System.out.print(“ and “ + layout.getMaxDeliveryInstructions()
+ “ delivery instructions per label, “);
if (layout.isFreeTextAllowed()) {
System.out.println(“freetext allowed.”);
} else {
System.out.println(“freetext not allowed.”);
}
}
} catch (BarcodeErrorException e) {
// This usually means, that this service group is currently not supported at all.
System.out.println(e.getErrorMessages());
}
}
15
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// First get all available service groups with serviceGroupID.
List<PostLogistics.WebServicebarcode.Client.ServiceGroup> groups;
try
{
groups = service.ReadServiceGroups();
}
catch (BarcodeErrorException ex)
{
Console.WriteLine(“Error in ReadServiceGroups():”);
Console.WriteLine(ex.GetErrorMessages());
}
// Get available label layouts for each service group and display them
Console.WriteLine(“Available Label Layouts:”);
Console.WriteLine(“========================”);
foreach (PostLogistics.WebServicebarcode.Client.ServiceGroup group in groups)
{
Console.WriteLine(LabelLayouts for ‘{0}’:”, group.Description);
List<PostLogistics.WebServiceBarcode.Client.BasicService> basicServices;
try
{
basicServices = service.ReadBasicServices(group.ServiceGroupID);
foreach (PostLogistics.WebServiceBarcode.Client.BasicService basicService in
basicServices)
{
try
{
Console.WriteLine(“for BasicService “ + basicService.Description);
// read label layouts with a valid combination of PRZLs (here extracted from
a given BasicService)
List<PostLogistics.WebServiceBarcode.Client.LabelLayout> layouts =
service.ReadLabelLayouts(basicService.PRZL);
Foreach (PostLogistics.WebServiceBarcode.Client.LabelLayout layout in
layouts)
{
Console.WriteLine(“ - “ + layout.Layout + “: “);
Console.WriteLine(“ max. “ + layout.MaxServices + “ services “);
Console.WriteLine(“ and “ + layout.MaxDeliveryInstructions + “ delivery
instructions per label, “);
if (layout.FreeTextAllowed)
{
Console.WriteLine(“freetext allowed.”);
}
else
{
16
Console.WriteLine(“freetext not allowed.”);
}
}
}
catch (BarcodeErrorException ex)
{
Console.WriteLine(ex.GetErrorMessages());
}
}
}
catch (BarcodeErrorException ex)
{
Console.WriteLine(“Error in ReadBasicServices(): “);
Console.WriteLine(ex.GetErrorMessages());
}
17
4 Validierungsoperation
Der Webservice stellt eine Operation zur Verfügung, um die
Kombination der Dienstleistungscodes eines Label-Requests zu
validieren. Es wird überprüft, ob die im Request enthaltenen
Servicecodes (Basisleistung, Zusatzleistungen und Zustellanweisungen) miteinander kombiniert werden dürfen. Ebenfalls wird
überprüft, ob die verwendeten Codes im gewählten Labelformat
(A5, A6, A7 oder FE) erlaubt sind. Je nach Format ist nur eine
gewisse Anzahl an Dienstleistungscodes und Zustellanweisungen
erlaubt.
Die Schnittstelle der Client API Libraries verwenden als Input für
die Validierung direkt die gleichen Barcode-Label-Request-Klassen,
wie die generateLabel-Methoden. Dies hat den Vorteil, dass
die erstellten Requests vorgängig einfach auf korrekte Dienstleistungscode-Kombinationen überprüft werden können. Die gleiche
Validierung wird selbstverständlich auch bei einem Aufruf der
generateLabel-Methoden vom Webservice vorgenommen.
Die aktuell verfügbaren Dienstleistungscodes stehen in speziellen
Konstantenklassen als String-Konstanten zur Verfügung:
BasicServiceCode, AdditionalServiceCode und DeliveryInstructionCode. Diese Klassen enthalten nur die Codes, die
zum Zeitpunkt der Entwicklung des Webservice-Barcode-ClientAPI verfügbar waren. Weitere Codes können unter Umständen
später hinzukommen und als normale Strings übergeben
werden. Um alle aktuellen Codes zu erhalten, sind die LeseOperationen zu verwenden.
Das folgende Beispiel demonstriert die Überprüfung einer
Kombination von Basisleistungscodes, Zusatzleistungscodes und
Zustellanweisungscodes.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Set label layout to validate allowed service codes for
// (otherwise the default is used)
service.setLabelLayout(LabelFormat.A5);
// Label request with basic service code(s) (PRI = Priority)
BarcodeLabelRequest request = service.createLabelRequest();
request.addServiceCode(BasicServiceCode.PRI);
// additional service codes
request.addServiceCode(AdditionalServiceCode.FRA);
request.addServiceCode(“SI”);
// delivery instruction codes
request.addServiceCode(DeliveryInstructionCode.ZAW3213);
request.addServiceCode(“ZAW3215”);
// set the country required to validate the combination
request.setCountryIsoCode(“CH”);
// validation
ValidationResponse result = service.validateCombination(request);
if (!result.hasErrors()) {
System.out.println(“Validation was successful.”);
} else {
System.out.println(“Validation has ERRORS: “);
for (BarcodeError error : result.getErrors()) {
System.out.println(error.getCode() + “ - “ + error.getMessage());
}
}
if (result.hasWarnings()) {
System.out.println(“WARNINGS: “);
for (BarcodeWarning warning : result.getWarnings()) {
System.out.println(warning.getCode() + “ - “ + warning.getMessage());
}
}
18
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// Set label layout to validate allowed service codes for
// (otherwise the default is used)
service.LabelLayout = LabelFormat.A5;
// Label request with basic service code(s) (PRI = Priority)
BarcodeLabelRequest request = service.CreateLabelRequest();
request.AddServiceCode(BasicServiceCode.PRI);
// additional service codes
request.AddServiceCode(AdditionalServiceCode.FRA);
request.AddServiceCode(“SI”);
// delivery instruction codes
request.AddServiceCode(DeliveryInstructionCode.ZAW3213);
request.AddServiceCode(“ZAW3215”);
// set the country required to validate the combination
request.AddCountryIsoCode(“CH”);
// validation
ValidationResponse result = service.ValidateCombination(request);
if (!result.HasErrors())
{
Console.WriteLine(“Validation was successful.”);
}
else
{
Console.WriteLine(“Validation has ERRORS: “);
foreach (ErrorsTypeError error in result.GetErrors())
{
Console.WriteLine(error.Code + “ - “ + error.Message);
}
}
if (result.HasWarnings())
{
Console.WriteLine(“Validation has WARNINGS: “);
foreach (WarningsTypeWarning warning in result.GetWarnings())
{
Console.WriteLine(warning.Code + “ - “ + warning.Message);
}
}
Dieses Beispiel validiert ohne Fehler.
Wird hingegen in den Beispielen «ZAW3215» durch «ZAW3222»
ersetzt, so liefert der Webservice Aufruf entsprechende Validierungs-Fehlermeldungen zurück.
Es gibt noch eine weitere Methode, nämlich validateCombinations, mit der gleich mehrere BarcodeLabelRequests in einem
Webserviceaufruf validiert werden können.
19
5 Label/Barcode Generierung
5.1
Label Generierung
Die Operation zur Generierung von Adressträgern erwartet als
Input zwei Parameter:
– SenderAddress: die Absenderadresse
– LabelRequest: die gewünschten Parameter inklusive Empfängeradresse für einen zu erstellenden Adressträger
Es stehen zwei Methoden zum Aufruf dieser Operation zur
Verfügung: eine zum Erstellen eines einzigen Adressträgers und
eine zum Erstellen mehrerer Adressträger mit Barcode in einem
Aufruf.
class FacadeGenerateLabel
BarcodeWebService
+ createLabelRequest(): BarcodeLabelRequest
+ generateLabel(SenderAddress, BarcodeLabelRequest): BarcodeLabelResponse
+ generateLabels(SenderAddress, BarcodeLabelRequest[]): List<BarcodeLabelResponse>
Um eine BarcodeLabelRequest-Instanz zu erzeugen, ist die
Factory-Methode createLabelRequest zu verwenden. Diese
Methode stellt sicher, dass die Requests bereits mit einer
fortlaufenden itemID initialisiert werden. Die itemID kann bei
Bedarf auch selbstständig gesetzt werden. In diesem Falle ist
allerdings die Eindeutigkeit der itemIDs innerhalb eines
generateLabels-Aufrufs sicherzustellen.
Die generierten Labels werden als BarcodeLabelResponse-Objekte
zurückgegeben. Eine BarcodeLabelResponse kann wiederum
Fehlermeldungen (in der gewählten Sprache) enthalten, falls die
Generierung des entsprechenden Adressträgers mit den
gewünschten Attributen nicht möglich war. Ansonsten ist der
generierte Adressträger im entsprechenden File-Format in der
Property LabelBinaryData enthalten. Diese binären Daten
können zum Beispiel als Bilddatei abgespeichert werden.
Das folgende Beispiel demonstriert, wie ein einfacher, einzelner
Adressträger generiert und die Response ausgelesen werden
kann.
20
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Franking licence (mandatory!):
// this has to be a valid license for your barcode web service user account
service.setFrankingLicense(“12345678”);
// enable/disable print preview
service.setPrintPreview(false);
// sender address
SenderAddress sender = new SenderAddress();
sender.setName1(“Meier AG”);
sender.setStreet(“Viktoriaplatz 10”);
sender.setZIP(“8048”);
sender.setCity(“Zürich”);
// BarcodeLabelRequest with recipient address
BarcodeLabelRequest labelRequest = service.createLabelRequest();
RecipientAddress address = labelRequest.getAddress();
address.setFirstName(“Melanie”);
address.setName1(“Steiner”);
address.setName2 (“Müller AG”);
address.setName3 (“Abteilung Marketing”);
address.setAddressSuffix (“Gebäude 6-Ost”);
address.setStreet(“Viktoriastrasse”);
address.setHouseNo(“21a”);
address.setZIP(“3030”);
address.setCity(“Bern”);
// Add notification services with Builder-pattern and immediate validation
NotificationService.Builder notificationServiceBuilder =
new NotificationService.Builder(
NotificationService.NotificationType.CODE_1, Language.DE);
NotificationService notificationService =
notificationServiceBuilder.email(“[email protected]”)
.freeText1(“Test 1”)
.freeText2(“Test 2”).build();
labelRequest.addNotificationService(notificationService);
// set service-code
labelRequest.addServiceCode(BasicServiceCode.ECO);
// Service call generateLabel:
BarcodeLabelResponse response = service.generateLabel(sender, labelRequest);
// display response information
try {
// read binary label image data
// (throws an Exception if error in the response)
byte[] binaryData = response.getLabelBinaryData();
21
// dsplay barcode information
System.out.println(“Barcode successfully generated: “ +
response.getIdentCode());
System.out.print(“ Binary-Data: “ + response.getImageFileType());
System.out.print(“, “ + response.getImageResolution() + “ DPI, “);
System.out.print(response.isColorPrintRequested() ? “color, “ : “black, “);
System.out.println(binaryData.length + “ bytes”);
} catch (BarcodeErrorException e) {
// label not generated, display errors:
// (error messages are in the choosen language)
System.out.println(“Barcode was not generated due to errors: “);
System.out.println(e.getErrorMessages());
}
// Also display warning messages
if (response.hasWarnings()) {
System.out.print(“, WARNINGS:”);
System.out.println(concatMessages(response.getWarnings()));
}
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
// Franking licence (mandatory!):
// this has to be a valid license for your barcode web service user account
service.FrankingLicense = “12345678”;
service.PrintPreview = false;
BarcodeLabelRequest labelRequest = service.CreateLabelRequest();
// Sender address
SenderAddress sender = new SenderAddress();
sender.Name1 = “Meier AG”;
sender.Street = “Viktoriaplatz 10”;
sender.Zip = “8048”;
sender.City = “Zürich”;
// BarcodeLabelRequest with recipient address
RecipientAddress address = labelRequest.Address;
address.Title = “Frau”;
address.FirstName = “Melanie”;
address.Name1 = “Steiner”;
address.Name2 = “Müller AG”;
address.Name3 = “Abteilung Marketing”;
address.AddressSuffix = “Gebäude 6-Ost”;
address.Street = “Viktoriastrasse”;
address.HouseNo = “21a”;
address.Zip = “3030”;
address.City = “Bern”;
22
// Add notification services
NotificationService.Builder notificationServiceBuilder = new NotificationService.Builder(
NotificationService.NotificationType.CODE_1, Language.de);
NotificationService notificationService = notificationServiceBuilder.email
(“[email protected]”).freeText1(“Test 1”).
freeText2(“Test 2”).build();
labelRequest.AddNotificationService(notificationService);
// set service-code
labelRequest.AddServiceCode(BasicServiceCode.ECO);
// Service call generateLabel:
BarcodeLabelResponse response = service.GenerateLabel(sender, labelRequest);
// display response information
try
{
// Read binary label image data
// (throws an Exception if error in the response)
byte[] binaryData = response.LabelBinaryData;
// display barcode information
Console.Write(“Barcode successfully generated: “ + response.IdentCode);
Console.Write(“ Binary-Data: “ + response.ImageFileType);
Console.Write(“, “ + response.ImageResolution + “ DPI, “);
Console.Write(response.ColorPrintRequested ? “color, “ : “black, “);
Console.WriteLine(binaryData.Length + “ bytes”);
}
catch (BarcodeErrorException ex)
{
// label not generated, display errors:
// (error messages are in the choosen language)
Console.WriteLine(“Barcode was not generated due to errors: “);
Console.WriteLine(ex.GetErrorMessages());
}
// Also display warning messages
if (response.HasWarnings())
{
Console.Write(“, WARNINGS:”);
Console.WriteLine(response.GetWarnings());
}
23
5.2
Einzelbarcode Generierung
Mit der Operation generateSingleBarcodes können die Barcodes
eines Adressträgers einzeln bezogen werden. Sie ähnelt sehr stark
der Operation generateLabel und unterscheidet sich lediglich
darin, dass im Aufruf gewisse Parameter(PrintAdresses, Printpreview, labelLayout) nicht gesetzt werden können. Auch die
Antwort unterscheidet sich nur minim. Anstelle eines einzelnen
Labels wird eine Liste von Barcodes retourniert.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Franking licence (mandatory!):
// this has to be a valid license for your barcode web service user account
service.setFrankingLicense(“12345678”);
// enable/disable print preview
service.setPrintPreview(false);
// sender address
SenderAddress sender = new SenderAddress();
sender.setName1(“Meier AG”);
sender.setStreet(“Viktoriaplatz 10”);
sender.setZIP(“8048”);
sender.setCity(“Zürich”);
sender.setDomicilePostOffice(“8048 Zürich”);
// BarcodeLabelRequest with recipient address
SingleBarcodesRequest labelRequest = service.createSingleBarcodesRequest();
RecipientAddress address = labelRequest.getAddress();
address.setTitle(“Frau”);
address.setFirstName(“Melanie”);
address.setName1(“Steiner”);
address.setStreet(“Viktoriastrasse”);
address.setHouseNo(“21a”);
address.setZIP(“3030”);
address.setCity(“Bern”);
// set service-code
labelRequest.addServiceCode(“RINL”);
labelRequest.addServiceCode(“eAR”);
labelRequest.addServiceCode(“ZAW2511”);
// Service call generateLabel:
SingleBarcodesResponse response = service.generateSingleBarcodes(sender, labelRequest);
// display response information
try {
// Read binary barcodes data
// (throws an Exception if error in the response)
List<byte[]> binaryData = response.getBarcodesBinaryData();
24
// Informationen zum Bar-Code ausgeben
System.out.println(“Barcode successfully generated: “ + response.getIdentCode());
System.out.print(“ Binary-Data: “ + response.getImageFileType());
System.out.print(“, “ + response.getImageResolution() + “ DPI, “);
System.out.print(response.isColorPrintRequested() ? “color, “ : “black, “);
System.out.println(“Number of generated single barcodes: “ + binaryData.size());
for (int i = 0; i < binaryData.size(); i++) {
System.out.println(“Barcode “ + i + “ “ + binaryData.get(i).length + “ bytes”);
}
} catch (BarcodeErrorException e) {
// label not generated, display errors:
// (error messages are in the chosen language)
System.out.println(“Barcode was not generated due to errors: “);
System.out.println(e.getErrorMessages());
}
// also display warning messages
if (response.hasWarnings()) {
System.out.println(“ with WARNINGS:”);
for (BarcodeWarning warning : response.getWarnings()) {
System.out.println(“ “ + warning.getCode() + “ - “ + warning.getMessage() + “, “);
}
25
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Language.de);
service.UserName = “username”;
service.Password = “password”;
service.FrankingLicense = FrankingLicense;
service.PrintPreview = false;
// Sender address
SenderAddress sender = new SenderAddress();
sender.Name1 = “Meier AG”;
sender.Street = “Viktoriaplatz 10”;
sender.Zip = 8048L;
sender.City = “Zürich”;
sender.DomicilePostOffice = “Zürich”;
// BarcodeLabelRequest inklusive recipient address
SingleBarcodesRequest request = service.CreateSingleBarcodesRequest();
RecipientAddress address = request.Address;
address.setTitle(“Frau”);
address.setFirstName(“Melanie”);
address.setName1(“Steiner”);
address.setStreet(“Viktoriastrasse”);
address.setHouseNo(“21a”);
address.setZIP(“3030”);
address.setCity(“Bern”);
request.AddServiceCode(“RINL”);
request.AddServiceCode(“eAR”);
request.AddServiceCode(“ZAW2511”);
// call the service to create the single barcodes
SingleBarcodesResponse response = service.GenerateSingleBarcodes(sender, request);
try
{
// Read binary label image data
// (throws an Exception if error in the response)
byte[] binaryData = response.LabelBinaryData;
}
catch (BarcodeErrorException ex)
{
// label not generated, display errors:
// (error messages are in the choosen language)
Console.WriteLine(“Barcode was not generated due to errors: “);
Console.WriteLine(ex.GetErrorMessages());
}
// Also display warning messages
if (response.HasWarnings())
{
Console.Write(“, WARNINGS:”);
Console.WriteLine(response.GetWarnings());
}
26
5.3Operation «Generiere Barcode»
Mit der Operation generateBarcode kann ein Kunde vordefinierte
Barcodes generieren und ausdrucken.
== Java Code: ==
BarcodeWebService service = new BarcodeWebService(Language.DE);
service.setLoginCredentials(“username”, “passwort”);
// Generate an LSO-1 barcode
// create first the request object for the generateBarcode request
IndividualBarcodeRequest request = service.createIndividualBarcodeRequest();
// choose which barcode to generate (here LSO-1)
BarcodeDefinition barcodeDefinition = new BarcodeDefinition();
barcodeDefinition.setImageFileType(ImageFileType.PDF);
barcodeDefinition.setImageResolution(300);
barcodeDefinition.setBarcodeType(BarcodeType.LSO_1);
request.setBarcodeDefinition(barcodeDefinition);
// service call generateBarcode:
IndividualBarcodeResponse response = service.generateBarcode(request);
try {
// read binary barcode data
// (throws an Exception if there are errors in the response)
byte[] binaryData = response.getBarcodeData();
// display barcode information
System.out.println(“Barcode successfully generated!”);
System.out.print(“ Binary-Data: “ + response.getBarcodeData());
System.out.print(“, “ + response.getBarcodeDefinition().getImageResolution() +
“ DPI, “);
System.out.print(response.isColorPrintRequired() ? “color, “ : “black, “);
System.out.println(binaryData.length + “ bytes”);
} catch (BarcodeErrorException e) {
// barcode not generated, display errors:
// (error messages are in the chosen language)
System.out.println(“Barcode was not generated due to errors: “);
System.out.println(e.getErrorMessages());
}
27
== C# Code: ==
BarcodeWebService service = new BarcodeWebService(Lang);
service.UserName = UserName;
service.Password = Password;
service.EndpointAddress = new EndpointAddress(Url);
IndividualBarcodeRequest request = service.CreateIndividualBarcodeRequest();
BarcodeDefinition barcodeDefinition = new BarcodeDefinition();
barcodeDefinition.BarcodeType = BarcodeType.LSO_1;
barcodeDefinition.ImageFileType = ImageFileType.JPG;
barcodeDefinition.ImageResolution = 300;
request.Definition = barcodeDefinition;
IndividualBarcodeResponse response = service.GenerateBarcode(request);
try
{
// Read binary label image data
// (throws an Exception if error in the response)
byte[] binaryData = response.BarcodeData;
}
catch (BarcodeErrorException ex)
{
// barcode not generated, display errors:
// (error messages are in the choosen language)
Console.WriteLine(“Barcode was not generated due to errors: “);
Console.WriteLine(ex.GetErrorMessages());
}
if (response.HasWarnings())
{
Console.Write(“, WARNINGS:”);
Console.WriteLine(response.GetWarnings());
}
28
5.4
Beispiele für Beleglose Nachnahme (BLN)
Für die beleglose Nachnahme müssen nebst dem ServiceCode
BLN auch diverse Felder erfasst werden. Diese unterscheiden
sich für den Fall BLN mit ESR und BLN mit IBAN.
Achtung: BLN mit IBAN darf aktuell noch nicht verwendet
werden.
BLN mit ESR:
== Java Code: ==
labelRequest.addServiceCode(AdditionalServiceCode.BLN);
labelRequest.setCashOnDeliveryAmount(10f);
labelRequest.setCashOnDeliveryRefNrESR(„965993000000000000001237460“);
labelRequest.setCashOnDeliveryCustomerNrESR(„010003757“);
labelRequest.setCashOnDeliveryCustomerEmail(„[email protected]“);
labelRequest.setCashOnDeliveryCustomerMobile(„0791234567“);
== C# Code: ==
labelRequest.AddServiceCode(AdditionalServiceCode.BLN);
labelRequest.CashOnDeliveryAmount = 10;
labelRequest.CashOnDeliveryRefNrESR = „965993000000000000001237460“;
labelRequest.CashOnDeliveryCustomerNrESR = „010003757“;
labelRequest.CashOnDeliveryCustomerEmail = „[email protected]“;
labelRequest.CashOnDeliveryCustomerMobile = „0791234567“;
29
BLN mit IBAN:
== Java Code: ==
labelRequest.addServiceCode(AdditionalServiceCode.BLN);
labelRequest.setCashOnDeliveryAmount(10f);
labelRequest.setCashOnDeliveryIbanNumber(„CH10002300A1023502601“);
labelRequest.setCashOnDeliveryIbanName(„Hans Muster“);
labelRequest.setCashOnDeliveryIbanStreet(„Musterstrasse 11“);
labelRequest.setCashOnDeliveryIbanZip(„3011“);
labelRequest.setCashOnDeliveryIbanCity(„Bern“);
labelRequest.setCashOnDeliveryCustomerEmail(„[email protected]“);
labelRequest.setCashOnDeliveryCustomerMobile(„0791234567“);
== C# Code: ==
labelRequest.AddServiceCode(AdditionalServiceCode.BLN);
labelRequest.CashOnDeliveryAmount = 10;
labelRequest.CashOnDeliveryIbanNumber = „CH10002300A1023502601“;
labelRequest.CashOnDeliveryIbanName = „Hans Muster“;
labelRequest.CashOnDeliveryIbanStreet = „Musterstrasse 11“;
labelRequest.CashOnDeliveryIbanZip = „3011“;
labelRequest.CashOnDeliveryIbanCity = „Bern“;
labelRequest.CashOnDeliveryCustomerEmail = „[email protected]“;
labelRequest.CashOnDeliveryCustomerMobile = „0791234567“;
30
Post CH AG
Support Webservices
Viktoriastrasse 21
Postfach
3030 Bern
11.2013
[email protected]
www.post.ch/webservice
31