SharePoint Systemhaus Göppingen

Seit über 10 Jahren sind wir im SharePoint-Bereich mit unserem Unternehmen aus Göppingen tätig.

Was ist Microsoft Office SharePoint

Unternehmen und Organisationen nutzen SharePoint als sicheren, zentralen Ort zum Speichern, Strukturieren und Freigeben von Dokumenten und Dateien sowie zum Zugreifen auf Informationen von nahezu allen Geräten aus.

Unsere Dienstleistungen

Unsere Unterstützungsleistungen beginnen schon im Vorfeld bei der Planung einer Einführung von Microsoft SharePoint. Wir analysieren gemeinsam mit unseren Göppinger Kunden die jeweiligen Prozesse und beraten bei der Entscheidung zur Umsetzung einer Digitalisierungsstrategie. Oftmals sind auch Prozesse schon zum Teil digital abgebildet in sehr heterogenen, selbst „gestrickten“ IT-Lösungen. Diese gilt es in SharePoint zu realisieren.

Bei der Überlegung einer Umsetzung der Prozesse setzen wir Schwerpunktmäßig auf Microsoft SharePoint. Falls sich eine Lösung außerhalb von SharePoint als wirtschaftlicher und flexibler anbietet, z. B. eine Website mit ASP.NET zu entwickeln und diese mit SharePoint-Diensten wie Single-Sign-On (SSO) und gemeinsamer Datenhaltung zu verknüpfen, so wird auch dies von uns entsprechend als passende Lösung mit dem Kunden besprochen.

Wir installieren und konfigurieren die SharePoint-Systeme unserer Kunden mit großer Erfahrung. Wir richten Berechtigungen ein, konfigurieren Websites, richten Website-Collections ein, bauen umfangreiche Genehmigungs- und Freigabe-Workflows und entwickeln Add-ins nach Ihrer Vorgabe.

Während der Umsetzungs- und Implementationsphase eines SharePoint-Lösung interagieren wir immer eng mit dem Kunden und den späteren (Key-)Anwendern der Lösung. Wir stellen dem Kunden zu jedem Projekt-Zeitpunkt immer echte Projektstände vor und bereit; wir stellen niemals ausschließlich PowerPoint-Präsentationen oder Dummy-Prototypen vor. Der Kunde hat somit während des Projekts stets Zugriff auf die echte Entwicklungsversion. Aus unserer Sicht ist das mit entscheidend für den Projekterfolg, neben der engen Integration der Fachseite in den Projektverlauf.

Das Go-Live unserer Lösungen gestaltet sich in der Regel als „no-Brainer“, weil die Kunden bereits während der Entwicklungs- und Testphase ständig mit dem Produkt zu tun hatten und damit gearbeitet haben.

Professionelle, leicht-verständliche Schulungen, sowohl von Anwendern Ihres Betriebs in Göppingen, als auch von Administratoren runden ein SharePoint-Projekt aus unserer Sicht ab.

Des Öfteren übernehmen wir auch die Koordination und/oder die Durchführung von administrativen Aufgaben, wie das Einrichten von Backups, die Konfiguration eines Windows-Servers.

Jetzt unverbindlich kontaktieren!

Melden Sie sich einfach mal bei uns, wir freuen uns, wenn wir Ihnen weiterhelfen dürfen.

Microsoft-Add-In „Junk-E-Mail-Berichtsprogramm für Outlook“

Das hatte ich bisher noch gar nicht auf dem Radar:

Microsoft-Add-In „Junk-E-Mail-Berichtsprogramm für Microsoft Office Outlook“

ist ein kostenloses Tool von Microsoft, das in Outlook eine neue Schaltfläche in der Ribbonleiste installiert und danach mit einem einzigen Mausklick folgendes macht:

  1. E-Mail-Nachricht an Microsoft als Spam melden.
  2. E-Mail-Nachricht in den Junk-E-Mail-Ordner verschieben.

Hätte das geschissene Outlook jetzt auch noch die Möglichkeit, eigene Tastaturkürzel zu definieren (was auch die Version 2013 nicht hat), dann könnte ich, wie in GMail mit dem Ausrufezeichen-Tastaturkürzel, auch komplett per Tastatur Spam weghauen.

