Wednesday 16 December 2009

SharePoint Explorer in SharePoint 2010

SharePoint Server Explorer is a new feature in Visual Studio 2010. You can navigate between all objects in SharePoint 2010 but you are limited to see their properties only. The way to extend this control is creating a new class which will inherit from IExplorerNodeTypeExtension.

Spec Explorer - advanced model-based specification and conformance testing tool

Spec Explorer 2010 is a tool that extends Visual Studio for modeling software behavior, analyzing that behavior by graphical visualization, model checking; and generating standalone test code from models. Behavior is modeled in two ways: by writing rule machines in C# (with dynamic data-defined state spaces) and by defining scenarios as action patterns in a regular-expression style. One of Spec Explorer’s major features is the ability to compose models written in these two styles. This technique enables users to slice out test cases from large state machines by defining relevant scenarios, thus tackling the notorious state-space explosion problem pervasive in model-based testing. Spec Explorer also supports combinatorial interaction testing with a rich set of features.

Doloto - AJAX application optimization tool

Doloto is an AJAX application optimization tool, especially useful for large and complex Web 2.0 applications that contain a lot of code, such as Bing Maps, Hotmail, etc. Doloto analyzes AJAX application workloads and automatically performs code splitting of existing large Web 2.0 applications. After being processed by Doloto, an application will initially transfer only the portion of code necessary for application initialization.

The rest of the application's code is replaced by short stubs -- their actual function code is transferred lazily in the background or, at the latest, on-demand on first execution. Since code download is interleaved with application execution, users can start interacting with the Web application much sooner, without waiting for the code that implements extra, unused features.

http://msdn.microsoft.com/en-us/devlabs/ee423534.aspx

Monday 14 December 2009

How to Increase your VMware Hard Disk's size

Following command line works like a magic :)
vmware-vdiskmanager -x 15GB "C:\VMs\Win2008VM\SharePoint2010.vmdk"

Sunday 13 December 2009

Microsoft Project Code Named “Velocity” Community Technology Preview 3 (CTP3)

"Velocity" is a distributed in-memory application cache platform for developing scalable, high-performance applications. "Velocity" can be used to cache any common language runtime (CLR) object and provides access through simple APIs. The key aspects of "Velocity" are distributed cache performance, scalability, and availability.

Saturday 12 December 2009

How to add parameters from different sources to DataFormWebPart

Although DataFormWebPart supports several ways to get such as QueryString, Control values, CAML variable etc, There are some cases we need to assign parameters from codebehind. I am not going to show all the scenarios but I will give you hint how you can extend dataform webpart to allow taking parameter variables from different sources.

The first thing we need to do is, creating a new class which will inherit from DataFormWebPart.

using System;
using System.Text;
using Microsoft.SharePoint.WebPartPages;
public class EnhancedDataFormWebPart : DataFormWebPart
{
}

The way we do is, replacing ParameterBindings string property inside of DataFormWebPart. This property is a xml string. We will load it as xml document and use following properties to make it accessible in our code.

XmlDocument _ParameterBindingsXmlDocument = null;
XmlDocument ParameterBindingsXmlDocument
{
get
{
if (_ParameterBindingsXmlDocument == null)
{
_ParameterBindingsXmlDocument = new XmlDocument();
_ParameterBindingsXmlDocument.LoadXml("" + this.ParameterBindings + "");
}
return _ParameterBindingsXmlDocument;
}
}

XmlNode _ParameterBindingsXmlNode = null;
XmlNode ParameterBindingsXmlNode
{
get
{
if (_ParameterBindingsXmlNode == null)
{
_ParameterBindingsXmlNode = ParameterBindingsXmlDocument.SelectSingleNode("/ParameterBindings");
}
return _ParameterBindingsXmlNode;
}
}

Lets also add this helper class to be able to manipulate xml document.

private void SetParameterBinding(string key, string value)
{
XmlNode node = ParameterBindingsXmlNode.SelectSingleNode("/ParameterBindings/ParameterBinding[@Name = '" + key + "']");
if (node == null)
{
XmlNode parameterBindingNode = ParameterBindingsXmlDocument.CreateElement("ParameterBinding");

XmlAttribute nameAtrribute = ParameterBindingsXmlDocument.CreateAttribute("Name");
nameAtrribute.Value = key;
XmlAttribute locationAttribute = ParameterBindingsXmlDocument.CreateAttribute("Location");
locationAttribute.Value="None";
XmlAttribute defaultValueAttribute = ParameterBindingsXmlDocument.CreateAttribute("DefaultValue");
defaultValueAttribute.Value = value;

parameterBindingNode.Attributes.Append(nameAtrribute);
parameterBindingNode.Attributes.Append(locationAttribute);
parameterBindingNode.Attributes.Append(defaultValueAttribute);

ParameterBindingsXmlNode.AppendChild(parameterBindingNode);
}
else
{
node.Attributes["DefaultValue"].Value = value;
}
}

