.NET-Software-Entwicklung - DotNetNuke - Business-Develoment
# Thursday, May 26, 2005

Ermitteln des Speicherplatz von Tabellen im MS SQL-Server

Leider bietet der Enterprise Manager von MS SQL-Server nicht die Möglichkeit den benötigtem Speicherplatz eine Datenbank anzuzigen.

Der SQL-Server bietet dafür aber eine Stored Procedure exec sp_MsForEachTable 'sp_spaceused ''?'''

Möchte man die Größe einer ganz bestimmten Tabelle einer Datenbank im SQL-Server ermitteln dann schaut das so aus:

user mydb
exec sp_spaceused 'sitelog'


Thursday, May 26, 2005 5:41:00 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
Datenbank

Die Datenbank von DNN ist sehr groß und wächst permanent an!

Hans-Peter von deutschen DNN-Portal hat dort einen recht interessanten Hinweis gepostest:

http://www.dnnportal.de/Weblog/tabid/177/EntryID/112/Default.aspx

Ein Tip an alle DotNetNukler: Überpürft mal ob man wirklich alle Einträge braucht die DotNetNuke dort reinschreibt und vor allem ob und wie lange die Einträge dort gespeichert werden.

Immerhin hat DotNetNuke die Tabelle SiteLog bei mir auf 10.000.000 (da ist keine Null zu viel) anwachsen lassen. Wie man sich vorstellen kann, kommen da einige MB zusammen.

Da ist wohl morgen erst mal "Putztag" angesagt und das nicht nur in meiner Wohnung :)


Thursday, May 26, 2005 3:21:58 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Monday, May 23, 2005

Erzeugen eines kommaseparierte String

Wie bekommt man aus einem String - Array einen kommaseoarierten String? Wer es braucht bitte:

Dim commaSeparatedValues As String = _
String.Join(",", myArrayList.ToArray(String.Empty.GetType()))

Dazu gibt es es dann auch noch eine Link aus der MSDN.


Monday, May 23, 2005 8:42:04 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET
# Sunday, May 22, 2005

DotNetNuke on DotNetRocks

DotNetRocks ist eine Radiosendung die sich mit allem rund um das Thema .NET befasst. In einer der letzten Sendungen war ein paar der Köpfe von DotNetNuke als Gäste eingeladen. Dabei handelte es sich um "Jim Duffy" und "Shaun Walker"!

Wer sich diese Sendung anhören möchte ... hier ist der direkte Link:

http://www.dotnetrocks.com/default.aspx?showID=113 

Echt cool ;-)

Die Inhalte sind:

  • Wichtige Änderungen zwischen der Version 2 und der aktuellen Version 3
  • Der Gedanke von Open Source   
  • Die Zukunft von DotNetNuke

Sunday, May 22, 2005 12:54:02 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | DotNetNuke
# Tuesday, May 17, 2005

Ermitteln der aktuellen Kalenderwoche

Wer schon immer mal wissen wollte, wie man .NET (hier am Beispiel von C#), die aktuelle Kalenderwoche ermitellt .. bitteschön hier ein Beispiel:

using System;
using System.Globalization ;

namespace ConsoleApplication1
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;
            System.Globalization.Calendar objCal = CultureInfo.CurrentCulture.Calendar;    
            int weekofyear = objCal.GetWeekOfYear(dt, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
            
            Console.WriteLine(weekofyear.ToString() ) ;
        }
    }
}

Mit dem Objekt objCal ist man z.B. auch in der Lage Schaltjahre zu ermitteln...

Das war jetzt mal wieder keine wirklicher Quantensprung aber auf Anhieb habe ich es nicht im Netz gefunden. Gehört auf jeden Fall zu Kategorie "Nützlicher Code".


Tuesday, May 17, 2005 3:00:33 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET

DotNet / Mono / Linux / arbeiten ohne Installation

Eine sehr coole Möglichkeit für .NET Entwickler sich mit dem Open Source Projekt Mono zu beschäftigen - ohne dabei direkt ein System mit Linux zu installieren - bietet eine Lösung Namens Monopix. Dabei handelt es sich um erweiterte Lösung von Knoppix die folgende Komponten beinhaltet:

Sehr cool sind auch das Tutorails, dabei handelt es sich um Videos:

http://www.monoppix.com/tutorials.php

 


Tuesday, May 17, 2005 11:03:00 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | Opensource
# Tuesday, May 10, 2005

Cooles Chartcontrol für .NET

