Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

On-the-fly Erstellung von vCard's

Geschrieben von: Christoph Wille
Kategorie: C#

Die virtuellen Businesskarten - die vCards - werden vielen von uns schon einmal untergekommen sein. Entweder als Attachment bei einer Email, oder als Download von einer Website. Einigen wird es dabei schon in den Sinn gekommen sein, für das eigene Communityportal solche vCards dynamisch für die Mitglieder zu generieren. Dieser Artikel zeigt, wie's geht.

Als ersten Schritt erzeugen wir uns eine vCard mittels Outlook Express, und sehen uns die Datenstrukturen an. Danach werden wir mit diesen Informationen an die Arbeit gehen, und uns eine Klasse programmieren, die Daten für die Erstellung der vCard annimmt, und als letzten Schritt aus diesen Daten eine vCard dynamisch erstellt.

Mit Outlook Express zur vCard

Der einfachste und schnellste Weg zu einer vCard ist mittels Outlook Express. Dazu geht man zu den Adressen:

Und exportiert dort eine der Adressen in das vCard Format:

Dann kann man auf die neu erstellte vCard (Prefect, Ford.vcf) doppelklicken, und bekommt personenbezogene Informationen aus der vCard angezeigt:

Was steckt nun in so einer .vcf Datei drinnen? Es ist ein ganz normales Textfile mit "Feldern":

BEGIN:VCARD
VERSION:2.1
N:Prefect;Ford
FN:Ford Prefect
ADR;HOME:;;Vordernbergerstrasse 27/8;Leoben;AT;8700;Austria
LABEL;HOME:Vordernbergerstrasse 27/8;Leoben;AT;8700;Austria
EMAIL;PREF;INTERNET:ford@theGuide.net
REV:20020905T163340Z
END:VCARD

Details zu den einzelnen Feldern erfährt man auf der Seite Personal Data Interchange - vCard and vCalendar. Allerdings kann man sich aus einem vollausgefüllten Outlook-Adresseintrag nach dem Export alles selbst zusammenreimen - für die Generierung einer vCard.

Die vCardGenerator Klasse

Damit man den Code möglichst in allen Anwendungen einsetzen kann - von Windows Forms bis hin zu ASP.NET - habe ich eine Klasse vCardGenerator designed, die das Erstellen einer vCard kapselt. Der Input sind die vCard-Felder, heraus kommt eine fertig korrekt formatierte elektronische Visitenkarte.

Die einzelnen Elemente der vCard werden in der Klasse in einer Hashtable verwaltet. Um den Eigenschaften den Direktzugriff (und somit Fehlerbehandlung) zu ersparen, werden die Zugriffe in einer GetProperty sowie SetProperty Methode abgewickelt:

using System;
using System.Collections;
using System.Text;

namespace AspHeute.Utilities {
public class vCardGenerator {
  Hashtable Elements;
  
  public vCardGenerator() {
    Elements = new Hashtable();
  }
  
  private void SetProperty(string strElement, string strValue) {
    if (Elements.ContainsKey(strElement)) {
      Elements[strElement] = strValue;
    } else {
      Elements.Add(strElement, strValue);
    }
  }
  
  private string GetProperty(string strElement) {
    if (Elements.ContainsKey(strElement)) {
      return Elements[strElement].ToString();
    }
    
    return "";
  }

Details zur Verwendung der Hashtable Klasse finden Sie im Artikel Die Hashtable Klasse.

Die Eigenschaften können diese Methoden nun einsetzen, um die Werte bequem zu speichern - und zu holen (in der Klasse sind nicht alle möglichen Felder einer vCard implementiert, man kann das aber leicht nachholen):

  public string FullName {
    get { return GetProperty("FN:"); }
    set { SetProperty("FN:", value); }
  }
  
  public string HomeTelVoice {
    get { return GetProperty("TEL;HOME;VOICE:"); }
    set { SetProperty("TEL;HOME;VOICE:", value); }
  }
  
