Freitag, 4. Juli 2008

Navigationselemente (QuickLaunch etc.) über die onet.xml bearbeiten

In unserem aktuellen Projekt sollen in einer SiteCollection sehr viele Subwebsites angelegt werden können. Nun erscheinen diese alle als Link im Quicklaunchmenü im Rootweb. Nach einiger vergeblicher Recherche im SDK bin ich auf dieses Blogpost gestossen: *click*

Genau das hatte ich gesucht! Meiner Meinung nach konnte es nicht angehen, dass Einstellungen an der Navigation, die über die Oberfläche vorgenommen werden können, nur über programmatische Lösung via ObjektModell realisiert werden können, wie mir das in div. SharePoint-Büchern vorgeschlagen wird und dieser Blogpost beschreibt genau die Parameter, die es gibt um über die onet.xml die Navigation zu manipulieren.

Um jetzt also zu verhindern, dass Subwebsites im Quicklaunch angezeigt werden, muss folgender XML-Code im -Block der onet.xml für das Rootweb eingetragen werden:


<Feature ID="541F5F57-C847-4e16-B59A-B31E90E6F9EA">
<properties xmlns="http://schemas.microsoft.com/sharepoint/">
<property key="InheritGlobalNavigation" value="false">
<property key="ShowSiblings" value="false">
<property key="IncludeSubSites" value="false">
</properties>
</Feature>


IncludeSubSites : (false/true) Hiermit wird de/aktiviert, ob Subwebsites im Quicklaunch des Rootwebs angezeigt werden sollen.
InheritGlobalNavigation: (false/true) De/aktiviert, ob die Navigation des Rootwebs auf die Subwebsite vererbt werden soll.
ShowSiblings: (false/true) Was man jetzt genau hier de/aktivieren kann, habe ich noch nicht so direkt herausgefunden. Ich nehme an, dass es sich hierbei um Websites auf der gleichen Ebene handelt, die über einen Navigationslink erreichbar sind. Wer hierzu etwas sagen kann, möge das bitte als Kommentar schreiben :-)

Webparts mit Flash/Silverlight

Hier mal ein interessanter Link, wie man Flash bzw. Silverligt Inhalte in ein Webpart bekommt. Da würden mir einige coole Sachen einfallen, um der etwas lahmen Sharepoint-Oberfläche die nötige Dynamik zuverpassen.

http://ktskumar.wordpress.com/2008/03/01/silverlight-webpart-for-sharepoint/

Donnerstag, 3. Juli 2008

Visuelle Workflow Unterstützung

In einem aktuellen Projekt arbieten wir für die schon erwähnte Workflowunterstützung mit einem Tool einer australischen Firma Namens Nintex. Deren Website findet man hier.
Das Tool mit dem Namen Nintex Workflow 2007 bieten eine visuelle Oberfläche, mit der man in der Lage ist, relativ schnell auch komplexere Workflow abzubilden, in dem man vorgefertigte Actions per Drag and Drop an die entsprechende Stelle zieht.

Probleme treten dabei meist auf, wenn man tiefer in die Details der einzelnen Workflowschritte geht (dazu im Detail mehr an anderer Stelle), beispielsweise, wenn man:
  • Werte aus einem anderen Subweb braucht
  • Auf eine Änderung einer Entität in einer anderen Liste warten möchte
  • Workflows mit einer Solution deployen möchte
  • ...

Was aber sehr gut funktioniert ist der Support von Seiten Nintex, sie antworten sehr schnell und effektiv auf E-Mail Anfragen und sind auch in Telefonkonferenzen konstruktiv und sehr stark lösungsorientiert.

Trotz mancher Stolpersteine denke ich das es eine gute Wahl ist, mit NintexWorkflow 2007 zu arbeiten.

Copy & Paste zwischen Hyper-V-Images

Ich arbeite auf meinem Rechner neben SharePoint noch an anderen Projekten (z.B. Java Web, .net usw), die alle in eigenen technologieunabhängigen Images laufen. Ab und zu ist es nötig, Texte von einem Image zu einem anderen zu kopieren, z.B. lange URLs oder Logauszüge aus einem Image ins ICQ auf dem Hostrechner. Da ist es schon sehr ärgerlich, wenn das nicht funktioniert, weil Hyper-V es anscheinend nicht unterstützt.