Auf der Suche nach Möglichkeiten div. Kurven darzustellen bin ich über eine sehr gute Chart Komponente gestolpert, die auch noch aus 100% .NET Code besteht. Entwickelt wurde die Komponente / Control komplett in C#...

Diese findet man unter:

http://zedgraph.sourceforge.net/

Die Einarbeitung ging erstaunlich schnell und nachdem ich dann auch noch einen Aritkel über genau diese Chart Komponente gefunden habe, ging es fast von alleine. Ich kann also nur folgenden Beitrag jedem ans Herz legen der sich mit ZedGraph auseinander setzen möchte.

http://www.codeproject.com/csharp/ZedGraph.asp

 


Tuesday, May 10, 2005 5:03:04 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET
# Friday, May 06, 2005

Keine Anzeige des HTML-Quellcode für Webseiten im Microsoft Internet Explorer

Scheint als würde das der Tag meines Blogs.

Habe aber gerade etwas entdeckt, dass ich schon sehr lange suche!

Manchmal habe ich einfach das Problem, dass der "blöde" Internet Explorer einfach keinen HTML-Quelltext anzeigen will. Das ist ziemlich blöd - gerade als Webentwickler!

Hier habe ich jetzt aber zwei Links, die sich mit dem Problem beschäftigen und zumindest bei mir auch gelöst haben:

http://www.mredkj.com/tutorials/tips_ie.html

http://support.microsoft.com/kb/179829/de

 


Friday, May 06, 2005 5:04:26 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
Allgemein

Windows Service in .NET

Hier ist ein cooler Artikel der kurz und knapp eine Anleitung zum Erstellen eines Windows Service unter DotNet gibt:

http://www.developer.com/net/csharp/article.php/10918_2173801_1

Habe ihn gerade entdeckt, da ich auf der Suche war den Scheduler Service von DotNetNuke zu umgehen. Der hat nämlich so einige negative Eigenschaften, die ich für meinen Anwendungsfall nicht gebrauchen kann.

So ist der Scheduler von DotNetNuke nur verfügbar, wenn auch die Webanwendung aktiv ist. Sollte es also vorkommen, das niemand im Portal online ist und die Webanwendung ist heruntergefahren ... blöde Sache!

Nun ja, deswegen versuche ich das jetzt mit Hilfe eines (DotNet) Windows Service zu implementieren.

 


Friday, May 06, 2005 4:48:35 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | DotNetNuke

Dotnetnuke - Userverwaltung / It not a feature it’s a bug ;-)

