Startseite > Techblog
nächste Seite

Herzlich Willkommen im Communardo Techblog, dem Entwickler-Weblog von Communardo. An dieser Stelle werden wir in loser Folge Ideen, Problemlösungen, Tipps und Problemstellungen rund um die Entwicklung webbasierter Software auf Basis verschiedenster Technologien vorstellen. Wir freuen uns über Rückmeldungen und Kommentare unserer Leser. Viel Spaß beim Lesen und Kommentieren.

Christina Schantin

Kommt Ihnen das folgende Szenario bekannt vor? Sie wollen eine Ansicht erstellen und dabei berechnete Felder verwenden. Die Funktion ist lt. Microsoft Dokumentation korrekt, bringt aber beim speichern der Ansicht die folgende Fehlermeldung:

Die Formel enthält einen Syntaxfehler oder wird nicht unterstützt.  at Microsoft.SharePoint.Library.SPRequestInternalClass.UpdateField(String bstrUrl, String bstrListName, String bstrXML)  at Microsoft.SharePoint.Library.SPRequest.UpdateField(String bstrUrl, String bstrListName, String bstrXML)

Die Formel enthält einen Syntaxfehler oder wird nicht unterstützt.  at Microsoft.SharePoint.Library.SPRequestInternalClass.UpdateField(String bstrUrl, String bstrListName, String bstrXML)  at Microsoft.SharePoint.Library.SPRequest.UpdateField(String bstrUrl, String bstrListName, String bstrXML)

Gehen wir von dem Fall aus, dass die Formel (eigentlich) tatsächlich korrekt ist und trotzdem einen Fehler wirft. Dies könnte folgende Ursache haben: Microsoft bietet die Formeln in der jeweiligen Landessprache an. Nutzen Sie also einen SharePoint mit deutschen Spracheinstellungen, müssen auch die deutschen Formeln angewendet werden.

In einigen wenigen Ausnahmen wie z.B. Upper  (Text in Großbuchstaben umwandeln) oder Lower (Text in Kleinbuchstaben umwandeln) erkennt das Produkt die Funktion und konvertiert den Namen automatisch ins Deutsche. Die meisten Funktionen wie z.B. IF oder FIND werden allerdings nicht erkannt.

Hier hilft tatsächlich nur die Anwendung des deutschen Pendants.

Nachfolgend einige ausgewählte Funktionen

Deutsch Englisch
WENN IF
ISTZAHL ISNUMBER
SUCHEN FIND
GLÄTTEN TRIM
ANZAHL2 COUNTA
SUMME SUM
MITTELWERT AVERAGE
RUNDEN/AUFRUNDEN/ABRUNDEN ROUND/ ROUNDUP/ ROUNDDOWN

Auf der folgenden Seite finden Sie häufig verwendete Formeln:

-          Für den deutschen SharePoint

-          Für den englischen SharePoint

Kommentar Feed Trackback URL
tlu

Das Projekt PRISMA (Personalisierung von aggregierten Informationsströmen im Unternehmenskontext) ist ein gemeinsames Forschungsvorhaben der Communardo Software GmbH und der Technischen Universität Dresden (Professur für Rechnernetze), welches die bislang sehr zeitaufwendige Kommunikation und Zusammenarbeit zwischen Mitarbeitern mit technologieintensiven und kreativen Aufgaben verbessern soll.

Verschiedene  moderne Kommunikationskanäle wie E-Mail, Blogs, Twitter, Communote, RSS-Feeds und Instant Messaging sollen in PRISMA auf der Basis eines einheitlichen Transferformates von einem Web Service gebündelt und in unternehmensinternen Web-Portalen angezeigt und bearbeitet werden. Durch innovative Technologien aus dem Bereich Informationsextraktion und Personalisierung wird es möglich sein, Kommunikationsbeiträge automatisch thematisch und personenbezogen zu filtern bzw. zu aggregieren.

Im PRISMA-Projekt werden zu diesem Zweck die umfassenden Erfahrungen von Communardo im Bereich Enterprise Microblogging sowie der TU Dresden im Bereich semantischer Informationsextraktion und -integration gebündelt,  um ein innovatives System zu entwerfen, welches die Informationsflut im Unternehmen beherrschbarer macht.

