Inlogproblemen met Sharepoint wanneer achter een proxyserver

Afgelopen weken hebben we het op het werk weer behoorlijk druk gehad met het maken van verschillende Sharepoint websites. Een van deze websites was een publieke site (dus het Internet). Dit is natuurlijk goed te doen, aangezien Sharepoint behoorlijk veel vrijheid biedt en er al veel onderdelen standaard in zitten. Bij oplevering van deze specifieke website was iedereen blij met het resultaat, maar na 1 dag kwamen ze achter een klein probleem.

Tijdens het testen en ontwikkelen hadden we de site onder een bepaalde hostheader geplaatst, laten we deze even https://website.bedrijf.nl noemen. Hier kon men de pagina’s prima mee bekijken, bewerken, toevoegen en verwijderen. De website wordt echter aan het publiek getoond onder de hostheader https://www.website.nl.

Het probleem op dit laatste adres is echter dat ze vanaf de klant hun werk locatie niet in kunnen loggen op de website. Aangezien de beide hostheaders naar dezelfde website verwijzen (via het uitbreiden van een sitecollectie), zijn er dus op zich geen kritieke problemen, maar echt fijn is het niet. Het probleem zit hem in de proxy server of firewall bij de klant, deze blokkeert de verzoeken om in te kunnen loggen op de website (Windows inlogbox en NTLM).

Dit werd bevestigd na een behoorlijke tijd te zoeken naar dit probleem, maar echte oplossingen hiervoor kon ik niet vinden. Uiteindelijk las ik iets over Basisverificatie op websites. Dit houdt in dat er geen encryptie meer wordt plaatsgevonden op het wachtwoord en deze dus als plain-text wordt verstuurd. Dit is dus absoluut niet meer veilig en ook niet aan te raden op een productie omgeving, maar het houdt wel in dat de proxy server het inlogverzoek niet meer blokkeert.

Read more →

Filteren van workflowstatus in Sharepoint 2007

Vandaag was ik druk met het maken van een custom pagina binnen Sharepoint. De bedoeling van deze pagina was om bulk-accorderingen te kunnen doen op Workflow taken. In dit geval was het namelijk best mogelijk dat je ineens een stuk of 10 (of meer) taken toegewezen had gekregen. Als je in 1 oogopslag al weet dat ze allemaal moeten worden goedgekeurd (of afgekeurd), dan wil je dit niet stuk voor stuk moeten afhandelen. Nu had ik al een mooi stuk code geschreven om te achterhalen wat de taken in de lijst waren, maar hier moest ook nog een filter op komen, immers je wilt niet de reeds afgesloten (goedgekeurde, afgekeurde, beindigde) workflows bewerken. Enige probleem dat ik ondervond was dat je in de CAML-query niet kon filteren op de tekst Voltooid of ieder ander passende status tekst. Door wat slim te debuggen kwam ik er al snel achter dat de status met een ID wordt aangegeven. Op nagenoeg de eerste pagina die ik vond via Google stond een mooi lijstje met de status id’s en bijbehorende teksten.

Status Value
Not Started 0 
Failed on Start 1 
In Progress 2 
Error Occurred 3 
Canceled 4 
Completed 5 
Failed on Start (retrying) 6 
Error Occurred (retrying) 7 
Canceled 15 
This is defined but I don't think this value is used Approved 16 
Rejected 17

Bron: https://www.sharepointblogs.com/dwise/archive/2006/12/11/howto-filter-a-view-based-on-workflow-status.aspx

Read more →

Titel-veld van inhoudstype Item wijzigen

Vorige week was ik bezig om enkele content types (inhoudstypes) aan te maken in m’n MOSS 2007 omgeving. Van een van die content types moest het titel veld eigenlijk een andere naam krijgen, soms komt het namelijk voor dat je geen titel hebt bij een type, maar wel iets anders. Uiteraard kun je dan kiezen om Titel te verbergen, maar ik wilde hem nu hernoemen. Dat hernoemen kan uiteraard wel, maar ik zat alweer een niveau te hoog en was ik bezig met het content type Item te wijzigen.

Nu ging ik vrolijk door met het wijzigen hiervan. Je krijgt dan zo’n melding dat je de betreffende site-kolom in een ander venster kan worden bewerkt. Dit deed ik dus en door de aanwijzingen op het scherm te volgen had ik dus Titel gewijzigd. Dit bleek niet een echt slimme actie te zijn geweest, want nu had ik het basis type in Sharepoint gewijzigd. Dit heeft als gevolg dat er veel dingen niet meer goed werken en dat al je types geen Titel meer hebben.