  public string HomeTelFax {
    get { return GetProperty("TEL;HOME;FAX:"); }
    set { SetProperty("TEL;HOME;FAX:", value); }
  }
  
  public string CellTelVoice {
    get { return GetProperty("TEL;CELL;VOICE:"); }
    set { SetProperty("TEL;CELL;VOICE:", value); }
  }
  
  public string HomeAddress {
    get { return GetProperty("ADR;HOME:;;:"); }
    set { SetProperty("ADR;HOME:;;", value); }
  }
  
  public string PreferedInternetEmailAddress {
    get { return GetProperty("EMAIL;PREF;INTERNET:"); }
    set { SetProperty("EMAIL;PREF;INTERNET:", value); }
  }

Wie Sie sehen, verwende ich als Key für den Hashtable den linken Teil einer Zeile in der vCard, und als Wert das, was auch als Wert in der vCard rechts in der Zeile steht. Auf diese Art und Weise wird nämlich das Erstellen der vCard ein Leichtes:

  public string Generate() {
    StringBuilder stb = new StringBuilder();
    stb.Append("BEGIN:VCARD\r\n");
    stb.Append("VERSION:2.1\r\n");
    
    foreach (DictionaryEntry de in Elements)
    {
      stb.Append(de.Key);
      stb.Append(de.Value);
      stb.Append("\r\n");
    }
    
    stb.Append("END:VCARD\r\n");
    return stb.ToString();
  }

Ein Vorspann und Ende fix in den StringBuilder einfügen, und die Datenpaare danach mit dem foreach Statement auslesen und schreiben. Die Klasse sieht im Class Scout von #develop dann so aus:

Generieren einer Beispiel-vCard

In der Beispielapplikation vCardGenerator ist neben der Klasse vCardGenerator auch noch ein Hauptprogramm mit dabei, das die Verwendung zeigt (SampleApp.cs):

using System;
using System.IO;
using AspHeute.Utilities;

public class SampleApp {
  public static void Main() {
    vCardGenerator vcg = new vCardGenerator();
    vcg.FullName = "Christoph Wille";
    vcg.HomeAddress = "Vordernbergerstrasse 27/8;Leoben;AT;8700;Austria";
    vcg.PreferedInternetEmailAddress = "christophw@icsharpcode.net";
    vcg.CellTelVoice = "+43 4711 42";
    
    string strVCard = vcg.Generate();
    FileInfo fi = new FileInfo("sample.vcf");
    StreamWriter sw = fi.CreateText();
    sw.Write(strVCard);
    sw.Flush();
    sw.Close();
  }
}

Heraus kommt ein perfekt gültiges sample.vcf (überprüfbar per Doppelklick):

BEGIN:VCARD
VERSION:2.1
TEL;CELL;VOICE:+43 4711 42
EMAIL;PREF;INTERNET:christophw@icsharpcode.net
ADR;HOME:;;Vordernbergerstrasse 27/8;Leoben;AT;8700;Austria
FN:Christoph Wille
END:VCARD

Natürlich kann das so generierte vCard per ASP.NET Downloadlink auch verschickt werden (zB interessant für die Mitglieder einer Community). Alles was zu tun ist, ist den entsprechenden MIME Type beim Download mitzuschicken - schon öffnet Outlook die vCard.

Schlußbemerkung

Die heute vorgestellte Klasse implementiert nur einige wichtige Elemente einer vCard, allerdings bin ich mir sicher, daß Sie die von Ihnen benötigten schnell mit Copy&Paste Programmierung einbauen werden können.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

AutoCompletion für Web Formulare
Das foreach Statement
Das using Schlüsselwort
Die Hashtable Klasse
Die String Klasse in C#
On-the-fly Generierung von Graphiken

Links zu anderen Sites

#develop (SharpDevelop)
Personal Data Interchange - vCard and vCalendar

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.