die suche wird bald besser
… scheint so, als würde einer meiner größten kritikpunkte - die suche - bald geschichte sein: microsoft wird wohl “fast” kaufen und die technologie in sharepoint integrieren! obwohl ich “fast” bisher nicht kannte, scheint es auf jeden fall ein absoluter gewinn zu sein…
ms macht mal wieder keine halben sachen und stürzt sich mit vollem einsatz auf das thema ![]()
bdc, powershell & c#
wie werden eigentlich die informationen aus dem bdc auf feld-ebene gespeichert? schauen wir uns das anhand eines beispieles an:
nehmen wir an, wir haben folgenden bdc:
application: QueryDemoData
entity: Demo_Entity_ID
systeminstance: Demo_LobSystemInstance
dieser bdc wird in einem blog bei den posts verwendet - und zwar in der column namens “DemoID”. primär wird das gleichnamige bdc feld “DemoID” angezeigt, weiters noch “field two”.
schauen wir uns nun einen post mit der powershell an - holen wir uns zuerst den post mit der id nummer 2:
$SiteName = “http://mosstest/”
$WebName = “/blog/”
$ListName = “Posts”
$mossSite = new-object Microsoft.SharePoint.SPSite($SiteName);
$mossWeb = $MossSite.AllWebs[$WebName];
$mossList = $MossWeb.Lists[$ListName];
$item = $mossList.GetItemById(2)
und schauen uns einmal an, welche felder dieses item zu bieten hat:
$item.Fields | format-table InternalName
neben vielen anderen sind für uns nur folgende wichtig:
DemoID
Demo_Entity_DemoID_ID
Demo_x003a__x0020_field_x002
und im ersten schritt das feld “DemoID”:
$field = $item.Fields.GetFieldByInternalName(”DemoID”)
dieses feld hat den typ “BusinessData”, was man auch mittels
$field.TypeAsString
kontrollieren kann. der primäre bdc feldname ist “DEMOID”, und auch die systeminstance und entity ist vorhanden:
$field.BdcFieldName
$field.SystemInstanceName
$field.EntityName
bleiben nur noch die zusätzlichen felder - hier “FIELDTWO” (der zugehörige wert wird nach dem query in dem feld “Demo_x003a__x0020_field_x002″ gespeichert):
$field.GetSecondaryFieldsNames()
und die kontrolle, ob es zugehörige actions gibt:
$field.HasActions
das fast wichtigste feld ist allerdings “Demo_Entity_DemoID_ID” - schauen wir uns den inhalt an:
$item.GetFormattedValue(”Demo_Entity_DemoID_ID”)
der inhalt ist z.b. “__bk43003600f600f600c6009700f6005700b600e600f600770036003200″ - es handelt sich um eine encodede version des in diesem post verwendeten identifier keywords; mir ist allerdings keine möglichkeit bekannt, wir man den string in der powershell decoden oder gar ein neues keyword (um über die powershell neue documente mit befülltem bdc erstellen zu können) encoden könnte…
dazu muss man c# bemühen:
folgende references einbinden:
- Microsoft.Office.Server
- Microsoft.Sharepoint
- Microsoft.Sharepoint.Portal
und dann brauchen wir:
using Microsoft.Office.Server.ApplicationRegistry.Administration;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;
und schon können wir encoden und decoden:
EntityInstanceIdEncoder.EncodeEntityInstanceId(new object[] { “coolyouknowc#” })
EntityInstanceIdEncoder.DecodeEntityInstanceId(”__bk43003600f600f600c6009700f6005700b600e600f600770036003200″ )
iisreset? iisapp.vbs reicht!
“viele änderungen benötigen einen iisreset um übernommen zu werden” - stimmt das?
nicht immer! meistens reicht es völlig aus, nur die application pools und nicht gleich den ganzen iis zu recyclen - und das geht so:
cscript.exe %windir%\system32\iisapp.vbs /a “your application pool” /r
der vorteil: das geht wesentlich schneller als ein iisreset, ist diesem also vorzuziehen!
Make a Comment ( None so far )To add an item to a document library, use SPFileCollection.Add()
will man mit der powershell in einer wiki ein dokument hinzufügen, so kann man dies nicht Microsoft.SharePoint.SPListItem Add() erledigen, weil es sich bei der wiki ja um eine document library handelt (die wiki seiten sind nichts anderes als aspx dokumente!) - daher schlägt folgendes fehl:
# vars
$SiteName = “http://mosstest/”
$WebName = “/Wiki/”
$ListName = “Wiki Pages”# connect to sharepoint and open the wiki list
$mossSite = new-object Microsoft.SharePoint.SPSite($SiteName);
$mossWeb = $MossSite.AllWebs[$WebName];
$mossList = $MossWeb.Lists[$ListName];“Got List…”
# try to add a new item
$item = $mossList.Items.Add()
$item.Update();Exception calling “Update” with “0″ argument(s): “To add an item to a document library, use SPFileCollection.Add()”
At line:1 char:13
+ $item.Update( <<<< );
die fehlermeldung ist eigentlich eindeutig; wie macht man es nun richtig? so:
# vars
$SiteName = “http://mosstest/”
$WebName = “/Wiki/”
$ListName = “Wiki Pages”# connect to sharepoint and open the wiki list
$mossSite = new-object Microsoft.SharePoint.SPSite($SiteName);
$mossWeb = $MossSite.AllWebs[$WebName];
$mossList = $MossWeb.Lists[$ListName];“Got List…”
# try to add a new item
[byte[]]$mydata = “hipslu was here”.ToCharArray(); # dummydata
$newFile = $mossList.RootFolder.Files.Add(”newwikientry.aspx”, $mydata);
allerdings wird in diesem beispiel natürlich keine richtige wiki seite erstellt - für einen ernsthafen einsatz muss die variable $mydata einen entsprechend sinnvollen inhalt haben (oder man kopiert den wiki eintrag von woanders her)
Make a Comment ( None so far )Powershell and MOSS 2007 - Vorbereitungen
um die powershell verwenden zu können, sind folgende vorbereitungen notwendig:
- download und installieren der powershell auf einem server, auf dem auch moss installiert ist
- öffnen der powershell und absetzen des folgenden befehls:
set-executionpolicy RemoteSigned
dies ist optional und bewirkt, dass lokale scripts nicht signiert sein müssen
- absetzen der beiden folgenden befehle:
[System.Reflection.Assembly]::Load(”Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”)
[System.Reflection.Assembly]::Load(”Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”)
der output sollte wie folgt aussehen:
GAC Version Location
— ——- ——–
True v2.0.50727 C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SharePoint\12.0.0.0__71e9bce111e9429c\Microsoft.SharePo…GAC Version Location
— ——- ——–
True v2.0.50727 C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SharePoint.Portal\12.0.0.0__71e9bce111e9429c\Microsoft….
… um das nicht jedes mal eingeben zu müssen, erstellt man unter “C:\Documents and Settings\username\My Documents\” ein neues verzeichnis names “WindowsPowerShell” und darin eine datei namens “Microsoft.PowerShell_profile.ps1″ - in diese datei fügt man nun diese beiden zeilen ein.
das war bereits alles! in den folgenden posts werde ich beispiele zeigen, was man nun mit der powershell so alles machen kann.
Make a Comment ( 1 so far )Exchange Server 2007 Component Architecture
eben gefunden:
Aside from showing the high-level architecture, this poster highlights the feature set of Exchange Server 2007. Sections include:
- Management and Monitoring
- High Availability
- Client Access, Edge Transport, Hub Transport, Mailbox, and Unified Messaging server roles
… also das ist wirklich eine feine sache! gibt es das auch für moss? gefunden hab ich es zumindest leider nicht
Make a Comment ( None so far )FileNet IS Certification
… leider nicht mehr wie geplant im alten jahr (weil die ibm seite mit einem gateway timeout streikte), dafür aber heute abgeschlossen:
ich persönlich halte nicht viel bis eigentlich nichts von solchen zertifizierungen, weil diese genau gar nichts über das können aussagen - ich kenne genug beispiele, da haben die leute mit zertifizierung traurigerweise genau gar keine ahnung ![]()
happy new year
… und wieder ein jahr geschafft! aber kann ein jahr, indem man 30 wird, ein gutes werden !?
Make a Comment ( None so far )traffic explosion durch image hotlinking
dieses bild hat es in sich:

warum? ich wurde vor kurzem von meinem hoster informiert, dass ich bereits 70% meines monatlichen traffic volumens von 50gb verbraucht habe und doch bitte aufpassen oder auf ein größeres volumen wechseln möge.
wtf?
also hab ich mir die logs mal näher angesehen, und schnell hat sich eine böse vorahnung bestätigt: das “frohe weihnachten” bildchen wird von anderen seiten direkt verwendet, und zwar nicht zu knapp: am 24.12 ging nur durch dieses bild knapp 14gb traffic drauf…
die “lösung” ist zum glück dank apache recht einfach - folgende zeilen in die .htaccess einfügen:
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?konfabulieren.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
und schon ist ruhe. eindeutiger nachteil: auch in den feed-readern erscheint somit momentan statt den bildern nur ein rotes x oder “403 forbidden”; mal sehen, ob ich es wieder entfernen werde.
bleibt also ein toller anstieg in der auswertung im dezember
frohe weihnachten…
frohe weihnachten - ich hoffe, das christkind hat alle eure wünsche brav erfüllt ![]()