Abhilfe schafft das klein Tool "BeyondCopy", welches man hier (http://beyondcopy.sourceforge.net/) herunterladen kann und einfach auf den beiden (oder mehreren) Rechnern installiert, auf denen man kopieren und einfügen möchte. Dann müssen dort noch die anderen Rechnernamen eingetragen werden, auf die man kopieren möchte und fertig ist die Laube.

SharePoint Einführung

Für alle, die schon immer einen schnellen Überblick über Kernfunktionalitäten von SharePoint haben wollten, kann ich das folgende Video empfehlen:



Leider ist die Qualität nicht so überzeugend, aber die Sprecherin stellt die Vorteile einzelener SharePoint Features sehr schön heraus.

Mittwoch, 2. Juli 2008

BDC-Felder und die Fehlermeldung HRESULT 0x80040e14

Eine Anforderung in unserem aktuellen Projekt ist es, in einer von uns erstellten Benutzerdefinierten Liste (Custom List) Business Data Catalog-Felder (BDC-Felder) anzubieten. Um sie in unsere Solution zu integrieren, sind wir bisher so vorgegangen:

  1. BDC-Feld der Liste manuell hinzufügen
  2. Liste mit Hilfe des Solution Generators extrahieren
  3. Felddefinition aus der extrahierten schema.xml übernehmen und in unsere vorhandenen .xml-Files einbinden:
  • eine s2sfields.xml, die sämtliche unserer verwendeten Website-Columns beinhaltet
  • eine s2stypes.xml, die unsere verwendeten ContentTypes beinhaltet und
  • die schema.xml, die unser Listentemplate beschreibt
Nachdem wir die Solution dann installiert hatten und einen Eintrag in der Liste vornehmen wollten, kam, nachdem wir das Formular abschickten, diese Fehlermeldung:

HRESULT: 0x80040e14

Nach einiger Verzweiflung und rumgegoogle haben wir uns dann das SharePoint-Log noch einmal genauer angesehen und sind dann auf diese Fehlermeldung gestoßen, die uns tatsächlich einmal weiter geholfen hat:

Unexpected query execution failure, error code 8143. Additional error information from SQL Server is included below. "Der '@nvarchar3'-Parameter wurde mehrmals bereitgestellt." Query text (if available): "SET NOCOUNT ON; DECLARE @ItemId int,@@iRet int,@ExtraItemSize int,@DN nvarchar(256),@LN nvarchar(128),@@S uniqueidentifier,@@DocUIVersion int,@@Level tinyint;SET @@S='91713DD8-88FA-448A-8596-67313E781F4F';SET @@Level=1;SET @@DocUIVersion = 512;BEGIN TRAN;SET @ItemId=NULL;SET @DN=N'websites/speed2sales/as1/Lists/BasicList';SET @LN=NULL;SELECT @ExtraItemSize = 0 EXEC @@iRet = proc_AddListItem @SiteId = '91713DD8-88FA-448A-8596-67313E781F4F',@WebId='0770642C-837D-4897-AF07-1B28D3F0C212',@ListID = 'F9870FF9-DA52-40F3-A77A-80D98A7F461B',@RowOrdinal = 0,@ItemDocType = 0,@ItemId = @ItemId OUTPU...
Unexpected ...T,@ItemDirName=@DN OUTPUT,@ItemLeafName=@LN OUTPUT,@UserID = 1,@TimeNow = '20080702 13:40:20',@ServerTemplate = 100,@Basetype= 0,@Level= 1,@tp_GUID ='03863A1B-2194-41FC-911F-D85A480DC4B8',@AddNamespace=1,@CheckDiskQuota=1, @tp_ContentTypeId = ?, @nvarchar29 = ?, @nvarchar32 = ?, @nvarchar33 = ?, @nvarchar34 = ?, @int1 = ?, @nvarchar2 = ?, @nvarchar28 = ?, @nvarchar3 = ?, @nvarchar4 = ?, @nvarchar5 = ?, @nvarchar6 = ?, @nvarchar3 = ?, @nvarchar4 = ?, @nvarchar5 = ?, @nvarchar6 = ?, @nvarchar7 = ?, @nvarchar8 = ?, @nvarchar9 = ?, @nvarchar10 = ?, @nvarchar11 = ?, @nvarchar12 = ?, @nvarchar13 = ?, @nvarchar14 = ?, @nvarchar15 = ?, @nvarchar16 = ?, @nvarchar17 = ?, @nvarchar18 = ?, @int2 = ?, @nvarchar35 = ?, @datetime1 = ?, @datetime2 = ?, @datetime3 = ?, @datetime4 = ?, @datetime5 = ?, @date...
Unexpected ...time6 = ?, @datetime7 = ?, @datetime8 = ?, @float1 = ?, @nvarchar36 = ?, @int3 = ?, @ntext2 = ?, @int4 = ?, @int5 = ?, @int6 = ?, @int7 = ?, @int8 = ?, @int9 = ?, @int10 = ?, @ntext3 = ?, @nvarchar37 = ?, @tp_ID = ?, @tp_ContentType = ?, @tp_Modified = ?, @tp_Created = ?, @tp_ModerationStatus = ?, @Size = 266, @ExtraItemSize = @ExtraItemSize ,@ItemName=N'UKSH',@acl=0xF3FE000001000000000000000C00000001000000001001083000000002000000FFFFFFFFFFFFFF7F0300000041104308B000000004000000FFFFFFFFFFFFFF7F0500000061104308B000000006000000EF12433CB001000007000000001001083000000008000000FF1B5F3CB001000009000000EF1BE77EF00100400A000000FF13433CB00100000B00000021100308300000000C0000000010010830000000; IF @@iRet <> 0 BEGIN ROLLBACK TRAN; GOTO DONE; END SELECT @ExtraItemSize = 0 EXEC @@iRet = proc_AddListItem...
Unexpected ... @SiteId = '91713DD8-88FA-448A-8596-67313E781F4F',@WebId='0770642C-837D-4897-AF07-1B28D3F0C212',@ListID = 'F9870FF9-DA52-40F3-A77A-80D98A7F461B',@RowOrdinal = 1,@ItemDocType = 0,@ItemId = @ItemId OUTPUT,@ItemDirName=@DN OUTPUT,@ItemLeafName=@LN OUTPUT,@UserID = 1,@TimeNow = '20080702 13:40:20',@ServerTemplate = 100,@Basetype= 0,@Level= 1,@tp_GUID ='03863A1B-2194-41FC-911F-D85A480DC4B8',@AddNamespace=1,@CheckDiskQuota=1, @datetime1 = ?, @Size = 0, @ExtraItemSize = @ExtraItemSize ,@ItemName=N'UKSH',@acl=0xF3FE000001000000000000000C00000001000000001001083000000002000000FFFFFFFFFFFFFF7F0300000041104308B000000004000000FFFFFFFFFFFFFF7F0500000061104308B000000006000000EF12433CB001000007000000001001083000000008000000FF1B5F3CB001000009000000EF1BE77EF00100400A000000FF13433CB00100000B00000021100308300...
Unexpected ...000000C0000000010010830000000; IF @@iRet <> 0 BEGIN ROLLBACK TRAN; GOTO DONE; END EXEC proc_ClearLinks @@S,@DN,@LN,@@Level,'6BA51930-9043-4ACC-8783-27C3FE29B6C8'; EXEC proc_ClearLinks @@S,@DN,@LN,@@Level,'15877298-3228-4D5B-A5A5-E45D53BCBC67';COMMIT TRAN; DONE: SELECT @@iRet, @ItemId "
Medium Unknown SPRequest error occurred. More information: 0x80040e14
An "nvarchar3" konnte ich mich erinnern, das taucht als Wert beim Attribut ColName in der extrahierten Felddefinition für das BDC-Feld auf:

Und da ging mir dann das Licht auf: wir hatten im Laufe der letzten Wochen öfter einige Änderungen an den BDC-Feldern vorgenommen, bzw. neue hinzugefügt, alte gelöscht usw.
Und natürlich nicht jedes mal alle Feld neu extrahiert sondern immer nur die veränderten.

Dadurch existierten dann im Code tatsächlich mehrere Definitionen unterschiedlicher BDC-Felder mit den Attributen ColName="nvarchar3".

Daraufhin änderten wir alle nvarcharXX-Einträge so ab, dass von oben nach unten nun die Zahlen in aufsteigender Reihenfolge vergeben wurden, also nvarchar1, nvarchar2, etc.

Et vóila: der Fehler war beseitigt! :-)