Habe soeben ein Fehler in der Benutzerverwaltung von DotNetNuke gefunden. Wenn sich ein Benutzer mit Hilfe eines Cookies immer anmelden möchte wird bei einer späteren Anmeldung per Cookie wohl keine Validierung der Daten durchgeführt. Ein Sperren des Benutzerkontos und auch die Änderung des Passworts haben keinerlei Einfluß... der Benutzer kommt weiter fleißig ins Portal :(

Derzeit setze ich auf dem Live-Server die DotNetNuke Version 3.0.12 ein - werde mal testen ob das in der Version 3.0.13 auch noch so ist.

 


Friday, May 06, 2005 1:35:59 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Friday, April 29, 2005

MSMQ rocks

Bei einem Portal mit DotNetNuke besteht das Problem, dass ne ganze Menge E-Mailtraffic entsteht. Es gibt eine ganze Menge an Funktionen und Modulen, die E-Mail-Benachrichtigungen durch die Gegend schicken. Besonders beim Thema Newsletter versagt DotNetNuke ein wenig - immerhin sprechen wir von mittlerweile ca. 20.000 Usern (oder E-Mailadressen).

Da ich schon seit langem die MSMQ etwas stärker involvieren wollte, war hier die beste Möglichkeit dieses endlich zu realisieren. Eine E-Mail ist ja so wieso ein asynchroner Prozess und was hindert einen also daran die E-Mails in eine gemeinsame "Message Queuing Services" zu schieben, um diese von einer Stelle aus zu verschicken.

MSMQ steht für "Microsoft Message Queuing Services" und ist ein wenig, um asynchrone Prozesse oder man kann diese auch Workflows nennen, abzubilden.

Ein Windows Service sorgt für das Prozessmodell, denn irgendwie muss das Programm zum Abrufen der MSMQ und zum Versenden der E-Mails ja "leben". Die Erstellung eines Windows Service ist nicht spektakulär, deswegen erspare ich mir Details. Wie man einen Versand von E-Mail realisiert ist nun auch ein alter Hut .. damit will ich nun wirklich keinen langweilen.

Okay, ich gebe zu das ist nicht so die super Erfindung aber eine ganz nette Sache um Anwendung DotNetNuke etwas zu entlasten - das "Reinschieben" einer Nachricht in die MSMQ geht nun mal schneller als das direkte Versenden.

Vorteile sind z.B. auch, dass man Transaktionen nutzen kann um so sicherzustellen, dass die E-Mail an den SMTP-Server auch sicher übergeben wurde.

Teilweise werden die Nachrichten direkt von DotNetNuke in die MSMQ geschoben oder aber wenn noch viel "Vorarbeit" geleistet werden muss kommen hier der DotNetNuke Scheduler Mechanismus zum Einsatz.

Warum ich diesen nicht benutze um die E-Mails aus DotNetNuke zu versenden? .. ganz einfach: Ich wollte eine allgemein gültige Schnittstelle haben!


Friday, April 29, 2005 10:20:53 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | DotNetNuke
# Tuesday, April 26, 2005

DotNetNuke JavaScript - Error

Wer einen seltsamen JavaScript-Fehler bei DotNetNuke bekommt und einfach keine Lösung findet - vielleicht ist da ja eine:

Also der Fehler ist folgender: Beim Laden einer Seite kommt die eine JavaScript-Meldung..

Zeile: 2
Zeichen: 1
Fehler: Syntaxfehler
Code: 0

Habe mir einen Wolf danach gesucht. Habe dann den HTTP-Header mitgeschrieben und gesehen das zwischendurch auf die 404 Seite weitergeleitet wurde.

Die Datei: aspnet_client/system_web/1_1_4322/WebUIValidation.js sollte geladen werde, konnte aber nicht gefunden wurden.

Da klingelte es - es fehlten das benötigte aspnet_client - Verzeichnis im Stammverzeich der DotNetNuke Installation.

Ich denkde das dieser Fehler nicht nur für DotNetNuke Anwendungen sonder auch für jede andere ASP.NET Anwendung zutrifft....


Tuesday, April 26, 2005 7:12:47 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET | DotNetNuke

Disable Button beim ASP.NET Postback

Bei längeren Speichervorgängen hat man des öfteren das Problem, dass ein User dazu verleitet wird erneut auf "Speichern" zu klicken. Gerade bei Webanwendungen (ASP.NET) ist das nicht schön.

Um dieses zu unterbinden muss man ein wenig JavaScript-Code in die ASP.NET Seite einbinden. Der folgende JavaScript-Code zeigt, wie man dieses Problem lösen kann. Dabei werden sogar evtl. mögliche Client-Side-Validierungen berücksichtigt.

Dim sbValid As New System.Text.StringBuilder

sbValid.Append("if (typeof(Page_ClientValidate) == 'function') { ")
sbValid.Append("if (Page_ClientValidate() == false) { return false; }} ")
sbValid.Append("this.value = 'Bitte warten...';")
sbValid.Append("this.disabled = true;")
'GetPostBackEventReference obtains a reference to a client-side script function that causes the server to post back to the page.
sbValid.Append(Me.Page.GetPostBackEventReference(Me.cmdUpdate))
sbValid.Append(";")

cmdUpdate.Attributes.Add("onclick", sbValid.ToString())

Das Beispiel habe ich jetzt in VB.NET umgesetzt - in C# geht das natürlich genau so. Die Übersetzung erspare ich mir jetzt, da es so tival ist ;-)

Diesen Code positioniert in der "InitializeComponent()" Methode einer ASP.NET Seite.



Tuesday, April 26, 2005 4:13:23 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
.NET
# Friday, April 22, 2005

DotNetNuke - Javascript error "ScrollTop' is null or not an object.

Wer schon mal über den lästigen Fehler Javascript error "ScrollTop' is null or not an object. bei DotNetNuke stößt, dem sei hier Abhilfe geschaffen.

Das trat immer auf, wenn ich ein eigenes Modul auf eine Seite platziert habe. Man muss sagen, dass man sich diesen Fehler selber einhandelt. Habe ein paar Module - oder viel mehr den HTML Code dafür - aus einem alten Projekt kopiert. So weit auch kein Problem nur darf natürlich kein weiteresmal ein <form> - Tag im HTML-Code auftauchen!

Also einfach mal mit <strg>-f nach dem Wort "form" suchen und schauen ob das der Grund ist ;-)