Das Projektergebnis soll sich leicht in bestehende IT-Infrastrukturen von Unternehmen integrieren lassen und deren Wettbewerbsfähigkeit durch effizientere Kommunikation, bessere unternehmensinterne Zusammenarbeit und integriertes Wissensmanagement steigern.

Finanziell unterstützt wird das am 01.07.2010 gestartete zweijährige Projekt durch Mittel der Europäischen Union und des Freistaates Sachsen.

Kommentar Feed Trackback URL
mhy

Das nächste Treffen der .NET Usergroup Dresden findet am 25.08.2010 statt. Austragungsort ist dieses Mal die Communardo Software GmbH.

Wie bereits im Juli-Treffen angekündigt werden dabei folgende Themen eine Rolle spielen:

Branching/Merging Strategien mit dem TFS (Robert Mühsig)
Nachdem wir bei der letzten Usergroup den Themenkomplex Buildmanagement vertieft haben, setzt Robert seinen Vortrag zum Thema TFS fort. Dieses Mal geht es um Branching- und Merging-Strategien.

Einführung in die Entwicklung für Windows Phone 7 (Martin Hey)
Windows Phone 7 wird dieses Jahr gelauncht. Der Vortrag soll eine Einführung in die Möglichkeiten und Besonderheiten der Entwicklung für Windows Phone 7 geben.

Das Treffen beginnt wie immer um 18:00 Uhr. Wer daran interessiert ist zu kommen, den bitten wir sich in einer der Teilnehmerlisten (Xing oder Doodle) einzutragen. Nach dem Treffen ist jeder gern eingeladen, beim Stammtisch an einem Plausch in lockerer Atmosphäre über .NET oder alles andere teilzunehmen.

Kommentar Feed Trackback URL
dri

Die SharePoint-Technologie erobert derzeit große, kleine und mittlere Unternehmen im Sturm. Mit der 2010-Version wird Enterprise 2.0 zunehmend zur Realität. Die Möglichkeiten für Business Solutions, Management, Administration und Entwicklung sind deutlich erweitert worden. Dies sind sind die Themen der ShareConnect 2010, die vom 20. – 23. September 2010 in der Rheingoldhalle Mainz stattfindet.

Hier können Sie sich fit für SharePoint machen –  Experten geben Ihnen Einblick in ihre Erfahrungen und zeigen Ihnen, wie sich mit SharePoint optimale Ergebnisse erzielen lassen.

Um die gewaltigen Möglichkeiten des SharePoints auszuschöpfen, ist profundes Praxis-Know-how für Entwicklung und Management notwendig. Praxiswissen, dass Sie sich auf der ShareConnect aneignen können! Neben dem vielfältigen Programm der Hauptkonferenz beleuchten zwei Special Days wichtige Themen in einem umfassenden Sinn und bieten in zahlreichen Vorträgen kompaktes Fachwissen sowie einen idealen Rahmen für den Austausch von Erfahrungen. Alle Informationen und den Link zur Anmeldung finden Sie unter http://shareconnect.net/.

Communardo und die SharePoint Usergroup Dresden unterstützen die ShareConnect 2010 im Rahmen einer Medienpartnerschaft.

Kommentar Feed Trackback URL
dri

Am 27.07.2010 fand bei Communardo das 8. Treffen der SharePoint Usergroup Dresden statt, als Themen standen dieses Mal “Visio-Services: Potenzial und Alternativen” mit Kai-Uwe Gärtner sowie “Taxonomy Store und Social Tagging” mit Anne Rüger auf dem Programm.

In seiner Präsentation zeigte Kai uns, was man mit Visio Services alles machen kann, aber auch, wo deren Grenzen liegen.

Beeindruckend war die Demo insbesondere zur Anzeige der Visio-Diagramme im Browser incl. stufenlosem Zoom, Verschiebung und Drilldown durch verknüpfte Diagramme  - und das alles wirklich performant. Der komplette Funktionsumfang ist sogar ohne Silverlight möglich (das Diagramm wird dann als PNG gerendert), allerdings wirkt es dann mitunter etwas hakelig und “vermatscht”. Dies wird man aber hinzunehmen bereit sein, wenn man bedenkt, dass es dafür (nach Aussage von Kai) in wirklich jedem Browser läuft.

Auch die JavaScript Mash-Up-API, das Caching der Diagramme und die Workflow-Visualiserung (selbst für Workflows, die nicht in Visio designt wurden) sind nette Features. Artikel vollständig lesen »