Here is the key method we are going to use. This is where we set our custom properties. Via using this you can set your binding parameters from anywhere you like (web.config property, sql data etc)

private void SetPropertiesAsParameterBindings()
{
SetParameterBinding("WebPartTitle", this.Title);
SetParameterBinding("WebPartTitleURL", this.TitleUrl);
this.ParameterBindings = ParameterBindingsXmlNode.InnerXml;
}

Last thing we should do is calling this method on OnLoad method of the webpart.

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SetPropertiesAsParameterBindings();
}

Now it is time to replace DataFormWebPart with our EnhancedDataFormWebPart.

Add this line into your page and replace values with appropriate values from your solution.

Here the webpart comes :)

<ExWebParts:EnhancedDataFormWebPart id="TasksDisplayDataFormWebPart" runat="server"
FrameType="None" NoDefaultStyle="TRUE" ViewFlag="1" Title="Tasks"
DisplayName="Tasks" __markuptype="vsattributemarkup"
__WebPartId="{418745AA-67C6-481e-95F9-5C824AD0CE61}" WebPart="true">

<DataSources>

<SharePointWebControls:SPDataSource runat="server" DataSourceMode="List"
UseInternalName="true" selectcommand="<View/>" id="SPDataSource1"><SelectParameters><webpartpages:DataFormParameter Name="ListName" ParameterKey="ListName"
PropertyName="ParameterValues" DefaultValue="Tasks"/>

</SelectParameters>


</SharePointWebControls:SPDataSource>

</DataSources>

<ParameterBindings>
<ParameterBinding Name="ListName" Location="None" DefaultValue="Tasks" />
<ParameterBinding Name="dvt_apos" Location="Postback;Connection" />
<ParameterBinding Name="UserID" Location="CAMLVariable"
DefaultValue="CurrentUserName" />
<ParameterBinding Name="Today" Location="CAMLVariable" DefaultValue="CurrentDate" />
<ParameterBinding Name="WebPartTitle" Location="None" DefaultValue="{Title}" />
<ParameterBinding Name="WebPartTitleURL" Location="None" DefaultValue="{TitleUrl}" />
</ParameterBindings>

<datafields>@ID,ID;@ContentType,ContentType;@Title,Title;@Modified,Modified;@Created,Created;@Author,Author;@Editor,Editor;@_UIVersionString,_UIVersionString;@Attachments,Attachments;@LinkTitleNoMenu,LinkTitleNoMenu;@LinkTitle,LinkTitle;@FileRef,FileRef;@FileDirRef,FileDirRef;@FSObjType,FSObjType;@ProgId,ProgId;@ScopeId,ScopeId;@DocIcon,DocIcon;@MetaInfo,MetaInfo;@Priority,Priority;@Status,Status;@PercentComplete,PercentComplete;@AssignedTo,AssignedTo;@TaskGroup,TaskGroup;@Body,Body;@StartDate,StartDate;@DueDate,DueDate;</datafields>

<XslLink>/Style Library/XSL Style Sheets/test.xsl</XslLink>

</ExWebParts:EnhancedDataFormWebPart>



Last thing you need to do is adding following lines into Style Library/XSL Style Sheets as test.xsl file .



<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0"
exclude-result-prefixes="xsl msxsl ddwrt"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:ddwrt2="urn:frontpage:internal">

<xsl:output method="html" indent="no"/> <xsl:decimal-format NaN=""/>

<xsl:param name="dvt_apos">'</xsl:param>

<xsl:param name="WebPartTitle">

</xsl:param>

<xsl:param name="WebPartTitleURL"></xsl:param> <xsl:variable
name="dvt_1_automode">0</xsl:variable>

<xsl:template match="/">
WebPartTitleURL:<xsl:value-of select="$WebPartTitleURL"></xsl:value-of>
WebPartTitle:<xsl:value-of select="$WebPartTitle"></xsl:value-of>
<xsl:call-template name="dvt_1"/> </xsl:template>

<xsl:template name="dvt_1">

<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>

<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">

</xsl:if>

<xsl:call-template name="dvt_1.body">

<xsl:with-param name="Rows" select="$Rows"/>

</xsl:call-template>

</xsl:template>

<xsl:template name="dvt_1.body">

<xsl:param name="Rows"/>

<xsl:for-each select="$Rows">

<xsl:call-template name="dvt_1.rowview"/>

</xsl:for-each>

</xsl:template>

<xsl:template name="dvt_1.rowview"> Title: <xsl:value-of select="@Title"/><br/>

</xsl:template>

</xsl:stylesheet>