Friday, April 22, 2005 2:57:59 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Tuesday, April 19, 2005

Erstes DNN-Portal online

Nach ein sehr anstregenden 14 Tagen ist es endlich so weit und mein erstes DotNetNuke-Portal ist online. Also mein erstes Web-Portal auf Basis von DotNetNuke.

Bis auf ein paar Schwierigkeiten ging auch eigentlich alles ganz gut. Jetzt läuft es auf jeden Fall :)

Wer mal schauen will: http://www.lowfett.de

Das wird alles noch wachsen und muss ausgebaut werden .. aber jeder fängt mal klein an :)


Tuesday, April 19, 2005 8:40:16 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Tuesday, April 12, 2005

DotNetNuke 3.0.12 E-Mail Benachrichtigung

Gerade schalte ich mein erstes Portal mit DotNetNuke 3.0.12 online. Bisher hatte existierte immer noch ein Problem, dass bei der E-Mailbenachrichtigung für einen neuen User, der Username und das Passwort fehlten.

Der Grund ist ganz einfach, denn in den Vorlagen steht:

[User:Password]
bzw.
[User:Password]

richtig ist aber:

[Membership:Password]
bzw.
[Membership:Password]

 

Wer neugierig ist und ein weiteres DotNetNuke Portal sehen will: www.lowfat.de oder sehr bald www.lowfett.de
Es befindet sich noch in den Anfängen aber aller Anfang ist schwer ;-)

 


Tuesday, April 12, 2005 2:14:08 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Wednesday, April 06, 2005

DotNetNuke / UserOnline / BuddyListe

Wie fleißige Leser dieses Weblog wissen, entwickel ich eine (ganze) Menge Module um eine Community auf Basis von DotNetNuke zu realisieren.

Darunter fällt so etwas wie:

  • Private Nachrichten (Instant Messaging)
  • Erweiterte Benutzerprofile. Mit Angaben wie Alter, Foto, Geschlecht und einen dynamischen Fragekatalog
  • Such nach den Benutzernprofilen - das war ein ein wenig Denksport ;-)

Was bei einer guten Community nicht fehlen darf ist eine Buddyliste. Nach ein paar Nachforschungen und der No. 1 Anlaufstelle www.dnnportal.de habe ich zwar eine Buddyliste gefunden aber leider ist diese zu einfach gestrickt. Was ist daran kompliziert? Folgendes:

Gerade entsteht eine Buddyliste die:

  • anzeigt, welche seiner Buddies online sind
  • man hat die Möglichkeit, das Hinzufügen eines Eintrages zu unterbinden - das Hinzufügen meines Buddies muss also durch ihn genehmigt werden
  • gleichzeitig kann man die Liste auch nutzen um andere User zu sperren bzw. die Kontaktaufnahme zu unterbinden.
  • ein Rechtesystem, dass bestimmt, wer welche Aktion durchführen kann.

Den Grundstein habe ich heute Nacht dafür gelegt. Hoffe das ich morgen damit so weit fertig werde und das dann in das Puzzel Community einbauen kann.

 

 


Wednesday, April 06, 2005 3:20:36 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Monday, April 04, 2005

Neue Modulberechtigungen hinzufügen

Nachdem jetzt das Modul der Usersuche für DotNetNuke fertig ist, war noch die Anforderung, dass man für unterschiedliche Benutzergruppen differente Rechte vergeben kann. Normale User sollten z.B. kein Bild sehen können.... usw.

Da ich alle meine Module mittlerweile in C# entwickel, habe ich ein Konvertierung des Mechanismus von DNN vorgenommen. Zja, viel Arbeit und eigentlich wollte ich gerade schlafen gehen, immerhin haben wir ja schon vier Uhr ...(nachts). Im Badezimmer ist mir eingefallen, dass es in der Tabelle Permission eine Spalte ModuleDefID existiert ... und das wohl mit gutem Grund. Hmmmm....