Kommentar Feed Trackback URL
mhy

Aus der Entwicklung mit ASP.NET und auch aus der Entwicklung mit WSS 3.0 und MOSS 2007 kennt man, dass man durch ändern der web.config (unter C:\inetpub\wwwroot\VirtualDirectories\Port_Number) erreichen kann, dass detaillierte Fehlermeldungen angezeigt werden. Dazu setzt man im Tag customErrors das Attribut “mode” auf den Wert “Off”. Diese Möglichkeit gibt es auch weiterhin in SharePoint 2010 und hat zur Folge, dass statt der relativ unaussagekräftigen aber dafür in einem frischen Design verfassten Fehlermeldung

der bekannte Yellow Screen of Death

erscheint.

Neu ist, dass es in Sharepoint 2010 nicht nur eine, sondern mehrere web.configs gibt, die relevant sind (s. http://msdn.microsoft.com/en-us/library/ms460914.aspx):

  • \\Inetpub\wwwroot\VirtualDirectories\Port_Number
  • \\Program Files\Common Files\Microsoft Shared\Web Server Extensions\wpresources
  • %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG
  • %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI
  • %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS

Ist ein WebPart also auf einer Inhaltsseite eingebunden, muss man die web.config unter C:\Inetpub\wwwroot\VirtualDirectories\Port_Number anpassen, um aussagekräftigere Fehlermeldungen zu erhalten, hat man das WebPart als Control auf einer Administrationsseite im _layouts-Ordner eingebunden, muss die web.config unter %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS geändert werden.

Kommentar Feed Trackback URL
nja

Update:

Mittlerweile hat Atlassian einen Workaround entwickelt, der am Fehlerticket beschrieben ist.

Seit der Veröffentlichung der Version 3.6.7 des Mozilla Firefox am 20. Juli 2010 gibt es Probleme mit der Vorschaufunktion im Confluence. Dort werden die Inhalte der Vorschau abgeschnitten. Auch die inzwischen veröffentlichte Version 3.6.8 ist noch anfällig.

Für das Problem gibt es bereits ein Ticket im Atlassian Jira. Dort wird eine Lösung vorgestellt, die einen tiefen Eingriff ins System erfordert. Eine einfachere Lösung ist das Einfügen von folgendem HTML-Schnipsel als “Kundenspezifisches HTML”:

<style type="text/css">
#preview #previewArea iframe {

   overflow: visible;
}
</style>

Damit wird der für die Vorschau zuständige IFrame angewiesen, bei übergroßen Inhalten Scrollbars anzubieten. Im Ergebnis wird der Ansichtsbereich nicht auf die Höhe des Inhalts vergrößert, aber immerhin sind die Inhalte über die Scrollbars wieder  einsehbar:

Installationsanweisung

  • Aufruf von Confluence Administration -> Gestaltung -> Kundenspezifische HTML
  • Einfügen des obigen Codes in das Feld “Am Beginn des HAUPTTEXTES”

Kommentar Feed Trackback URL
mhy

Mit SharePoint 2010 in Kombination mit Visio 2010 besteht nun die Möglichkeit, auch ohne SharePoint Designer Workflows zu definieren.

Im Bereich der Fluss-Diagramme findet man das Template Microsoft SharePoint Workflow. Auf Basis dieses Templates soll nun exemplarisch ein Workflow erstellt werden.

Hat man auf Basis des Templates eine neue Zeichnung erstellt, kann man direkt mit der Erstellung des Workflows beginnen. Wenn man schon mit Flussdiagrammen gearbeitet hat, ist die Handhabung recht einfach.

Der Anwendungsfall im Beispiel soll ein einfacher Urlaubsantrag sein. Mitarbeiter sollen in der Lage sein, Urlaubsanträge zu erfassen. Dieser soll zur Genehmigung einem Mitarbeiter der HR-Abteilung vorgelegt werden. Im Anschluss daran wird der beantragende Mitarbeiter über den Status seines Antrags informiert.

Artikel vollständig lesen »

Kommentar Feed Trackback URL
nja

