VCR.NET 4.3.52: kleinere Fixes

Ich musste nun doch zwei kleine nervige Fehler beheben:

  • Läuft mehr als eine Aufzeichnung (egal ob auf einer oder mehreren Karten) und man beendet eine manuell mit gleichzeitigem Unterdrücken des Übergangs in den Schlafzustand (was in diesem Fall eigentlich sinnlos ist, da ja noch mindestens eine weitere Aufzeichnung aktiv ist!), so geht der Dienst auch nach Beenden aller anderen Aufzeichnungen nicht in den Schlafzustand.
  • Hat man einen Suchfavoriten definiert, bei dem ein Filter auf Fernsehsendung oder Radioausstrahlung aktiv ist, so wird dieser Filter in der Favoritenansicht nicht berücksichtigt und die angezeigte Anzahl ist eventuell zu groß – richtig lästig, wenn die Anzahl eigentlich 0 sein sollte. Tatsächlich ist nur die angezeigte Anzahl falsch, der Aufruf des Favoriten meldet die korrekten Sendungen in der Programmzeitschrift.

Dann habe ich noch was ganz Dummes getan: ich habe auf die aktuelle Version von jQuery (3.1.1) und jQueryUI (1.12.1) umgestellt, was erst einmal einige Clitches in der Oberfläche nach sich zog. Einiges habe ich korrigiert, einiges ist anders aber in Ordnung und einiges nicht mehr so schön wie vorher aber erträglich. Im Moment fehlt mir die Zeit, die (CSS / LESS) Styles anzupassen, aber da ich den VCR.NET Recording Service ja auch selbst nutze werde ich nach und nach versuchen, die Ecken und Kanten zu glätten.

Wie dem auch sei: der aktuelle Stand kann direkt von mir (VCRNET.msi) oder auch von Heise bezogen werden.

Viel Spaß weiterhin

Jochen

Mehr Spaß mit TypeScript: Klassenschnittstellen

Man kann in TypeScript ja über die new() Funktion Konstruktoren insbesondere auch in Schnittstellen referenzieren. Schauen wir uns dazu einmal folgendes Beispiel an:

interface IAnyFactory<TAny> {
new (param: string): TAny;
greeting: string;
}

class Any {
static greeting = "Hi";
constructor(private _param: string) {}
}

function create<TAny>(factory: IAnyFactory<TAny>): TAny { return new factory("test"); }
function testAny(): Any { return create(Any); }
Ich kann an die Funktion create erst einmal irgendeine Klasse übergeben, wo dann tatsächlich der Konstruktor als Parameter verwendet wird. Alle statischen Felder und Methoden einer Klasse sind aber in JavaScript einfach nur die Eigenschaften dieser Funktion. Über die Schnittstelle IAnyFactory verlangt create, dass nur solche Klassen verwendet werden dürfen, die zusätzlich auch ein statisches Feld greeting der Art string haben. Ich kann mir vorstellen, dass dieses Verhalten ganz praktisch sein kann: man hat hier quasi so etwas wie eine Schnittstellendefinition für eine Klasse!

Happy Coding

Jochen

CoffeeBreak – Nachschlag zum Fazit

Nur so als kleiner Abschluss zum vorläufigen Fazit:

  • JOIN funktioniert wie dokumentiert
  • Eindeutige Schlüssel gehen wie im Internet beschrieben, die Dokumentation scheint mir aber unvollständig zu sein (EnforceUniqueValues im CAML)
  • Ein Pflichtfeld (Required TRUE) habe ich nicht hinbekommen: über JSOM kann man auch Items ohne Wert einspielen

Ich denke, dass war es für diese Evaluation – vielleicht irgendwann einmal mehr.

Jochen

CoffeeBreak – Gruppierung und Aggregation

Und es geht natürlich doch direkt aus JSOM heraus – ein erstes Sorry an SharePoint! Schickt man ein geeignetes View XML an renderListData einer Liste, dann erhält man alle gewünschten Aggregationen – alle Zahlen zwar als Zeichenketten, aber wenn man das weiß ist das mit einem parseFloat schnell erledigt [naja: modulo kleiner LCID Missverständnisse zwischen Client und Server, produktiv wäre da noch nicht das letzte Wort gesprochen]. In der Evaluation passiert das so:

  • Der Controller setzt die Suche mit der eigenen Klasse und group() sowie aggregate() auf
  • In der SharePoint Schnittstelle wird dann das daraus erzeugte View XML in pivot() genutzt
  • Die Ergebnisklasse extrahiert die gewünschten Aggregationen

Na also…

Jochen