Skip to main content

SharePoint (MOSS) AssetPicker (AssetURLSelector) customization

Couple of weeks back I was asked to customize the asset picker to suit client's requirements. The requirement was something like this : there is an ASP.net application running on application server, on click of a button, it should open up the assetpicker from MOSS (SharePoint environment). After the user selects a link and clicks on "OK" button in asset picker, the selected URL must be populated in a label.

The challenges faced are related to different server farms of hosted applications. asp.net application is on application server and assetpicker is on SharePoint server.

Below are the steps followed to achieve the desired result.

1. CALLINGPAGE.ASPX (this is an plain asp.net application page)

This page is part of asp.net application which will be hosted in application farm. This page consists of a “Browse” button on click of which the asset picker will be displayed. To achieve the desired result, we have put an iFrame in the HTML code. This iFrame will not be displayed to the user, but it will be used only to redirect the control to the AutoLaunchPickerDialog.aspx page.





Once the user clicks on the “Browse” button, OpenPicker() javascript function will be called. This javascript function will find the iFrame control and assign the source property with configurable value.


function OpenPicker()
{
document.getElementById("assetSelectorFrame").src = 'GetConfigValueforURL';
}


The configurable value for the source of iFrame is defined in web.config file as following.





The CallingPage.aspx page also has a label “lblAssetURL” which will be assigned with the selected URL by “AssetSelectorSelected.htm” page.

2 AUTOLAUNCHPICKERDIALOG.ASPX PAGE

AutoLaunchPickerDialog.aspx page will put under the Layouts folder in 12 hive folder of SharePoint server. In this page an instance of AssetURLSelector is created. On Pre render event of this page, a method is called which will register a client start up script. This start up script will get the script to launch the asset picker by executing “GetClientLaunchPickerReference” method of asset URL selector. A client call back script is also registered for the asset URL selector. The asset URL selector’s “GetClientLaunchPickerReference” method expects a parameter of the URL. This URL can be a already selected URL or it will point to the current location of the page.


private AssetUrlSelector assetSelector;
private string ScriptGetAssetUrlValue = "";

protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
assetSelector = new AssetUrlSelector();
GenerateAssetUrlSelectorLaunchScript();
}

private void GenerateAssetUrlSelectorLaunchScript()
{
if (Request.QueryString["SelectedPath"] == "")
{
ScriptGetAssetUrlValue = "window.location.href";
}
else
{
ScriptGetAssetUrlValue = "'" + Request.QueryString["SelectedPath"] + "'";
}
this.assetSelector.Page = this.Page;
this.assetSelector.ID = "assetUrlSelector";

this.assetSelector.ClientCallback = "function(newAssetUrl, newAssetText, configObject, returnedValue) { window.location = '" + Request.QueryString["targetUrl"] + "' + newAssetUrl; }";

ClientScript.RegisterStartupScript(typeof(AutoLaunchPickerDialog), "Loading", "");
}



To the asset URL selector’s “ClientCallback” property, a javascript function is assigned. This function will assign newly selected URL to the location which is part of the query string. This query string will contain the location to redirect after the URL is selected. This will be the “AssetSelectorSelected.htm” page.

3 ASSETSELECTORSELECTED.HTM PAGE

The asset selector selected page is in application server. This html page will receive the selected URL as a query string from “AutoLaunchPickerDialog.aspx” page. On load of this page, a javascript function will be called. This function will read the query string and assign the value to the label in “CallingPage.aspx” page. Thus completing the entire process.


function Update()
{
window.parent.document.getElementById("lblAssetURL").innerHTML = getQueryStringValue("selectedAssetURL");
}

function getQueryStringValue(key)
{
searchString = window.location.search.substring(1);
searchStringSplit = searchString.split("&");
for (count=0;count

Comments

pdanan said…
Hello Vighnesh,
How about in WSS 3, Do you know something similar with AssetPicker/AssetURLSelector ?
Thanks,
purwo

Popular posts from this blog

Create list view - Conditional Formatting in SharePoint Designer 2010

In this example, we are going to format a column based on certain condition. Here I already have a list called Projects. I also have workflow associated with it. So whenever I create a new item in the list, workflow status column shows ‘In Progress’. Subsequently when the workflow in completed, the workflow status column shows ‘Completed’. For demonstration purpose, I will set the background color of workflow status column to yellow when the status is ‘In Progress’ and to green when the status is ‘Completed’. In SharePoint Designer open the site on which you are working. Click on ‘Lists and Libraries’ link. Choose the ‘Projects’ list. In SharePoint Designer Navigation, choose ‘Lists and Libraries’. In the list settings page, click on ‘New’ in ‘Views’ section. Provide appropriate name for the view and click OK. After choosing list, click on ‘New’ in the Views section. Give appropriate name to the list. Now click on any column, then in the ribbon, click on List View Tools-&g

SharePoint 2013 (SP 15) - Creating Custom Lists

As I am exploring SharePoint 2013, I found out that there are lot of things that are new and there are lot of thing that are old but presented in a different manner as compared to SharePoint 2010. For example, Site Actions was on the top left corner in SP 2010. But in SP 15 (SharePoint 2013) we dont have ‘Site Actions’ button. But instead we have a settings icon which is placed at top right corner. When you click on the settings icon select Add an App. This will basically allow you to add custom lists, documents libraries etc. Add an App is basically the same as More Options in SharePoint 2010. From now on custom lists & libraries will be called apps. Just like in Apple store or Android store you can develop apps for SharePoint and sell it. You can find more information here: http://officepreview.microsoft.com/en-us/store/apps-for-sharepoint-FX102804987.aspx When you click on Add an App you will be navigated to a different scree which will display different opti

Working with large xml files in c# .net

Working with large (huge) xml files is always a pain in the … The reason? These files can’t be loaded in to memory. On my desktop, where I have 2 gigs memory, I can’t open the file in even notepad. I was presented with a challenge recently to manipulate one such large xml file. The xml file was of 550+ MB. I know many would say I have seen bigger xml files than this. But the heart of the matter is if I can’t open 550+ MB file in notepad or in xmldocument in c#, then I can’t open any file bigger than this. And hence the logic to play with these files would remain same. The scenario: We have an xml file from which we want to remove a single node without removing its children. In the below sample xml fragment, the node has to be removed. The children nodes, must then be attached to ( node’s parent) node. One Two 100.22 GoodDay 3 4 Five 200.09 Cra