Donnerstag, 30. Juli 2009

Listeninstanzen - Cannot complete this action

Werden bei einer Solution ListInstances verwendet und sollen dann an speziell diese Listen CustomActions angehängt werden, empfiehlt es sich, anstelle der Standard-TemplateTypes (100, 101, etc..) eigene IDs ab 10000 zu verwenden.

Diese Änderung muss aber überall nachgezogen werden, sonst kommt es beim Erstellen der SiteCollection schnell zu der nichts sagenden Fehlermeldung "Cannot complete this action".



Die TemplateType-ID muss angepasst werden in
  • CustomAction
  • ListInstance
  • ListTemplate
  • Schema.xml

Donnerstag, 23. Juli 2009

verschwindendes WSPBuilder-Kontextmenü im Visual Studio

Ab und zu verschwindet nach dem Neustart des Visual Studios der Eintrag des WSPBuilders aus dem Projekt-Kontextmenü.



Den Grund dafür habe ich leider noch nicht gefunden. Abhilfe schafft hier aber folgender Prozess: Visual Studio schließen, WSPBuilder komplett deinstallieren und anschließend neuinstallatieren.
In den vorherigen Versionen war es dann noch nötig, die cablib.dll auszutauschen.
Seit der neuesten Version ist dies aber nicht mehr notwendig.

http://www.codeplex.com/wspbuilder

Mittwoch, 22. Juli 2009

Code-Debugging auf Tastendruck II

Um SPTimerJobs zu debuggen, muss sich zusätzlich an den OWSTIMER.EXE-Prozess angehängt werden.
Wie man das via Macro und ShortCut im Visual Studio bewerkstelligt, habe ich hier bereits einmal beschrieben.

Für den OWSTIMER gilt das gleiche Vorgehen; das Macro, welches den Debugprozess an w3wp.exe anhängt, kann bequem kopiert und leicht abgeändert werden:


' This subroutine attaches to owstimer.exe:
Sub AttachToOWSTIMER()
Dim attached As Boolean = False
Dim proc As EnvDTE.Process

For Each proc In DTE.Debugger.LocalProcesses
If (Right(proc.Name, 12) = "OWSTIMER.EXE") Then
proc.Attach()
attached = True
End If
Next

If attached = False Then
MsgBox("Couldn't find OWSTIMER.EXE")
End If

End Sub


In meinem Falle habe ich dann als ShortCut STRG+SHIFT+4 gewählt (STRG+SHIFT+3 hängt sich an w3wp.exe an), sodass ich dann die relevanten ShortCuts beinander habe.

Freitag, 17. Juli 2009

Erweitertes Debuggen

Oft stößt der SharePoint-Entwickler während seiner Arbeit auf solche Ärgernisse wie SharePoint-Fehlermeldungen á la "Unknown error" z.B. beim Erstellen einer SiteCollection mittels einer Solution. Wenn man dann noch richtig Glück hat, stehen in SharePoint-Log und EventViewer keine weiteren Details dazu, die Hilfe, die SharePoint hier von Haus aus bietet, ist in diesem Falle wertlos.

Hier empfiehlt es sich, ein paar zusätzliche Einstellungen im Visual Studio vorzunehmen, was den Erfassungsradius von auftretenden Exceptions wesentlich vergrößert und eine Hilfe sein kann, die Ursachen für eine Fehlermeldung wie die obige zu finden.

Zuerst wird unter Tools->Options->Debugging die Option "Enable Just My Code (Managed only)" deaktiviert. Dies weist den Debugger an, über den Tellerand des eigenen Codes zu schauen und auch andere Exceptions zu erfassen:




Als nächstes muss die Option "Common Language Runtime Exceptions" unter Debug->Exceptions aktiviert werden damit der Prozess auch weiß, bei welcher Art von Exceptions die Verarbeitung zusätzlich angehalten werden soll.



Damit sind die nötigen Vorbereitungen abgeschlossen. Nun wird sich an den w3wp-Prozess angehängt (wie man dafür einen VS-ShortCut anlegt, beschreibe ich hier) und wenn nun eine Exception auftritt, hat man, wie auf dem folgenden Bild zu sehen, die Möglichkeit, zusätzliche Informationen zur aktuellen Situation abzufragen:




