Start Sharepoint Designer site Workflow from javascript - sharepoint

Can we start Sharepoint Designer site Workflow from javascript button click?

For SharePoint 2013 workflow:
function StartWF() {
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/SP.WorkflowServices.WorkflowInstanceService.Current/StartWorkflowOnListItemBySubscriptionId(subscriptionId='BB20B816-2AEF-4299-B6BF-43910578BA8F',itemId=' " + $("#drpItem option:selected").text() + "')",
type: "POST",
contentType: "application/json;odata=verbose",
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function (data) {
alert('Workflow Trigger Successfully');
},
error: function (data) {
alert("Error");
}
});
}
Detailed information in this thread

I remember you can do this. Should be something line __workflowStart when executing postback. You can take a look at this link for more details.
https://social.msdn.microsoft.com/Forums/office/en-US/817a4366-939c-47c6-bfbc-375a00dfcaf2/genfireserverevent-workflowstart-and-parameters?forum=sharepointcustomizationlegacy
dwrt:GenFireServerEvent is translated into JavaScript with __doPostBack, by the way.

Related

Update sharepoint status list item using web service

I am using an old SharePoint 2010 product.
Inside my site, I created a Status list which looks like this:
I found some Web Service API method which allows me to update some records like UpdateListItems() or UpdateList()
Can you please tell me how to build an update request to update the Status field based on the CaseNumber# field?
We can use listdata.svc to update list item based on the casenumber field. The following example code for your reference, modify the variables and add the code into a content editor web part, click the button to update list item.
<script src="https://code.jquery.com/jquery-1.12.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
function updateListItem() {
var siteUrl="http://sp2010";
var listName="StatusList";
var caseNumber="456798";
var itemProperties={
'Status': 'Approval'
};
$.ajax({
url: siteUrl + "/_vti_bin/listdata.svc/"+listName+"?$filter=CaseNumber eq '"+caseNumber+"'",
type: "GET",
headers: {
"Accept": "application/json;odata=verbose",
},
success: function (data) {
var item=data.d.results[0];
$.ajax({
type: 'POST',
url: item.__metadata.uri,
contentType: 'application/json',
processData: false,
headers: {
"Accept": "application/json;odata=verbose",
"X-HTTP-Method": "MERGE",
"If-Match": item.__metadata.etag
},
data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
success: function (data) {
alert("succeeded.");
},
error: function (data) {
alert(JSON.stringify(data));
}
});
},
error: function (err) {
console.log(JSON.stringify(err));
}
});
}
</script>
<input type="button" value="update list item" onclick="updateListItem()"/>

Sharepoint View list

I have several lists in SharePoint, and each list has a number of views
How can I get view list items with value in SharePoint using REST API?
Can I get this data through CSOM?
When I use this method, I have this output :
http://win-lfl4bgulf29/_api/lists/getbytitle('EvertList')/views
But I'm looking for that
You can use the Endpoint like below to view list item data:
_spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbyTitle('EvertList')/items"
Ajax call like this:
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbyTitle('Cars')/items",
type: "GET",
contentType: "application/json;odata=verbose",
headers: {
"Accept": "application/json;odata=verbose"
},
success: function (data) {
console.log(data.d.results);
},
error: function (data) {
alert("Error");
}
});
Responsed Json in Console:

How to set sitecollection administrator to user in SharePoint online using rest api

Is it possible set Site Collection Administrator to user in SharePoint online using rest api ?
You first need to add the user to the site collection via EnsureUser method and after that you need to set him as Admin by setting his IsSiteAdmin property to true as mentioned by user #MarkMascolino.
We would require user's email before executing our code. Also, the user executing this REST call needs to be an admin himself.
The code would be as below, please try and modify it as per your user and site collection:
function ensureUser(webUrl,loginName)
{
var payload = {
'logonName': loginName,
};
return $.ajax({
url: webUrl + "/_api/web/ensureuser",
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(payload),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"accept": "application/json;odata=verbose"
}
});
}
function setSiteAdmin(webUrl,userId){
var payload = {
"__metadata": { "type": "SP.User" },
"IsSiteAdmin": true
};
return $.ajax({
url: webUrl + "/_api/web/getuserbyid("+ userId +")",
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(payload),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"accept": "application/json;odata=verbose",
"X-HTTP-Method": "MERGE"
}
});
}
var loginName = 'i:0#.f|membership|user.name#tenantname.onmicrosoft.com'
ensureUser(_spPageContextInfo.siteAbsoluteUrl,loginName)
.done(function(data)
{
console.log('User has been added');
console.log(data);
setSiteAdmin(_spPageContextInfo.siteAbsoluteUrl,data.d.Id)
.done(function(response){
console.log(response);
console.log("set user as admin");
}).fail(function(error){
console.log(error);
});
})
.fail(function(error){
console.log('An error occured while adding user');
});
Ensure User code Reference - Sharepoint 2013: EnsureUser via REST API
Yes it is possible. This page details the RESTful API for users and groups:
https://msdn.microsoft.com/en-us/library/office/dn531432.aspx#bk_User
In particular take note of how to use POST to make a change to a user. Also if you look at the fields that are available you will see that field IsSiteAdmin is of type Boolean, is Readable & Writeable and has the following description:
Gets or sets a Boolean value that specifies whether the user is a site collection administrator.