Okay, die letzten dreieinhalb Stunden hätte ich mir sparen können :(

Also, wenn jemand von euch die Rechte bei DotNetNuke erweitern will, dann einfach diese in der Tabelle Permissions eintragen und bei ModuleDefID die entsprechende Referenz aus der Tabelle ModulDefinition.

Na, man lernt halt nie aus .... gute Nacht!


Monday, April 04, 2005 4:04:22 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
DotNetNuke
# Saturday, April 02, 2005

Fuer jeden Satz mit x gibt es auch eine Loesung

Heute habe ich mich noch mal um die Suche in Benutzerprofilen bzw. in der Tabelle ASPNET_PROFILE gekümmert. Um wirklich eine gute Performance zu erreichen. wird man nicht eine redundanten Datenhaltung nicht vermeiden können.

Um nicht den DotNetNuke - Core, Tabellen oder aber die Stored Proceduren von DNN zu verändern, habe ich mich dann für Trigger direkt im MS SQL Server entschieden.

Die Erstellung des Triggers war zunächst etwas problematisch, da man innerhalb eines Trigger nicht auf ein Feld vom Typ "nText" zugreifen kann. Änder der Datentypen wollte ich ja vermeiden und so habe ich einfach die Daten aus der Orginaltabelle gelesen.

Klappt perfekt und die redundante Datenhaltung tut jetzt auch schon fast gar nicht mehr weh :)

Wichtig ist nur das man mit einem Trigger arbeitet, der ausgelöst wird nachdem die Aktion insert ode update durchgeführt wurde.

Beispielhaft sieht das dann so aus:

CREATE TRIGGER GaliNeo_ASPPROFILE_Update  ON [dbo].[aspnet_Profile] FOR INSERT, UPDATE
AS

DECLAR @sPostalCode varchar(5)

DECLARE @sUserId char(100)
DECLARE @iUserId int
DECLARE @sUserName nvarchar(50)

/*die aktuelle UserId ermittlen, die vom update betroffen ist */
select @sUserId=Userid from inserted

/*Benutzername aus der Tabelle ermittlen, damit die DNN-UserId ermittelt werden kann*/
SELECT @sUserName = [UserName] FROM ASPNET_USERS WHERE [UserId] = @sUserId

/*Die DNN-UserId wird ermittlet */
SELECT @iUserId = [UserId] FROM Users WHERE [UserName] = @sUserName

/*Ermitteln der geänderten Daten direkt aus der Orginaltabelle */
SELECT
 @sPostalCode=dbo.fn_GetProfileElement('PostalCode',PropertyNames,PropertyValuesString)
FROM ASPNET_PROFILE
WHERE [USERID] = @sUserId

 

IF ((SELECT count(*) FROM GaliNeo_User_Profile WHERE [UserId] = @iUserId)= 0)
begin
 INSERT INTO GaliNeo_User_Profile
 (
 [UserId],
 [PostalCode],
 )
 VALUES
 (
 @iUserId,
 @sPostalCode,
 )
end
else
begin

 UPDATE GaliNeo_User_Profile SET

 [PostalCode] = @sPostalCode
 
 WHERE [UserId] = @iUserId

end

 

 


Saturday, April 02, 2005 7:58:13 PM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
Datenbank | DotNetNuke
# Thursday, March 31, 2005

Der beruehmte Satz mit "x" ....

Mal wieder das alte Problem der Suche in einem Benutzerprofil in DotNetNuke..... zuerst sah die ganze Geschichte noch recht brauchbar aus, allerdings wird das unter "Druck" ziemlich langsam. Eine Suchanfrage dauert da schon mal 8 Sekunden und das um gerade mal 10 - 15 Datensätze zu ermittlen. Ich finde das ist nicht akzeptable, zumal ich jetzt noch mit keiner großen Datenmengen > 30.000 arbeite.

Also hat sich mein Verdacht bestätigt, dass die Lösung einfach nicht performant genug ist. Das ermittlen der benötigten PLZ geht recht schnell, nur leider dann das zerpflücken der Daten aus der Tabelle ASPNET_PROFILE dauert und dauert. Nun hier kann man aber dem guten SQL-Server keine Schuld geben, für das was dort passiert ist er immer noch verdammt gut  ;-)

Na jetzt muss aber eine andere Lösung her damit DotNetNuke bzw. meine Lösung hier etwas mehr Spaß macht!

Meine Idee ist jetzt einfach mit einer redundanten Tabelle zu arbeiten, in denen ich die Daten aus der Tabelle ASPNET_PROFILE speichere. Um aber dafür nichts im Core-Bereich zu modifzieren, werde ich versuchen die Daten via Trigger in die neue Tabelle zu schreiben.

Ob mir das geklingt und wie das wird .. na klar, gibt es hier auf dieser Welle!


Thursday, March 31, 2005 1:01:16 AM (W. Europe Daylight Time, UTC+02:00)  #    - Trackback
Datenbank | DotNetNuke