Skip to main content

How to initialize the SharePoint Client Context in SharePoint Apps (Provider Hosted / SharePoint Hosted) using JSOM (JavaScript Object Model)

 

SharePoint Provider Hosted Apps

First of all we need to understand the SharePoint Provider Hosted hosting blocks.

image

Provider hosted involves two hosting domains (ex host, sphost). thus request sending to host to sphost considering as cross domain request.

For cross domain request we need to provide SPAppWebUrl to initialize the context. SPAppWebUrl  is available in Url.

Ex:-

https://host.azurewebsites.net/pages/default.aspx?SPHostUrl=https:%2F%2Fsphost.sharepoint.com%2Fsites%2app&SPLanguage=en-US&SPClientTag=0&SPProductNumber=16.0.3417.1223&SPAppWebUrl=https:%2F%2Fsphost-265535272e9c8d.sharepoint.com%2Fsites%2Fapp%2FSample&Source=https://app.azurewebsites.net/pages/default

we can get AppWebUrl by accessing Url parameter. following shows a utility function for getting Url parameter.

function getQueryStringParameter (paramToRetrieve) = {
    var params = document.URL.split("?")[1].split("&");
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve)
            return singleParam[1];
    }
    return "";
};

This will initiate the client context using remote web Url.



var spAppWebUrl = decodeURIComponent(getQueryStringParameter("SPAppWebUrl"));
var ctx = new SP.ClientContext(spAppWebUrl);
var factory = new SP.ProxyWebRequestExecutorFactory(spAppWebUrl);
ctx.set_webRequestExecutorFactory(factory);
var web = ctx.get_web();
 
ctx.executeQueryAsync(
    function () {
           alert("sucess"); },
    function (a, b) {
           alert("error");  }
);

 


SharePoint Hosted Apps


SharePoint Hosted app does not have separate hosting server. SharePoint hosted apps run on the same SharePoint server. thus client context initialization does not need to provide the Url.



var ctx = new SP.ClientContext.get_current();
var web = _sa.ctx.get_web();
ctx.executeQueryAsync(
    function () {
           alert("sucess"); },
    function (a, b) {
           alert("error");  }
);

Comments

Hi! Quick question that's entirely off topic. Do you know how to make your site mobile friendly? My site looks weird when browsing from my apple iphone. I'm trying to find a template or plugin that might be able to correct this problem. If you have any suggestions, please share. Many thanks!
It's really very complex in this busy life to listen news on TV, therefore I only use the web for that purpose, and take the newest information.
I've been surfing online more than 3 hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. Personally, if all site owners and bloggers made good content as you did, the internet will be a lot more useful than ever before.

Popular posts from this blog

How to Link Two List and Create a combine view in the SharePoint 2010

In this way you can join multiple list together and can create a combine view. for an example assume that you are managing a list for some events. And also you are having a participants in separate list. Thus you want to join the two list and create a composite view. SharePoint 2010 allows you to create this kind of view using  Linked Data Source. in this approach you can create your own custom list in the SharePoint. How to Create a Linked Data source Go to SharePoint designer and  go to the link called data sources. And Click the Linked Data Source button in the ribbon. Then SharePoint designer will prompt following kind of a dialog. In there add two list, that you wan to linked together. I'm adding airline schedule and booking list. those are the two list that i wan to merge. then click next. And it will guide you another screen. it will ask you to select either Merge Merge use to combine list which are having same columns definition. for and example we can say th

Motion Eye Docker compose File

Docker compose files are comes in handy when considering container orchestration. Below example shows my docker compose files and folder structure. ---- Your Folder (motioneye)   -- etc   -- lib   -- docker-compose.yaml You can run the docker compose file using docker-compose -d , and etc and lib folder will be automatically populated in the initiation. --- Below shows the content of the docker-compose.yaml file. version: '3' services:   nodered:    image: "ccrisan/motioneye:master-amd64"    container_name: motioneye    restart: always    user: root    ports:      - 8765:8765    volumes:      - "/etc/localtime:/etc/localtime:ro"      - "./etc:/etc/motioneye"      - "./lib:/var/lib/motioneye"

How to get Username , UserID in CAML Query

If you are want to get the userID you can simple use following code. <Where>    <Eq>       <FieldRef Name='userfieldname' />       <Value Type='Integer'>            <UserID Type='Integer' />       </Value>    </Eq> </Where> in here you should declare the UserID variable before it uses. normally If you make a user filter in the SharePoint designer it will automatically create the parameter in parameter binding section in the web part. <ParameterBinding Name="UserID" Location="CAMLVariable" DefaultValue="CurrentUserName"/> But assume you want to filter using a user name and the field is not a persongroup feild and it is just a text field. then you can use following query to archive it. <Where>    <Eq>       <FieldRef Name='userfieldname' />       <Value Type=’Text’>            <UserID Type=’Text’/>       </Value>    </Eq> </Wh