Monday, December 17, 2012

Scheduled publishing in EPiServer

Everyone knows how to schedule a publication of a new version of a page in Epi. But every now and then I get the question on how to publish a new version of an already published page. And everytime I am asked that I need to refresh my own memory (i.e Google it up) , since I almost never do this.
I found a neat step by step guide describing how to do it:

  1. Edit the page with your changes. Leave publish dates as is, you will set your date elsewhere.
  2. Select "Save and view" (NOT PUBLISH!)
  3. Two buttons are displayed, click "Ready for publish".
  4. Goto the version list tab.
  5. Last in the listing where your new version is there's a time schedule icons to the right. Click on it.
  6. Tick the activate checkbox and enter time and date as you please.
  7. Save and your new version of the page is now awaiting automatic publishing.
http://labs.kaliko.com/2011/02/time-controlled-publishing-in-episerver.html

Monday, December 10, 2012

ASP.NET and Mobile

Scott Hanselman talked about responsive design. He also showed some of the tools in Visual Studio that helps us withe some of the hassle of managing different browser specific css, like the VS Web Essentials add on, that by the way is going to go into the product.



A little tip that Scott shared is how to stop Windows from shutting down just after you pressed the shut down button. That is to fire up notepad and write something. That folks, belive it or not is a bulletproof way to do it. 

Jquery mobile for MVC gives you some neet addons for the project, like desktop view and mobile view controls like these that creates a listview and adds filtering to the same one with a nice search box with on the fly filtering. data-role="listview"
data-filter="true"

Here are some links from the presentation

Nansen at Dev Interserction conference

Nansen is back in Las Vegas, now at the Dev Intersection conference. Dev Intersection was created by Carl  Franklin and Richard Cambel, the hosts of Dotnet Rocks.

The first session is about modern application lifecycle, about how Micsosoft have been adopting an agile sprint based development in some of their biggest sapplications such as Visual Studio.

Nicole Herskowitz and David Carmona from Microsoft showed how the new TFS Service works with the new sprint burn down chart and time tracking features.
All of the Team Foundation Service features are availiable in the self hosted Team Foundation Server.

David Carmona showed off some of the new features in Visual Studio 2012, like the native support for continuous testing, found at the Test -> Windows -> Test Explorer. The tool runs all your tests whenever you build your solution.

Thursday, November 29, 2012

Visual Event extension for Google Chrome

Johan Tran from the Stockholm office found the Visual Event, a real gem in the Google extension store.


It displays the events that are attached to an element right on the screen.
A similar extension has existed for Fire Fox and it's a real time saver, but now we can use it on our favorite browser.

Thursday, November 1, 2012

Todays agenda at Devconnections 2012

Today is the last day of Devconnections. It has so far been a great conference with lots of great sessions.

Sessions for today is as follows:

7:00am—8:00am Breakfast
8:00am—9:15am Speeding Up ASP.NET Applications
9:30am—10:45am Model Binding in ASP.NET MVC
11:45am—1:00pm AJAX and ASP.NET MVC
1:00pm—2:30pm Lunch
2:30pm—3:30pm jQuery Mobile and ASP.NET Web Forms

Wednesday, October 31, 2012

DevConnections continues: a lot of APIs, ETF & geeks

Today we learned some more on ASP.NET Web API, Entity Framework 5 and HTML5 across browsers. That said, we're now looking for opportunities to squeeze some of the cool stuff from today into our projects.

Also, we've so far been a bit lucky with the speakers, all at ASP.NET Connections have so far managed to make the trip, despite Sandy. Thanks for all your efforts!

John Papa and Todd Anglin taught us a couple of lessons in the HTML5 room today, while Pranav Rastogi, Glenn Condron and Howard Dierking were at the other spectrum of our day to day development, mainly Web Forms, ETF 5 and ASP.NET Web API.

Tools of the trade today:

Most hated web browser today:

You don't even need to guess. Version 10 of IE will be out on most platforms soon and that will be a little bit of a blessing to most developers playing around with HTML5 APIs, CSS3 and other tools of the trade.

The most of our photos today are 'boring' conference photos, so we'll post this one instead, from in between the early sessions:


Tuesday, October 30, 2012

Soon you'll be on a Chinese social network


We are all used to living in, and through, social apps and services from the United States. A few of us might have a cluster of cross-European apps too but that's usually it.

Next, make space on your smartphone screens for the best of Chinese social networking.

Shenzhen based Tencent are best known in China for their QQ instant messaging app with 700 million users. Further back in their portfolio is Weixin. Or was, rather, as it has been renamed WeChat in preparation for an international roll-out. The goal is simple; to become China's first global online success.

So far Tencent's roll-out has reached India and Malaysia, followed by Indonesia and crucially Taiwan. The latter market can be seen as a jumping off point for the US thanks to the strong ties between the countries in terms of business as well as population. And if it gets a toe-hold in the US, Europe will likely follow.