Wer noch tiefer in das Thema "verbesserte Debugging-Möglichkeiten" einsteigen möchte, dem empfehle ich diese Seite, die das obige Vorgehen ebenfalls erläutert und noch weiter in die Materie eindringt: http://blog.thekid.me.uk/archive/2007/07/25/debugging-tips-for-sharepoint-and-wss-exceptions.aspx

Montag, 22. Juni 2009

Prüfung bestanden: TS: Microsoft Windows SharePoint Services 3.0 - Application Development (070-541)

Heute vormittag habe ich die Zertifizierung zu TS: Microsoft Windows SharePoint Services 3.0 - Application Development (070-541) bestanden. Hurray!

Die Fragen waren aber auch recht knackig, mein lieber Mann.

Diese Website von Microsoft (http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-541&locale=en-us#tab2) listet das doch recht umfangreiche Themengebiet der 59 Fragen auf. Auf dem dritten Tab findet sich einiges verlinktes Material zum Inhalt der Fragen.
Und auch das Buch "Inside Microsoft® Windows® SharePoint® Services 3.0" deckt schon 60% des nötigen Vorwissens ab und kann ich sehr empfehlen: *click*

Freitag, 19. Juni 2009

Code-Debugging auf Tastendruck

Nach längerer Zeit habe ich endlich wieder einen Moment Ruhe, einen Eintrag zu schreiben.

Heute möchte ich erklären, wie man sich das Debuggen von im SharePoint-Kontext laufendem Code während des Entwickelns extrem vereinfachen kann:

Normalerweise muss man sich einfach an den laufenden w3wp-Prozess anhängen (Visual Studio -> Debug -> Attach to Process -> w3wp.exe(n) auswählen). Das ist nicht besonders schlimm, wird aber zu extrem nerviger Klickerei, wenn man zwischendurch mehrfach einen IISRESET ausführt und die Verbindung zum Prozess verloren geht.

Abhilfe schafft da ein kleines Macro im Visual Studio welches dann mittels Shortcut aktiviert werden kann.

Zu erst wird der Macro Explorer ausgewählt:



Über das Kontextmenü des VSDebuggers legt man ein neues Macro an:



Dadurch wurde VSDebugger ein neues Macro namens Macro1 hinzugefügt:



Dieser Code-Rumpf wird ersetzt durch den folgenden Code:


' This subroutine attaches to w3wp.exe:
Sub AttachToW3WP()
Dim attached As Boolean = False
Dim proc As EnvDTE.Process

For Each proc In DTE.Debugger.LocalProcesses
If (Right(proc.Name, 8) = "w3wp.exe") Then
proc.Attach()
attached = True
End If
Next

If attached = False Then
MsgBox("Couldn't find w3wp.exe")
End If

End Sub


Wird nun abgespeichert, sieht man im Macro-Explorer das neue Macro:



Damit ist das Macro einsatzbereit. Zu guter Letzt legen wir einen Shortcut in den Visual-Studio-Optionen (Tools-> Options) an um dessen Ausführung zu starten.



1) Unter Environment->Keyboard suchen wir zuerst nach dem Macronamen "attachtow3wp".
2) In der Auswahl erscheint nun unser neues Macro das angeklickt wird.
3) Der neue Shortcut wird dann in dem Feld "Press shortcut keys" gedrückt. Ich persönlich bevorzuge STRG+SHIFT+3 aber das kann jeder frei wählen.
4) Mittels des "Assign"-Buttons wird der Shortcut zugewiesen und als letztes
5) via OK global aktiviert.

Damit funktioniert STRG+SHIFT+3 jederzeit sobald der w3wp-Prozess verfügbar ist. Direkt nach einem IISRESET ist der w3wp-Prozess nicht verfügbar sondern erst, sobald man z.B. einmal die SiteCollection im Browser aufgerufen hat.

Dienstag, 26. Mai 2009

Zentraladministration über Objektmodell anzapfen

Mithilfe dieses Einzeilers kann bequem auf die Zentraladministration zugegriffen werden:

SPWebApplication webApplication = SPAdministrationWebApplication.Local


Dies ist z.B. sinnvoll um die geblockten Dateiendungen auszulesen:

SPWebApplication centralAdministraion = SPAdministrationWebApplication.Local;
Collection BlockedFileExtensions = centralAdministraion.BlockedFileExtensions;