Update 11.11.2015

Es gibt noch kein Add-in, das auch mit Outlook 2016 arbeitet, leider.

Laut einem Forums-Posting von Mai 2015 soll nach dem Erscheinen von Office 2016 (also jetzt!) irgendwann eine kompatible Version erscheinen.

Hier noch ein neuerer Post von Ende September 2015, der auch keine Aussage zum Release-Datum trifft.

Update 17.03.2016

Endlich ist gibt es das Tool auch für Outlook 2016!

Von Windows 7 aus via ODBC auf eine benannte SQL-Server-2000-Instanz zugreifen

Heute ist Legacy-Tag!

Issue

Für ein Projekt müssen wir von Microsoft Office Access 2010 auf einen SQL Server 2000 via ODBC zugreifen.

Die Herausforderung ist, dass der SQL Server 2000 als benannte Instanz („Named instance“) auf dem Server installiert ist (Windows 2008 R2). Also so was wie „MEINSERVER\SQL2000“, anstatt nur „MEINSERVER“.

Lokal auf dem Server kann ich wunderbar auf den SQL Server 2000 zugreifen, alleine via Netzwerk von einem PC mit Windows 7 ging es nicht. Es kam immer wieder die Meldung, dass keine Verbindung hergestellt werden konnte.

Lösung

Die Lösung war dann im Microsoft-Knowledge-Base-Artikel „How to connect to SQL Server by using an earlier version of SQL Server“ zu finden:

Vom Prinzip via cliconfg.exe-Programm auf dem Client einen Alias zu IP-Adresse und Port des SQL Server 2000 machen und dann über den Alias zugreifen.

Zitate aus der Lösung:

Server:

Determine the TCP/IP port number of the instance of SQL Server. To do this, use one of the following methods, depending on which version of SQL Server that you are running.

  1. On the server that is running SQL Server 2000, start the Server Network Utility. To do this, click Start, click All Programs, click Microsoft SQL Server, and then click Server Network Utility.
  2. Click the General tab, and then select the instance that you want from the Instances list.
  3. Click TCP/IP, and then click Properties. The TCP/IP port number for this instance is shown. Note this number so that you can use it later.

Client:

Configure the server alias on the client computer. To do this, use one of the following methods, depending on your version of SQL Server.

  1. Start the Client Network Utility. To do this, click Start, click Run, type cliconfg.exe, and then press Enter.
  2. On the General tab, verify that TCP/IP appears in the list under Enabled protocols by order.
  3. Click the Alias tab, and then click Add.
  4. Under Network libraries, select TCP/IP.
  5. In the Server name text box, type the IP address of the server that is running SQL Server 2000.
    Note The IP address that you type here is the one that is configured to use the TCP/IP port number.
  6. Click to clear the Dynamically determine port check box, and then type the port number of the instance of SQL Server 2000 in the Port number text box.
  7. Type a name in the Server alias text box, and then click OK.

Dann ging die ODBC-Verbindung („Verbindungstest“ war erfolgreich).

Mehrere Excel-Hauptfenster

Schon des Öfteren wäre es mir ein Anliegen gewesen, zwei oder mehr Excel-Dokumente nebeneinander in zwei getrennten Hauptfenstern (z.B. auf zwei Monitoren) anzuzeigen.

Obwohl ich Excel 2010 besitze, habe ich keine Option gefunden. (In Excel 2013 scheint das der Standard zu sein)

Workaround/Lösung

Es gibt zwar Zusatztools und -Programme, doch an die erinnere ich mich selbst nach der Installation nach kurzer Zeit nicht mehr.

Stattdessen ist die für mich einfachste Lösung schlicht mehrere Instanzen von Excel zu starten (einfach im Startmenü mehrfach das Excel-Symbol anklicken oder Start > Ausführen > „excel“) und dann jeweils in einer Instanz explizit ein Dokument laden.

“Nicht identifiziertes Netzwerk. Kein Internetzugriff.” unter Windows 7 lösen

Seit Jahr und Tag ärgere ich mich über die vermeintliche Intelligenz von Windows, beim Herstellen von Netzwerkverbindungen:

“Nicht identifiziertes Netzwerk. Kein Internetzugriff.”

Fuck you!