Het terug aanpassen van deze site kolom blijkt ook alweer onmogelijk te zijn, vanwege de beveiliging binnen Sharepoint. Wanneer je je kolom weer terug wilt aanpassen naar Titel, dan krijg je een foutmelding dat deze al bestaat. Op zich wel logisch, maar niet echt wenselijk. Gelukkig ben ik niet voor een gat te vangen en heb ik een fix kunnen doen. De fix uitte zich in een console applicatie met enkele parameters waar je op kunt geven welke kolom gehernoemd moet worden. Zo werk je eigenlijk dus om de beveiliging van Sharepoint heen. De code die ik gebruikt heb is dit:

Read more →

Sharepoint op je Vista machine

Twee weken terug kwam ik een link tegen dat het nu eindelijk mogelijk is om Sharepoint te draaien op je Vista machine. Dat is natuurlijk helemaal geweldig, want eigenlijk vind ik de methode van ontwikkelen voor Sharepoint die er nu is helemaal ruk! Het slaat wat mij betreft nergens op dat je een of meerdere virtuele servers moet maken om op te ontwikkelen en daarna moet gaan deployen op een team-ontwikkel/acceptatie website en daarna nog eens een keer naar de klant gaat deployen. Ik kan de link op de MSDN site momenteel niet vinden met de basics van source control in Sharepoint, misschien dat die nog op m’n werk laptop staat, dan zet ik die er later nog even bij. De link met tekst en uitleg is trouwens: https://community.bamboosolutions.com/blogs/bambooteamblog/archive/2008/05/21/how-to-install-windows-sharepoint-services-3-0-sp1-on-vista-x64-x86.aspx Zelf heb ik het nog niet geprobeerd, aangezien ik m’n thuis desktop liever niet als testcase opzet voor zoiets (+ het feit dat ik m’n server daar zometeen voor ga inzetten) en ik ook nog geen Vista draai op m’n ontwikkel laptop. Of het allemaal goed werkt weet ik dus niet, maar het lijkt me wel dat je nu minimaal web parts lokaal kunt gaan ontwikkelen. Dat is toch wat mij betreft het grootste voordeel. Een hele WSS of MOSS omgeving op je lokale machine is natuurlijk ook wel leuk, maar mijn basic needs zijn echt het onwikkelen van web parts op een lokale machine. Of natuurlijk een laptop met een Quad-core CPU, 8GB RAM en een harde schijf van 500GB @ minstens 7200 RPM. Omdat ik toch ook wel een beetje reele kijk op de wereld heb snap ik ook wel dat dat het niet gaat worden.

Read more →

Geavanceerd zoeken op je team site in MOSS 2007

Onlangs moest ik een zoekfunctie implementeren op een Sharepoint site die ik had gemaakt. Op zich helemaal niet lastig, maar ik wilde de optie met Geavanceerd zoeken direct zichtbaar hebben. Toevallig had Amanda Murphy ( https://blog.funknstyle.com/?p=578 ) hetzelfde idee. Zij heeft hier heel veel screenshots bij gemaakt, maar ik leg zo even uit hoe het in z’n werk gaat.

Ten eerste moet je een nieuwe site maken. Deze site kun je zelf een titel geven en url, maar het is misschien handig om deze Search of Zoeken te noemen. Ten tweede kies je het template Zoekcentrum of Search Center te vinden onder het tabblad Enterprise (Nederlandse vertaling heb ik momenteel niet beschikbaar). Door deze site aan te maken beland je op de startpagina van het zoekcentrum met de link Geavanceerd zoeken. Klik op die link en kopieer de URL. Ga weer terug naar je bovenste website waar je de link wilt hebben (je zit nu namelijk in een subsite). Klik hier weer op Site Setting en dan Search settings of Zoekopties (volgens mij). Hier plak je de gekopieerde URL in het veld Use custom scopes en dan klik je op OK.

Resultaat is dat je de link ziet naast de zoekbox. Als je er op klikt zie je een scherm dat lijkt op hieronder Ja, de Nederlandse vertalingen van de Sharepoint opties moet ik even schuldig blijven. Zodra m’n server werkend is kan ik meer behulpzamer zijn op dat front.

Read more →

LINQ in Sharepoint: LINQ4SP

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 →

Migratie van een eigen CMS naar Sharepoint

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 →

Lijst Sharepoint add-ons

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 →

‘An unexpected error has occurred’ met Sharepoint

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 →