WeChat is more than mobile chat however and best described as a combination of messaging service, Skype, Instagram, walkie talkie and basic social networking all rolled in to one. It has been dubbed an iPhone and Android essential by some, and just another addressbook reliant messaging client by others (it does indeed use the entries in your smartphone's addressbook to get you using the service as quickly as possible).

WeChat is not without competitors. When it comes to the iPhone it is fighting Kakao in Korea, LINE in both Japan and Korea (where LINE is ahead of Facebook), and messaging focused Whatsapp in most countries. What it doesn't have is direct competitors, especially not in the Western markets.

WeChat manages this by actually doing everything it does rather well. Instagram is still a better photo sharing app but WeChat's is more than adequate, and contributes heavily to the 100+ million photos that get uploaded to the different Tencent services every day. And with Drift Bottle (think message in a bottle, on your phone) the WeChat team show that they are more concerned with easy to understand and fun ways to get people using their app rather than contrived interaction models. This is not surprising since 50% of Tencent's 10 000 strong staff are said to be working in the company's R&D departments.

By combining adequate and at times fun and engaging functionality with ease of use, WeChat might be on to a winner beyond China. And if so, it'll be on your smartphone too.

wechatapp.com


Monday, October 29, 2012

Vegas Baby!

Since a couple of days back, Nansen has opened its Las Vegas office! Gustaf, Patrik and me (Martin S) arrived early to get the most out of Sin City, while Rudde, Chris & Robert S will arrive very soon to make it a 6 man strong lineup here for the upcoming week and the DevConnections conference at Bellagio.

So what've we been up to so far? Well, we want to let the pictures talk. Here you go:

Patrik, The Mayor of Caesars Palace.
 Our home the upcoming week.
 A taste of freedom & glory.
 Jokers!
 Red Rock Canyon hike!
Pre-conference workshop.

Friday, October 5, 2012

Commerce in Windows 8

It looks like Microsoft has decided that a file included with the .NET Framework 3.5 and used by Commerce is not importent so they have skipped it with the .NET 3.5 installation for Windows 8.
The file that is missing is "System.IdentityModel.Selectors.dll", just copy the file from a Windows 7 installation "C:\Program Files\Reference Assemblies\Microsoft\Framework\" and put it into your Commerce bin directory.

Friday, September 28, 2012

Call GetSalePrice from EPiServer scheduled job

Parts of the EPiServer Commerce API requires that you have an active HttpContext. This will make life hard when you try to call this methods from a scheduled job, one of these methods that require an HttpContext is the "Mediachase.Commerce.Website.Helpers.StoreHelper.GetSalePrice", it checks for a value in the users cookie and if none is found it will take a default value, but if the context does not exist it will just throw an null pointer exception and fail. To fix this I just added the following code to the start of my scheduled job,

if (HttpContext.Current == null)
{
 HttpContext.Current = new HttpContext(new HttpRequest("index.aspx", "http://tempuri.org/index.aspx", string.Empty), new HttpResponse(null));
}

Wednesday, September 19, 2012

Possible solution to build warning "The primary reference "..." could not be resolved because it has an indirect dependency" after installing .NET 4.5


After installing .NET framework 4.5 I started to experience build errors and warnings when building solutions containing projects targeting .NET 3.5 in Visual Studio 2010.

One of the warnings said:
The primary reference "Dropit.Extension, Version=4.1.0.142, Culture=neutral, PublicKeyToken=8fe83dea738b45b7, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the framework assembly "System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" which could not be resolved in the currently targeted framework.

This warning isn’t specific for the primary ref assembly mentioned above, it could be any other assembly it seems. 

After playing around with the .csproj-file trying to take control over MSBuild I discovered this workaround:


  1. In VS, try to identify the referenced assembly or assemblies causing the warning and set the specific version to true in the properties pane.
  2. Unload the project that fails to build in Solution Explorer
  3. Right click the unavailable project and then Edit
  4.  Find the ItemGroup and Reference elements of the concerned assemblies, in this case
<ItemGroup>
  ...
  <Reference Include="Dropit.Extension, Version=4.1.0.142, Culture=neutral, PublicKeyToken=8fe83dea738b45b7, processorArchitecture=MSIL">
    <HintPath>..somepath\Dropit.Extension.dll</HintPath>
  </Reference>

and add the SpecificVersion element

<ItemGroup>
  ...
  <Reference Include="Dropit.Extension, Version=4.1.0.142, Culture=neutral, PublicKeyToken=8fe83dea738b45b7, processorArchitecture=MSIL">
    <HintPath>..somepath\Dropit.Extension.dll</HintPath>
    <SpecificVersion>True</SpecificVersion>
  </Reference>

6.       Save and build - and it builds!


Tuesday, September 11, 2012

Access TFS 2010 in Visual Studio 2008

For anyone working with Visual Studio 2008 and want to connect to a TFS 2010 server here is a quick guide to getting it to work,


  1. Install Visual Studio 2008
  2. Install Visual Studio 2008 SP1
  3. Install Team Explorer 2008
  4. Install Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010
  5. Reinstall Visual Studio 2008 SP1
  6. Done!

To access a collection other then the default you have to get the url for that collection this can be done by checking the properties of the collection in Visual Studio 2010, there will be a url field there.


Thursday, August 23, 2012

Spring Bellman, spring!


Tillsammans med Söderhavet anmälade vi två lag till årets Bellmanstafett, som gick av stapeln idag, kl. 17:30. Det var ett fartfyllt lopp för vår del, vilket syntes på resultattavlan. Hela sju stycken av våra tio löpare sprang under 5:00 min/km på den 5,10 km långa banan! Martin Edenström tog dock vinsten med en riktigt bra tid på 19:25.

Bellman hade varit stolt över oss.
Namn Tid Tempo
1. Martin Edenström 19:25 3:48 1:a, lag "Söderhavet-Nansen"
2. Kalle Hoppe 21:00 4:07
3. Robert Persson 22:42 4:27 1:a, lag "Nansen"
4. Andreas Oldeskog 23:24 4:35
5. Jens Lundström 23:33 4:37
6. Andreas Plahn 23:45 4:39
7. Bartek Tatkowski 25:18 4:58
8. Anna María Larsson 26:14 5:09
9. Jenny Atmer 28:48 5:39
10. Klas Sabelström 29:57 5:52

Nu börjar träningen för Nansens nästa årliga löptävling, och jag önskar lycka till till mina kollegor som ska springa Tjurruset den 6:e oktober.

Wednesday, August 22, 2012

Hej Siba! Vi har precis lagt 50+ mantimmar på en Windows 8 app åt er


Jag spenderade gårdagen vid Moderna Museet på vackra Skeppsholmen. Dock inte vid deras aktuella Picasso vs Duchamp utställning utan istället på en av Microsoft anordnad heldag om User Experience och Windows 8.

Temat var de riktlinjer som tagits fram för att stödja utveckling av Windows 8 appar. Förutom teoretiska pass så bestod schemat av gruppdiskussioner kring ett antal välbekanta företag. Vår grupp fick Siba och målet var att ta fram wireframes på en spännande Windows 8 app åt detta detaljhandelsföretag.

Siba är en tacksam kund att brainstorma kring. De har ett känt varumärke, många utmaningar men minst lika många spännande möjligheter, dessutom sitter de på en nuvarande användarupplevelse som känns lika rolig som ett tandläkarbesök, (och nu menar jag verkligen inte att låta otacksam mot min snälla tandläkare Kerstin).

Det var med stor entusiasm och energi som vi i gruppen slog våra huvuden ihop. Jag erkänner att jag stundtals tänkte att det är med interaktionsdesigners som med kockar, ju fler desto... ni vet. Det var inte alltid lätt att få en syl i vädret eftersom alla verkligen brann för uppgiften. Men mot slutet av dagen måste jag ändå säga att jag kände mig mäkta stolt över de wireframes vår grupp tagit fram.

Vi pratade användarmål, informationsstruktur och navigationshierarki uppblandad med nya fräcka facktermer såsom live tiles, badges, toasts och snap view.

Riktlinjerna för användarupplevelsen med en Windows 8 app kan sammanfattas i 5 principer.

1. Do more with less 
Eller som de också formulerade det, content before chrome (och det kan ju knappast vara en slump att Microsoft väljer att kalla det negativa för just Chrome). Denna punkt handlar framförallt om att man ska vara fokuserad och direkt, innehållet har alltid huvudrollen.

2. Pride in Craftmanship
Varje pixel räknas, hantverket ligger i detaljerna som jag själv tycker om att säga.

3. Be fast and fluid
Med denna punkt menas att bygga appar som upplevs omedelbara, intuitiva och tilltalande.

4. Authentically digital
Dra fördel av den digitala världen istället för att försöka efterskapa artefakter från verkliga livet.

5. Win as one
Avslutningsvis så poängterar riktlinjerna att att det är viktigt att vi infogar och drar nytta av redan framtagen smartness. Det finns ingen poäng i att uppfinna hjulet på nytt när energin istället kan läggas på annat nyttigt.

Sammanfattningsvis var gårdagen både givande och stimulerande. Nansen är definitivt nere i startblocken när det gäller Windows 8 appar, och i ett specifikt fall (hej Siba!) har vi till och med tjuvstartat. Men om det blir någon målgång för Siba eller för någon annan är i nuläget inte i våra händer utan handlar om vad marknaden efterfrågar.

I dagsläget känns det som att responsiv design är hetast, och alla kan inte ha lika djupa fickor som Tillväxtverket. Om framtida budgetar kommer att plöjas ner i Windows 8 appar eller i någonting helt annat spännande, det återstår att se.

Ps, föreläsningen spelades in och det går bra att titta på den här.

Thursday, August 16, 2012

Mobila intranät är helt rätt


Mobila intranät i delvis native- eller wrappat format verkar bli en trend för hösten 2012.
Efter fjolårstrenden sociala intranät kommer nu mobila intranät.

Vi märker av ett ökat intresse från kunderna. Några som ligger steget före är eBay med 16 000 anställda. De har redan lanserat det egna, mobilanpassade mobila intranätet och appen The Hub.

Appen lanserades i samband med att det nya intranätet togs fram. Den innovativa, mobila app'en för alla anställda följer “What six things do people need while mobile?modellen väl och erbjuder både aktiekurs, videos, rumsbokning, personalkatalog och kalender.

eBay ska valt att bygga systemet själva efter att insett att de anställda krävde och populerade en "Yammer-lösning". Men eBay vart besvikna på funktionaliteten i Yammer och valde därefter även bort NewsGator, Jive, Ning och Chatter efter en förstudie.

I Webservice Awards 2012 rapport svarade enbart 1% att de hade ett mobilt intranät. Mobila intranät går så klart även hand i hand med responsive design trenden från fjolåret.

Wednesday, July 25, 2012

EPiServer Composer Global blocks and EPiServer Commerse

I just learned a nifty workaround to make EPiServer Composer Global Blocks work with EPiServer Commerce.

The core issue is that Composer has EN as the default language while Commerce has EN-US as the default language.
Here is what you need to do for those two to work together.

  1. Go into web.config and search for this line 
    <episerverModules>
        <composer dataContainerId="3" globalFunctionEditingPageId="4" hideDataContainer="false" />
      episerverModules>

    And change hideDataContainer to false
  2. Go into edit mode in EPiServer. where you now will find the composer blocks at the top of the page tree structure. Select the top node and click on the language settings button
    In there enable the two different English languages
  3. Still in the language settings, set the fallback language to English (United States) > English.
  4. Minimize the root folder and then expand it again, so that the page tree is updated with the changes. A flag should appear left most of the Extension data container.

    Now you should be able to create Global content blocks on your site!
To finish up, don't forget to restore the hideDataContainer value to true in web.config.

Thursday, June 21, 2012

EPIServer context menu font color issue

The context menu (right click menu) in EPiServer 6 is (as you might have noticed) some kind of grey with the menu item's font color being white. That is, of everything is as it should be.
But f you have built a couple of CMS6 sites you've probably run into the issue of the context menu font color getting black instead of the normal white, which will make the items in the menu pretty much unreadable for the average human eye.

If you want your context menu to be readable again you probably wanna set it back to white or some other color with better contrast against that grayish color of the background. So, how can accomplish that then?Well, dont worry! Of course Nansen comes to your rescue and here is a quick fix:

/* -----------EPi contextmenyhack ------------------- */
.ContextMenuItem, .ContextMenuItem-Active, .ContextMenuItemDisabled, .ContextMenuItemDisabled-Active { color: #fff; }
/* ------------------------------ */

Thanx to @codingbug (aka Goose)

Would be nice if EPiserver fixed this and the context menu positioning bug in Chrome...

Monday, June 11, 2012

NDC - inspirational and educational

NDC this year was the fifth since the start 2008 and my first. It started out awesomely with a terrific key note speech by Aral Balkan about the importance of designing for the human, and continued in the same fashion with excellent talks by Hadi Hariri and Robert C. Martin, some interesting points about the vulnerability of compiled .NET applications by Jon McCoy and a first look (for me, that is) on the Metro design principles by Laurent Bugnion.

All this was very inspiring and the first day kick-started the conference in great fashion. The real highlight, however, was the talk by Damian Edwards on the SignalR framework. An excellent async framework for building real-time .NET applications. It provides a simple means of pushing information from the server to all connected clients, a task which has so far been quite hard to accomplish. SignalR abstracts away most of the networking and heavy lifting required and leaves you with a clean and simple API to build whatever application you want.

Another thing that I found very interesting was the new Github client for Windows that Phil Haack introduced in his GitHub talk. It's a streamlined WPF app that simplifies the use of GitHub repositories and gives you a nice GUI in which to handle your source code.

In between those two tech heavy talks I managed to sneak in some UX with Billy Hollis where he taught us to "unlock the invisible cage". Second to Damian Edwards this was my favourite talk of the whole conference!

Further more we had a look at the new async features of Visual Studio 11, REST with ASP.NET MVC and why and how to really care about code quality.

All in all probably the best conference I've been to. Ever!

Friday, June 8, 2012

Greetings from NDC Oslo

Greetings from the fifth annual Norwegian Developers Conference. Myself, Robert Linde, Andreas Oldeskog, Kalle Allvar Gaus and Jenny Atmer are currently here and have attended several really interesting sessions with brilliant speakers. Unfortunately there will not be much time to blog about what we've seen while we're here but we hope to compensate for that when we get back. Meanwhile you can enjoy this really awesome keynote from Aral Balkan.

Monday, May 21, 2012

Tack Offf 2012

Nyss hemkommen från Offf 2012 i Barcelona och nu vill jag passa på att tipsa er om de tre (imo) mest givande föreläsningarna, (ingen inbördes ordning).


Joshua Davis - Furious Creator
Joshua hade runt millennieskiftet tror jag det var sajten Praystation. Den var Flashbaserad och om han hade lanserat den idag, så där en 12-13 år senare hade den ändå varit bland de absolut häftigaste på webben, (och jag gillar inte ens Flash).

På årets Offf festival skulle han "bara" bjuda oss på en stor mosaik/graffiti/galen väggmålning men lyckliga omständigheter gjorde att han plötsligt var inbokad även som talare.

Joshua säger "Fuck!" minst en gång per mening och han får vilket bokstavsbarn som helst att framstå som lugnare än en komapatient när han engagerat försöker smitta publiken med sin kreativa lust.

Presentationen han håller handlar om en högst ovetenskaplig undersökning han själv gjort där han kommit fram till att 99,9% av vuxna anser att ordet "Play" är motsatsen till ordet "Work". Joshua propagerar ivrigt för att vi istället ska se de två verben som synonymer. Det jobb du gör privat utan kommersiella intressen blir också på sikt den typ av jobb som "you get hired to do, it bleeds into your commercial shit!". Vi bör fylla våra CV:n med exakt den typ av jobb som vi älskar att göra och ingenting annat eftersom "Life is to fuckin short".



Linda Zacks - Urbant förfall när det är som vackrast
Linda har valt att sy ihop bilderna i sin presentation med en poetisk röd tråd. Varje bild presenteras med en kort rad av typen "In my world..." och sen visar hon ett verk. Jag tycker att hennes målningar och fotografier är helt fantastiska. Hon känns som Jean-Michel Basquiats okända lillasyster. Hon förefaller vara en person som aldrig någonsin vilar, någon som aldrig bara kan ta en promenad från punkt A till punkt B utan att ständigt leta efter tecken i gatskyltar, skräphögar och vattenpölar.

Jag tycker att hon är helt fenomenal på att hitta något vackert i det som man annars så lätt skulle kunna avskriva som sopor. Dock är hon inte lika vass som poet, det ska villigt erkännas. Och några av hennes ordval,  framförallt raden "creativity is my shadow" retar mina kollegor, de kallar henne pretentiös och får därefter svårt att ta henne på allvar.

Men personligen förlåter jag henne gärna sådana små snedsteg för jag tycker att de verk hon översköljer oss med är så häftiga och inspirationskittlande. Jag känner instinktivt att jag så fort jag kommer hem måste förvandla mitt källarförrådd till en enda stor canvas. Jag vill kladda med målarfärg, klister och pennor i lager på lager utan att ha minsta aning om vad det ska föreställa eller vad det i slutändan ska resultera i. Tack Linda för den sparken i rumpan.



Jonathan Harris - Yoda
Jonathan påstår att han är 32 år gammal, men det är ju löjligt. Han måste vara åtminstone 157, inte en dag yngre än 155 för att ha haft en chans att hinna med alla de otroliga projekt han gjort.

Jag måste pinsamt nog erkänna att jag inte hade hört talas om Jonathan innan jag åkte till Offf. Men som tur är så är Jonathans största fan min kollega Giovanni, så det var aldrig någon risk att jag skulle missa Jonathans föreläsning. Gio talar upp honom till skyarna och rent logiskt borde det vara det bästa sättet att bädda för en stor besvikelse med Jonathan visar sig vara precis så awesome som Gio tjatat om i tre dagar nu.

Det är inte bara Jonathans projekt som får mig att tro att han kraftigt underdriver sin ålder. Han har också ett väldigt speciellt sätt att tala, om de stora frågorna, som livet: vad går det ut på, eller mänskligheten: vart är vi på väg?

Tyvärr har han bara en timme på scen och hinner därför endast prata om en bråkdel av sina projekt. Men jag uppmanar verkligen alla som läser detta att skynda er in på www.number27.org och ta del av hans on-line portfolio. Ett projekt som jag särskilt skulle vilja lyfta fram heter The Whale Hunt. Det går ut på att han med 3 214 fotografier, (tagna var 5:e minut i 7 dagar) har dokumenterat kampen mellan en eskimåfamilj och en val. Båda på sitt sätt kämpande för sitt/sina liv. Måste ses!

Friday, May 18, 2012

Rapport från Nansen på Nordic e-Commerce Summit


Tillsammans med vår e-handelspartner Enferno, som går som tåget med Media Markt och Ebay Tradera som nya kunder, ställde Nansen ut på nordens största e-handelsmässa under vecka 19.


Nordic e-Commerce Summit är ett minst sagt snabbväxande fenomen som i år lockade nästan 1200 deltagare till Waterfront i Stockholm.

Deltagarlistan är inte direkt i samma klass som t ex SIME, men det var destå ärligare, transparentare och härligare att höra alla eldsjälar och brinnande entreprenörer frikostigt dela med sig av tips och erfarenheter.

Både 5-10 Mkr omsättande e-handlare blandades med e-handelschefer från företag som Adlibris, Ving och Mekonomen.

En hel halvtimmes föredrag dag 1 fick Pinterest, som med siffror om sin könsfördelning, enorma tillväxt och ehandelskonvertingsvänliga statistik lockar e-handlare att införa de nya Pinterest dela-knapparna.

Två lanseringar fick vi även se. Storsponsorn Klarna avtäckte nya Klarna Checkout efter några månaders spekulation. Det var ett Facebook connect försett ”incremential identification” tillvägagångssätt som ska erbjuda nya vinstmöjligheter på både faktura och betalkort (det senare låter mindre troligt i praktiken) för anslutna e-handlare – det är vad Klarna lockar med.

Nansen räknar med att behöva prata do/don’t kring denna lansering i e-handelsprojekt tillsammans med kund framöver.

Vår egen Lotta fick även ge lite expertråd kring e-handelsprojekt:

Senare på kvällen vart det även en trevlig fest där Martin Edenström från Nansen samt EPiServers e-handelsansvarige Ossian Berggren lät sig bjudas på bärz av hybris. I e-handelsbranschen 2012 är alla vänner.

Nansen på Offf 2012


Nansen eller i alla fall en trupp på sex av oss har åkt till konferensen Offf. Den ambulerande festivalen som just i år befinner sig i Barcelona, och det känns efter dag 1 precis så stimulerande och inspirerande som man hade hoppats!

Det spelar liksom ingen roll att staden Barcelona bjuder på svenskt marsväder eller att receptionisterna på hotellet absolut tycker att vi ska betala dubbelt för rummen när man får förmånen att vistas på samma plats som så entusiasmerande, skickliga men ändå ödmjuka inspirationskällor som Joshua Davis, Jessica Hische och Aaron Duffy.

Jessica Hische (Letterer och Illustratör) uppmanar oss att "Make things you wish existed, worst case scenario, it's out there". Hon berättar också att hon precis fått äran att designa alla skrivna texter till Wes Andersson kommande film Moonrise Kingdom. Att höra henna berätta om den extrema detaljkärlek som läggs ner både av henne själv men också av Wes som oroligt övervakar varje liten böj hon ritar får mig att tänka att vår egen Roy Andersson plötsligt känns som en riktig slarver. Skämt åsido så var det någon intelligent person som en gång sa att hantverket ligger i detaljerna och det känns i skrivande stund mer sant än någonsin.

Killarna från svenska varumärkesbyrån Snask känns fantastiskt charmiga och sympatiska men deras stop-motion filmer känns ärligt talat mer fjädervikt om man jämför med den avslutande talaren Aaron Duffy från 1st Ave Machine. Han berättar om den kreativa processen i allmänhet och de problem man som kreatör måste besegra i synnerhet. Han och hans team ligger bland mycket annat bakom Speed Test filmerna för Google Chrome. Aaron bjuder oss på en otroligt häftig timme där tiden flyger fram i samma hastighet som Chrome laddar din favoritwebb. Jag kan bara buga och bocka, känner mig otroligt tacksam över min plats där ute i publikhavet.

Nu är det dags att insupa dag två här nere, hög tid att go forth and be nerdy!


Monday, April 30, 2012

Composer - first contact

Håller på med ett projekt just nu där vi ska använda Composer för en del funktioner. Jag som aldrig byggt nåt med composer (OK, jag erkänner att jag för länge sen supportade en sajt som använde sig av composers föregångare X2) började alltså från scratch.

Det tog ett tag för mig att överhuvudtaget komma in i tänket. För det ska ju skapas mallar in absurdum kan man tycka. Först  sidtyper med Page Type Builder och sen själva sidmallen för vanliga Episerver. Därefter ska det alltså skapas sidtyper för Composer och enabla sidmallen för Composer och skapas kontroller för layout och functions. Och allt ska enablas och ges rättigheter till.

Well, efter en del meck och svärande få fick jag till det med första sidmallen. Döm sen om min förvåning när jag skapar en ny sidtyp på i princip samma sätt som den förra och det inte fungerar alls. Jag får bara upp en ful gul ruta som säger nåt i stil med att "the composer property has not been enabled". Vad jag än gör i admin så funkar det inte. Jag kör re-register areas, sätter rättigheter fram å tillbaka, kontrollerar arv i mina klasser kollar att däcken är pumpade och allt möjligt.
Sådär håller jag på och grottar runt i ca 1,5 timme när till slut Chris kommer och undrar vad jag svär över. Jag visar den fula gula rutan och Chris säger "Oh, go to settings and check "mark page as changed" and then save and publish the page".

Jag tror att han driver med mig, men jag testar ändå för jag har ju testat allt anat. Döm om min förvåning när det funkar!!

Så, om ni nånsin håller på och bygger composermallar och har konverterat en befintlig sidmall till en composermall och får upp det där meddelandet så vet ni nu vad ni ska göra.

För övrigt vill jag tacka Ted&Gustaf för bra artiklar om att använda PTB och Composer!
http://tedgustaf.com/en/blog/2011/9/create-episerver-composer-page-type-with-page-type-builder/
http://tedgustaf.com/en/blog/2011/9/create-episerver-composer-function-with-page-type-builder/

Friday, April 20, 2012

De stora re-designprojektens tid närmar sig sitt slut



Visst har det hänt något? Det blivit enklare, mer direkt och överskådligt att göra betydande förändringar och förbättringar på webbplatser, e-handel och mobila satsningar.

Med standarder, gemensamma protokoll, integrationer, API:er och framförallt ett vedertaget, universellt tänk kring UX, metodik och mycket mer är vi nästan där vi hoppades att vara för några år sedan!

Därav känns det tråkigt att se upphandlingar och kunder som fortfarande kastar ut 12-18 månader gamla webblösningar bara för de byter CMS eller webbleverantör.

Idag behöver vi inte längre bygga om från grunden. Förändringar gör vi med enkla medel, ibland direkt i en webbläsare. Det gäller de flesta fall. De stora re-designprojektens tid närmar sig sitt slut.

Wednesday, March 21, 2012

Preparing for Exam 070-583, PRO: Designing and Developing Windows Azure Applications

Just about a year ago Microsoft made the MCPD (Microsoft Certified Professional Developer) certification for Azure available by releasing Exam 70-583 (PRO: Designing and Developing Windows Azure Applications).

I started off by browsing through the Microsoft “Learning Plan” for the certification which was kind of slow so I skipped through most of it.

A better start were the videos presented at the Learn Windows Azure event held in December 2011. All sessions were recorded and can be viewed or downloaded on Channel 9. They won't give you the depth you need to pass the exam but they do provide a good starting point for getting to know Windows Azure and getting familiar with the various services and tools.

Here's a summary of the videos:

After looking through the videos I started digging through the documentation at windowsazure,com covering even more details of the various features of Windows Azure. Lots of information to go through but very informative!

Last but not least, I spent most of my study time going through the Windows Azure online training courses over at Pluralsight.com. I strongly recommend getting a subscription if you don't already have one! Watching the videos via their mobile app while commuting is truly timesaving.

Some other references:

Useful tools:


Wednesday, March 7, 2012

Configuring host headers in IIS with SSL

In a production environment you'll probably need the traffic for several web applications to be secured using SSL. To be able to add different host headers for different applications you can't just type them in the IIS GUI in the good old way. This is a CMD-story.

Can be found here:
http://technet.microsoft.com/en-us/library/cc753195(v=ws.10).aspx

And a walk through by this guy:



http://www.youtube.com/watch?v=zVCmzBfx3BE

Monday, March 5, 2012

Ten new certifications at Nansen!

Last week was a pretty certification intense week at Nansen, both in Stockholm and at our Chicago office. Starting off on leap day, a few of us visited our local training and exam center, Addskills, to once again try our luck. We salvaged four new Microsoft certifications, two on WCF Development with .NET Framework 4, moving one step closer in becoming MCPD Web Developers on .NET 4, and two on the Windows Azure exam, resulting in two new MCPD: Windows Azure Developers.

Meanwhile in Chicago, our colleagues where getting ready for their EPiServer Certified Developers exam. Six new ECD’s came to the world on Friday pushing Nansen’s ECD count to new astounding numbers passing the 20 mark for the first time.

Congratulations everyone to your new certifications!

Friday, February 24, 2012

Prevent pages from being created below a pagetype

Sometimes you may want to prevent editors from creating sub pages to specific page types. By default in EPiServer you can let the editor create all types of pages or just a select amount of page types below a page but you can't prevent the editor from creating any pages but with a small "hack" you can achieve this.

1. Create a new unused page type and mark it as unavailable in edit mode.
2. On the page type you don't want any sub pages on set the page type in step 1 as the only available page type.
3. Now no sub pages can be created in edit mode.

Wednesday, February 22, 2012

Tuesday, February 21, 2012

Context-aware CMS, det nästa efter CXM


Vad blir det nästa efter smart personalisering baserad på vedertagen autenciering och identitet via t ex Facebook Graph? Det som ofta kallas CXM idag har även det en framtid.


På Nansen tror vi att ni kommer höra termen Context-aware flera gånger under hösten 2012 och vintern 2013.

I teorin innebär det att CMS mallarna, content och dess funktionalitet blir smartare och bättre på att se sitt specifika syfte och sina samhörigheter. Då kan CMS:et automatiskt hjälpa och påminna redaktörer att placera rätt innehåll, utan dubletter eller ett alltför otydligt samband med annat content. Placera innehåll i rätt plats i navigation eller sajtstrukturer. Eller av sig själva addera upp funktionalitet som passar ihop med varandra.

Det går så klart att kombinera med mer klassisk personalisering baserat på t ex beteende, inlänkningsväg, personalia medlemsinställningar, Twitter/sociala nätverk etc.

Med allt "renare" standarder inom både frontend och backend, bättre RESTful tillämpningar av alla API:er känns det inte alltför avlägset.

Wednesday, February 15, 2012

PageTypeBuilder and EPiServer edit-on-page (DOPE)

So I needed to implement DOPE on a page for a client today. DOPE is the on page editmode of EPiServer where you can edit the content directly on the page without entering edit (or quick edit) mode. This only works if a few conditions are met:


  • Viewstate must be enabled
  • Requestvalidationmode (in the httpruntime element of web.config/system.web) is set to 2.0, only applies if you run your site in .net 4.0
  • You must use the control <EPiServer:Property /> to render your property data.

The problems that directly arise is that <EPiServer:Property> require you to enter a property name to be rendered. This is bad in the sense that we use PageTypeBuilder to create our properties and we want to be able to refactor and whatnot in our code. Now raise your hand everyone of you that have forgotten to update a Codebefore element that had a magic string reference to a EPiServer property after changing the property name.

So to get around that, I found one way that (my colleague Andreas tipped me is similarly implemented in entity framework) uses some reflection and lambda magic to achieve our goal of having no magic strings in codebefore.

We first define our property in codebefore, note that we use a ID instead of the PropertyName magic string property:

<EPiServer:Property runat="server" ID="MainBody" DisplayMissingMessage="False" Editable="True" />

Next, we create a extension method to retrieve the name of a class property:

public static string GetPropertyName<T, TResult>(this T obj, Expression<Func<T, TResult>> property)
where T : TypedPageData
{
var body = (MemberExpression)property.Body;
return body.Member.Name;
}

And finally we connect our property to our control and enable viewstate only when needed, this is done in our page codebehind:

protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (CurrentPage.QueryDistinctAccess(AccessLevel.Edit))
{
EnableViewState = true;
}
MainBody.PropertyName = CurrentPage.GetPropertyName(p => p.MainBody);
}

Now if we refactor our MainBody property in our page type, the text on our page will not be broken until we change the magic string to reflect the new name. Since a property refactoring will also change the lambda expression to retrieve the property name. Pretty neat, huh?


Update:

The extension method above already exists in PageTypeBuilder (in the PageTypeBuilder namespace), so just refer to that namespace and you can use the extension method on any object inheriting PageData.

Tuesday, February 14, 2012

When donken-friday became donken-monday

I have no idea how I got into this, but as of last week I'm an offical member of McDonald's Monday. This is the US version of the strange old habit originating from some guys at Dropit called Donken (short for McDonald's) Friday. Only, here it's on Mondays.

And yes, I can almost appreciate this food with from a strict price vs. quality-prespective. It is actually better here than back home, or maybe that is because we are visiting the flag ship restaurant in the city where McDonald's has its Head Quarters.

Anyhow, the whole thing is made worthfull because of the childish reactions the whole day before going, during and under the visit from the one and only Tomas Unestad. Priceless!



  


I'll let this stay as todays "picture guess" (as in KP)

Tuesday, February 7, 2012

Tuple<T1,T2> + EPiServer = Fail!

One of the dll's you need to reference in your project when using code from EPiServer Framework, for example the InitializableModule attribute, is the System.ComponentModel.Composition dll for .NET 2.0. If you do this in a .NET 4.0 project and then try to use Tuple<T1,T2> you will get an error message letting you know that Tuple<T1,T2> is declared in both System.ComponentModel.Composition.dll and mscorlib.dll. This is because System.ComponentModel.Composition declare a struct in the "System" namespace with the same name and function(?) as the new Tuple<T1,T2> struct in .NET 4.0.
To fix this problem you can add an alias to the reference of System.ComponentModel.Composition in your project, this can be done in Visual Stuio by opening the Properties window for the reference and add an alias. It can also be done in the project file with the following code,


<Reference Include="System.ComponentModel.Composition">
<HintPath>..\Solution Items\References\System.ComponentModel.Composition.dll <Aliases>episerver</Aliases>
</Reference>

After that we have "Tuple<T1,T2> + EPiServer = Success!"
As we only have the reference to this dll becuase EPiServer Framework uses it this will not have an impact on the function of EPiServer.

EPiServer Commerce Associations

In the last couple of Commerce projects I have had trouble with associations, when saving them I get an exception. The cause for this error is two missing rows in the commerce database, the table should in a normal installation only contain this two rows and when I have had the problem the table has been empty.
-------------------
INSERT INTO [AssociationType]([AssociationTypeId],[Description]) VALUES('OPTIONAL','Optional');
INSERT INTO [AssociationType]([AssociationTypeId],[Description]) VALUES('REQUIRED','Required');
-------------------

Wednesday, February 1, 2012

Say hi to the Chicago office

So guys, as of today I intend to report from the Chicago office, from an "everyday life at the office"-point of view. So here I'll give you the first of a series of pictures and stories from one of our US crews, located at 400N State Street, Chicago:


Showing the office in a panoramic version with Ricardo and the wrath of a hungry Tomas in the center. 

Friday, January 27, 2012

EPiServer custom property settings and blowing up the database

So property settings was added to PTB 2.0, and i decided to play around a bit with it and not just change the tinymce settings due to that being boring as ****. When doing so i stumbled across a.. can we say interesting "feature" of EPiServer.

What you normally do is create a settings class that inherits EPiServer.Core.PropertySettings.PropertySettingsBase (or implement the interface) and add the attributes etc. In this class you have your property settings which are serialized and stored in the dds by episerver. Now this is all fine and dandy for primitives and lists of primitives.

Now what I was doing is making a type restricted page picker, so I needed to store a list of types (ptb page types to be more specific). So ofcourse I started by adding a property:
public List<type> AvailablePageTypes { get; set; }

This will make your entire site crash and the only way to fix it is to enter the database and set the "settingsID" value to NULL for the property you decorated with the settings attribute, and also remove a bunch of lines from the tblBigTable... tables.

Apparently EPiServer has no qualms whatsoever to add invalid data/configuration to the DDS, but when you try to do anything with it the entire site is held hostage by DDS exceptions, fun times.

So when making property settings: Make sure any property you place in the settings class has a public parameterless constructor, or you kill your site. You cant even decorate properties with anything to make them not get serialized by EPiServer, any such things are ignored apparently.

I'm not even gonna start on what you have to do if you want to change the type or remove a property on a setting class (hint: Site doesn't work anymore if you do).

Thursday, January 26, 2012

Enable logging for EPiServer Indexing Service

One of our customer's IT departments came to us with  the Windows application event log bloated with errors from EPiServiceIndexingService. The only information available was this:

"EPiServer Indexing Service has problems indexing some of the locations, please consult the log file for details."

But, from what I've understood the log isn't default activated, so go fish. After a quick support-session with EPiServer I was routed to this blog post:
A post that, amongst other things, explains how to activate the log4net-module for the Indexing service with the following steps:

  1. Put the log4net.dll into the EPiServerIndexingService-folder, under Shared services in your EPiServer 
  2. Create the most leight weight config-file possible, see below, and name it: log4net.config. And put it in the same folder. Parameters and configuration to the log-service can be changed at a later state.
  3. Restart the service


Example of log4net.config-file:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="ErrorAppender" type="log4net.Appender.FileAppender" >
<file value="C:\temp\LogServerError.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %l - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</root>
</log4net>



Wednesday, January 25, 2012

Rangy guidar dig i mobildjungeln

Idag lanserar Nansen sajten Rangy.se.

Rangy är både en jämförelsesajt och en återförsäljarportal för mobilabonnemang och mobiltelefoner.

Genom att du själv berättar för Rangy sina samtalsvanor kan sajten räkna fram exakt vilket abonnemang och tilläggspaket som skulle passa just dig. Men det slutar inte där. Rangy är även en återförsäljare av mobiltelefoner och mobilabonnemang.

Rangy är den första tjänsten i Sverige där kunder kan hitta och köpa den kombination av mobiltelefon och abonnemang som är billigast baserat på kundens egna samtalsvanor.

Den största utmaningen i sajten är helt klart beräkningsmotorn för abonnemangsberäkningar. Kombinationer av mobiltelefonerbjudanden, sms paket, surfpaket, rabattsatser mellan operatörer m.m gör beräkningen omfattande och komplex.

Sajten är byggd på Episerver CMS 6 R2 och E-handelsdelen är baserad på Epierver Commerce R2. För att hålla struktur, flexibilitet och överblick är hela beräkningsmotorn baserad på Microsoft Workflow Foundation.

För att få en så bra användarupplevelse som möjligt är hela sajten bygg med Ajax.

Team:

Klas Sabelström, Projektledare
Andreas Oldeskog, Systemutveckling, gränssnitt
Tomas Unestad, Systemarkitekt
Jonas Näslund, E-commerce
Viktor Gars, Systemutveckling
Sussi Zäll, Interaktionsdesign
Martin Lenngren, Gränssnitt

Söderhavet stod för digital identitet.

Friday, January 20, 2012

Visual studio compare and merge goodness



When doing a diff more complex than a == b using the standard diff/merge tool that comes with visual studio is an experience that no developer should need to go  through. I don't think that diff tool has changed since the black Visual SourceSafe days.

But there is a way to make your life so much nicer. I use WinMerge as the diff tool when in visual studio.
Follow this steps if you want to get rid of (some atleast) of the pains of merging code:

1. Download and install WinMerge
2. In Visual Studion go to Tools -> Options -> Source control ->Visual Studio Team Foundation Server and click on the Configure User Tools button.
3. If you don't have the two commands for compare and merge, then add one for each and set the file path to your WinMerge executable, mine is C:\Program Files (x86)\WinMerge\WinMergeU.exe. The extension should be .*
3a. The arguments for compare is /e /x /s /wl /dl %6 /dr %7 %1 %2
3b. and for merge /e /s /x /ub /dl %6 /dr %7 %1 %2 %4

Done!
Now next time you do a merge diff or compare Visual studio will use WinMerge instead.

Wednesday, January 18, 2012

ICT Expo - starkaste talare lineup'en någonsin?


Ett tåg och en spårvagn (!) senare anländer jag till ett regnigt Sverigemässan (blygsamt namn) där ICT Expo Internet flyttats till sal 2. 


En inte helt mäktig arena med de där 90-talstypiska, likformade, vita aluminiumkonstruktionerna med samma svarta företagslappar uppställda i rutnät. Utställarna är destå roligare. Med Azure-moln, säkerhetstanke i projekt och så vidare så känns det som vår del med webb/content/sociala media står närmare IT-secure och drift/lagring än någonsin. 


Och vilka talare, det var därför Nansen kastade sig på X2000 denna arla onsdagsmorgon:
  • Apple (talare från svenska Apple)
  • Microsoft (talare från svenska delen)
  • Facebook  (talare från svenska delen)
  • Google  (talare från svenska delen)
  • Spotify
  • iZettle
Dessutom VD:ar från stora börsföretag och diverse andra intressanta aktörer. SIME och Webbdagarna, släng er i väggen, typ. Varumärkesmässigt starkaste lineup'en någonsin i Sverige?

Pratade med IDG under lunchen, inte ens de kan förmå svenska Facebook skicka representanter till deras övertecknade och på bara timmar fullbokade Webbdagarna Facebook-seminarium i december. Trots fin adress i centrala Stockholm - men efter några på banan kirrar ICT alltså listan talare här ovanför. Till denna sorliga och dystra 90-talsmiljö!

För de stackars talarna tvingas köra on-floor presentationer, ni vet samma typ av föredrag som brukar hållas på TV-shopgolvet. Och det i en lokal som både brusar, sorlar och störs av mässans ombyggnation. Det känns helt ovärdigt. Nåväl, några framföranden där rösten kom fram till oss åhörare var:

 
MediaAnalys som presenterade en kul terminologi kring e-handelsavslut. Efter A/B test förespråkade de "trovärdighetsmarkörer" för bättre konvertering. Med termen menades dels video, (där klipp visat sig ha en enorm dragkraft och vunnen stannad tid) men även de klassiska e-handelscetifikaten, betrodda varumärkesbilderna/citaten etc. Dock blev det pannkaka då allt skulle maxas i ett checkoutflöde. Då sjönk de tidigare redan dåliga resultaten med ytterligare -1,29%. Men med ett A/B som dock visade ett helt rensat och vitt checkoutflöde ökade samma siffra istället med 23% bättre avslut!


Åt lunch med Bo Dahlbom, professor inom IT på Göteborgs universitet. Han var mycket intresserad av Nansens egna Rangy.se, ett ämne som togs upp då vi pratade om hans kommande föreläsningsämne. Det var "nästa stora sak inom it". Föredraget hölls senare på onsdagen. 

Svaret på Bos ämnesfråga? Det baserades på att vår BNP har gått upp med 500 000% under 800 år. Sverige har gått från det jordbrukssamhälle vi en gång var till en helt global aktör. Och vi måste bli ännu mer globala - det kommer ske genom ytterligare konsumtion. Dessutom rörde framtiden så klart allt fler eldrivna prylar och de ständigt annalkandes kineserna. De kommer snart vara överallt på jorden, inte bara i Afrika och på Mallorca. Dessutom kommer japanska robotar dyka upp lite här och var, M2M ger oss "smarta städer" där alla prylar internetkommunicerar med varandra och vi kommer få vänja oss att kontinenteras många skilda kulturer ständigt kommer mötas och mixas. Google Translate speak funktionaliteten (som finns för Android) kommer ge fungerande "Liftarens guide översättningar i realtid" via våra smartphones inom kort. Och just det, svaret på frågan då: Det var mångbottnat och rymde bl a att med allt listat ovan krävs, enligt Bo, bra överblickssysten. Detta då vi kommer konsumera så enormt mycket information och data. Bo slog även ett slag för videons fortsatta dragkraft (unga föredrar den) tillsammans med logiskt hantering av ET&IT (miljövänlig infrastruktur för ökad nätkonsumtion).


Ex-politikern Gabriel Sundqvist på 18 man starka sociala mediafokuserade Pronto berättade innan Bo om åtta drivkrafter för word-of-mouth (vilket de vurmade för). Se dessa i bilden ovan. 

Han tog även upp kul information om hur "kraften hos påverkare inom sociala medier" identifieras. Se bilden här intill.

CMS då, det fanns de som snackade EPiServer - men endast en, runt 60+ årig åhörare stannade vid deras dragning. Så intresset måste räknas som underkänt.

Och med tanke på platsen där vi var - så fanns så klart röda byxor på plats!

Tuesday, January 17, 2012

EPiServer Composer and Commerce, getting global functions to work

In a default installation of EPiServer with Composer and Commerce the global functions and clipboard of Composer does not work. If you debug Composer you will find the following stack trace in the log file,


2012-01-17 11:57:09,893 ERROR [38] Dropit.Extension.Common.Logger.Error - Dropit.Extension.UI.Edit.CreateContentFunction: Value cannot be null.
Parameter name: page
System.ArgumentNullException: Value cannot be null.
Parameter name: page
at EPiServer.Business.Commerce.BreadcrumbsFactory.IsProductListingPage(PageData page)
at EPiServer.Business.Commerce.HttpModules.CatalogNodeModule.RemoveCache(PageData pageData)
at EPiServer.PageEventHandler.Invoke(Object sender, PageEventArgs e)
at EPiServer.Core.PageStoreBase.RaisePageEvent(Object key, PageEventArgs eventArgs)
at EPiServer.DataFactory.Copy(PageReference pageLink, PageReference destinationLink, AccessLevel requiredSourceAccess, AccessLevel requiredDestinationAccess, Boolean publishOnDestination, Boolean allowThreading)
at Dropit.Extension.Controllers.PageDataManager.CopyContentFunction(ContentFunctionData sourceContentFunctionData, PageReference targetPageLink, PageReference targetShadowPageRef)
at Dropit.Extension.Core.ContentFunctionData.Copy(PageReference targetPageLink)
at Dropit.Extension.UI.Edit.CreateContentFunction.Page_Load(Object sender, EventArgs e)

I don’t know why but when Composer copies the page and the create page event is called the page link in the event argument is null and when the argument null the function IsProductListingPage will throw and exception and the creation of the global function will not happen. It’s the same error when you try to use a content function that is placed on the clipboard.


The idea of how to solve this problem was to just inherit CatalogNodeModule and add a null check before the call but as RemoveCache is a private function that did not work. The next approach was to just reimplement the module but then we noticed that the call within the RemoveCache function is internal so that didn’t work either.

After some more reflection of the code I found that the only calls to the BreadcrumbsFactory and its caching (that would be affected by the RemoveCache call) were the Breadcrumb control in the Commerce demo templates, and as we don’t use them in the current project we decided to just remove the RemoveCache call all together and just create a new module with the code that was left. This is the final result and the module we run with,

public class CatalogNodeModule : IHttpModule
{
public void Init(HttpApplication context)
{
InitializationModule.FirstBeginRequest += new EventHandler(this.InitializationModule_FirstBeginRequest);
context.BeginRequest += new EventHandler(this.BeginRequest);
}

private void BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
if (context.Request.Url.AbsolutePath.ToUpperInvariant().Contains("IMAGE.ASHX") && context.Request.QueryString.AllKeys.Contains("epslanguage"))
{
string[] values = context.Request.QueryString.GetValues("epslanguage");
CatalogContext.MetaDataContext.UseCurrentUICulture = false;
CatalogContext.MetaDataContext.Language = values[0];
}
}

private void InitializationModule_FirstBeginRequest(object sender, EventArgs e)
{
RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteTable.Routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
RouteTable.Routes.MapRoute("ProductInCartOrWishList", "ProductInCartOrWishList/Edit/{id}", new { controller = "ProductInCartOrWishList", action = "Edit", id = "" });
RouteTable.Routes.MapRoute("CustomerProperties", "CustomerProperties/Edit/{id}", new { controller = "CustomerProperties", action = "Edit", id = "" });
RouteTable.Routes.MapRoute("OrdersFrequency", "OrdersFrequency/Edit/{id}", new { controller = "OrdersFrequency", action = "Edit", id = "" });
RouteTable.Routes.MapRoute("RecentSpent", "RecentSpent/Edit/{id}", new { controller = "RecentSpent", action = "Edit", id = "" });
RouteTable.Routes.MapRoute("RecentOrders", "RecentOrders/Edit/{id}", new { controller = "RecentOrders", action = "Edit", id = "" });
}

public void Dispose()
{
}
}

After removing the commerce http module and adding our own both the global functions and clipboard started working in Commerce.