Darauf müssen wir aufpassen, wenn wir bei späteren Change Requests weitere BDC-Felder hinzufügen, verändern oder was auch immer.

Nachtrag: Wer lesen kann, ist klar im Vorteil: das WSS-SDK sagt zu ColName folgendes:

"Optional Text. An internal attribute that defines the mapping of the field to the physical storage name for this field. This must be a valid name in the underlying database and must be identical to the name used in the database table. If not specified, the server generates a column name that does not collide with any existing column names and that contains only characters that are allowed by Microsoft SQL Server."

Wenn wir dieses Attribut also komplett aus sämtlichen unserer Felddefinitionen entfernen, sollten wir weder jetzt noch bei zukünftigen Updates Probleme damit bekommen.

Workflowunterstützung Anspruch und Wirklichkeit

In vielen Projekten und gerade im SharePoint Umfeld trifft man auf die Anforderung, dass die Lösung auf jeden Fall „eine Workflowunterstützung“ haben muss. Das scheint bei Kunden dann das Gefühl auszulösen, dass damit alle Probleme, die Sie mit internen Prozessen haben gelöst würden. Dies ist auf Grund verschiedener betrieblicher Aspekte meist nicht der Fall.

  • Prozesse sind nicht genau definiert
  • Zeitdruck führt zu einer Abkehr von den normalen Abläufen
  • Verschiedene Mitarbeiter bearbeiten Prozessschritte in unterschiedlichen Reihenfolgen
  • Eine einheitliche Prozessdefinition ist nicht zu erreichen
  • Regelmäßige Änderungen an Prozessen
  • Verschiedene Produkte oder Aufgaben erfordern verschiedene Abläufe