Get ContentType of documentSet using Javascript(CSOM)

How can i access all the contenttypes for a particular docset using javascript
Using server model we can achieve it by
var ctIds = ds.ContentTypeTemplate.AllowedContentTypes;
//1
foreach (SPContentTypeId ctId in ctIds)
{
Console.WriteLine(ctId); //print Content Type Id
}
But how to achieve this in CSOM
You can call a rest api call on that said list:
jQuery.ajax({
url: "_api/web/Lists/getbytitle('LIST NAME')/items?$select=Title,ContentTypeId",
type: "GET",
cache: false,
headers: {
"accept": "application/json; odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
},
success: function(data) {
// CT in data.d.ContentTypes.results
},
error: function() {
}});
This will return all CT that are associated with this document set list.

SharePoint 2010 REST API JQUery Insert, Update, Delete

Can anyone explain or point me to a link with samples of doing Update, Delete using Jquery with the SharePoint 2010 Rest API?
I have the insert working and of course queries since the MSDN documentation explains and every tutorial on the net explains queries but just wondering if anyone ever inserts, updates, deletes data instead of only samples and tutorials on querying? Yes I know I can use the CSOM but I want to learn how this is done via jquery and sharepoint rest?
Also I want to use Merge for updating.
Here's the working insert code:
function insertMilestone() {
var mileStonesListUrl = "/_vti_bin/listdata.svc/Milestones";
var milestone = {};
milestone.Title = "Testing from REST";
var entry = JSON.stringify(milestone);
$.ajax({
type: "POST",
url: mileStonesListUrl,
data: entry,
contentType: "application/json; charset=utf-8",
error: function (xhr) {
alert(xhr.status + ": " + xhr.statusText);
},
success: function () {
getAll();
}
});
}
How to perform CRUD operations using SharePoint 2010 REST Interface
Create
In order to perform a Create operation via REST, you must perform the following actions:
Create an HTTP request using the POST verb.
Use the service URL of the list to which you want to add an entity as
the target for the POST.
Set the content type to application/json.
Serialize the JSON objects that represent your new list items as a
string, and add this value to the request body
JavaScript example:
function createListItem(webUrl,listName, itemProperties, success, failure) {
$.ajax({
url: webUrl + "/_vti_bin/listdata.svc/" + listName,
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose"
},
success: function (data) {
success(data.d);
},
error: function (data) {
failure(data.responseJSON.error);
}
});
}
Usage
var taskProperties = {
'TaskName': 'Order Approval',
'AssignedToId': 12
};
createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
console.log('Task' + task.TaskName + ' has been created');
},
function(error){
console.log(JSON.stringify(error));
}
);
Read
In order to perform a Read operation via REST, you must perform the following actions:
Create an HTTP request using the GET verb.
Use the service URL of the list item to which you want to add an
entity as the target for the GET.
Set the content type to application/json.
JavaScript example:
function getListItemById(webUrl,listName, itemId, success, failure) {
var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
$.ajax({
url: url,
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
success: function (data) {
success(data.d);
},
error: function (data) {
failure(data.responseJSON.error);
}
});
}
Usage
getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
console.log(taskItem.TaskName);
},
function(error){
console.log(JSON.stringify(error));
}
);
Update
To update an existing entity, you must perform the following actions:
Create an HTTP request using the POST verb.
Add an X-HTTP-Method header with a value of MERGE.
Use the service URL of the list item you want to update as the target
for the POST
Add an If-Match header with a value of the entity’s original ETag.
JavaScript example:
function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
{
getListItemById(webUrl,listName,itemId,function(item){
$.ajax({
type: 'POST',
url: item.__metadata.uri,
contentType: 'application/json',
processData: false,
headers: {
"Accept": "application/json;odata=verbose",
"X-HTTP-Method": "MERGE",
"If-Match": item.__metadata.etag
},
data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
success: function (data) {
success(data);
},
error: function (data) {
failure(data);
}
});
},
function(error){
failure(error);
});
}
Usage
var taskProperties = {
'TaskName': 'Approval',
'AssignedToId': 12
};
updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
console.log('Task has been updated');
},
function(error){
console.log(JSON.stringify(error));
}
);
Delete
To delete an entity, you must perform the following actions:
Create an HTTP request using the POST verb.
Add an X-HTTP-Method header with a value of DELETE.
Use the service URL of the list item you want to update as the target
for the POST
Add an If-Match header with a value of the entity’s original ETag.
JavaScript example:
function deleteListItem(webUrl, listName, itemId, success, failure) {
getListItemById(webUrl,listName,itemId,function(item){
$.ajax({
url: item.__metadata.uri,
type: "POST",
headers: {
"Accept": "application/json;odata=verbose",
"X-Http-Method": "DELETE",
"If-Match": item.__metadata.etag
},
success: function (data) {
success();
},
error: function (data) {
failure(data.responseJSON.error);
}
});
},
function (error) {
failure(error);
});
}
Usage
deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
console.log('Task has been deleted');
},
function(error){
console.log(JSON.stringify(error));
}
);
Please follow List Items manipulation via REST API in SharePoint 2010 article for a more details.
Here is the update and delete, it wasn't as hard as I thought it was going to be and it works.
Hopefully this will help someone out because there is so much bogus information on using the REST API and I see a zillion posts on querying but none on Insert, Update, Delete.
//update
function updateMilestone(id) {
var mileStonesUrl = "/_vti_bin/listdata.svc/Milestones";
mileStonesUrl = mileStonesUrl + "(" + id+ ")";
var beforeSendFunction;
var milestoneModifications = {};
milestoneModifications.Title = "Updated from REST";
var updatedMilestoneData = JSON.stringify(milestoneModifications);
//update exsiting milestone
beforeSendFunction = function (xhr) {
xhr.setRequestHeader("If-Match", "*");
// Using MERGE so that the entire entity doesn't need to be sent over the wire.
xhr.setRequestHeader("X-HTTP-Method", 'MERGE');
}
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
processData: false,
beforeSend: beforeSendFunction,
url: mileStonesUrl,
data: updatedMilestoneData,
dataType: "json",
error: function (xhr) {
alert(xhr.status + ": " + xhr.statusText);
},
success: function () {
alert("Updated");
getAll();
}
});
function deleteMilestone(id) {
var mileStonesUrl = "/_vti_bin/listdata.svc/Milestones";
mileStonesUrl = mileStonesUrl + "(" + id+ ")";
$.ajax({
type: "DELETE",
contentType: "application/json; charset=utf-8",
processData: false,
url: mileStonesUrl,
error: function (xhr) {
alert(xhr.status + ": " + xhr.statusText);
},
success: function () {
alert("deleted");
getAll();
}
});
}
}
I recently worked with the REST API for SP 2013, as a Example POC that can be used for any call implementation i.e. JQuery, C# etc.
Using POSTMAN
First get your digest token:
A method was found on this site : http://tech.bool.se/basic-rest-request-sharepoint-using-postman/​
[Credit where credit is due]
POST
http://<SharePoint Domain Url>/sites/<Site name>/_api/contextinfo
Header:
Accept : application/json;odata=verbose
Body:
Clear the body ​
From the payload use "FormDigestValue" value and put it into your headers with the key : X-RequestDigest when making actions that alter items in SharePoint.
Reading data:
GET
http://<SharePoint Domain Url>/sites/<Site name>/_api/web/getfolderbyserverrelativeurl('/Sites/<Site Name>/Shared Documents/My Folder')/files?$select=Name
Headers:
Accept : application/json;odata=verbose​
When it comes to create, update , delete you need the digest token or an authorization token to perform these actions, this token is highlighted at the begining to to retrieve.
​Creating Data
POST
http://<SharePoint Domain Url>/sites/<Site Name>/_api/web/folders​
Headers:
Accept : application/json;odata=verbose
X-RequestDigest : 'GUID looking toking'
Content-Type : application/json;odata=verbose
Body:
{ '__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': '/Sites/<Site Name>/Shared Documents/Some Folder/POC3'}​
Note:
'ServerRelativeUrl' the folder on the end POC3 is the folder that I want to create
Related resources:
http://msdn.microsoft.com/en-us/library/office/fp142380(v=office.15).aspx
Note: PostMan was used for this example and other application may need you to url encode the endpoint.
The above Request Structure can be used for all requests, the related resource highlights some of the standard methods that can be used with the REST Api

Resources