Seit einiger Zeit bietet Communardo einen Migrationsservice an, mit dem Daten aus vorhandenen Altsystemen nach Confluence migriert werden können. Dabei kommt das Produkt Content Import Plugin (CIP) zum Einsatz. Dieses Plugin ist als Testversion frei verfügbar und kann über das Atlassian Plugin Exchange herunter geladen werden. Über einen Online Shop ist zudem der Erwerb einer Volllizenz möglich. Somit können Kunden, die den Migrationsservice nicht in Anspruch nehmen möchten, selbst Migrationen durchführen.

Dieser Artikel beschreibt einige unserer bisherigen Erfahrung bei der Durchführung solcher Migrationen. Er richtet sich sowohl an Kunden, die eine solche Migration selbst durchführen möchten, als auch an Kunden, die unseren Migrationsservice nutzen möchten.

Artikel vollständig lesen »

Kommentar Feed Trackback URL
are

Motivation

Beim Abändern von bestehenden Texten für Confluence muss der zugehörige Schlüssel bekannt sein. Um an diesen Schlüssel zu gelangen muss der Entwickler sich durch den Quellcode (Frontend) hangeln oder in den unzähligen properties-Dateien nach dem Text suchen. Es bedeutet somit einen relativ großen Aufwand, um Textanpassungen vorzunehmen. Verschärft wird diese Problematik durch das Outsourcing der Textanpassung an entsprechende Dienstleistungsunternehmen. Zumeist haben diese Firmen keinerlei Bezug zur Informatik, sodass eigenständige Recherchen nach den passenden Schlüssel-Wert Paaren nicht realistisch sind.
Optimal wäre eine Lösung, die es ermöglicht während der Laufzeit die Schlüssel-Wert Paare umzuschalten… und genau das beschreibe ich in den Teilen Umsetzung - Backend und Umsetzung - Frontend.

Umsetzung – Backend

Ein kleiner – aber wie ich finde vertretbarer – Wermutstropfen ist, dass es nicht ohne Anpassung des Confluence-Cores geht. Die abgeänderten Dateien, die nachfolgend erläutert werden, packt man am besten in eine jar und legt diese in das WEB-INF/lib Verzeichnis.

Erstellen einer ThreadLocale ShowI18NKeysThreadLocal

Die Aktivierung/Deaktivierung der Funktion wird über einen Schalter in der GUI realisiert. Damit der Zustand ins Backend übertragen werden kann, wird eine ThreadLocale verwendet. Diese ist wie folgt aufgebaut:

public class ShowI18NKeysThreadLocal {

  public static final ThreadLocal showI18nKeysLocal = new ThreadLocal () {
    protected synchronized Boolean initialValue() {
      return false;
    }
  };

}

Überschreiben der DefaultI18NBean Klasse

Die DefaultI18nBean besitzt u.a. eine Methode namens isShowKeyMode. Mit dieser Methode wird abgefragt, ob die Schlüssel-Wert Paare zurückgeliefert werden sollen. Nun vermutet man, dass die Methode aus einer Property, etc… den Zustand (aktiv, inaktiv) ausliest. Dies ist leider nicht der Fall, da sie immer den Wert false (hard-codiert) zurückliefert, sodass ohne dem Überschreiben der Methode ein Switch gar nicht möglich ist. Deshalb muss die Klasse wie folgt erweitert werden.

  public ExtendedDefaultI18NBean(Locale locale, PluginAccessor pluginManager) {
    super(locale, pluginManager);
  }

  @Override
  public boolean isShowKeyMode() {
    return ShowI18NKeysThreadLocal.showI18nKeysLocal.get();
  }

Überschreiben der DefaultI18NBeanFactory Klasse

Die Klasse DefaultI18NBean wird nicht wie die meisten Klassen per Spring Injection erzeugt, sondern über eine Factory-Klasse. Aus diesem Grund muss auch die DefaultI18NBeanFactory wie folgt überschrieben werden.

 public class ExtendedDefaultI18NBeanFactory implements I18NBeanFactory {

  private PluginAccessor pluginAccessor;

  public I18NBean getI18NBean(Locale locale) {
    return new ExtendedDefaultI18NBean(locale, pluginAccessor);
  }

  public I18NBean getI18NBean() {
    return getI18NBean(LocaleManager.DEFAULT_LOCALE);
  }

  public void setPluginAccessor(PluginAccessor pluginAccessor) {
    this.pluginAccessor = pluginAccessor;
  }

}