All diese Aspekte führen dazu, dass eine optimale Workflowunterstützung für bestehende Prozesse beim Kunden schwierig ist.


SharePoint und verschiedene Drittanbieter bieten zwar mehr oder weniger elegante Lösungen zur Modellierung von Workflows (hierzu an andere Stelle mehr), allerdings erweist es sich meist, dass die Probleme nicht bei der technischen Modellierung sondern bei der Erarbeitung der Arbeitsabläufe und deren Implementierung auftreten.


Es kommt dann sehr schnell zu Problemen, falls Mitarbeiter ihre Arbeitsweise ändern müssen, oder bestehende Arbeitsweisen auf eine neue „SharePoint Denke“ umgestellt werden müssen. Dies erfordert von Seiten der Beratung und des Projektmanagement (sowohl auf Dienstleister- als auch auf Kundenseite) Fähigkeiten im Bereich Change Management, um Projekte nicht schon bei der Einführung an Widerständen bei den Nutzern scheitern zu lassen.

Montag, 30. Juni 2008

"How to build a SharePoint development machine"

Den Artikel hätten wir auch mal früher lesen können: *click*

Hier wird beschrieben, welche Voraussetzungen und Werkzeuge man benötigt, um SharePoint-Projekte umzusetzen, sowohl für Clients als auch für Server.

Probleme mit Entwicklung auf 64-Bit-Systemen

Obwohl Microsoft die Verbreitung ihrer 64-Bit-Betriebssysteme vorantreibt, mangelt es seitens der SharePoint-Werkzeuge an fehlender Unterstützung dafür.
Ich habe einen neuen Rechner vorgesetzt bekommen, auf dem ein Windows Server 2008 Enterprise läuft. Auf dem Gastsystem zur Entwicklung läuft eine Windows Server 2003 Enterprise x64-Version.
Zu früh gefreut ob der guten Ausnutzung meiner Hardware (Quadcore, 6 GB RAM, Hyper-V etc.): bereits beim Versuch, die "Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions" zu installieren, kam eine Fehlermeldung, dass keine 64-Bit-Betriebssysteme unterstützt werden. Mit ein wenig Hackerei der .msi-Datei (eine genaue Anleitung dazu steht hier in den Userkommentaren) gelang es mir dann doch, das Setup auszuführen.

Immerhin kann ich jetzt auf die erweiterten Projekttemplates im Visual Studio zugreifen.
Aber leider stürzt der Solution Generator bereits beim Start ab.

Ich denke, ich werde mir demnächst etwas Zeit verschaffen und auf einem weiteren Image ein 32-Bit-Windows installieren, damit ich alle Tools problemlos nutzen kann.

Nachtrag: Auch bei anderen - nicht SharePoint-bezogenen - Projekten macht sich bemerkbar, wieviele Anwendungen Probleme mit x64 haben, auch für diese Projekte bin ich zurück auf ein Image mit 32-Bit-Windows XP gegangen.