Nach vielem Suchen und dem Finden von ganz ausgefuchsten Lösungen bin ich nicht weiter gekommen.

+++WERBUNG+++ Professionell eine eigene Website erstellen +++WERBUNG+++

Die (für mich akzeptable) schlichte Brute-Force-Lösung sah dann schließlich so aus:

  1. Dienste-MMC aufmachen (Start -> Ausführen -> “services.msc”).
  2. Den Windows-Firewall-Dienst suchen.
  3. Diesen Dienst stoppen und deaktivieren.

Danach ging es endlich wieder.

Was mir außerdem geholfen hat, war der Tipp in diesem Technet-Artikel:

  1. Open an Administrator: Command Prompt. To do so, click Start, click All Programs, click Accessories, right-click Command Prompt, and then click Run as administrator.
  2. If the User Account Control dialog box appears, confirm that the action it displays is what you want, and then click Continue.
  3. At the command prompt, type the following command:
    netsh advfirewall set profiles state off

    where profiles is AllProfilesCurrentProfileDomainProfilePrivateProfile, or PublicProfile.

Ich habe mir dann konkret mit folgendem geholfen:

netsh advfirewall set AllProfiles state off

Was sogar auch mal geholfen hatte, war im Netzwerk-Center auf das rote X bei der symbolischen Leitung zu klicken und „Reparieren“ zu wählen. Das hatte ewig gedauert und danach hat es tatsächlich funktioniert.

Update 2013-12-06

Heute hatte ich einen Fall mit einem IBM-/Lenovo-Notebook, bei dem ich über WLAN dasselbe Phänomen hatte:

“Nicht identifiziertes Netzwerk. Kein Internetzugriff.”

Nach einer Stunde erfolglosem Try-and-Error habe ich aufgegeben und das Gerät via LAN-Kabel erfolgreich ans Netz bekommen.

Update 2013-12-09

Mein Kollege hatte ein ähnliches Phänomen (via WLAN) und hat es wohl dadurch gelöst, dass er sicher gestellt hat, dass der Gateway und DNS-Server alle im selben Subnetz sind. Dann wurde das Netzwerk automatisch erkannt.

Es war also eine reine IP-Einstellungs-Geschichte bei ihm, ganz ohne Firewall-und-Co.-Magie.

Update 2014-05-15

In einer VMware-Maschine habe ich das ganze gelöst bekommen, indem ich das Netzwerk von „Bridged“ auf „NAT“ umgestellt habe (in den Einstellungen der virtuellen Maschine).

Update 2014-08-15

In meiner VMware-Maschine wollte ich unbedingt wieder „Bridged“ haben. Ich habe lange gesucht und probiert, und die Lösung war letztendlich, beim „Bridged to“ von „Automatic“ auf meinen tatsächlichen LAN-Adapter umzustellen:

vmware-virtual-network-editor-bridget

Danach konnte ich erfolgreich wieder von der Maschine aus ins Internet und auch von meinem Lokalen PC auf die virtuelle Maschine kommen.

Handling WM_MOVING in Windows Forms

Just a quick snippet:

public class FormWithWmMoving :
    Form
{
    private const int WM_MOVING = 0x0216;

    private static readonly object EVENT_MOVING = new object();

    public event EventHandler Moving
    {
        add { Events.AddHandler(EVENT_MOVING, value); }
        remove { Events.RemoveHandler(EVENT_MOVING, value); }
    }

    public class MovingEventArgs : EventArgs
    {
        private readonly Rectangle _rectangle;

        public MovingEventArgs(
            Rectangle rectangle)
        {
            _rectangle = rectangle;
        }

        public Rectangle Rectangle
        {
            get { return _rectangle; }
        }
    }

    protected virtual void OnMoving(MovingEventArgs e)
    {
        var h = (EventHandler)Events[EVENT_MOVING];
        if (h != null)
        {
            h(this, e);
        }
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_MOVING)
        {
            var r = (Win32NativeMethods.RECT)Marshal.PtrToStructure(m.LParam, typeof(Win32NativeMethods.RECT));
            var rectangle = new Rectangle(r.left, r.top, r.Bounds.Width, r.Bounds.Height);

            var args = new MovingEventArgs(rectangle);
            OnMoving(args);
        }

        base.WndProc(ref m);
    }
}

