November 2018
Web-Client
Berichte in Aktionen erzeugen
Der Web-Client unterstützt jetzt das Erzeugen von SSRS-Berichten aus einer Aktion heraus. Bisher konnte nur der Vollclient einen Bericht mit einer Aktion erzeugen. Der Grund dafür war, dass die Aktion das Ergebnis der Berichtserzeugung auf der Festplatte des Benutzers speichern konnte.
Der Web-Client verfolgt einen anderen Ansatz. Er speichert einen erzeugten Bericht vorübergehend in einem Azure Blob Storage, von wo der Benutzer den Bericht anschließend herunterladen kann. Das folgende Beispiel zeigt, wie Sie einen erzeugten Bericht in einer time cockpit-Aktion zurückgeben
clr.AddReference("System")
clr.AddReference("System.IO")
clr.AddReference("System.Text.Encoding")
clr.AddReference("TimeCockpit.Windows.Controls")
from System.Text import Encoding
from System.Collections.Generic import List, Dictionary, IEnumerable
from TimeCockpit.Data.QueryLanguage import QueryParameter
from TimeCockpit.Windows.Controls import ReportFormat
from TimeCockpit.Windows.Controls.Reporting import ReportBuilder, ReportConfiguration
def actionSample(actionContext):
dataContext = actionContext.DataContext
parameters = List[QueryParameter]()
configuration = ReportConfiguration()
data = Dictionary[String, IEnumerable[EntityObject]]()
customerQuery = '''From Current In APP_Customer
Order By Current.APP_Code
Select New With
{
.ObjectUuid = Current.APP_CustomerUuid,
Current.APP_Country,
Current.APP_Code,
Current.APP_CompanyName,
Current.APP_Phone,
Current.APP_Street,
Current.APP_ZipCode,
Current.APP_Town
}'''
customers = dataContext.Select(customerQuery)
data.Add("Customers", customers)
userQuery = '''From U In APP_UserDetail Where U.APP_UserDetailUuid = @UserDetailUuid Select New With { U.Firstname, U.Lastname }'''
users = dataContext.SelectWithParams({ "Query": userQuery, "@UserDetailUuid": dataContext.Environment.CurrentUser.UserDetailUuid })
data.Add("User", users)
reportDefinition = # load report definition from e.g. EntityViewReport table
reportBuilder = ReportBuilder(dataContext)
bytes = reportBuilder.GetReport(
reportDefinition,
ReportFormat.Pdf,
data,
parameters,
configuration)
result = FileActionResult()
result.ContentType = "text/plain"
result.Inline = False
result.FileDownloadName = "customer-report.pdf"
result.FileContents = bytes
actionContext.ActionResult = result
Im Grunde müssen Sie nur eine Instanz von FileActionResult erzeugen, den erzeugten Bericht result.FileContents zuweisen und das ActionResult der Aktion setzen.
Diese Art, einen Bericht zu erzeugen, ist besonders praktisch, wenn Sie keine time cockpit-Liste haben, der Sie einen Bericht zuordnen können.
Mehrere Datasets in Berichten
Bisher unterstützten sowohl der Vollclient als auch der Web-Client nur ein Dataset pro Bericht. Mit der neuen Version werden mehrere Datasets pro Bericht unterstützt.
configuration = ReportConfiguration()
data = Dictionary[String, IEnumerable[EntityObject]]()
customerQuery = # some customer query
customers = dataContext.Select(customerQuery)
data.Add("Customers", customers)
userQuery = # some userdetail query
users = dataContext.SelectWithParams({ "Query": userQuery, "@UserDetailUuid": dataContext.Environment.CurrentUser.UserDetailUuid })
data.Add("User", users)
reportDefinition = # load report definition from e.g. EntityViewReport table
reportBuilder = ReportBuilder(dataContext)
bytes = reportBuilder.GetReport(
reportDefinition,
ReportFormat.Pdf,
data,
parameters,
configuration)
Das ist besonders hilfreich, wenn Sie den Daten in Ihrem Bericht mehr Struktur geben möchten.
Performanceverbesserungen im Zeiterfassungskalender
Wenn Sie in früheren Versionen viele Zeitbuchungen in einer Woche hatten, sank die Performance beim Hinzufügen oder Ändern von Einträgen, weil die ganze Woche neu gezeichnet wurde. Jetzt werden die Änderungen im Zeiterfassungskalender feiner verfolgt, und nur die Zeitbuchungen, die sich geändert haben, werden am Bildschirm neu gezeichnet.
Elemente aus einer RelationCell anlegen
Diese Funktion gibt es im Vollclient schon lange, und jetzt ist sie auch im Web-Client verfügbar. Wenn Sie die Relation-Zelle öffnen, finden Sie in ihrer Fußzeile ein +-Zeichen. Wenn Sie darauf klicken, erscheint ein neues Formular, zum Beispiel für einen neuen Kunden. Sie müssen nicht mehr zu den Stammdatenlisten wechseln, um Daten hinzuzufügen.

Höchstarbeitszeit
Mit 2018/09 ist in Österreich eine neue Arbeitszeitgrenze in Kraft getreten. Mit der neuen Version haben wir eine neue Höchstarbeitszeit angelegt, die diese Änderungen abbildet. Wenn Sie noch den Vollclient verwenden, aktualisieren Sie time cockpit bitte auf die neueste Version. Wenn Sie keinen Squirrel-Build haben, laden Sie bitte die neueste Version von unserer Website herunter. Wenn Sie bereits einen sich automatisch aktualisierenden Squirrel-Build haben, sollten Sie bereits zur Aktualisierung von time cockpit aufgefordert worden sein.
Um die neue Grenze zu aktivieren, öffnen Sie Ihre globalen Einstellungen und setzen Sie die Grenze auf Default Working Time Limit Austria Valid From 2018/09.
Die wichtigsten Änderungen sind:
- Max Working Time Per Day Excluding Travel Time [h]: 12 h
- Max working time per week including active travel time [h]: 60 h
Details finden Sie unter:
- https://www.wko.at/service/arbeitsrecht-sozialrecht/arbeitszeit-regelungen-alt-neu-vergleich.html
- https://www.wko.at/Content.Node/Service/Arbeitsrecht-und-Sozialrecht/Arbeitsrecht/Arbeitszeit/Ruhepause.html

Fehlerbehebungen & Verbesserungen
- Die DisplayProperty in der RelationCell wurde in HTML5 nicht verwendet, wenn die Abfrage automatisch generiert wurde
- Tooltips im Kalender werden HTML-kodiert
- USR_TimesheetUserDetailSelectionList wird im HTML5-Client verwendet
- Shell auf Angular 7 aktualisiert