<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LX networking GbR &#187; News</title>
	<atom:link href="http://www.lx-networking.de/category/news/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lx-networking.de</link>
	<description>Ein weiteres tolles WordPress-Blog</description>
	<lastBuildDate>Wed, 07 Jul 2010 14:25:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery Animations-Intervall ändern</title>
		<link>http://www.lx-networking.de/news/jquery-animations-intervall-andern/501</link>
		<comments>http://www.lx-networking.de/news/jquery-animations-intervall-andern/501#comments</comments>
		<pubDate>Sat, 03 Jul 2010 08:13:25 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=501</guid>
		<description><![CDATA[In jQuery ist das Intervall für die Bildwiederholrate auf 13 ms intern festegelegt. Für sehr viele parallele Animationen ist es sinnvoll dieses Interval zu vergrößern.]]></description>
			<content:encoded><![CDATA[<p>
Für viele Effekte und Animationen im Web sind keine gesonderten Plugins wie Flash oder Sliverlight nötig. Moderne Browser in Verbindung mit leistungsfähigen Computern machen auch die Animation der CSS-Eigentschaften per Javascript möglich. Die <a href="http://www.jquery.com">jQuery-Bibliothek</a> bietet hier weitreichende Funktionen.
</p>
<p>
Wie erstellt jQuery nun eine Animation? Eine CSS Eigenschaft, z.B. die Position <em>top: 100px</em> soll nach <em>top: 200px</em> in einer Zeit von <em>2s</em> animiert werden. Hierzu werden die <em>100px</em> Weg in äquidistante Stücke zerlegt. Wie groß ein einzelnes Wegstück ist, wird vom internen Takt des Animations-Timers bestimmt. Das Timer-Intervall ist bei jQuery standardmäßig auf <em>13ms</em> eingestellt. Für unsere <em>2s</em> Animation werden also ca. <em>154</em> Animations-Schritte benötigt. Folglich wird die Position des Elements pro Schritt um <em>0.65px</em> verändert.
</p>
<p>
Und hier liegt das Problem: Der Browser ist nicht in der Lage Bruchteile von Pixeln sinnvoll darzustellen. Es wird auf ganze Pixel gerundet. Die hohe Zeitauflösung hat für die Animation einer kurzen Strecke in einem relativ langen Zeitintervall also gar keinen Vorteil. Ganz im Gegenteil: Bei vielen paralleln Animationen wird der Browser unnötig belastet oder die Animation sogar unbrauchbar. Auch verhalten sich hier die Browser völlig unterschiedlich: Chrome zeigt meist eine Animationen flüssig an, die im Internet Explorer nicht mehr zu erkennen ist.
</p>
<p>
Wenn man die eigenen Animationen in einem <a href="http://docs.jquery.com/Plugins/Authoring">jQuery-Plugin</a> kapselt, kann auch nur für dieses Plugin die Geschwindigkeit der Bildfolge geändert werden:
</p>
<pre class="brush: js">
(function($){
    jQuery.fx.prototype.custom = function( from, to, unit ) {
        this.startTime = now();
        this.start = from;
        this.end = to;
        this.unit = unit || this.unit || "px";
        this.now = this.start;
        this.pos = this.state = 0;

        var self = this;
        function t( gotoEnd ) {
            return self.step(gotoEnd);
        }

        t.elem = this.elem;

        if ( t() &#038;&#038; jQuery.timers.push(t) &#038;&#038; !jQuery.fx.prototype.timerId ) {
            //timerId = setInterval(jQuery.fx.tick, 13);
            jQuery.fx.prototype.timerId = setInterval(jQuery.fx.tick, 250);
        }
    }

    $.fn.extend({

        your_plugin: function(options) {
            /* Your plugin here */
        }

    });
})(jQuery);
</pre>
<p>
Im obigen Intervall wird das Intervall in Zeile 19 auf <em>250ms</em> gesetzt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/jquery-animations-intervall-andern/501/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integer-Intervall in MySQL erzeugen</title>
		<link>http://www.lx-networking.de/news/integer-intervall-in-mysql/488</link>
		<comments>http://www.lx-networking.de/news/integer-intervall-in-mysql/488#comments</comments>
		<pubDate>Thu, 20 May 2010 20:58:38 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=488</guid>
		<description><![CDATA[Mit einem kleinen Trick aus dem Relationen-Kalkül lassen sich in einem MySQL-RDBMS eine Sequenz bzw ein Intervall aus Integer Zahlen erzeugen. ]]></description>
			<content:encoded><![CDATA[<p>
Zur Erzeugung von zufälligen Integer-Indizes, die jedoch breits verwendete/besetzte nicht enthalten, musste eine Liste aus Integer-Zahlen erzeugt werden. Aus dieser Sequenz wird durch simples anhängen von<a href="http://dev.mysql.com/doc/refman/5.1/de/mathematical-functions.html"> order by rand (siehe Beispiele zur Funktion RAND())</a> Zufallszahlen. Jedoch sind sequenzielle Arbeiten in der Welt der relationalen Datenbanken nicht immer einfach zu bewältigen.
</p>
<p>
In MySQL bietet es sich an hierzu eine Variable zu verwenden, die bei jeder Zeile inkrementiert wird. Bleibt nur noch das Problem eine definierte Menge an Zeilen zu erzeugen. Die Ziffern von <em>0-9</em> erhält man durch folgene Abfrage:
</p>
<pre class="brush:sql">
select 0 union all select 1 union all select 2 union all
select 3 union all select 4 union all select 5 union all
select 6 union all select 7 union all select 8 union all
select 9;
</pre>
<p>
Dieses Spiel könnte man nun bis zur gewünschten Anzahl an Zeilen so weiter treiben. Jedoch ist dies wohl kaum im Sinne des Erfinders. Es bietet sich deshalb an, durch einen <em>natürlichen Verbund</em> bzw. <a href="http://dev.mysql.com/doc/refman/5.1/de/join.html">natural join</a> aus zwei Ziffern-Sequenzen von <em>0-9</em> alle möglichen 100 Kombinationen zu erzeugen:
</p>
<pre class="brush:sql">
select *
from
( select 0 union all select 1 union all select 2 union all
  select 3 union all select 4 union all select 5 union all
  select 6 union all select 7 union all select 8 union all
  select 9
) as t0,
( select 0 union all select 1 union all select 2 union all
  select 3 union all select 4 union all select 5 union all
  select 6 union all select 7 union all select 8 union all
  select 9
) as t1
</pre>
<p>
Damit sind wir schon fast am Ziel. Wir fügen noch ein paar Zehnerpotenzen zu unserer Zahlenfolge hinzu und definieren eine SQL-Variable, die inkrementiert werden soll. Èt voilá:
</p>
<pre class="brush:sql">
select
  @i := @i + 1 as number
from
  (select 0 union all select 1 union all select 2 union all
   select 3 union all select 4 union all select 5 union all
   select 6 union all select 7 union all select 8 union all select 9) as t0,
  (select 0 union all select 1 union all select 2 union all
   select 3 union all select 4 union all select 5 union all
   select 6 union all select 7 union all select 8 union all select 9) as t1,
  (select 0 union all select 1 union all select 2 union all
   select 3 union all select 4 union all select 5 union all
   select 6 union all select 7 union all select 8 union all select 9) as t2,
  (select 0 union all select 1 union all select 2 union all
   select 3 union all select 4 union all select 5 union all
   select 6 union all select 7 union all select 8 union all select 9) as t3,
  (select 0 union all select 1 union all select 2 union all
   select 3 union all select 4 union all select 5 union all
   select 6 union all select 7 union all select 8 union all select 9) as t4,
  (select @i:=0) as t_init;
</pre>
<p>
Durch anhängen einer <a href="http://dev.mysql.com/doc/refman/5.5/en/select.html">Limit-Klausel</a> an eine einhüllende Select-Abfrage erhält man falls gewünscht ein Intervall. Mit dieser Fähigkeit Zahlenfolgen zu erzeugen, stehen Möglichkeiten offen, zahlreiche kombinatorische Probleme in der Datenbank mit einem Mengen-basierten Ansatz zu lösen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/integer-intervall-in-mysql/488/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vereinfachter Zugriff auf Büro Plus Next per .NET</title>
		<link>http://www.lx-networking.de/news/vereinfachter-zugriff-auf-buro-plus-next-per-net/449</link>
		<comments>http://www.lx-networking.de/news/vereinfachter-zugriff-auf-buro-plus-next-per-net/449#comments</comments>
		<pubDate>Mon, 17 May 2010 07:59:30 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Büro Plus Next]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[T4]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=449</guid>
		<description><![CDATA[Die COM-Aktiv-Schnittstelle bietet nur unkomfortablen, untypisierten Zugriff auf die Daten von Büro Plus Next. Abhilfe schafft eine mit T4 generierte Wrapper-API.]]></description>
			<content:encoded><![CDATA[<p>
Für die Implementierung individueller Schnittstellen zu Büro Plus Next stellt Microtech die sogenannte <em>COM-Activ</em>-Schnittstelle Bereich. Es handelt sich hierbei um ein COM-Server Objekt, das im Executable des Büro Plus Next-Client <em>BpNext.exe</em> enthalten ist. Das .Net-Framework wiederrum macht den Zugriff auf COM-Dienste per <a href="http://msdn.microsoft.com/de-de/library/6bw51z5z%28VS.80%29.aspx">Interop</a> sehr einfach.
</p>
<p>
So weit, so gut. Jedoch ist die API der <em>COM-Aktiv</em>-Schnittstelle, die von .Net Interop bei Referenzierung des COM-Servers automatisch generiert wird, unkomfortabel und untypisiert. Sie erfordert Kenntnis der Namen und Typen der <em>DataSets</em>, <em>Felder</em> und <em>Indices</em> von Büro Plus Next.
</p>
<p>
 Jedoch hat die API auch ihre Stärken: Über einen Introspektion-Mechanismus (z.B. die Interfaces <em>BpNT.AutoDataSetInfo</em>, <em>BpNT.AutoFieldInfo</em>, etc.) stehen Informationen über das Schema der Tabellen zur Verfügung. Dies kann genutzt werden, um einen stark-typisierten <a href="http://de.wikipedia.org/wiki/Wrapper_%28Software%29">Wrapper</a> um die Basis-Klassen des COM-Dienstes zu erstellen.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2010/05/2010-05-17_091308.png" alt="" title="2010-05-17_091308" class="alignright size-full wp-image-462" /></p>
<p>
Aufgrund der grossen Anzahl an <em>DataSets</em>, <em>Felder</em> und <em>Indices</em> von Büro Plus Next bietet es sich an den Quellcode für die Wrapper-Klassen automatisch zu generieren. Hierzu bietet sich das sogenannte <a href="http://msdn.microsoft.com/en-us/library/bb126445.aspx">Text Template Transformation Toolkit (T4)</a>, das seit Visual Studio 2008 standardmäßig in der IDE enthalten ist, an. T4 transformiert textuelle Vorlagen/Templates unter Einbeziehung externen Daten in eine textuelle Ausgabe-Datei (z.B. C#-Quelltext). Diese Transformationsvorgänge sind nichts Besonderes; z.B. werden in der Webprogrammierung PHP- bzw. ASP.Net-Vorlagen (textuelles Template) in HTML (Ausgabe-Datei), das Daten aus einer Datenbank darstellt, überführt. Eine gute Quelle für weitere Informationen zu T4 ist die Homepage von <a href="http://www.olegsych.com/">Oleg Sych</a>.
</p>
<p>
Wir haben uns für eine Lösung entschieden, bei der für jedes <em>DataSet</em> (z.B. Adressen) mehrere Dateien generiert werden. Es gibt eine Datei, die den Zugriff auf die Menge alle Datensätze regelt (z.B. <em>AdressenSet.generated.cs</em>), eine Datei für den Zugriff auf die einzelnen Felder als .Net-Eigenschaften (z.B. <em>Adressen.generated.cs</em> und jeweils eine Datei für die Indices der Tabelle.
</p>
<p>
Mit Hilfe dieser Wrapper vereinfacht sich z.B. die Selektierung von Datensätzen ungemein. Was jedoch noch viel wichtiger ist, der Quelltext wird viel leichter lesbar, da die Abstraktion durch die COM-Api entfällt. Im folgenden z.B. zwei Testmethoden für das selektieren von Datensätzten per Index:
</p>
<pre class="brush: csharp">
[TestMethod]
public void CanApplyRangeWithSingleArgument()
{
    BpnConnection con = new BpnConnection("Firma", "Mandant", "User", "Passwd");
    var adressenSet = AdressenSet.CreateInstance(con);

    int count = adressenSet.Indices.NrIndex.ApplyRange(
        new AdressenSetNrIndex.IndexFields() { AdrNr = "EBAY840" }
    );

    Assert.AreEqual<int>(1, count, "Falsche Anzahl von Anschriften selektiert");
    foreach (var adresse in adressenSet)
        Assert.AreEqual<int>(16326, adresse.ID, "Ids stimmen nicht");
}

[TestMethod]
public void CanApplyRangeWithBeginAndEnd()
{
    BpnConnection con = new BpnConnection("Firma", "Mandant", "User", "Passwd");
    var postleitzahlenSet = PostleitzahlenSet.CreateInstance(con);

    int count = postleitzahlenSet.Indices.PLZIndex.ApplyRange(
        new PostleitzahlenSetPLZIndex.IndexFields() { PLZ = "86600" },
        new PostleitzahlenSetPLZIndex.IndexFields() { PLZ = "86699" }
    );

    Assert.AreEqual<int>(37, count, "Falschen Anzahl PLZs selektiert");
}
</pre>
<p>
Einen weiteren Produktivitätsgewinn erhält man durch Intellisense/Code-Vervollständigung und die Dokumentation von Feld-Eigenschaften. So enthält z.B. das Anschriften-Objekt alle Felder, die in diesem <em>DataSet</em> definiert sind. Im Kommentar, wird der Anzeige-Name des Feldes wie im Büro Plus Next-Client sowie der interne Datentyp angegeben. Man kann quasi durch die DataSets von Büro Plus Next navigieren.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2010/05/bpn_entity_intellisense1.png" alt="" title="bpn_entity_intellisense" class="alignnone size-full wp-image-474" /></p>
<p>
Die Bibliothek zum Zugriff auf alle Büro Plus Next-<em>DataSets</em> kann im Quelltext und als DLL als Visual Studio 2010 Projekt <a href='http://www.lx-networking.de/wp-content/uploads/2010/05/BpnEntityCommon.zip'>hier heruntergeladen</a> werden. Falls Sie Interesse am Code-Generator haben, oder zusätzliche Funktionalität in den generierten Klassen wünschen, kontaktieren Sie mich unverbindlich unter <a href="mailto:joachim.rosskopf@lx-networking.de">joachim.rosskopf@lx-networking.de</a> oder hinterlassen einen Kommentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/vereinfachter-zugriff-auf-buro-plus-next-per-net/449/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SharePoint: Synchronisation von Dateien automatisieren</title>
		<link>http://www.lx-networking.de/news/sharepoint-dateien-automatisiert-synchronisieren/404</link>
		<comments>http://www.lx-networking.de/news/sharepoint-dateien-automatisiert-synchronisieren/404#comments</comments>
		<pubDate>Sun, 25 Apr 2010 17:15:39 +0000</pubDate>
		<dc:creator>sg</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[automatisch]]></category>
		<category><![CDATA[kostenlos]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Synchronisieren]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=404</guid>
		<description><![CDATA[SharePoint-Dateien automatisch offline synchronisieren via WebDAV und dem kostenlosen Werkzeug SyncToy.]]></description>
			<content:encoded><![CDATA[<p>
Die Speicherung von Dateien in SharePoint bietet viele Vorteile, jedoch sind diese alle ad absurdum wenn Anwender keinen Zugriff auf sie haben. Vor allem mobile Nutzer sind darauf angewiesen Dateien auch unterwegs nutzen, verändern oder neue hinzufügen zu können. Um diesen Anforderungen begegnen zu können, nutzen Sie entweder Helferlein wie MS-Groove (<a href="http://www.lx-networking.de/news/sharepoint-dateien-offline-nutzen-mit-groove">siehe Artikel</a>) oder kommerzielle Werkzeuge, z. B. <a href="http://www.colligo.com/products/sharepoint/contributor_file_manager.asp">Colligo</a>.<br />
<br />
Der einzige Nachteil dieser Lösungen liegt darin, dass der Abgleich immer manuell vom Anwender gestartet werden muss. Wie dies automatisiert bewerkstelligt werden kann, erfahren Sie hier.
</p>
<p>
Für die Realisierung der Automatisierung nutzen wir drei Komponenten: den Zugriff auf SharePoint-Dokumenten-Bibliotheken via WebDAV und zwei kostenlose Werkzeuge für die Synchronisation &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c26efa36-98e0-4ee9-a7c5-98d0592d8c52&amp;DisplayLang=en">SyncToy</a> von Microsoft und <a href="http://www.webdrive.com/products/webdrive/index.html">WebDrive</a>.
</p>
<p>
Als erstes richten Sie den WebDAV-Zugriff ein. Wählen Sie dazu in einer Dokumentenbibliothek unter &#8220;Aktionen&#8221; den Eintrag &#8220;Mit Windows Explorer öffnen&#8221; (siehe Screenshot). Damit öffnet sich ein Fenster des Datei-Explorers, in dem die Verzeichnisse und Dateien der Bibliothek in gewohnter Manier bearbeitet können. Sollen nun die Dateien lokal zur Verfügung stehen, müssten Sie diese manuell kopieren und Veränderungen danach umständlich von Hand abgleichen. Dieses Dilemma löst SyncToy.<br />
<img class="size-full wp-image-403" title="SharePoint-Bibliothek: Mit Windows Explorer öffnen" src="http://www.lx-networking.de/wp-content/uploads/2010/04/SharePoint-Bibliothek-WebDAV-Zugriff.jpg" alt="Zugriff auf eine Dokumentebibliothek via WebDAV" width="474" height="400" />
</p>
<p>
SyncToy ist imstande Dateien zwischen zwei Speicherorten äußerst komfortabel zu synchronisieren und bewerkstelligt dies auch automatisiert im Hintergrund. Der Screenshot zeigt wie einfach die Synchronisation eingerichtet wird.
</p>
<p>
<a href="http://www.lx-networking.de/wp-content/uploads/2010/04/synctoy.jpg"><img class="size-full wp-image-430" title="SyncToy" src="http://www.lx-networking.de/wp-content/uploads/2010/04/synctoy.jpg" alt="SyncToy: Einrichten eines Synchronisations-Paares" width="400" height="322" /></a>
</p>
<p>
Da allerdings SyncToy von Haus aus nur mit Verzeichnissen auf Laufwerken des Dateisystems umgehen kann, muss der WebDAV-Speicher als Laufwerk eingebunden werden. Dies ist aber glücklicherweise alles andere als ein Hexenwerk:</p>
<ul>
<li>Windows 7-Nutzer: binden Sie das WebDAV-Verzeichnis als Netzlaufwerk ein.</li>
<li>Für alle anderen Windows-Nutzer ist es nur geringfügig aufwändiger: Sofern Sie Ihren WebDAV-Speicher ohne Port-Angabe adressieren (also via Standard-Port 80) bzw. nicht über https ansprechen, können Sie dies einfach über das folgende Konsolenkommando erreichen. Sollte es nicht funktionieren liegt es daran, dass Sie eine veraltete Version des Mini-Redirectors installiert haben. Installieren Sie die aktuellste Version von der Microsoft-Seite (Link siehe unten).</li>
</ul>
<p><pre class="brush: shell">net use x: 192.168.0.1/docs/dokumente</pre>
</p>
<p>
Für das Kommando sind jedoch einige Fehler <a href="http://www.zorched.net/2006/03/01/more-webdav-tips-tricks-and-bugs/">bekannt</a>. Daher können Sie auch andere Werkzeuge nutzen, wie etwa das kostenlose WebDrive. Die Einrichtung erfolgt damit ebenfalls sehr leicht.
</p>
<p>
Sobald das WebDAV-Verzeichnis als Laufwerk angezeigt wird, kann mit SyncToy ein Synchronisierungspaar erstellt werden. Der Abgleich erfolgt ab sofort im Hintergrund automatisch.
</p>
<p>
Der einzige Nachteil von WebDrive besteht darin, dass kommerzielle Nutzer Lizenzgebühren abtreten müssen. Sollten Sie eine kostenlose Anwendung mit gleicher Funktion kennen, bitten wir Sie einen Kommentar zu hinterlassen, damit andere Leser dies auch nutzen können.
</p>
<p>
<strong>Zusammenfassung</strong></p>
<ul>
<li>SharePoint-Bibliotheken können mittels WebDAV offline synchronisiert werden</li>
<li>SyncToy erkennt jedoch nur Laufwerke und keine WebDAV-Verzeichnisse</li>
<li>ab Windows 7 können WebDAV-Verzeichnisse als Laufwerke eingebunden werden. Für alle anderen Windows-Version sind Helferwerkzeuge wie WebDrive nötig</li>
</ul>
<p>
<strong>Downloads</strong><br />
<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c26efa36-98e0-4ee9-a7c5-98d0592d8c52&amp;DisplayLang=en">SyncToy von Microsoft</a><br />
<br />
<a href="http://www.webdrive.com/products/webdrive/index.html">WebDrive</a><br />
<br />
<a href="http://www.microsoft.com/germany/technet/sicherheit/bulletins/ms08-007.mspx">Mini-Redirector von Microsoft</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/sharepoint-dateien-automatisiert-synchronisieren/404/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint: Dateien offline nutzen mit Groove</title>
		<link>http://www.lx-networking.de/news/sharepoint-dateien-offline-nutzen-mit-groove/364</link>
		<comments>http://www.lx-networking.de/news/sharepoint-dateien-offline-nutzen-mit-groove/364#comments</comments>
		<pubDate>Wed, 21 Apr 2010 06:34:24 +0000</pubDate>
		<dc:creator>sg</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Groove]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Synchronisieren]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=364</guid>
		<description><![CDATA[Die Offline-Nutzung von Nicht-Office-Dokumenten wurde leider nur unzureichend gelöst. Dass Sie diese dennoch offline bearbeiten können wird mit dem Werkzeug "Groove" erklärt. ]]></description>
			<content:encoded><![CDATA[<p>
Der Einsatz von <a href="http://sharepoint2007.microsoft.com/Pages/Default.aspx">Sharepoint Server (MOSS)</a> ist in vielen Unternehmen aufgrund seiner engen Office-Integration sehr beliebt. Obwohl dies zufriedenstellend gelöst wurde, ist gerade die Offline-Nutzung von Nicht-Office-Dokumenten äußerst dürftig. Der Artikel stellt mit dem Einsatz von <a href="http://office.microsoft.com/en-us/groove/fx100487641033.aspx">MS-Groove</a> (Bestandteil des <a href="http://office.microsoft.com/en-au/suites/FX101674041033.aspx">MS-Office Enterprise</a>-Paketes) eine überzeugende Alternative vor.
</p>
<p>
Als einer der herausragenden Möglichkeiten unter SharePoint gilt die verbesserte Zusammenarbeit zwischen Teilnehmern innerhalb einer Organisation. Darunter fällt die Bereitstellung gemeinsamer Dokumente, welche via Outlook auch Offline zur Verfügung gestellt und synchronisiert werden können. Dies funktioniert jedoch nur für MS-Office-Dateien. Wollen Sie auch Nicht-Office-Dateien synchronisieren müssen Sie nicht einen umständlichen Work-Around anwenden oder gar über Alternativen zu SharePoint nachdenken. Denn im Schatten der „großen“ Office-Anwendungen tummelt sich ein nützliches Werkzeug, was sich eines genaueren Blickes lohnt.
</p>
<p>
Groove heißt dieses Werkzeug und bietet allerhand Funktionen. Die Wichtigste gleich vorweg: sie hebt die Beschränkungen der Offline-Synchronisation von Dateien auf. Der folgende Screenshot, zeigt wie sich dem Anwender der Zugriff auf eine Dokumentenbibliothek darstellt.
</p>
<p>
<img src="http://www.lx-networking.de/wp-content/uploads/2010/04/arbeitsbereich_sp-1024x567.jpg" alt="Groove Arbeitsbereiche: SharePoint" title="Groove Arbeitsbereiche: SharePoint" width="700" height="388" class="size-large wp-image-365" />
</p>
<p>
Ähnlich zum Datei-Explorer teilt sich die Bedienung in zwei Bereiche auf und bietet die gleiche Funktionalität, wie etwa Dateien löschen, hinzufügen, Drag &#038; Drop, usw. Durch einen Klick auf den Button „Jetzt synchronisieren…“ erfolgt der Abgleich mit dem SharePoint-Server und die Dokumente stehen allen Abonnenten der Bibliothek zur Verfügung.
</p>
<p>
Neben dem Datei-Austausch können Anwender auch ohne SharePoint Dateien austauschen. Dies macht vor allem in zwei Fällen Sinn: zum einen wenn kein SharePoint-Server zur Verfügung steht und zum anderen wenn Teilnehmer außerhalb einer Organisation Zugriff auf den SharePoint erhalten sollten. Mittels einer speziell aufzusetzenden Infrastruktur können damit auch Externe in Gruppenarbeitsbereiche angegliedert werden und eine gemeinsame Datei-Nutzung wird damit deutlich komfortabler. Eine sichere Übertragung wird durch <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-Verschlüsselung</a> sichergestellt. Ein großer Nachteil ist jedoch, dass in der aktuellen Version die Zugriffskontrolle auf Dokumente innerhalb des SharePoint nicht in Groove realisiert wird, d. h. in SharePoint gesperrte Dokumente werden trotzdem auf Groove synchronisiert und sind damit für alle lesbar bzw. bearbeitbar.
</p>
<p>
Groove wird mit Erscheinen der MS-Office-Version 2010 am 12. Mai in „<a href="http://www.microsoft.com/office/2010/de/sharepoint-workspace/default.aspx">SharePoint Workspace</a>“ umbenannt.
</p>
<p>
<strong>Zusammenfassung</strong><br />
<br />Groove ist Bestandteil des MS-Office 2007 Enterprise</p>
<ul>
<li>mit SharePoint können nur MS-Office-Dateien offline geändert und synchronsisiert werden</li>
<li>mit Groove können hingegen alle Arten von Dateien </li>
</ul>
<p>
<strong>[UPDATE]</strong><br />
<br />
In einem weiteren <a href="http://www.lx-networking.de/news/sharepoint-dateien-automatisiert-synchronisieren/">Artikel</a> erklären wir Ihnen wie Sie den Abgleich automatisieren können, so dass dies komfortabel im Hintergrund geschieht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/sharepoint-dateien-offline-nutzen-mit-groove/364/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Typo3 Suche beschleunigen</title>
		<link>http://www.lx-networking.de/news/indexed-search-beschleunigen/348</link>
		<comments>http://www.lx-networking.de/news/indexed-search-beschleunigen/348#comments</comments>
		<pubDate>Sun, 11 Apr 2010 11:58:37 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Indexed Search]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=348</guid>
		<description><![CDATA[Bei Typo3-Installationen mit mehr als 1000 Seiten wird die in Typo3 integrierte Suche sehr langsam. Das muss nicht zwangsläufig so sein.]]></description>
			<content:encoded><![CDATA[<p>
In Typo3 bietet die System-Extension &#8220;<a href="http://typo3.org/documentation/document-library/extension-manuals/doc_indexed_search/4.2.1/view/">Indexed Search (indexed_search)</a>&#8221; eine Wortindex-basierte Suche. Der Index wird von einem Crawler-Dienst, der interne Dokumente des CMS aber auch verlinkte, externe Ressourcen berücksichtigen kann, in der unterliegenden SQL Datenbank aufgebaut. Zur Abfrage des Index wird um standardkonformes SQL verwendet.
</p>
<p>
Nun hat die Indexed Search-Extension bei größeren Seiten mit mehreren tausend Seiten Performanceprobleme. Darauf weist die Dokumentation sogar in den <a href="http://typo3.org/documentation/document-library/extension-manuals/doc_indexed_search/4.2.1/view/1/9/">Known-Problems</a> hin. Die Probleme liegen einerseits an (unnötig) komplizieren SQL-Abfragen. Andereseits erzeugt der Crawler sehr viele Daten, die die Datenbank-Tabellen (z.B. <em>index_rel</em>), etc schnell auf mehr als 1 Million Zeilen anwachsen lässt. Es lohnt sich dennoch nach pragmatischen Lösungen zu Suchen, da Alternativen wie <a href="http://www.typo3-solr.com/">externe Suchserver</a> oder ein <a href="http://typo3.org/documentation/document-library/extension-manuals/indexed_search_mysql/0.0.1/view/toc/0/">datenbankbasierter Volltextindex</a> mehr Konfigurationsaufwand benötigen, oder in einer gegebenen Hosting-Umgebung nicht betrieben werden können.
</p>
<p>
Diese Komplexität der Index-Datenbank-Abfragen lässt sich sehr effektiv reduzieren, indem man Typo3 anweist nicht mehr nach Wortteilen (Volltext) zu suchen. Standardmäßig wird nämlich der <em>LIKE</em>-Operator zum Vergleich zwischen Suchbegriff und Index-Wort verwendet. Diese Änderung bedeutet natürlich eine Einschränkung, da nur noch eindeutige Übereinstimmungen mit dem Suchbegriff gefunden werden. Das ist in der Praxis jedoch meistens zu verschmerzen. Hierzu muss in der TypoScript-Konfiguration des <em>indexed_search</em>-Plugins folgende Einstellung vorgenommen werden:
</p>
<pre class="brush: shell">
plugin.tx_indexedsearch._DEFAULT_PI_VARS.type = 0
</pre>
<p>
Der zweite Ansatzpunkt ist der Umfang des Suchindexes, d.h. welche Worte werden überhaupt vom Crawler berücksichtigt. In der Tabelle <em>index_words</em> werden alle vom Crawler gefundenen Wörter aufgezählt. In diese Tabelle gibt es eine Spalte <em>is_stopword</em>. <a href="http://en.wikipedia.org/wiki/Stop_words">Stopwords</a> sind Wörter, die vor der maschinellen Verarbeitung von natürlichsprachlichem Text herausgefiltert werden. Diese Worte bieten für eine Suchmaschine keinerlei Verbesserung der Ergebnis-Qualität und können getrost vernachlässigt werden. Für eine Seite mit deutschem Inhalt setzt folgender SQL-Befehl das Stopword-Bit für irrelevante Begriffe:
</p>
<pre class="brush: sql">
update index_words as i set i.is_stopword = 0
where i.baseword in ('aber', 'als', 'am', 'an', 'auch', 'auf', 'aus', 'bei',
                     'bin', 'bis', 'bist', 'da', 'dadurch', 'daher'
                     'darum', 'das', 'daß', 'dass', 'dein', 'deine', 'dem',
                     'den', 'der', 'des', 'dessen', 'deshalb', 'die'
                     'dies', 'dieser', 'dieses', 'doch', 'dort', 'du',
                     'durch',
                     'ein', 'eine', 'einem', 'einen', 'einer'
                     'eines', 'er', 'es', 'euer', 'eure', 'für',
                     'hatte', 'hatten', 'hattest', 'hattet', 'hier',
                     'hinter', 'ich', 'ihr', 'ihre', 'im', 'in'
                     'ist', 'ja', 'jede', 'jedem', 'jeden', 'jeder',
                     'jedes', 'jener', 'jenes', 'jetzt', 'kann',
                     'kannst', 'können', 'könnt', 'machen', 'mein',
                     'meine', 'mit', 'muß', 'mußt', 'musst', 'müssen',
                     'müßt', 'nach', 'nachdem', 'nein', 'nicht', 'nun',
                     'oder', 'seid', 'sein', 'seine', 'sich', 'sie',
                     'sind', 'soll', 'sollen', 'sollst', 'sollt', 'sonst'
                     'soweit', 'sowie', 'über', 'und', 'unser',
                     'unsere', 'unter', 'vom', 'von', 'vor', 'wann',
                     'warum', 'was', 'weiter', 'weitere', 'wenn', 'wer',
                     'werde', 'werden', 'werdet', 'weshalb', 'wie', 'wieder'
                     'wieso', 'wir', 'wird', 'wirst', 'wo', 'woher',
                     'wohin', 'zu', 'zum', 'zur');
</pre>
<p>
Die Einstellungen zu den Stopwords können auch über das Typo3-Backend vorgenommen werden. Einfach im <em>Web &rArr; Info</em>-Menü den Modus <em>Indexed Search</em> per Drop-Down-Box wählen. Anschließend öffnet sich eine Übersicht aller indizierten Unterseiten. Hier klickt man nun auf den Title der Seite. Anschließend wird eine Übersicht aller Such-Wörter, die mit der jeweiligen Seite verknüpft sind, gezeigt. Über den Button <em>Change stop-word settings</em> können einzelne Wörter von Hand als Stopword markiert werden.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2010/04/2010-04-11_142620.png" alt="2010-04-11_142620" title="2010-04-11_142620" width="801" height="881" class="alignleft size-full wp-image-357" /></p>
<p>
Die Suche auf Ihrer Typo3-Seite sollte nun merklich schneller funktionieren. Falls Sie noch Fragen haben, oder Hilfe bei der Konfiguration Ihrer Typo3-Suche benötigen, kontaktieren Sie mich doch einfach unverbindlich unter<br />
<a href="mailto:joachim.rosskopf@lx-networking.de">joachim.rosskopf@lx-networking.de</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/indexed-search-beschleunigen/348/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Büro Plus Next Kommandozeilen Parameter</title>
		<link>http://www.lx-networking.de/news/buro-plus-next-kommandozeilen-parameter/327</link>
		<comments>http://www.lx-networking.de/news/buro-plus-next-kommandozeilen-parameter/327#comments</comments>
		<pubDate>Sat, 13 Mar 2010 14:33:00 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Büro Plus Next]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=327</guid>
		<description><![CDATA[BpNext.exe bietet einige nützliche Kommandozeilenparameter, die beim Start aus der Windows-Konsole angegeben werden können.]]></description>
			<content:encoded><![CDATA[<p>
Um die verfügbare Kommandozeilen-Parameter der &laquo;Büro Plus Next&raquo;-Desktop-Anwendung zu erhalten, muss das Programm aus der Konsole gestartet werden und der Parameter <em>/?</em> angehängt werden.
</p>
<pre class="brush: shell">
C:\Program Files\microtech\Buero Plus NexT>BpNexT.exe /?
</pre>
<p>
Der Pfad muss ggf. an die lokale Installation angepasst werden. Daraufhin öffnet sich ein Dialog, der die möglichen Kommandozeilen-Optionen anzeigt:
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2010/03/2010-03-13_153856.png" alt="2010-03-13_153856" title="2010-03-13_153856" width="490" height="413" class="alignnone size-full wp-image-333" /></p>
<p>
So hatte ein Kunde, dass Problem, dass der Dialog zum Bearbeiten von Artikeln nicht mehr angzeigt wurde. Büro Plus Next verhielt sich so, als sei der Dialog bereits geöffnet und verhinderte das nochmalige Starten. Abhilfe schaffte hier die Option &laquo;Benutzeransichten zurücksetzten&raquo; <em>/xbr</em>. Diese Option sorgt dafür, dass Büro Plus Next die benutzerspezifischen Einstellungen zu Fenstern wie Position, Größe, etc. vergisst.
</p>
<pre class="brush: shell">
C:\Program Files\microtech\Buero Plus NexT>BpNexT.exe /xbr
</pre>
<p>
Wenn beim Starten von <em>BpNext.exe</em> ein Parameter angegeben wurde, öffnet sich vor dem eigenlichen Start der Anwendung ein Hinweis-Fenster, das die überbenen Optionen nochmals zusammenfasst.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2010/03/2010-03-13_155828.png" alt="2010-03-13_155828" title="2010-03-13_155828" width="490" height="211" class="alignnone size-full wp-image-336" /></p>
<p>
Ein anderer interssanter Parameter ist die Option <em>/xd</em>. Diese Option schaltet die Debug-Ausgabe während des Startens von Büro Plus an. Man sieht hier ein Paar Interna des Programmablaufs
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2010/03/2010-03-13_161128.png" alt="2010-03-13_161128" title="2010-03-13_161128" width="551" height="394" class="alignnone size-full wp-image-339" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/buro-plus-next-kommandozeilen-parameter/327/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kontakte aus Büro Plus Next mit Outlook synchronisieren</title>
		<link>http://www.lx-networking.de/news/kontakte-aus-buro-plus-next-mit-outlook-synchronisieren/302</link>
		<comments>http://www.lx-networking.de/news/kontakte-aus-buro-plus-next-mit-outlook-synchronisieren/302#comments</comments>
		<pubDate>Thu, 10 Dec 2009 11:06:10 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[Büro Plus Next]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=302</guid>
		<description><![CDATA[Ein Outlook Plugin, mit dem sich Anschrift aus Büro Plus Next in Outlook übertragen lassen.]]></description>
			<content:encoded><![CDATA[<p>
Als Proof-of-Concept wurde ein kleines Outlook Plugin prototypisiert, das Anschriften aus Büro Plus Next per &#8220;COM-Aktiv&#8221;-Schnittstelle abfrägt und in einen Kontakte-Ordner in Outlook überträgt.
</p>
<p>
Voraussetzungen: <br/></p>
<ul>
<li>Büro Plus Next installiert</li>
<li>.Net 3.5 SP1 Framework</li>
<li>Outlook 2003, Outlook 2007, Outlook 2010</li>
</ul>
<p>
Das Plugin arbeitet Dialog-basiert. Nach betätigen des Buttons &#8220;Kontakte aus BPN laden&#8221; öffnet der Anmelde-Dialog. Hier können die Zugangsdaten zu Büro Plus Next konfiuriert werden. Die Zugangsdaten sind die gleichen,die normalerweise zur Anmeldung verwendet werden. &#8220;Firma&#8221; erfährt man z.B. aus dem Hotline-Dialog von Büro Plus Next (Im Menu: ? > Hotline, dann &#8220;Firmenname&#8221;). &#8220;Mandant&#8221; entspicht dem gewählten Mandant bei der Anmeldung. <br/><br />
Bis auf das Passwort werden alle Felder in der Registry zwischengespeichert, so dass sie beim nächsten Aufruf nicht nochmals eingegeben werden müssen. Beim erstmaligen Synchronisieren, oder zum Übertragen aller Kontakte, sollter der Haken &#8220;alle synchronisieren&#8221; gesetzt werden.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2009/12/2009-12-10_121833.png" alt="Anmelde-Dialog" title="Anmelde-Dialog" width="411" height="491" class="size-full wp-image-312" /></p>
<p>
Wurden alle Felder ausgefüllt, kann mit &#8220;Weiter&#8221; zum nächsten Dialogschritt gesprungen werden. Hier versucht der Dialog nur eine Verbindung zum Büro Plus Next-Server aufzubauen. War dies erfolgreich, kann mit einem Klick auf &#8220;Weiter&#8221; die Synchronisation beginnen. War eine Anmeldung mit den eigegebenen Daten nicht möglich wird der Grund im &#8220;Status&#8221;-Text angezeigt. Mit dem &#8220;Zurück&#8221;-Button gelängt man wieder zum Anmelde-Dialog und die zuvor eingegebenen Daten können korrigiert werden.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2009/12/2009-12-10_123116.png" alt="Verbindungs-Dialog" title="Verbindungs-Dialog" width="410" height="489" class="size-full wp-image-315" /></p>
<p>
Im Übertragen-Dialog zeigt dann eine Fortschrittsbalken an, wieviele Anschriften aus Büro Plus Next bereits abgearbeitet sind. Zudem wird angezeigt, wieviele davon tatsächlich nach Outlook übertragen wurden. Diese Zahlen können sich stark unterscheiden. Zum einen überträgt das Plugin nur Kontakte, deren Änderungsdatum jünger als der letzte Synchronisationslauf ist. Zum anderen wird geprüft ob in Outlook bereits eine Anschrift mit dem selben Namen vorhanden ist. Falls ja, werden die Datensätze vereinigt.<br />
Die Kontakte werden in Outlook nicht direkt in den primären Kontakte-Ordner geschrieben! Um Büro Plus Next-Anschriften von händisch gepflegten Kontakten zu unterschreiden, wird ein Unterordner &#8220;Anschriften aus Büro Plus Next&#8221; angelegt.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2009/12/2009-12-10_121337.png" alt="Neuer Outlook Ordner" title="Neuer Outlook Ordner" width="281" height="68" class="alignright size-full wp-image-317" /></p>
<p>
Mit dem &#8220;Abbrechen&#8221;-Button kann die Übertragung jederzeit gestoppt werden. Während der Übertragung kann man live beobachten, wie sich der Adress-Bestand in Outlook beständig vergrößert. Gerade der erste Durchlauf kann abhängig vom Umfang der Anschriften-Tabelle in Büro Plus Next lange dauern.
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2009/12/2009-12-10_124227.png" alt="Übertragen-Dialog" title="Übertragen-Dialog" width="409" height="492" class="size-full wp-image-318" /></p>
<p>
Das Plugin kann <a href="http://www.lx-networking.de/wp-content/uploads/2009/12/BPNOutlookSyncSetup.msi">hier</a> heruntergeladen werden. Es handelt sich nur um einen Prototyp, der die generelle Machbarkeit zeigen soll. Falls Interesse an einer Weiterentwicklung oder Anpassung besteht, kontaktieren Sie mich doch einfach unverbindlich unter <a href="mailto:joachim.rosskopf@lx-networking.de">joachim.rosskopf@lx-networking.de</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/kontakte-aus-buro-plus-next-mit-outlook-synchronisieren/302/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matlab R2007a unter Windows 7</title>
		<link>http://www.lx-networking.de/news/matlab-r2007a-unter-windows-7/294</link>
		<comments>http://www.lx-networking.de/news/matlab-r2007a-unter-windows-7/294#comments</comments>
		<pubDate>Thu, 05 Nov 2009 08:46:12 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Matlab]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Server 2008R2]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=294</guid>
		<description><![CDATA[Das mitgelieferte JRE beim betagten Matlab R2007a ist der Show-Stopper bei Installation und Benutztung. Hier ein einfacher Workaround!]]></description>
			<content:encoded><![CDATA[<p>
Wer unter Windows 7 Matlab in der Version <em>R2007a</em> installieren will, schaut zunächst einmal in die Röhre! Der Installations-Dialog erscheint zwar, bleibt aber vor dem Kopieren der Dateien hängen. Aber mit einem kleinen Trick lässt sich Matlab doch auch unter <em>Windows 7</em> oder <em>Windows Server 2008R2</em> verwenden.
</p>
<p>
Damit die Installation funktioniert muss das Windows 7-Design (Aero, Themes, etc) deaktiviert und das Basis-Design <em>Windows &#8211; klassisch</em> aktiviert werden. Das geht z.B in der <em>Systemsteuerung</em> unter <em>Design ändern</em>
</p>
<p><img src="http://www.lx-networking.de/wp-content/uploads/2009/11/Unbenannt-300x278.png" alt="Design wählen Dialog" title="Design wählen Dialog" width="300" height="278" class="wp-image-298" /></p>
<p>
Nach der Installation befindet sich das Matlab-Programmpaket z.B. unter
</p>
<pre class="brush: shell">
C:\Program Files (x86)\MATLAB\R2007a\</pre>
<p>
Für die GUI liefert Matlab ein eigenes Java Runtime Environment (JRE) mit. Die Version 1.5.0 in
</p>
<pre class="brush: shell">
.\sys\java\jre\win32
</pre>
<p>
unterhalb des Basis-Ordners ist nicht mit Windows 7 kompatibel. Aber das Matlab-JRE kann ausgetauscht werden. Zunächst sollte vom Ordner <em>jre1.5.0_07</em> eine Sicherungskopie erstellt werden. Wenn eine Sicherungskopie angelegt wurde, kann der Inhalt von <em>jre1.5.0_07</em> (nicht der Ordner selbst) gelöscht werden.
</p>
<p>
Anschließend muss (falls noch nicht auf dem System vorhanden) ein aktuelles JRE von Sun <a href="http://java.sun.com/javase/downloads/index.jsp">heruntergeladen</a> werden. Nachdem das JRE installiert wurde, befinden sich z.B. unter</p>
<pre class="brush: shell">
C:\Program Files (x86)\Java\jre6
</pre>
<p>
die Dateien des JRE. Der Inhalt dieses Ordners sollte nun die den <em>jre1.5.0_07</em>-Ordner von Matlab kopiert werden. Wichtig ist, dass der Ordner weiterhin <em>jre1.5.0_07</em> heißt.
</p>
<p>
Jetzt kann wieder das vorherige Windows-Design aktiviert werden. Matlab <em>R2007a</em> sollte jetzt problemlos starten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/matlab-r2007a-unter-windows-7/294/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Büro Plus Next und C++</title>
		<link>http://www.lx-networking.de/news/buro-plus-next-und-c/271</link>
		<comments>http://www.lx-networking.de/news/buro-plus-next-und-c/271#comments</comments>
		<pubDate>Sun, 01 Nov 2009 10:12:40 +0000</pubDate>
		<dc:creator>jr</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Büro Plus Next]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.lx-networking.de/?p=271</guid>
		<description><![CDATA[Wie man mit VisualStudio und C++ über die COM-Aktiv Schnittstelle auf Daten in Microtech Büro Plus Next zugreift.]]></description>
			<content:encoded><![CDATA[<p>
Mittlerweile sind unter Windows viele Programmieraufgaben über die komfortable API des .Net Frameworks und der verwalteten Programmiersprache C# zu erledigen. Aber gerade wenn es um tieferliegende oder historische APIs von Microsoft Produkten geht, führt kein Weg an MFC, ATL und deshalb C/C++ vorbei. Ein Beispiel ist das &#8220;Message Application Programming Interface&#8221; oder kurz <a href="http://social.msdn.microsoft.com/Search/en-US?query=MAPI&#038;ac=8">MAPI</a>. Wer also z.B. einen <a href="http://social.msdn.microsoft.com/Search/en-US?query=developing%20a%20mapi%20address%20book%20provider&#038;ac=8">Adress Book Provider</a> für Outlook oder Exchange schreiben will, kommt nicht umhin sich die Hände schmutzig zu machen.
</p>
<p>
Auf der anderen Seite unseres Problems steht <a href="http://www.microtech.de/index.php?id=buero_plus_next">Büro Plus Next</a> der Firma Microtech aus Bad Kreuznach. Die Software bietet Handwerkern, Händlern und kleinen Unternehmen Module für Faktura, Warenwirtschaft, Einkauf und Finanzbuchhaltung. Die Software wird in Delphi entwickelt. Leider werden die Daten nicht in einer dezidierten, relationalen Datenbank abgelegt, die per SQL abgefragt werden kann. Der externe Zugriff auf Daten ist nur per COM Client/Server Schnittstelle möglich. Microtech nennt das &#8220;COM-Aktiv&#8221;.
</p>
<p>
Wer nun den Komfort des automatisierten <a href="http://www.codeproject.com/KB/COM/cominterop.aspx">COM-Interop</a> von C# gewohnt ist, steht bei C++ erst einmal auf dem Schlauch. Es gibt jedoch auch für C++ mächtige Tools, die den Zugriff ungemein erleichtern. Wir werden im folgenden sehen, wie man die Verbindung zu Büro Plus aufbaut und sich das <em>BpNT::IAutoApplicationPtr</em>-Interface besorgt.
</p>
<p>
Dreh- und Angelpunkt des Zugriffs auf COM-Server ist die <a href="http://social.msdn.microsoft.com/Search/en-US?query=com%20%23import%20directive&#038;ac=3">#import</a>-Directive. Dieser Präpozessor-Befehl extrahiert aus der im COM-Server eingebetteten Schnittstellenbeschreibung die Typen-Bibiliothek und generiert hieraus C++ Stubs.
</p>
<pre class="brush: cpp">
#import "C:\WINDOWS\system32\RICHED20.dll" no_namespace rename("UINT_PTR", "TOMUINT_PTR")
#import "C:\Programme\microtech\Buero Plus NexT\BpNexT.exe" rename("LoadImage","BPNTLoadImage"),rename("GetVersionEx","BPNTGetVersionEx")
</pre>
<p>
Der COM-Server im Fall von Büro Plus Next ist gleichzeitig das Executable des Anwendungs-Clients. Der obige Pfad muss also ggf angepasst werden. Die Möglichkeiten beim &#8220;Import&#8221; gehen sogar soweit, Konflikte im Namensraum auflösen, indem Typen  in der Bibliothek per <em>rename</em> umbenannt werden.
</p>
<p>
Zunächst muss COM für den aktuellen Thread initialisiert werden:
</p>
<pre class="brush: cpp">
CoInitialize(NULL);
</pre


Im nächsten Schritt muss eine Instanz des Methoden-Stubs erstellt und die Verbindung zum COM-Server aufgebaut werden. Hierzu sind zwei Indentifikationsschlüssel, <em>CLSID</em> und <em>IID</em>, nötig. Die <em>CLSID</em> oder Class-Id beschreibt den Server selbst. <em>IID</em> oder Interface-Id, identifiziert das jeweilige Interface innerhalb des COM-Servers. So lautet die <em>IID</em> des <em>BpNT::IAutoApplicationPtr</em>-Interface <em>{C74FB8F1-A6EF-11D2-B95E-004005232B30}</em> (einfach einmal nach der IID per regedit in der Registry suchen).

<pre class="brush:cpp">
CLSID idbpnt;
HRESULT hr = ::CLSIDFromProgID (L"BpNT.Application", &#038;idbpnt);
if(FAILED(hr))
{
    std::cerr << "CLSIDFromProgID failed" << std::endl;
    return NULL;
}

IID IID_IApplication;
hr = IIDFromString(L"{C74FB8F1-A6EF-11D2-B95E-004005232B30}", &#038;IID_IApplication);
if(FAILED(hr))
{
    std::cerr << "IIDFromString failed" << std::endl;
    return NULL;
}
</pre>
<p>
Nun kann die eigentliche Instanz angefordert werden.
</p>
<pre class="brush: cpp">
BpNT::IAutoApplicationPtr app;
hr = CoCreateInstance(idbpnt, NULL, CLSCTX_LOCAL_SERVER, IID_IApplication, (LPVOID*)&#038;app );
if(FAILED(hr))
{
    std::cerr << "CoCreateInstance failed" << std::endl;
    return NULL;
}
</pre>
<p>
Nun liegt eine Instanz von <em>BpNT::IAutoApplicationPtr</em> vor, die mit dem <em>BpNext.exe</em> COM-Server verbunden ist. Anschließend folgt der Anmelde-Vorgang und die Selektion eines Mandanten. Dies geschieht analog zur Verwengung der COM-Aktiv-Schnittstelle aus VB oder C# und ist in den Mitgelieferten Beispielen von Microtech dokumentiert.
</p>
<pre class="brush: cpp">
hr = app->Init(_bstr_t(FIRM), _bstr_t(""), _bstr_t(USER), _bstr_t(PASSWD));
if(FAILED(hr))
{
    std::cerr << "IAutoApplication::Init failed" << std::endl;
    return NULL;
}

hr = app->SelectMand(_bstr_t(MANDANT));
if(FAILED(hr))
{
    std::cerr << "IAutoApplication::SelectMand failed" << std::endl;
    return NULL;
}
</pre>
<p>
Nach der Verwendung der Anwendung muss COM für den aktuellen Thread beendet werden, so dass auch der <em>BpNext.exe</em> COM-Server beendet wird. Immerhin benötigt der eine Netzwerkbenutzerlizenz.
</p>
<pre class="brush: cpp">
CoUninitialize();
</pre>
<p>
Bei Anfragen zur Anbindung von Outlook, Exchange oder exotischerer Wünsche wie Waagen, Zähler oder sonstige BDE, <a href="/contact">kontaktieren</a> Sie uns unverbindlich.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lx-networking.de/news/buro-plus-next-und-c/271/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
