Table of Contents

Anleitung: .NET-Framework-Klassen in Skripten verwenden

IronPython unterstützt die Verwendung von .NET-Framework-Klassen in Skripten. Das ist äußerst nützlich, wenn Sie Schnittstellen umsetzen möchten, die Daten in time cockpit importieren oder aus time cockpit exportieren.

.NET-Klassen verfügbar machen

Wenn Sie .NET-Klassen in einem Python-Skript verwenden möchten, müssen Sie zuerst eine Referenz auf die DLL hinzufügen, die die entsprechenden .NET-Klassen enthält. Dazu rufen Sie clr.AddReference auf (Details zum Laden von Assemblies in IronPython finden Sie im entsprechenden Kapitel der IronPython-Dokumentation).

Nachdem Sie die Assemblies geladen haben, müssen Sie die Namespaces mit der Python-Anweisung import importieren (Details zum Importieren von .NET-Namespaces in IronPython finden Sie im entsprechenden Kapitel der IronPython-Dokumentation).

Fortgeschrittene Themen

Sie können auch fortgeschrittene C#- oder .NET-Funktionen wie Generics, verschachtelte Typen usw. in Python verwenden. Details finden Sie in der Dokumentation von IronPython.

Zeitbuchungen in eine Textdatei exportieren

Das folgende Beispiel zeigt, wie Sie Zeitbuchungen in eine Textdatei exportieren:

clr.AddReference("mscorlib")
from System.IO import StreamWriter, File
from System import DateTime

timesheets = Context.SelectWithParams({
  "Query": "From T In Timesheet Where T.BeginTime >= @BeginTime And T.EndTime <= @EndTime Select T",
  "@BeginTime": DateTime(2010, 1, 1),
  "@EndTime": DateTime(2010, 1, 31) })

writer = StreamWriter("c:\\temp\\export.txt")
try:
  for timesheet in timesheets:
    writer.WriteLine(timesheet.BeginTime.ToString() + ";" 
      + timesheet.EndTime.ToString() + ";"
      + timesheet.Description)
finally:
  writer.Dispose()

print File.ReadAllText("c:\\temp\\export.txt")

print "Done!"

Länder aus einem REST-Service importieren

Das folgende Beispiel zeigt, wie Sie Länder aus einem REST-Service importieren:

clr.AddReference("System")
from System.Net import WebRequest
from System.IO import StreamReader
from TimeCockpit.Data.QueryLanguage import QueryParameter

def download_text(url):
  req = WebRequest.Create(url)
  resp = req.GetResponse()
  try:
    respStream = resp.GetResponseStream()
    try:
      streamReader = StreamReader(respStream)
      return streamReader.ReadToEnd()
    finally:
      streamReader.Close()
  finally:
    respStream.Close()

countries = {}
content = download_text("http://download.geonames.org/export/dump/countryInfo.txt")
for line in content.splitlines():
  if not line.startswith("#"):
    columns = line.split("\t")
    countries[columns[0]] = {"IsoCode": columns[0], "EnglishName": columns[4], "Currency": columns[10], "Continent": columns[8], "GermanName": columns[4]}

for country in countries:
  germanCountryInfo = download_text("http://ws.geonames.org/countryInfoCSV?lang=de&country=%(countryIsoCode)s" % { "countryIsoCode": country })
  if len(germanCountryInfo) > 0:
    germanLines = germanCountryInfo.splitlines()
    if len(germanLines) >= 2:
      countries[country]["GermanName"] = germanLines[1].split("\t")[4]

  dbCountry = Context.SelectSingleWithParams({"Query": "From C In Country Where C.IsoCode = @IsoCode Select C", "@IsoCode": country})
  if dbCountry == None:
    dbCountry = Context.CreateCountry()
    dbCountry.IsoCode = country
  dbCountry.Name = countries[country]["EnglishName"]
  dbCountry.Currency = countries[country]["Currency"]
  dbCountry.GermanName = countries[country]["GermanName"]
  Context.SaveObject(dbCountry)

print "Done!"