• Webseitenerstellung und -hosting
  • .NET Anwendungsentwicklung
  • softwaregesteuerte Prozessoptimierung
  • .NET

    Programmierung

  • WebseitenErstellung

    undHosting

  • softwaregesteuerte

    Prozessoptimierung

  • Konzeption

    und Beratung

solutionS Daily Grind - Blog
solutionS

solutionS

Nachdem ich ja nur schreibe wenn das Internet keine oder keine eindeutige Lösung anbietet hier der nächste kuriose Fall aus dem MS Gruselkabinett.

SQL Server Integration Servicves: Normale Zuweisung einer SQL Abfrage zu lokalen Variablen mittelts Resultset... Fehler:

 Der Werttyp __ComObject kann nur in Variablen des Typs Object konvertiert werden

Jetzt kommt man in die Versuchung die Variable auf den Typ "Object" zu ändern. Dann läuft der Task zwar sauber durch, allerdings kann man auf den gewollten Stringwert in der Objectvariable dann nicht mehr zugreifen. Dieser ist nämlich (lt. MS) eigentlich für die Zuweisung eines kompletten Resultsets (Array) gedacht. Selbst wenn man versucht die Variable via Script-Task zu zerlegen oder zu konvertieren kommt man auf keinen grünen Zweig. Glaubt mir, ich habs ein paar Stunden versucht...

Der Grund:

Datenbankspalten die als varchar(MAX) deklariert werden können einer String Variable nicht zugewiesen werden! 

...und da muss man erstmal draufkommen!!!! Bei Varchar geht man ja von String aus... Danke danke, Applaus brauche ich keine :-D

Viel Spaß weiterhin  mit SSIS

Optisch nochmal:

Nachdem die banale Sortierung eines Datagrids normal keine große Sache sein sollte hier dennoch meine Lösung da es leider defakto nicht so ist. Füllt man nämlich die Daten im Code behind via Itemssource und hat zusätzlich noch eine DataGridTemplateColumn funktioniert die Sortierung nicht! Außer man geht genau so vor wie ich es hier beschreibe:

 

1. Festlegen der Grideigenschaft CanUserSortColumns auf true
2. Festlegen des SortMemberPathin den Eigenschaften des DataGridTemplateColumn im XAML
3. Setzen der ItemsSource="{Binding}" (Dummy) in den Grideigenschaften (!!!)
4. Füllen des Grids via Datacontext und konvertierung dieser als Liste!!!!

Klingt komisch ist aber so. Hier also als Beispiel:

DataGrid Name="grdLast" AutoGenerateColumns="False" AlternationCount="2" CanUserSortColumns="True" SelectedValuePath="aktivitaets_id" ItemsSource="{Binding}" IsReadOnly="True" SelectionMode="Single"

DataGridTemplateColumn Header="Datum" MinWidth="120" SortMemberPath="datum"

grdLast.DataContext = (From o In db.xxx).ToList
%AM, %08. %482 %2016 %10:%Nov

Allgemeiner Fehler in GDI+.

Öffnet man ein Image über image.fromfile und versucht das Objekt z.B. nach Manipulation anschliessend über die SAVE Methode zu speichern bekommt man den Fehler

"Allgemeiner Fehler in GDI+." - was nichts anderes heisst als dass diese Methode das File sperrt. Auch ein Clonen des Objekts und ein Dispose des Originalimages helfen hier nicht. Die simple Lösung: Das Image einfach über FromStream öffnen.

Hier der Smarte Einzeiler:

Dim imgOriginal As Image = Image.FromStream(New IO.MemoryStream(IO.File.ReadAllBytes(strFilename))) 
%AM, %14. %400 %2016 %08:%Jul

Outlook Mail signieren

Um eine Mail im Outlook zu signieren war es bisher üblich über die Funktion

CommandBars.FindControl(,719).Execute

