Archive

Archive for the ‘Sharepoint’ Category

Adding expand/collapse using XSLT in SharePoint 2013

June 18, 2015 Leave a comment

Hi,

There is a scenario to add expand/collapse functionality in the Business Data Connectivity Webpart

which pulls the data from SQL.

In the BDC webpart we can customize the look & feel using XSL Editor.

In XSL create your own template as given,


<xsl:template name=”CustomRowview”>
<tr id=”group0{generate-id()}”>
<td class=”ms-gb” colspan=”99″ style=”width:100%”>
               <a onclick=”javascript:ExpGroupBy(this);return false;” href=”javascript:”>
               <img border=”0″ name=”expand” alt=”expand” src=”/_layouts/images/plus.gif”/>
               </a>
               <xsl:value-of select=”@Last_Name” disable-output-escaping=”yes”/>,
               <xsl:value-of select=”@First_Name” disable-output-escaping=”yes”/>
</td>
</tr>

<tr style=”display:none;”>
<td style=”width: 50%; height: 20px”>
<table><tbody>

<tr>
<td><span style=”margin-left:5px;”>Item1:</span>
<xsl:value-of select=”@Item1Value” disable-output-escaping=”yes” /></td>

</tr>

<tr>
<td><span style=”margin-left:5px;”>Item2:</span>
<xsl:value-of select=”@Item2Value” disable-output-escaping=”yes” /></td>

</tr>

</tbody>

</table>

</td>

</tr>

</xsl:template>


where,

ExpGroupBy(this) – internal javascript function called for expand/collapse.

Then you can call your newly created custom template in place of default template as given,

<xsl:for-each select=”$Rows”>
<xsl:if test=”position() &gt;= $FirstRow and position() &lt;= $LastRow”>
<xsl:call-template name=”CustomRowview” />
</xsl:if>
</xsl:for-each>

Reference:

http://sympmarc.com/2010/11/05/adding-expandcollapse-logic-to-your-data-view-web-parts-dvwps-the-easy-way/

Advertisements

Custom ASPX page in SharePoint 2013

June 18, 2015 Leave a comment

Hi All,

We might be having a scenario to create custom ASPX Wiki page in SharePoint without inheriting SharePoint branding.In this case sp.js reference to be added explicitly in order to connect to SharePoint Lists etc. Below are the files to be referred in the HEAD section of ASPX page,so that you can make use of clientcontext and other SP.JS functionalities.

<script type=”text/javascript” src=”/_layouts/sp.init.js”></script>
<script src=”/_layouts/1033/init.js” type=”text/javascript”></script>
<script src=”/_layouts/MicrosoftAjax.js” type=”text/javascript”></script>
<script src=”/_layouts/sp.core.js” type=”text/javascript”></script>
<script src=”/_layouts/sp.runtime.js” type=”text/javascript”></script>
<script src=”/_layouts/SP.UI.Dialog.js” type=”text/javascript”></script>
<script src=”/_layouts/sp.js” type=”text/javascript”></script>
<script type=”text/javascript” src=”/_layouts/ScriptResx.ashx?name=sp.res&culture=en-us”></script> 

Configuration Values in SharePoint 2010 Timer Job


Hi All,

                      1. When we develop custom timer job in SharePoint 2010 most of the time we might need to store some config

values    which    can  be utilized while activating the feature or during the execution of the timer job.

                      2. Some of us may think about the use of config list and fetch the data from there when we move the package

from dev.  environment to other environment we should also carry over the configuration list along with site url where the

config list resides.

                      3. In order to remove from these kind of pain SharePoint is having an awesome feature called Property bag .

MSDN reference contains Property bag implementation in details

http://msdn.microsoft.com/en-us/library/ee855123(v=office.12).aspx

Below is Powershell script which can be used to create property bag values

-----------------------------------------------------------------------------------------------------------------------------

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq ‘Microsoft.SharePoint.Powershell’}
if ($snapin -eq $null) {
Write-Output “Loading SharePoint Powershell Snapin”
Add-PSSnapin “Microsoft.SharePoint.Powershell”
}

# —————————————————–
Write-Output “Task initialized…”

$weburl= “http://../sites/test/Implemetnation”
$url= [System.Web.HttpUtility]::UrlDecode($weburl)
$site = New-Object Microsoft.SharePoint.SPSite($url)
$rootWeb = $site.RootWeb

Write-Host -foregroundcolor Green “The current Site”$rootWeb

$PropertyKey = “siteUrl”

$webvalue= “/Implemetnation”
$PropertyValue = [System.Web.HttpUtility]::UrlDecode($webvalue)

 

$rootWeb.AllowUnsafeUpdates = $true;
$Currentvalue = $rootWeb.Properties[$PropertyKey]
Write-Host -foregroundcolor Green “The current value of the property bag is “$Currentvalue

