Showing posts with label XSLT. Show all posts
Showing posts with label XSLT. Show all posts

Sunday, November 13, 2011

Format DateTime in SharePoint 2010 based on XSLT 1.0

If you were bored with the date time formatted showed in the list by SharePoint and you think it should be changed to how it's easy to view it. The difficulties come from a lot of problems especially XSLT in SharePoint 2010, it was never upgraded from SharePoint 2002, still using version 1.0 until now. That's the bad thing I had when I was working on SharePoint.

Of course, there are many options for you developing on SharePoint product, I mean you can use ContentQuery Web Part to correct the date time format like FaceBook or Google Plus:

However, to do that, now you just follow up this instruction to customize your xslt and see how it shows on the page.

Click here to download the library.

1) Copy the content of file after downloaded, paste it into the file named "thread.xsl" in folder 14/Template/Layouts/Xsl

2) Go to the line for template called "StatusBar" (<xsl:template name="StatusBar">) and remove all the code for Modified date time. Or replace by:

<xsl:call-template name="Bamboo_FormatDateTime">
    <xsl:with-param name="theDate" select="$thisNode/@Modified."/>
    <xsl:with-param name="theDateFormat" select="$thisNode/@Modified"/>
</xsl:call-template>

3) Save and reset IIS

Note: 
- You can put the code anywhere if you want to show the time stamp more friendly.
- Just StatusBar column has defined "Modified." field in the schema, it's original value of Modified column. So, if you do not find out the value of "Modified." that means, in the schema file, the field did not create a reference to original value Modified.
- You also don't care about the LCID of site or user locate, because the value of "Modified." always return the value in 1033 regional and the format function based on this column to show friendly.

Friday, October 14, 2011

Access denied for Anonymous users with custom xslt

SharePoint Bug

Sometime I had a stress with SharePoint customization, especially on XSLT data transform.
My scenarios is:
- Create a custom view for any list.
- Customize XSLT to render UI for my stituation.
My Problem is:
- With authenticated users, it works fine and smoothly
- Got a notice: Access denied. You do not have permission to perform this action or access this resource for Anonymous users.



I am a "SharePointism", so the first thing I looked into the SharePoint log file. it's very lucky, I got the message: "Error while executing web part: System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))     at Microsoft.SharePoint.Library.SPRequest.UpdateWebPartCache(String bstrWebUrl, Boolean bAllUsers, String bstrID, Byte[]& ppsaData, Boolean fOMCall)     at Microsoft.SharePoint.WebPartPages.SPWebPartManager.CacheWriteInternal(Guid storageKey, Byte[] cacheData, Storage storage, Boolean omCall)     at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.get_CustomizedXsl()     at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.LoadXslCompiledTransform(WSSXmlUrlResolver someXmlResolver)     at Microsoft.SharePoint.WebPartPages.DataFormWebPart.GetXslCompiledTransform()     at Microsoft.SharePoint.WebPartPages.DataFormWebPart.PrepareAndPerformTra..."

Just guess that because I turned on the "Data Web Part Caching" and it seems turned on automatically. So, I disable (remove the checked) for this button. And....oh la la... it still doesn't work. However, we should not do like that because the message from SharePoint is not able to update "Cache". So, I tried to change the value CacheXslStorage="false" and ViewFlag="8", but it still end up with "Access denied".

However, i will work fine if there is an authenticated user view the blog detail first, then everybody can view this post without error. Maybe it's WAD or Bug of SharePoint 2010.

Update: We should not apply the cusomize xslt to ListXsltViewWebPart by UI in toolpane. We should open site by SPD, then change the property named "GhostedXslLink" is our customized xsl. This xsl is in layout/xsl folder of 14/hive. The content of this xsl file has reference to customized xslt.

Hope this help

Tuesday, May 10, 2011

How to format datetime in SharePoint XSLT

In SharePoint (both of 2007 and 2010), Microsoft has implemented  XSLT 1.0 into CQWP (Content Query WebPart) and parse xsl file.

You can find out these file at 14\TEMPLATE\LAYOUTS\XSL, you will see some xsl files such as main.xsl, thread.xsl,... For now, you change reference version of xslt for these files, you will get an error because CQWP only understand the structure of XSLT 1.0. So, there are a lot of limitation to work on DateTime, String,...and other functionings of XSLT 2.0.

However, in SharePoint you can use an alias to get somes already formatted by using ddwrt namespance. Detail for more

It's very easy to use:

<xsl:value-of select="ddwrt:FormatDateTime('2010-may-25', 'G', 1033)"/>


First argument: Date original value
Second argument: Formatted expression, this argument has supported flag/string such as "d" (or 1) for date only as result as "M/d/yyyy"...
Third argument: regional setting. But no support for User Regional Setting


Thanks/