Author Archives: Andreas
Nuxt3 mit Vuetify 3 – Teil 1: Installation
Wenn man aus der Microsoft Welt kommt und Webseiten mit JQuery bearbeitet hat, dann sind UI Framworks wie Vue eine wahre Veränderung. In meiner ASP WebApp habe ich Vue2 über CDN eingebunden und Vue anstatt JQuery genutzt. Vue funktioniert aber am besten mit NodeJs. Der Versuch NodeJs zu erlernen verlief aber immer in Frust. Weil […]
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 […]
Login