Afgelopen vrijdag was het mijn beurt om ook eens naar de DevDays te gaan. Ik had mezelf redelijk goed voorbereid door al een paar weken vantevoren de sessies op te schrijven waar ik heen wilde gaan. De sessies die mij het meest interessant leken waren: 1. Data protection with .NET Framework 3.5 and Cryptography Next Generation (Rafal Lukawiecki) 2. Is LINQ your data access layer? (Anko Duizer) 3. Understanding ADO .NET data services (Mike Taulty) 4. More intelligent applications using data mining (Rafal Lukawiecki) 5. Leveraging C#3.0 and LINQ (Best practice) (Krishnan Subramanian) De ene sessie leek me wel leuker als de andere, maar dat blijf je toch houden. Gelukkig stonden er afgelopen vrijdag nagenoeg geen files richting Amsterdam RAI, dus was ik nog net op tijd om de eerste sessie te volgen. Rafal begon hier eerst met een ‘basis’ van cryptografie. Voor m’n MCTS examen heb ik hier ook het een en ander voor moeten leren, dus de basis begreep ik redelijk goed. Hij had het over wat momenteel de meest veilige manier was om je applicatie te beveiligen, bijvoorbeeld met smart cards. Ook noemde hij nog de twee functies ProtectData en ProtectMemory die je zeker moet kennen als je heel eenvoudig stukken code van je applicatie wilt beveiligen. Deze twee functies zijn beschikbaar vanaf versie 2.0 van het .Net Framework. Vanaf versie 3.5 van het .Net Framework zijn er echter veel betere encryptie methoden beschikbaar. Verder kwam er nog een lijstje met methoden die je nu nog wel en niet meer mag gebruiken voor encryptie.
Read more →Al een redelijke tijd terug heb ik op Codeplex wel eens LINQ to Sharepoint voorbij zien komen. ‘Leuk’ dacht ik toen, een LINQ implementatie voor Sharepoint. De laatste tijd kwam ik echter steeds vaker de term LINQ4SP tegen. Vreemd vond ik dat wel, aangezien de rest allemaal L2… is, beginnen ze nu ineens met een 4 in de naam. Toch maar even kijken dus. Wat blijkt, een bedrijfje is zelf bezig met een ‘betere’ implementatie van L2SP en heeft het LINQ4SP genoemd. Gezien de extentie ‘.hu’ van het domein denk ik dat ze uit Hongarije of zo komen. Momenteel verkeert het project nog in beta fase, maar het ziet er wel veelbelovend uit. Alles wat in L2SP kan, zal ook in L4SP kunnen en nog veel meer. Of het allemaal echt zo geweldig is zal moeten blijken. Zodra ik thuis zelf een Sharepoint test server heb staan kan ik het wel even uitproberen. Op het werk zal ik dit maar niet doen. L4SP zal een commercieel product worden, zodra het uit beta is. De beta testers zullen wel worden beloond als ze tot aanschaf overgaan, toch wel aardig. Dit is trouwens de link naar de pagina waar het gedownload kan worden: https://www.sharepointblogs.com/aghy/archive/2008/05/22/linq4sp-beta1-is-here.aspx
Ook zijn de release notes hier te vinden.
Read more →Tijdens het surfen en lezen van RSS posts kwam ik een interessant artikel tegen over het migreren van data tussen een eigen (third-party) CMS naar Sharepoint. Blijkbaar hoeft dit helemaal niet zo moeilijk te zijn, zo laat Pranab Paul zien.
Je kunt gewoon een web part maken met een knop en daar de migratie code onder plaatsen. Het code snippet hieronder is een ordinaire copy-paste van Pranab Paul z’n weblog, dat hij hier heeft gepost: https://blogs.msdn.com/pranab/archive/2008/05/20/moss-2007-migrating-content-from-3rd-party-content-management-solution-to-moss-publishing-collaboration-portal.aspx
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Publishing;
using System.Data;
using System.Data.SqlClient;
namespace WPContentCreator
{
[Guid("b771c700-889b-4cc1-bd36-fe4abac02183")]
public class WPContentCreator : System.Web.UI.WebControls.WebParts.WebPart
{
Button myBtn;
string SqlQuery = "Select contentid,title,contentbody,contentdate,author from dbo.ContentTable";
public WPContentCreator()
{
}
protected override void CreateChildControls()
{
myBtn = new Button();
myBtn.Text = "Submit";
myBtn.Click += new EventHandler(myBtn_Click);
Controls.Add(myBtn);
}
protected override void Render(HtmlTextWriter writer)
{
myBtn.RenderControl(writer);
}
void myBtn_Click(object sender, EventArgs e)
{
SPSite site = SPContext.Current.Site;
SPWeb web = site.OpenWeb();
PublishingSite publishingSite = new PublishingSite(site);
PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
SPContentTypeId articleContentTypeID = new SPContentTypeId("0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D0091053586ECA36C43BD6FD6B1B28A2071");
PageLayout[] layouts = publishingWeb.GetAvailablePageLayouts(articleContentTypeID);
PageLayout articlePageLayout = layouts[0];
SqlConnection newSqlConnection = new SqlConnection();
SqlCommand newSqlCommand = new SqlCommand(this.SqlQuery, newSqlConnection);
newSqlCommand.CommandType = System.Data.CommandType.Text;
newSqlConnection.ConnectionString = "Integrated Security=True; Initial Catalog = test; Data Source = pranab - sec";
newSqlConnection.Open();
IDataReader rdr = newSqlCommand.ExecuteReader();
bool more;
int results = 0;
do
{
results++;
while (rdr.Read())
{
string pageName = rdr[0].ToString();
PublishingPage newPage = publishingWeb.GetPublishingPages().Add(string.Format("{0}_article_{1}.aspx", pageName, results), articlePageLayout);
newPage.Title = rdr[1].ToString();
newPage.ListItem["Page Content"] = rdr[2].ToString();
newPage.ListItem["Article Date"] = DateTime.Parse(rdr[3].ToString());
newPage.ListItem["Byline"] = rdr[4].ToString();
newPage.Update();
newPage.CheckIn("");
}
more = rdr.NextResult();
} while (more);
newSqlConnection.Close();
}
}
}
Ja, de opmaak van mijn code is niet zo mooi als die van hem, maar het idee mag duidelijk zijn. Toch handig, want ik denk dat het steeds vaker voor zal komen dat Sharepoint een reeds bestaande omgeving moet gaan vervangen.
Read more →Vandaag kwam ik toevallig terecht op het weblog van Michael Greth. Hij heeft namelijk een lijst gemaakt met handige en nuttige add-ons/web parts voor Sharepoint. In de lijst staan onder andere add-ons voor het plaatsen van tag clouds, betere wiki’s, facebook extenties, een social netwerk installeren, een Xobni plug-in en nog veel meer. Uiteraard kan ik zijn hele post kopieren en hier neer zetten, maar het is makkelijker om gewoon even een link te plaatsen, de link is https://weblogs.mysharepoint.de/mgreth/archive/2008/05/22/ultimatelistsharepointenterprise20.aspx
Of ik me ga abonneren op z’n RSS feeds, dat denk ik (nog) niet. Momenteel heb ik daar wel genoeg van, maar het kan misschien geen kwaad om zo nu en dan even op z’n website te kijken.
Read more →Sinds kort ben ik me ook een beetje aan het verdiepen in Sharepoint (MOSS en WSS), dit moet ook wel, omdat we op het werk hier veel mee te maken hebben.
Vandaag was ik bezig om een kleine testsite in elkaar te zetten met wat CMS functionaliteit. Dit lukte redelijk toen ik eenmaal het juiste template had gevonden en de site had klaar gezet. Nadat ik dat had gedaan wilde ik graag inhoud wijzigen en plaatsen op de website.
De inhoud wijzigen was niet zo’n groot probleem, maar het plaatsen gaf een foutmeling. De foutmelding die ik kreeg te zien was
An unexpected error has occured
maar dan in het Nederlands, omdat ik met een Nederlands-talige MOSS installatie bezig was.
Het was iets als Een onbekende fout is opgetreden of iets in die richting. Daar kun je natuurlijk niet zoveel mee. Ook kon ik geen log terug vinden met de exacte foutmelding. Vervelende was ook dat gelijk de hele portal het niet meer deed en ik de browser opnieuw moest opstarten om de portal weer te kunnen zien.
Als ontwikkelaar zie ik graag altijd gedetailleerde foutmeldingen, vandaar dat ik op zoek ben gegaan hoe ik die kon krijgen te zien. Wat blijkt, je kunt dit gewoon in de web.config van website doen. Open het betreffende web.config bestand en wijzig de volgende regels. Ten eerste moet worden vertaald naar En de custom errors moeten ook uitgeschakeld worden Nadat je dit hebt gedaan krijg je de juiste foutmelding te zien. De foutmelding die ik kreeg ging over de connectiestring naar de database. Het was iets als
Read more →In de data access laag van m’n projecten werd het nu toch wel een drukke boel met verschillende LINQ to SQL queries. Aangezien je namelijk niet goed dynamische LINQ-queries kunt maken, moet je eigenlijk voor iedere ‘uitzondering’ een aparte query maken. Je krijgt dan zoiets als dit:
if (criteria.PeriodeVan != null && criteria.PeriodeTot != null)
{
var query = (from post in dataContext.GetTable()
where post.Item.CreatieDD >= criteria.PeriodeVan &&
post.Item.CreatieDD <= criteria.PeriodeTot
orderby post.Item.CreatieDD descending
select post)
.ToArray();
if (criteria.TopList > 0)
{
return query.Take(criteria.TopList);
}
else
{
return query;
}
}
else
{
var query = from post in dataContext.GetTable()
orderby post.Item.CreatieDD descending
select post;
if (criteria.TopList > 0)
{
return query.Take(criteria.TopList);
}
else
{
return query;
}
}
Dit is een hele lap code voor eigenlijk maar 2 acties, namelijk een periode kiezen en een selectie van de bovenste items. Voor mijn relatief kleine projecten is dat wel te doen, maar bij grotere projecten zeker niet. Zelfs dit vind ik al lastig qua onderhoud. Nu ben ik vandaag op zoek gegaan naar een goed alternatief.
Als vrij snel kwam ik op een Chris Rock z’n weblog waar hij dit probleem ook beschrijft in de post die hier is te vinden: https://www.rocksthoughts.com/blog/archive/2008/01/24/linq-to-sql-dynamic-queries.aspx
Eerst komt hij met het voorstel om de Dynamic LINQ Query Library te gebruiken. Deze had ik zelf ook al een keer gezien, maar dat is eigenlijk iets wat je totaal niet wilt gaan gebruiken. Je krijgt dan gewoon tekst queries in je code welke niet meer door je compiler worden gecontroleerd. Dit haalt Chris ook al aan. Daarna begint hij over de LINQ Predicate Builder.
Read more →Hoe vaak gebeurd het wel niet dat je je pc wilt opruimen, maar je geen idee hebt welke mappen nou zoveel data bevatten. Het gebeurd mij regelmatig. Natuurlijk heb ik wel een redelijk idee van hoe groot een map ongeveer is, maar zeker weten doe ik het nooit. Het vervelende is dat mappen vaak ook weer submappen hebben en die zelf ook weer submappen hebben. Zo kun je dus een behoorlijke tijd zoet zijn met het zoeken naar grote mappen/bestanden.
Blijkbaar ben ik niet de enige geweest met dit probleem en is er iemand geweest die er een kleine Windows Verkenner add-in voor heeft geschreven, genaamd Folder Size, hoe origineel. Deze applicatie zorgt er voor dat er een kolom bij kan worden gemaakt in je Windows Verkenner met daarin de informatie over de totale grootte van de mappen. De applicatie/plug-in is op SourceForge te downloaden via deze link: https://foldersize.sourceforge.net/
Nog een probleem dat je vaak hebt bij het verwijderen van bestanden en mappen is dat je een melding krijgt die verdacht veel op deze lijkt: 
Iets heeft dan nog een koppeling met dat bestand, maar zelfs wanneer je alle applicaties afsluit dan krijg je alsnog deze melding. Ook hier is een applicatie voor gemaakt, namelijk Unlocker. Met behulp van deze applicatie kun je bestanden vrijgeven, waardoor je ze kunt verwijderen.
De applicatie is te downloaden op https://ccollomb.free.fr/unlocker/
en is volledig gratis.
Read more →Zoals misschien wel is te zien in de adresbalk en in de titel van de pagina, is de term Freezco.com nu helemaal vervallen. Onlangs heb ik besloten om niet meer verder te gaan met dat domein, mede omdat ik het niet (meer) bedrijfsmatig kan gaan gebruiken in de toekomst. Tevens past Jan-V beter bij de content die op deze pagina staat. Eigenlijk post ik alleen maar dingen die ik zelf leuk danwel interessant vind, dus gaat het mij aan, Jan V. Dit maal was de update behoorlijk eenvoudig. Gewoon de nieuwste code op het Jan-V.nl domein plaatsen en de database heen en weer ‘slepen’. De database kon ik via vergelijken van de ene en de andere database behoorlijk snel doen. Volgens mij is alles nog intact. Ook heb ik al een leuke feature toegevoegd in deze nieuwste code, namelijk de mogelijkheid om eKudo’s en Stumble Upon te ondersteunen bij bepaalde posts. Ik weet niet zeker of het allemaal goed werkt, maar als ik de theorie goed heb begrepen zou dat wel het geval moeten zijn. Er zitten nog enkele andere updates aan te komen, maar daar moet ik nog aan beginnen met ontwikkelen.
Read more →Vandaag werd er weer een mailtje van de SEAT Club bezorgd. Soms staan er wel leuke aanbiedingen in, dus keek ik maar even. In de header van de mail stond een leuke aankondiging (voor mij dan), er komt een nieuw model van de Ibiza in 2008. De echte auto-spotter zal dit waarschijnlijk al lang weten, maar voor mij is het dus echt nieuws. Hij ziet er ook behoorlijk vet uit. De nieuwe Leon was even wennen, maar na verloop van tijd begint die toch wel mooi te worden, hoewel ik de vorige Leon mooiere kont vind hebben. De nieuwe Ibiza is echter een stuk vetter dan de huidige. Ok, het zijn dan nog wel renders, maar ik vind hem super vet.
Toen ik nog m’n Ibiza had vond ik die ook wel mooi, maar nu vind ik hem toch wel saai en oudbollig worden in de standaard vorm. Deze nieuwe ziet er echter behoorlijk flitsend uit. Jammer dat ik nog even moet wachten op een nieuwe auto. Anders had ik het wel geweten. Ach, hij is er ook nog wel zodra ik aan een nieuwe auto toe ben, maar dan zijn er misschien wel weer andere mooie auto’s. Ik zat te twijfelen om een Ford Focus te nemen als volgende auto, aangezien die goed geluid uit de speakers hebben (wat ik er van heb kunnen horen tenminste). Nu denk ik echter dat het toch maar een SEAT Ibiza wordt. Hopelijk heeft deze auto het A-label, zodat die niet zo enorm duur is in de lease.
Read more →Vorige week wilde ik graag een Rich text editor in m’n Weblog project slepen, dit omdat het een stuk mooier is om in zo’n editor teksten te schrijven dan in een ’normale’ textarea.
Nu bestond de editor in mijn geval uit enkele tientallen mapjes met ieder hun eigen submapjes en bestanden. Ik dus proberen om de gehele hoofdmap te slepen in m’n project in VS2008.
Dit mocht niet echt baten. Iedere keer wanneer ik een map naar m’n Solution Explorer sleepte kon ik de map niet toevoegen. Heel raar, aangezien dit wel gewoon in VS2005 kon worden gedaan.
Het lukte trouwens wel om alleen bestanden in je project te slepen, maar om nou handmatig al die mappen in je project aan te maken gaat zelfs mij wel iets te ver. Na enig onderzoek en navraag kwam iemand met een goede oplossing voor m’n probleem. Ik draaide VS2008 namelijk met elevated privileges, dus als Administrator. De rest van m’n systeem draait gewoon onder m’n ’normale’ account. Waarschijnlijk wordt het slepen van spullen naar applicaties met een ander autorisatie niveau geblokkeerd door Windows Vista. Toen ik m’n VS2008 zonder elevated privileges had opgestart kon ik gewoon vanuit de Windows Verkenner mappen slepen naar m’n Weblog project, precies wat ik wilde dus. Het vervelende is dat wanneer je VS2008 niet als Administrator opstart, is dat je dan geen web applicaties meer kunt opstarten, website projecten daarentegen wel.
Read more →