Author Archives: Andreas
Template parsen in C#
Ok habe ich mir gedacht. Es wird ja wohl nicht so schwer sein folgenden Code zu parsen und die Templates entsprechend zu ersetzen:
1 2 3 4 5 6 7 8 9 10 11 |
Dies ist ein Test bla bla bla {{for group in Groups}} Die Bezeichnung der Gruppe ist: {{group.Title}} {{for subGroup in a.SubGroups}} Die Bezeichnung der Untergruppe ist: {{subGroup.Title}} und auch hier kann ich auf die Gruppe zugreifen: {{group.Title}} {{/for}} {{/for}} Und das Ende vom Lied ist das Ende vom Lied |
vue.js oder mustache verwendet eine ähnliche Syntax. Ich könnte an dieser Stelle mustache für C# verwenden und er würde mir das Template ersetzen, allerdings benötige ich nicht nur das Ergebnis als […]
Vue – Konstanten definieren
Konstanten kann man in Vue einfach im Created Hook definieren. Generell sollte man sich das Arbeiten mit Konstanten angewöhnen. if(UserTypeId == 7) {…} stellt den Entwickler vor die Frage, was an diesen UserType nun so besonders ist. Besser: if(UserTypeId == USERTYPE_GUEST) . So weiß jeder, die folgende Logik betrifft den Gastbenutzer
1 2 3 |
created() { this.USERTYPE_GUEST = 7; }, |
Vue – Directive
Mal angenommen man möchte alle Felder auf einer Seite deaktivieren. Man könnte input für input durchgehen und mit :disabled=”isEditable” das Feld deaktivieren. Oder man schreibt eine Custom Directive, die diese Logik abbildet: https://vuejs.org/v2/guide/custom-directive.html Möchte man das global haben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Vue.directive("disableall", { bind: function (el, binding) { if ((!binding.hasOwnProperty('value')) || binding.value) { const tags = ["input", "button", "textarea", "select"]; tags.forEach(tagName => { const nodes = el.getElementsByTagName(tagName); for (let i = 0; i < nodes.length; i++) { nodes[i].disabled = true; nodes[i].tabIndex = -1; } }); } } }); |
Oder per Instanz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
directives: { disableall: { // directive definition bind: function (el, binding) { if ((!binding.hasOwnProperty('value')) || binding.value) { const tags = ["input", "button", "textarea", "select"]; tags.forEach(tagName => { const nodes = el.getElementsByTagName(tagName); for (let i = 0; i < nodes.length; i++) { nodes[i].disabled = true; nodes[i].tabIndex = -1; } }); } } } } |
Eingebunden wird das nun mit.
1 2 3 |
<div v-disableall="!isEditable"> ... </div> |
oder
1 2 3 |
<div v-disableall="true"> ... </div> |
oder ohne Bedingung
1 2 3 |
<div v-disableall> ... </div> |
[…]
Cmd Pfad autocomplete funktioniert nicht
Cmd öffnen
1 2 |
reg add "hkcu\software\microsoft\command processor" /v CompletionChar /d 9 /t REG_DWORD /f reg add "hkcu\software\microsoft\command processor" /v PathCompletionChar /d 9 /t REG_DWORD /f |
Befehle eingeben Cmd neustarten und mit cd Tab den Pfad autocompleten lassen 🙂
Applikationsdesign: Datensätze abarbeiten nach Punktesystem
Mir kam mal folgende Problemstellung in die Gedanken: Mal angenommen ich muss unterschiedliche Aufgaben abarbeiten. Diese befinden sich in einer Warteschleife. So dass sie nacheinander oder auch asynchron parallel abgearbeitet werden sollen. Jede Aufgabe besitzt eine Priorität. Sagen wie 1 (unwichtig) – 10 (sehr wichtig). In die Warteschleife kommen immer wieder Aufgaben nach. Das Problem […]
system-versioned temporal tables oder automatische Historie auf Tabellenbasis
funktioniert ab SQL Server 2016
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/* System Versionisierung wieder deaktivieren */ --ALTER TABLE dbo.MyTable SET (SYSTEM_VERSIONING = OFF) --ALTER TABLE dbo.MyTable DROP PERIOD FOR SYSTEM_TIME; --GO --ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT [DF_MyTable_ValidFrom]; --GO --ALTER TABLE [dbo].[MyTable] DROP COLUMN [ValidFrom]; --GO --ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT [DF_MyTable_ValidTo]; --GO --ALTER TABLE [dbo].[MyTable] DROP COLUMN [ValidTo]; /* System Versionisierung aktivieren */ -- Neue Spalten hinzugügen: ValidFrom, ValidTo ALTER TABLE dbo.MyTable ADD [ValidFrom] datetime2(7) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT DF_MyTable_ValidFrom DEFAULT DATEADD(SECOND,-1, SYSUTCDATETIME()), ValidTo datetime2(7) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT DF_MyTable_ValidTo DEFAULT CONVERT(datetime2 (7), '9999-12-31 23:59:59.9999999'), PERIOD FOR SYSTEM_TIME ([ValidFrom], ValidTo); GO -- History Tabelle erzeugen ALTER TABLE dbo.MyTable SET(SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.MyTable_History, DATA_CONSISTENCY_CHECK = ON)) GO |
SQL Column löschen inkl. aller Constraints
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
DECLARE @TableSchema NVARCHAR(255) = ''; DECLARE @TableName NVARCHAR(255) = ''; DECLARE @ColumnName NVARCHAR(255) = ''; DECLARE @sql NVARCHAR(MAX) WHILE 1=1 BEGIN SELECT TOP 1 @sql = N'ALTER TABLE ' + @TableSchema + '.' + @TableName + ' DROP CONSTRAINT ['+dc.NAME+N']' FROM sys.default_constraints dc LEFT JOIN sys.columns c ON c.default_object_id = dc.object_id WHERE dc.parent_object_id = OBJECT_ID(@TableSchema + '.' + @TableName) AND c.name = @ColumnName IF @@ROWCOUNT = 0 BREAK EXEC (@sql) END IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@TableSchema AND TABLE_NAME = @TableName AND COLUMN_NAME = @ColumnName ) BEGIN EXEC ('ALTER TABLE ' + @TableSchema + '.' + @TableName + ' DROP COLUMN ' + @ColumnName) END GO |
Windows Dienst installieren / löschen
sc.exe create MyServiceName binpath= “C:\inetpub\wwwroot\….exe” sc.exe delete MyServiceName
Bibliotheken für Authorisierung
Das Thema Authorisierungen ist sehr komplex und es gibt dazu viele Ansätze. Hier ist eine Liste von Bibliotheken: Casbin Vergleich Casbin mit OPA: OPA vs Casbin (github.com) https://www.openpolicyagent.org/ oso Documentation — oso Documentation (osohq.com) (Nur Python und Java) ory/ladon: A SDK for access control policies: authorization for the microservice and IoT age. Inspired by AWS […]
VueCliMiddleware unter IIS installieren
Dies ist eine Fortsetzung zu VueCli installieren Über Windows Cmd Console zum Ordner navigieren wo das neue Zertifikat erstellt werden soll (cd… ) in die Console folgendes eingeben: mkcert -pkcs12 localhost 127.0.0.1 Im Ordner wird nun eine localhost+1.p12 Datei erstellt. Diese Datei umbenennen zu localhost.pfx In Die Console mkcert – install eingeben und mit Ja […]
Login