den "signieren" Button des MailItem-Ribbons zu betätigen. Auch in der Vergangenheit war es schwierig da man u.U. die Execute Methode 3x aufzurufen (sic!). Nachdem dies ab Office 2013 nicht mehr funktioniert, generell wird die Commandbars Methode nicht mehr unterstützt, musste ich eine Alternative finden. Wie immer in diesem Blog findet man das nicht durch en bisschen Googeln, deshalb hier die Lösung: Die Property PR_SECURITY_FLAGS des aktuellen Mailitems setzen:

 ''' <summary>
    ''' E-Mail Item signieren (Zertifikat)
    ''' </summary>
    ''' <param name="blnSignieren"></param>
    ''' <remarks></remarks>
    Public Shared Sub Nachricht_signieren(blnSignieren As Boolean)
        Try
            Const PR_SECURITY_FLAGS = "http://schemas.microsoft.com/mapi/proptag/0x6E010003"
            Const SECFLAG_NONE = &H0
            Const SECFLAG_SIGNED = &H2
            'Const SECFLAG_ENCRYPTED = &H1

            'Aktuelles Mailitem holen
            Dim actOutItem As Outlook.MailItem
            actOutItem = CType(oOut.ActiveInspector.CurrentItem, Outlook.MailItem)

            'Sign / Unsign
            If Funktionen.isEmailItem(actOutItem) Then
                Dim prop As Long
                prop = CLng(actOutItem.PropertyAccessor.GetProperty(PR_SECURITY_FLAGS))
                actOutItem.PropertyAccessor.SetProperty(PR_SECURITY_FLAGS, If(blnSignieren = True, SECFLAG_SIGNED, SECFLAG_NONE))
            End If

            actOutItem = Nothing

        Catch ex As Exception
            Throw ex
        End Try
    End Sub

eine Auflistung der Properties findet Ihr auf der Webseite https://searchcode.com/codesearch/view/3372596/ bzw. da ich dem Internet nicht traue, ebenfalls als Textdatei im Anhang. Danke. Bitte :-)

Szenario: WPF Browseranwendung, festelegen des Owners eines modalen Fensters

Lösung: Festlegen von        "window.Owner = Application.Current.MainWindow" -> Funktioniert generell

Allerdings darf dann die WindowStartupLocation NICHT "CenterOwner" sondern "CenterScreen" sein, dann klappts. Klingt komisch ist aber so.

 

 

%AM, %30. %483 %2015 %10:%Nov

WPF DataGrid Performance

1000 Seiten zu DataGrid Performance, keine hat geholfen. Versuchthabe ich folgende empfohlenen Verbesserung der Eigensdchaften:

VirtualizingPanel.IsVirtualizing="False"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"

Leider brachte das bei mir nicht den erhofften Erfolg. Folgende Erweiterung des Grids im XAMLbrachte zumindest bei mir den erwünschten Erfolg:

ItemsSource="{Binding RelativeSource={RelativeSource Self}, Path=DataContext,IsAsync=True}"
ScrollViewer.CanContentScroll="False"

Also, das Binding der Itemssource auf Asnychron umstellen und die Eigenschaft CanContentScroll des übergeordneten internen Scollviewers.

TRICK: Itemssource enthält deshalb einen Verweis auf sich selbst, da aufgrund des Sortings im Codebhin die Datacontext Eigenschaft gesetzt wird!

%AM, %17. %377 %2015 %08:%Nov

ASP.NET DropDownlist Style CSS

Ich frage mich warum MS beim Erstellen eines Standard ASP.NET Webforms Projekt die CSS gar grausam ausliefert. z.B. sieht eine DropDownlist im Vergleich zu einer Textbox gar furchterregend aus.

Lösung ist ganz simple: Im Style.CSS im bereich "input, textarea" (Zeile 405) um den Typ "select" erweitern:

 input, textarea, select {
        border: 1px solid #e2e2e2;
        background: #fff;
        color: #333;
        font-size: 1.2em;
        margin: 5px 0 6px 0;
        padding: 5px;
    }

leider hat die Dropdownlist aufgrund Padding, Border etc der Textbox noch ein Problem mit der Breite, deswegen bei Bedarf nochmal explizit festlegen:

input, textarea {
        width: 300px;
    }

    select {
        width: 312px;
    }
%AM, %25. %323 %2015 %06:%Jun

Migration Wordpress -> Joomla

Gar nicht so trival wie ich dachte da es (fast) keine kostenlosen Extension dafür gibt. Warum eigentlich nicht? Wenn ich den umgekehrten Weg google kommen 1000 Wordpress Extensions die das machen. Sollte es nicht Ziel sein Anwender abzuholen? Schaden eigentlich fpr die Joomla Community.

CMS2CMS ist hier wohl das Steckenpferd. Starke Seite, viel Funktionalität. Die Demo habe ich durchlaufen und es hat auch problemlos geklappt, allerdings waren mir 39 Euro für meine paar Artikel zu hoch angesetzt.

Auf der Suche bin ich auf J2XML gestoßen und sein Erweiterungs Plugi Wordpress Importer.

Das Imprtieren der Kategorieren schlug leider fehl, halb so wild. Die Beiträge wurden zumindest korrekt im Joomla angelegt. Allerdings ohne Bilder bzw. mit alten verweisen. Was tun?

Ich habe mir via FTP im Image Ordner des Joomla Media Manager ein Unterverzeichnis "Blog" angelegt und dort einfach die Struktur inklusive Inhalte (Datumsstruktur) aus dem Wordpress Verzeichnis "wp-content" kopiert. Nun stimmen ja aber die Verweise innerhalb des Beitrags nicht mehr.

Man gehe in den PHPMyadmin und spiele mit SQL. "Ersetze alte Teil des alten Pfades mit dem neuen Pfad". Ende. Fertig. Funktioniert.

Sieht im Backend so aus:

Die Joomla Extension SimpleFileManager ist wohl die beste Download Area Extension die ich bisher nutze. Gerade wegen seiner schlanken frischen Ansicht. Das Berechtigungskonzept wird zudem aus den Joomla Benutzern gezogen. Dies hat für meine schlanke Seite nur Vorteile.

Auch der Support ist grandios, innerhalb 3 Stunden erhiehlt ich eine Antwort auf meinen Fehler zurück. Diese schöne Extension (Version 4.4.6) hat mir leider meinen Media Manager im Joomla (3.4.1) zerschossen. Ich konnte nicht mehr auf das Root verzeichnis zugreifen mit folgender Fehlermeldung:

Warning: dir(/kunden/kdnr/rp-hosting/auftrnr/solutionsss/images/simplefilemanager): failed to open dir: Permission denied in /kunden/kdnr/rp-hosting/auftrnr/auftrnr/solutionsss/libraries/cms/helper/media.php on line 270

Fatal error: Call to a member function read() on boolean in /kunden/kdnr/rp-hosting/auftrnr/auftrnr/solutionsss/libraries/cms/helper/media.php on line 272

Der Tipp von Giovani Mansillo das .htaccess File im UNterordner SimpleFileManager zu löschen war nciht korrekt brachte mich aber auf die simple Lösung die Rechte physikalisch hochzusetzen, was ich voorher schon für das Unerverzeichnis gesetzt hatte. Ich habe also das Root Verzeichnis via CHMOD erneut auf 755 gesetzt und schon funktioniert es wieder. Von Sicherheitsbedenken bitte vorerst Abstand zu nehmen :-)

 

%PM, %10. %619 %2012 %13:%Jul

SSIS Prozessexitcode -532459699

Ich glaube das wird ein Microsoft-Bug-Blog. Folgendes Szenario: Microsoft SQL Server Integration Services 2005 Paketausführung als SQL Server Agent Job, Das Paket wurde im SSIS Paketspeicher abgelegt. Im Design-Mode läuft alles prima, als Paket bekomme ich jedoch folgende Meldung, obwohl Success: Returncode DTSER_SUCCESS Prozessexitcode -532459699 Rückgabewert war unbekannt Fehler bei Schritt 1 und wieder hab ich DAS GANZE (!) Internet danach abgesucht...und nichts gefunden, deshalb wird mir die Menschheit immer zu Dank verüflichtet sein wenn ich diese Lösung poste: Folgendes brachte zumindest bei mir den erhofften Erfolg: Bei der Paketcompilierung "Alle Daten mit einem Kennwort verschlüsseln ". Nicht vergessen dieses Kennwort ebenfalls unter den Eigenschaften des Pakets festzulegen, sowie im SQL Server Agent wenn man den Schritt hinzufügt. wie immer: Vodooooooooooooo!!!!

Seite 1 von 6