Anpassen der i18nContext.xml

Damit nun die von uns angepasste Factory-Klasse verwendet werden kann, muss in der i18nContext.xml der zugehörige Eintrag wie folgt angepasst werden:

<bean id="defaultI18NBeanFactory" class="de.communardo.customizations.i18n.ExtendedDefaultI18NBeanFactory" autowire="byName"/>

Anpassen der web.xml

Letztlich ist es noch notwendig, dass die web.xml auf die abgeänderte i18nContext.xml verweist. Dazu muss die entsprechende Zeile wie folgt angepasst werden.

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            ...,
            classpath:/customizedI18nContext.xml,
            ...,

Umsetzung – Frontend

Wie zuvor bereits erwähnt, zielt dieses Vorgehen auf eine Laufzeitlösung ab, sodass im Frontend ein entsprechender “Schalter” implementiert werden muss. In diesem Beispiel werden die Frontend-Anpassungen über ein Plugin durchgeführt.

Erstellen der ShowI18NKeyFilter Klasse

Der neue Filter hat einzig und allein die Aufgabe zu überprüfen, ob und auf welchen Wert der Request-Parameter showI18nKeys gesetzt ist. Sollte der Wert true sein, dann werden beim Reload der aktuellen Seiten nicht mehr nur die Texte, sondern auch die zugehörigen Schlüssel angezeigt. Außerdem wird der aktuelle Zustand in der Session vermerkt, sodass beim Seitenwechsel der gewünschte Zustand immernoch existiert. Natürlich wirkt sich die Zustandsänderung nur auf den aktuellen Nutzer aus und beeinflusst nicht die Sicht der anderer Nutzer!

public class ShowI18NKeyFilter implements Filter {

  private static final String I18N_KEYS = "showI18nKeys";

  private static final String CONFLUENCE_I18N_SHOWKEY = "confluence.i18n.showkey";

  public void destroy() {

  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
      ServletException {

    if (request instanceof PluginHttpRequestWrapper) {
      PluginHttpRequestWrapper httpRequest = (PluginHttpRequestWrapper) request;
      Boolean showI18nKeysSession = (Boolean) httpRequest.getSession().getAttribute(CONFLUENCE_I18N_SHOWKEY);
      if (httpRequest.getParameter(I18N_KEYS) != null) {
        Boolean showI18nKeysRequest = Boolean.valueOf(httpRequest.getParameter(I18N_KEYS));
        if (showI18nKeysRequest != showI18nKeysSession) {
          if (showI18nKeysRequest) {
            httpRequest.getSession().setAttribute(CONFLUENCE_I18N_SHOWKEY, true);
            ShowI18NKeysThreadLocal.showI18nKeysLocal.set(true);
          } else {
            httpRequest.getSession().removeAttribute(CONFLUENCE_I18N_SHOWKEY);
            ShowI18NKeysThreadLocal.showI18nKeysLocal.set(false);
          }
        }
      } else {
        ShowI18NKeysThreadLocal.showI18nKeysLocal.set(showI18nKeysSession != null ? showI18nKeysSession : false);
      }
    }
    chain.doFilter(request, response);
  }

  public void init(FilterConfig arg0) throws ServletException {

  }

}

Anpassung einer vm Datei

Letztlich fehlt nur noch ein Link (am besten im Header, da diese Stelle auf fast allen Seiten sichtbar ist), welcher den GET-Parameter showI18nKeys konträr zum aktuellen Zustand den Wert auf true bzw. auf false übermitteln soll.

Kommentar Feed Trackback URL
nächste Seite

Tag Cloud

Unsere Themen

Kommentare

  • Christian Heindel: Hallo Volti, die Option “Verbindung mit ‘Dokumentbibliothek̵ 7; herstellen”...
  • volti: Hi, ich hab das beschriebene Probleme mit Outlook 2010, dort finde ich die Option Aktionen >...
  • Michael Wittwer: Hallo Guter Beitrag, bin seit kurzem auch mit Balsamiq am arbeiten und die Effizienz ist einfach...
  • Frank: Danke, tut und ist im Vergleich zur Atlassian Lösung abwärtskompatibel bis Confluence 2.10.
  • Ghost@: Danke für die schnelle Antwort Martin! Das ist natürlich ärgerlich, dass der Datentyp nicht unterstützt ist....

Twitter