Hope this is helpful someday to me or others.

Error Message „The directory service is unavailable“ when querying ApacheDS LDAP Server

Quick note to myself: An error message

The directory service is unavailable (English)
Der Verzeichnisdienst ist nicht verfügbar (German)

when querying an LDAP ApacheDS server can be caused by the wrong authentication type.

The full exception trace was:

System.Runtime.InteropServices.COMException occurred
ErrorCode=-2147016689
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindAll()

In my code, I did a call to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.Secure);

which failed. After I changed it to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.None);

everything worked as expected.

Doppelte Zeilen in Excel finden

Dieser Artikel ist primär als Erinnerung für mich selber gedacht.

Um in Microsoft Office Excel mehrfache (doppelte) Zeilen zu erkennen und markieren, gibt es folgende kleine Formel:

=WENN(ZÄHLENWENN(A$2:A2;A2)>1;“Doppelt“;““)

Dies einfach in die Spalte rechts daneben schreiben und mit der Maus dann den Bereich nach unten ziehen.

Beispiel

Um das zu verdeutlichen, hier eine kleine Tabelle (Download):

Bildschirmfoto einer Tabelle in Microsoft Office Excel 2010

Die Spalte „Doppelt?“ enthält überall dort Einträge „Doppelt“ wenn der Datensatz bereits vorhanden ist.

Diese Zeilen könntet Ihr dann z.B. löschen oder herausfiltern.

Alternative mit Excel 2010 und neuer (2013, 2016)

Unter Microsoft Office Excel 2010, 2013, 2016 und neuer gibt es die Option „Bedingte Formatierung“ und darin die Option „Regeln zum Hervorheben von Zellen“ sowie die untergeordnete Option „Doppelte Werte“.

Wenn Ihr zuvor eine ganze Spalte markiert und dann diese Bedingte Formatierung auf die Spalte anwendet, bekommt Ihr eine gleichwertige Lösung.

SharePoint

Liebe Leser, ich möchte hiermit gerne nochmals einen Artikel veröffentlichen um als „Link seed“ für ein paar Seiten die ich angelegt habe zu dienen.

Ich bitte höflichst um Toleranz, es wird sich auf ein Minimum beschränken. Danke!

Als Ausgleich ein Hundebild, Jara beim Verspeisen einer Fledermaus:

jara-fledermaus

Microsoft-SharePoint-Know-How

Wir, die zeta software GmbH, unterstützen Sie bei der maßgeschneiderten Implementierung und Integration von Microsoft Office SharePoint Services (MOSS) in Ihre vorhandene IT-Infrastruktur in Ihrem Unternehmen.

Wir sind in den Regionen Filstal und mittlerer Neckar tätig, von Ulm über GeislingenGöppingenEsslingen und Nürtingen bis nach Stuttgart.

Creating an XtraReports report that works both with Microsoft SQL Server and VistaDB

Currently I am extending and enhancing the reporting system for our test management tool Zeta Test.

In this article I will describe the issues I discovered (and solved) when trying to design one single report that works with both Microsoft SQL Server and VistaDB.

Creating a report

I decided to go with XtraReports from DevExpress as the reporting system.

The basic design steps creating and deploying a report with XtraReports is similar to methods when working with e.g. Microsoft SQL Server Reporting Services:

  1. Create a new report in the designer of XtraReports.
  2. Specify connection string/settings (using the SqlClient namespace classes).
  3. Specify tables/SQL queries to use as the data source for the report.
  4. Design your report graphically.
  5. Save the report to a .REPX file.
  6. Pack the .REPX file into the deployment setup.
  7. Ship the setup to the customers.

Displaying a report

In Zeta Test I had to perform the following steps when displaying a report:

  1. Load the report.
  2. Replace the design-time connection string by the connection string to the currently used database of the currently loaded project in Zeta Test.
  3. Display the report in a print-preview form.

Two databases

Since a project in Zeta Test can either use Microsoft SQL Server or VistaDB as the back-end database, I wanted to design a single report so that it can be used with both back-end databases.

Inially I planned to simply design the reports with an OleDB connection to the SQL Server database and then later when displaying the report for a VistaDB database, simply switch the connection string to the VistaDB database.