if (!$rootWeb.Properties.ContainsKey($PropertyKey))
{
$rootWeb.Properties.Add($PropertyKey, $PropertyValue);
}
else
{
$rootWeb.Properties[$PropertyKey] = $PropertyValue;
}

$rootWeb.Properties.Update();
$rootWeb.Update();
$rootWeb.AllowUnsafeUpdates = $false;

$UpdatedValue =  $rootWeb.Properties[$PropertyKey]
Write-Host -foregroundcolor Green “Value of the property bag is updated with ” $UpdatedValue
if ($rootWeb -ne $null)
{
$rootWeb.Dispose()

}
If ($site -ne $null)
{
$site.Dispose();
}

Write-Host -foregroundcolor Green “Script has finished executing ”
Write-Output “Task completed…”

———————————————————————————————————————————————————————-

 

Xenu sleuth for capturing hard-coded url

March 16, 2014 Comments off

Recently when i was working in a SharePoint migration 2007 to 2010 project faced a challenging scenario as given.

Our Sharepoint 2007 application contains hard-coded url in many entities like Lists,WebPart Pages etc. During the course of migration we need to update all the hard-coded url with the updated relative url based on the new environment.

1) Just to kick start we have decided to find out the pages contains the Content Editor WebPart which have

reference to the old url. There is a powershell script we have customized based on our requirement to get the list of pages with

CEWP which meets our criteria.

2) Then we have developed a custom utility to replace the hard coded url with the updated url based on the result

obtained from step 1.

3)After all find & replace stuff we decided to ensure that there will be no reference to the hard coded urls in anywhere in the SharePoint application.

For this task there is a utility called “Xenu sleuth”  http://home.snafu.de/tilman/xenulink.html

It’s open tool that can be downloaded and installed in order to use the same. The instruction on how to use the tool also available in the above url. One  drawback what we have faced is we are not able to get the Referrer of the hard coded url (i.e. the page in which the hard coded url is referred.)

But it’s a noteworthy tool in order to verify  hard coded Url during the course of migration.

Categories: Sharepoint

Add Webpart in sharepoint wiki page

June 22, 2013 1 comment

Recently one of my friend asked about adding a sharepoint document library webpart in to

a Wiki page. Wiki page still allows you to add a webpart by Edit page but the list of webparts are limited

when compared with Webpart Page. As a workaround we have created a new webpart page and added the

document library wbpart.Then using Sharepoint designer opened the webpart page and copy the Webpart

content and pasted into Wiki Page.

While doing so you need to make sure there are pre-requisite sharepoint specific javascript file

should be loaded for the webpart to function properly.

<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js”>
</script>
<script type=”text/javascript” src=”_layouts/sp.runtime.js”></script>
<script type=”text/javascript” src=”_layouts/sp.js”></script>
<script type=”text/javascript”>
// Continue your program flow here.
</script>

Sharepoint 2010 Discussion Board using REST service

November 10, 2012 Leave a comment

This post address about accessing sharepoint 2010 discussion board using listdata.svc

i)Creating new discussion

<?xml version=”1.0″ encoding=”utf-8″ standalone=”yes”?>
<entry xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices” xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata” xmlns=”http://www.w3.org/2005/Atom“>

<category scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme” term=”Microsoft.SharePoint.DataService.TeamDiscussionItem” />
  <title type=”text”>Hello REST</title>
  <updated>0001-01-01T00:00:00Z</updated>
  <author>
    <name />
  </author>
  <id />
  <content type=”application/xml”>
    <m:properties>
      <d:Body m:null=”true” />
      <d:ContentType>Discussion</d:ContentType>
      <d:ContentTypeID>0x0120</d:ContentTypeID>
      <d:Created m:type=”Edm.DateTime”>2012-07-18T20:42:56.7959323-07:00</d:Created>
      <d:CreatedById m:type=”Edm.Int32″ m:null=”true” />
      <d:EMailSender m:null=”true” />
      <d:Id m:type=”Edm.Int32″>0</d:Id>
      <d:LastUpdated m:type=”Edm.DateTime” m:null=”true” />
      <d:Modified m:type=”Edm.DateTime” m:null=”true” />
      <d:ModifiedById m:type=”Edm.Int32″ m:null=”true” />
      <d:ModifiedById0 m:type=”Edm.Int32″ m:null=”true” />
      <d:Owshiddenversion m:type=”Edm.Int32″ m:null=”true” />
      <d:Path m:null=”true” />
      <d:Subject>REST request for new thread</d:Subject>
      <d:Version m:null=”true” />
    </m:properties>
  </content>
</entry>

ii)Reply to discussion

While replying to the existing thread need to make sure the Path consist of the title of the discussion

