Friday, December 7, 2007
Shortcut to stsadm.exe
As you maybe already know... There are 184 SharePoint operations that can be performed with STSADM. Ian Morrish created a SharePoint list for all the commands and options that group them by functional area: STSADM commands.
Google Maps and MOSS integration
Take a look at the HowTo: Create Google Map WebPart
Thursday, November 29, 2007
How to: Create Search Scopes in MOSS 2007 Enterprise Search
If you're looking for some more video tutorials about enterprise search... surf to Msn and use the search engine.
Wednesday, November 21, 2007
Coding against the SharePoint Object Model (Some useful code snippets)
Delete all items in a document library:
----------------------------------------------------
using (SPSite sitecollection = new SPSite("http://..."))
{
using (SPWeb web = sitecollection.OpenWeb())
{
SPList myList = web.Lists["Document library"];
int amountOfFiles = myList.Items.Count;
for (int i = amountOfFiles - 1; i >= 0; i--)
{
//Delete Document Library item
web.AllowUnsafeUpdates = true;
myList.Items.Delete(i);
web.AllowUnsafeUpdates = false;
}
}
}
Uploading a file to a document library:
----------------------------------------------------
using (SPSite sitecollection = new SPSite("http://..."))
{
using (SPWeb web = sitecollection.OpenWeb())
{
SPFolder docFolder = web.GetFolder("document library");
FileStream fStream = File.OpenRead(urlOfDocumentOnServer);
Byte[] ContentsContents = new byte[Convert.ToInt32(fStream.Length)];
fStream.Read(Contents, 0, Convert.ToInt32(fStream.Length)); }
web.AllowUnsafeUpdates = true;
docFolder.Files.Add(filename, Contents);
web.AllowUnsafeUpdates = false;
}
}
Add a Contenttype to a ListItem:
---------------------------------------------
using (SPSite sitecollection = new SPSite("http://..."))
{
using (SPWeb web = sitecollection.OpenWeb())
{
SPList list = web.Lists["document library"];
SPContentTypeCollection ctcollection = list.ContentTypes;
SPContentType contenttype = ctcollection[itemcontenttype];
SPListItem item = list.Items[0];
item["ContentTypeId"] = contenttype.Id;
web.AllowUnsafeUpdates = true;
item.Update();
web.AllowUnsafeUpdates = false;
}
}
Add an Eventhandler on a SharePoint list:
--------------------------------------------------
SPList list = web.Lists["List"];
SPEventReceiverType type = SPEventReceiverType.ItemAdded;
string assembly = "";
string className = "";
list.EventReceivers.Add(type, assembly, className);
list.Update();
Delete an EventHandler from a SharePoint list:
-------------------------------------------------
Guid guid = ...;
list.EventReceivers[guid].Delete();
Start a workflow on an item
-------------------------------------
Guid wfBaseId = new Guid("{6BE0ED92-BB12-4F8F-9687-E12DC927E4AD}");
SPSite site = ...;
SPWeb web = site.OpenWeb();
SPList list = web.Lists["listname"];
SPListItem item = list.Items[0];
SPWorkflowAssociation associationTemplate= list.WorkflowAssociations.GetAssociationByBaseID(wfBaseId);
site.WorkflowManager.StartWorkflow(item, associationTemplate, "");
Note: the workflow base ID can be found in the workflow.xml in the feature folder
Source: Steven Van de Craen
Detect an item published in ItemUpdating eventReceiver
How (not) to complete workflow tasks using code in WSS3
Modifying SharePoint Workflow Task Programmatically Problem
How to create MySite Programmatically
Add users of an AD Group to the SharePoint Site
Monday, November 19, 2007
Using Custom XML islands together with Content Controls
w:dataBinding w:prefixMappings="" w:xpath="/myXml/dataRow/dataField" w:storeItemID="{CFD5333D-3117-4F96-8B72-CC1D814E0755}"
If you want to fill the custom xml dynamically - try the following:
using (Package p = Package.Open(generatedPath, FileMode.Open, FileAccess.ReadWrite))
{
// Now we can get the path to our custom XML in the template
Uri partUri = new Uri("/customXml/item1.xml", UriKind.Relative);
PackagePart part = p.GetPart(partUri);
// Overwrite existing part, therefore open with FileMode.Create
using (Stream s = part.GetStream(FileMode.Create))
{
// Now use the XmlSerialize to write back the content
XmlSerializer serializer = new XmlSerializer(typeof(Employee));
serializer.Serialize(s, employee);
}
// Flush memory-content back to the package
p.Flush();
Just navigate to MzCool if you need an explanation of the whole context...
Thursday, November 15, 2007
Xperimenting with OpenXML
Word 2007 Content Control Toolkit
This light-weight tool can open any word open xml
document and lists all content controls and available XML parts. It also enables mapping between content controls and custom XML. This all by using the System.IO.Packaging library available in .NET 3.0.
Package Explorer
This tool let you look inside a Open XML package, edit XML parts,...
[Thx to Maarten, who recommended me to made use of these]
If you need a lot of information about OpenXML - Download this great book (Open XML: The Markup explained)
Thursday, November 8, 2007
Silverlight MSDN event
Thursday, October 25, 2007
SharePoint vs Developer
A SharePoint song related to the story:
Tuesday, October 23, 2007
Style the AutoCompleteExtender
- Link the textbox with the 'ms-long' class. This CSS class provides the style for the list item metadata fields within SharePoint.
- Make a Div element that refers to the 'ms-long' class.
First we need to style the textbox:
Then style the AutoCompleteExtender dropdownlist:
- Make a Div element just above the AutoCompleteExtenderTag:
- Set the AutoCompleteExtender property [CompletionListElementID]:
Result:
Monday, October 22, 2007
Use ASP.NET AJAX framework with WSS 3.0
First I was afraid to begin with this task because of the rumors about the ASP.NET AJAX integration with Office SharePoint Server 2007 and Windows SharePoint Services 3.0 . After all, it turned out better than I expected.
What do we want to achieve:
I think it's unnecessary to write down an how-to. I made use of the following URL's to accomplish it.
- Create an AutoComplete WebPart
This article let you understand how to link a textbox & a webservice with the AutoComplete extender. Note: The webservice is necessary to retrieve the data. - ASP.Net 2.0 AJAX Extensions and the ASP.Net 2.0 AJAX Control Toolkit
- Very important links to do a make-over of the web.config: Ajax ready
if the link above doesn't work - take a look at Wss site configuration - If you don't know how to make a Custom Field Type - Here's an example
The code beneath shows how to define the ascx control [Defines a SharePoint:RenderingTemplate element whichs tells SharePoint how to render your control].
Missing attributes in the AutoCompleteExtender tag:
ServicePath=http://moss/_layouts/WebService/WebService.asmx
ServiceMethod="GetEmployees" MinimumPrefixLength="1"
Chinese? Watch this video: How do I use the ASP.NET AJAX AutoComplete control?
So that's it... Questions / Comments? Feel free!
Saturday, October 20, 2007
How to remove a bad webpart from a page?
Resolution:
Append ?Contents=1 to the webpart page's URL to display the Webpart Maintenance Page. On that page you can delete the malefactor.
Example: http://moss/default.aspx?contents=1
Wednesday, October 17, 2007
SharePoint 2007 Development: Interactive Training Course DVD
This DVD looks great!...
How to make a basic workflow?
ow... I almost forget to say that there's also a next tutorial (making an initiation form on the DiceGame)
Have fun!
Tuesday, October 16, 2007
Custom Timer Job
If you don't know how to make a CTJ? Take a look at: Example of a Custom Timer Job
How to debug a Custom Timer Job?
After installing and activating the CTJ - Feature
(Make sure that the code in the execute() method runs every minute. It takes less time to debug)
- Set a breakpoint somewhere in your code.
- Click 'Debug' in the toolbar (Visual Studio 2005)
- Click 'Attach to process'
- Select 'OWSTimer.exe'
- Everytime the code is being executed, the debugger starts working.
- Now you can enjoy 'debugging'
How to access the web.config within a Custom Timer Job?
Configuration config =
WebConfigurationManager.OpenWebConfiguration("/", "Sharepoint - 80");
string value = config.AppSettings.Settings["keyName"].value;
Hope , these tips save some developer time :)
Monday, October 15, 2007
LDAP attributes
Getting accountnames from UserProfile Database
using (SPSite site = new SPSite(http://servername/))
{
ServerContext context = ServerContext.GetContext(site);
UserProfileManager profileManager = new UserProfileManager(context);
foreach (UserProfile profile in profileManager)
{
Console.WriteLine(profile[PropertyConstants.AccountName]);
}
}
Thursday, September 20, 2007
Royal Straight Flush
[Royal Straight Flush gemaakt 2 min na het openen van mijn SharePoint Blog :) ]
Sunday, September 16, 2007
Junior Software Engineer (.NET)
Tot schrijfs,
Sven
Wednesday, June 6, 2007
SharePoint List Extension
Op Teun.ToString() website zijn er vele andere mensen die hiermee problemen hebben. Als iemand een oplossing weet, laat het me weten! ;)
Pass parameters to InfoPath Form
- Access SharePoint webservices to retreive the data (UserProfile.asmx)
- Write some code behind the InfoPath Form (as exposed below)
- By using Contact Selector ActiveX control
InfoPath codebehind method:
In the Loading event of the form template, we have to catch the parameters with the TryGetValue method.
public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
string Naam = string.Empty;
try
{
e.InputParameters.TryGetValue("naampje", out Naam);
}
catch (Exception ex)
{
Naam = ex.Message.ToString();
}
finally
{
MainDataSource.CreateNavigator().SelectSingleNode
("/my:myFields/my:voornaam", NamespaceManager).SetValue(Naam);
}
}
Afterwards, you can pass a parameter through the URL. Add a querystring at the back of the URL eg. &naampje=kieseennaam
Monday, June 4, 2007
Calculated Columns (Part 2)
De oplossing vindt je op Jopx terug.
Sunday, June 3, 2007
Thank message after a submitted InfoPath Form
Tuesday, May 29, 2007
Content type definiƫren op SPWeb niveau
Poging 1:
Scope van de feature op Web geplaatst.
Bij het installeren van de feature krijgt men dan een geweldige error: Elements of type 'ContentType' are not supported at the 'Web' Scope. This feature could not be installed
Een hopeloze poging 2:
gebruik maken van het Object Model.
//Id van het contenttype feature; site = SPWeb object
System.Guid guid = new System.Guid("56615608-9e3d-4ff6-b2c6-90e070e45ff1");
site.Features.Add(guid);
Deze poging was vanzelfsprekend dat dit niet ging werken omdat het eerst nodig is de feature te installeren (Dit is onmogelijk op Webniveau).
error: Feature '56615608-9e3d-4ff6-b2c6-90e070e45ff1' is Site-scoped, and can not be added to the Web.
Op deze pagina kan men alvast zien dat het element type content type behoord tot de scope 'Site'
Poging 3:
Een mogelijke Workaround:
Maak een content type aan via het Sharepoint Object Model en prop deze code in een Feature_Activated methode. Bij het installeren van de feature zal er een content type aangemaakt worden op SPWebniveau en niet op SiteCollection niveau.
Dit is een mogelijke oplossing :) Hoewel ik denk dat dit de enige oplossing is.
Wednesday, May 23, 2007
Enesys Rs Data Extension
Enesys Data Extension Reporting Services is a data extension for Microsoft SQL Reporting Services that makes it possible to create reports using data in SharePoint lists.
Een eenvoudig rapportje maken is ondertussen al gelukt. Nu zou ik alleen willen dat dit wordt weergegeven in een ReportViewerWebpart. Dit lijkt absoluut geen gemakkelijke opdracht want hiervoor is het noodzakelijk dat er een Report Server & een Reporting Service Add-in wordt geĆÆnstalleerd. De Add-in zorgde voor weinig problemen. De Report Server configureren daarentegen, liep niet van een leie dakje. Wat er ontbrak ... SQL server 2005 Service pack 2: deze voorziet integratie met SharePoint. Ook het starten van de Report Server Windows Service bleek een probleem. Deze Service staat bij het opstarten op "disabled" en moet dus bij Administration Tools > services aangezet worden.
Nu alles opgezet is , kunnen we het rapportje deployen naar de server. Daarna kunnen we het RDL bestand weergeven in de ReportViewerWebpart. Dit blijkt nog niet te werken...
An error has occurred during report processing.Cannot create a
connection to data source 'MOSS'.Request for the permission of type
'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
Tuesday, May 22, 2007
Calculated Columns
Wat ik ondertussen al te weten ben gekomen:
Het is mogelijk om een calculated field toe te voegen aan de schema.xml van een list definition. Na het installeren/activeren van de List Feature & aanmaken van een nieuw custom list definition zal men zien dat er een extra column van het type calculated (=DeadLine) wordt toegevoegd. Het enige wat we nog moeten doen is een column 'StartDate' aanmaken via de UI (men zou dit ook via schema.xml kunnen doen). Maak nu een nieuw item aan en men zal zien dat de column DeadLine een datum weergeeft die 7 dagen later is dan de waarde van StartDate.
Het eigenaardige is dat het op het eerste zicht niet wil lukken als men de calculated column als een site column definieert... Spooky!
Tuesday, May 15, 2007
Locale wijzigen in Regional Settings
Feature Stapling allows you to “staple” a Feature to a site definition without
modifying it in any way. This means you can add your feature to all sites
created using that site definition.
Monday, May 14, 2007
Ontolica for MOSS 2007 RTM
- Eenvoudige toevoegen van Search Tabs
- Drill-Down properties: een mogelijkheid om een zoekopdracht te verfijnen
- Search-Results actions: creƫert een dropdownlist op elk item in de search result
- Quick Filters: Dit vindt ik persoonlijk een nice-to-have! Deze koppelen een expressie aan de zoekopdrachten. Bij het aanklikken van de radiobutton/checkbox vindt er automatisch een PageReload plaats.
- Sorting Properties: Deze geven de user de mogelijkheid om te sorteren op een bepaalde propertie. Standaard worden items gesorteerd op 'Relevance' / 'Date'. In een paar kliks kun je sorteren op Author!
- Search Syntax: verbeterde boolean operators, property search, wildcard search, ... vb. Created = today; ik heb wel opgemerkt dat de Size property niet degelijk werkt. bv. Size<50>
- Search Box scope: Men kan eenvoudig de default scopes wijzigen of nieuwe scopes aanmaken.
Er zijn nog 101 verbeteringen op te noemen. Kortom, deze tool is een echte aanrader! Enkel de kostprijs valt een beetje tegen :-)
Screenshot
Friday, May 11, 2007
Workflow verwijderen via code
Monday, May 7, 2007
Taxonomie & Folksonomie
Ik heb geƫxperimenteerd met de Taxonomy/Tagging StartersKit voor MOSS.
Ervaring:
- Positief:
- Kan zeer handig zijn om content te classificeren
- Customized Taxonomy CQWebPart werkt goed in combinatie met preference.aspx
- Eenvoudig te installeren (indien je de publishing feature niet vergeet op te zetten) - Negatief:
- Omslachtig gebruik voor de tags in te stellen
- Werkt standaard enkel op Pages en niet op Documents
- Niet gebruiksvriendelijk om meerdere niveau's (Taxonomieƫn) te implementeren
Poging om te doen werken op Documents:
Na het toevoegen van wat code aan het bronbestand TaxonomieFeature.cs en een kleine instelling aan de Taxonomie Webpart is het mogelijk om ook documenten een tag mee te geven en de Taxonomiewebpart hierop te laten filteren.
Sunday, May 6, 2007
LinkTitle field aanpassen van een Custom List
Thursday, May 3, 2007
UserProfile property updaten
Monday, April 30, 2007
Custom List Definition with Business Data Column
Friday, April 27, 2007
Taken weergeven in CQWebPart
Thursday, April 26, 2007
MediaPlayer WebPart in MOSS 2007
Wednesday, April 25, 2007
Business Data Catalog (BDC) Completed
Monday, April 23, 2007
Business Data Catalog (BDC) Deel 2
Thursday, April 19, 2007
Business Data Catalog (BDC)
Mijn opdracht bestaat uit het schrijven van een BDC XML application file die de data ophaald uit de AdventureWorks Database via een webservice tussenlaag.
FBA users & MySites
Wednesday, April 18, 2007
Form Based Authentication (FBA)
Het Nieuwsblad (bedrijf) die vele freelancers ter beschikking heeft. Het zou handig zijn dat deze freelancers gebruik zouden kunnen maken van de SharePoint omgeving zonder deze te hoeven toegevoegen aan de Active Directory (Deze werken toch meestal voor een korte periode voor het bedrijf). Daarom is het de bedoeling dat we deze users in een aparte Membership database bewaren.
Done:
- Een FBA user & role store aangemaakt (Database creatie)
- SharePoint Setup gedaan
- SharePoint Custom Forms Authentication Feature geĆÆnstalleerd & geĆ«xperimenteerd
Monday, April 16, 2007
Exporteren van content
Wednesday, March 28, 2007
WCM - Experimenteren met Variations
- Server Language packs geĆÆnstalleerd (Nederlands & Frans)
- Variation labels aangemaakt (Source label = English)
- Beschrijving van de voordelen van het automatisch aanmaken van pagina's in een variation
- Variation Label menu werkt
- Beschrijving gegeven van translatable columns
- Translation management library (& bijhorende workflow) uitgedokterd
- Aanpassing gemaakt aan de VariationsRootLanding: redirecten werkt!
Het werkje is geschreven.
Monday, March 26, 2007
Folder aanmaken in Discussion Board
Het lab is geschreven!
Friday, March 23, 2007
Een topic maken in discussion board via code
Discussion Board
Folder > topics > topic > items
De bedoeling van dit is om ervoor te zorgen dat men gerelateerde topics onder een zelfde folder kan brengen.
Mogelijke oplossing !new tag
Thursday, March 22, 2007
Customizing the Content Query Web Part XSL
hier alvast een intressant artikel over dit onderwerp: msdn whitepaper
Wednesday, March 21, 2007
New! Tag
Update:
De Content Query en List zijn aangemaakt en de verbinding ertussen is gelegd. De icoontjes zijn er ook al aan toegevoegd.
Resultaat:
Nu komt het moeilijkste stuk: Er voor zorgen dat deze New! icoontjes pas vervallen na 7 dagen ipv na 3 dagen.
Momenteel naar op zoek...
Friday, March 16, 2007
IP forms vs Aspx forms
Om mijn frustratie wat te koelen heb ik een inleiding geschreven in het gebruik van forms & workflows.
Tuesday, March 13, 2007
Workflow & ASPX Forms (Vervolg)
- Aspx controls zijn aangemaakt
- Workflow template is gedefinieerd
Indien men een workflow wil koppelen aan een document library bv. Shared Documents, krijgt men al een aspx form (Association Form) te zien. De aspx form wordt opgeroepen doordat de WSS de 'associationURL' nagaat.
De Association Form bevat een submit button. Nadat men op de submit knop gedrukt heeft zou hij in feite de associatie moeten maken met de library. Hierover later meer...
Monday, March 12, 2007
Workflow & ASPX Forms
Update: Het is ondertussen gelukt om een workflow te bouwen.
Wednesday, March 7, 2007
Site Template vs Site Definition
Cursus Sharepoint 2007
- Installeren en configureren van een WSS v3.0 applicatie
- Introductie in webparts: gebruik van ASP.NET controls, Communicatie tussen webparts, gebruik van het Sharepoint Object Model
- Vertrouwd geraken met de nieuwe MOSS 2007 interface
- Content-types
- Events
- ...