Unfortunately there is no OleDB provider for VistaDB. Therefore this solution did not work. Another idea was to simply leave the SqlClient classes that were used when designing the report as they are, only changing the connection string. This did not work, either.

So I did come up with another solution that works quite well as of writing this article:

Rewriting the .REPX report

A .REPX report file is a C# source code file that gets compiled when loading the report with the XtraReport.LoadLayout method.

I decided to give the following „algorithm“ a try:

  1. Load a .REPX file that was designed with the SqlClient classes as a string into memory.
  2. Do some string replacements to replace all SqlClient classes by their VistaDB counterparts.
  3. Call XtraReport.LoadLayout on the replaced string.
  4. Display the report in a print-preview form.

Luckily, after some try and error I actually was able to get this working!

In the following chapter I outline some of the methods I created in order to hopefully give other developers some ideas to use in their own applications:

Code to rewrite a .REPX report

The following method is the main method that is being called in order to load and display a report. It is a member of the print-preview form:

public void Initialize(
    FileInfo reportFilePath,
    Pair<string, string>[] parameters)
{
    var report = new XtraReport();

    if (Host.Current.CurrentProject.Settings.IsVistaDBDatabase)
    {
        var rawContent = UnicodeString.ReadTextFile(reportFilePath);

        var replacedContent = replaceSqlClientForVistaDB(rawContent);

        using (var ms = new MemoryStream(
            Encoding.Default.GetBytes(replacedContent)))
        {
            report.LoadLayout(ms);
        }
    }
    else
    {
        // Assumes that the report was designed with SQL Server.
        // If not, one would have to replace the other way, i.e.
        // from VistaDB to SQL Server.
        // I am leaving this out until really needed.
        report.LoadLayout(reportFilePath.FullName);
    }

    // --
    // Change connection string.

    var da = report.DataAdapter as DbDataAdapter;

    if (da != null)
    {
        adjustConnectionString(da.SelectCommand);
        adjustConnectionString(da.InsertCommand);
        adjustConnectionString(da.DeleteCommand);
        adjustConnectionString(da.UpdateCommand);
    }

    // --
    // Adjust parameters.

    if (parameters != null && parameters.Length > 0)
    {
        foreach (var parameter in parameters)
        {
            if (containsParameter(report.Parameters, parameter.First))
            {
                report.Parameters[parameter.First].Value = parameter.Second;
            }
        }
    }

    // --
    // Bind the report's printing system to the print control.

    printControl.PrintingSystem = report.PrintingSystem;

    // Generate the report's print document.
    report.CreateDocument();
}

The actual method to replace the string is the following:

private static string replaceSqlClientForVistaDB(string content)
{
    if (string.IsNullOrEmpty(content))
    {
        return content;
    }
    else
    {
        var result = content;

        // Add reference.
        result =
            result.Replace(
                Environment.NewLine + @"///   </References>",
                string.Format(
                    Environment.NewLine + @"///     <Reference Path=""{0}"" />" +
                    Environment.NewLine + @"///   </References>",
                    typeof (VistaDB.IVistaDBValue).Assembly.Location
                    ));

        // Change class and namespace names.
        result =
            result.Replace(
                @"System.Data.SqlClient.Sql",
                @"VistaDB.Provider.VistaDB");

        // Comment out non-available VistaDB properties.
        result = Regex.Replace(
            result,
            @"(^.*?FireInfoMessageEventOnUserErrors.*?$)",
            @"//$1",
            RegexOptions.Multiline);

        return result;
    }
}

And the method to replace the connection string is defined as follows:

private static void adjustConnectionString(DbCommand command)
{
    if (command != null)
    {
        var conn = command.Connection;

        if (conn != null)
        {
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }

            conn.ConnectionString = getConnectionString();
        }
    }
}

Other methods are left out for simplicity. If you want to see them, simply drop me a note, e.g. by e-mail.

Epilog

In this short article I’ve shown you a way to modify an XtraReports report during runtime of your application to work with both a Microsoft SQL Server and a VistaDB database without the need to design separate reports.

As of writing this article the reports I tested work quite well, probably/possible I will have to do further adjustments when getting to more complex reports. I will update the article then.

I am looking forward for lot of feedback! 🙂