to which we are responding. Also the  content type attribute should be given as Message

<?xml version=”1.0″ encoding=”utf-8″ standalone=”yes”?>
<entry xmlns:d=”http://schemas.microsoft.com/ado/2007/08/dataservices” xmlns:m=”http://schemas.microsoft.com/ado/2007/08/dataservices/metadata” xmlns=”http://www.w3.org/2005/Atom“>
  <category scheme=”http://schemas.microsoft.com/ado/2007/08/dataservices/scheme” term=”Microsoft.SharePoint.DataService.TeamDiscussionItem” />
  <title type=”text”>Reply for REST request for new thread</title>
  <updated>0001-01-01T00:00:00Z</updated>
  <author>
    <name />
  </author>
  <id />
  <content type=”application/xml”>
    <m:properties>
      <d:Body>Reply for REST request for new thread</d:Body>>
      <d:ContentType>Message</d:ContentType>
      <d:ContentTypeID>0x0107</d:ContentTypeID>
      <d:Created m:type=”Edm.DateTime”>2012-07-18T20:42:56.7959323-07:00</d:Created>
      <d:CreatedById m:type=”Edm.Int32″ m:null=”true” />
      <d:EMailSender m:null=”true” />
      <d:Id m:type=”Edm.Int32″>0</d:Id>
      <d:LastUpdated m:type=”Edm.DateTime” m:null=”true” />
      <d:Modified m:type=”Edm.DateTime” m:null=”true” />
      <d:ModifiedById m:type=”Edm.Int32″ m:null=”true” />
      <d:ModifiedById0 m:type=”Edm.Int32″ m:null=”true” />
      <d:Owshiddenversion m:type=”Edm.Int32″ m:null=”true” />
      <d:Path>/<SITE>/Lists/Team Discussion/REST request for new thread</d:Path>
      <d:Subject>REST request for new thread</d:Subject>
      <d:Version m:null=”true” />
    </m:properties>
  </content>
</entry>

Sharepoint 2010 Discussion Board using SOAP service

November 10, 2012 2 comments

Accessing Read/Reply to the thread in Sharepoint Discussion board.

1) Using SOAP:

Folowing the soap request format to get read all the threads from discussion board

based on requested user permission.

<?xml version=”1.0″ encoding=”utf-8″?>
<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema“>
<soap:Body>
<GetListItems xmlns=”http://schemas.microsoft.com/sharepoint/soap/“>
<listName>{46622757-67AC-4C9B-A715-69C46A8E6D96}</listName>
</GetListItems>
</soap:Body>
</soap:Envelope>

where,

–  <listName> is a GUID for the list extracted from list settings url.

To create a new discussion

<?xml version=”1.0″ encoding=”utf-8″?>
<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema“>
<soap:Body>
<AddDiscussionBoardItem xmlns=”http://schemas.microsoft.com/sharepoint/soap/“>
<listName>{46622757-67AC-4C9B-A715-69C46A8E6D96</listName>
<message>TWVzc2FnZS1JRDogZmMxMjY1YzMtNzcxYi00MjkyLTg3ZDUtNjY2NGU3MTkyZTVhClRocmVhZEluZGV4OiA0NGFkYTZmOS0zNmFiLTQzNjAtOTM3ZC1hNDA0ODc4MmFkYTYKU3ViamVjdDogU09BUCBEaXNjdXNzaW9uCk1pbWUtVmVyc2lvbjogMS4wCkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOA==</message>
</AddDiscussionBoardItem>
</soap:Body>
</soap:Envelope>

where,

<message>is base 64 encoded string for below mime type,

Message-ID: gc1265c3-772x-4292-87d5-6664e7192e5a
ThreadIndex: 43ada6f9-35bc-4360-937d-a4048782ada2
Subject: SOAP New Discussion
Mime-Version: 1.0
Content-type: text/plain; charset=UTF-8

Reply to existing discussion

<?xml version=”1.0″ encoding=”utf-8″?>
<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema“>
<soap:Body>
<UpdateListItems xmlns=”http://schemas.microsoft.com/sharepoint/soap/“>
<listName>{46622757-67AC-4C9B-A715-69C46A8E6D96}</listName>
<updates>
<Batch RootFolder=”/<SITE>/Lists/Team Discussion/Soap Discussion” OnError=”Continue” xmlns=””>
<Method ID=”0″ Cmd=”New”>
<Field Name=”Body”>SOAP Reply</Field>
<Field Name=”ContentType”>Message</Field>
<Field Name=”DiscussionTitleLookup”>22;#Soap Discussion</Field>
</Method>
</Batch>
</updates>
</UpdateListItems>
</soap:Body>
</soap:Envelope>

where,

–  <listName> is a GUID for the list extracted from list settings url.