Skip to content

Instantly share code, notes, and snippets.

@vaderj
Last active June 12, 2018 15:03
Show Gist options
  • Save vaderj/68816e36dc7cd03e6b41c0ae9d2bb44c to your computer and use it in GitHub Desktop.
Save vaderj/68816e36dc7cd03e6b41c0ae9d2bb44c to your computer and use it in GitHub Desktop.
SP REST - create new list / add columns / create new view & add columns & query #Javascript #SharePoint #ListTemplate
/*
DIRLog template:
Column Name |Column Type| Required?
Title | SLT | True #
Item Type | Choice | True ==> Dropdown type ==> Decision ; Issue ; Risk
Description | MLT | True
Resolution | MLT | False
Owner | People | True
Opened By | People | True
Date Opened | Date | True
Target Date | Date | False
Date Closed | Date | False
Notes | MLT | False
*/
function createNewDIRLogList()
{
var listConfigObj = {
"__metadata": { "type": "SP.List" },
'Title': 'DIRLog',
'Description': 'DIR log List',
'AllowContentTypes': true,
'BaseTemplate': 100,
'ContentTypesEnabled': true
};
var createConfigList = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists",
type: "POST",
data: JSON.stringify(listConfigObj),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}});
createConfigList.done(function(configData, textStatus, jqXHR){
console.dir(configData)
if (configData.d.Title == "DIRLog")
{
var decisionQuery = '<Where><Eq><FieldRef Name="Item_x0020_Type" /><Value Type="Text">Decision</Value></Eq></Where>' ;
var issueQuery = '<Where><Eq><FieldRef Name="Item_x0020_Type" /><Value Type="Text">Issue</Value></Eq></Where>' ;
var risksQuery = '<Where><Eq><FieldRef Name="Item_x0020_Type" /><Value Type="Text">Risk</Value></Eq></Where>' ;
var openQuery = '<OrderBy><FieldRef Name="ID" /></OrderBy><Where><IsNull><FieldRef Name="Date_x0020_Closed" /></IsNull></Where>' ;
setTimeout(function(){ createView("Decisions","DIRLog",decisionQuery) }, 250);
setTimeout(function(){ createView("Issues","DIRLog",issueQuery) }, 500);
setTimeout(function(){ createView("Risks","DIRLog",risksQuery) }, 750);
setTimeout(function(){ createView("Open DIRs","DIRLog",openQuery) }, 1000);
setTimeout(function(){ addColumn(configData.d.Id,6,"Item Type","True"); addFieldToView("Item Type","DIRLog") }, 1250);
setTimeout(function(){ addColumn(configData.d.Id,3,"Description","True") ; addFieldToView("Description","DIRLog")}, 1500);
setTimeout(function(){ addColumn(configData.d.Id,3,"Resolution","False") ; addFieldToView("Resolution","DIRLog")}, 1750);
setTimeout(function(){ addColumn(configData.d.Id,20,"Owner","True") ; addFieldToView("Owner","DIRLog")}, 2000);
setTimeout(function(){ addColumn(configData.d.Id,20,"Opened By","True") ; addFieldToView("Opened By","DIRLog")}, 2250);
setTimeout(function(){ addColumn(configData.d.Id,4,"Date Opened","True") ; addFieldToView("Date Opened","DIRLog")}, 2500);
setTimeout(function(){ addColumn(configData.d.Id,4,"Target Date","False") ; addFieldToView("Target Date","DIRLog")}, 2750);
setTimeout(function(){ addColumn(configData.d.Id,4,"Date Closed","False") ; addFieldToView("Date Closed","DIRLog")}, 3000);
setTimeout(function(){ addColumn(configData.d.Id,3,"Notes","False") ; addFieldToView("Notes","DIRLog")}, 3250);
}
});
}
function addColumn(listGuid,type,title,required)
{
if (type == 3)
{
var newColumnMetadata = {
"__metadata": { "type": "SP.FieldMultiLineText" },
'Title': title,
'NumberOfLines': 8,
'Required': required,
'FieldTypeKind': type};
var newColumn = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists(guid'" + listGuid + "')/fields",
type: "POST",
data: JSON.stringify(newColumnMetadata),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}});
newColumn.done(function(listFieldData, textStatus, jqXHR){
console.dir(listFieldData)
if (listFieldData.d.Title == title)
{
//var updateStatus = "<p>Field added, adding field to default view.</p>"
//jQuery("#subTask").append(updateStatus) ;
//addValueFieldToView();
}
});
}
else if (type == 4)
{
var newColumnMetadata = {
"__metadata": { "type": "SP.FieldDateTime" },
'Title': title,
'DisplayFormat': 1,
'Required': required,
'FieldTypeKind': type};
var newColumn = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists(guid'" + listGuid + "')/fields",
type: "POST",
data: JSON.stringify(newColumnMetadata),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}});
newColumn.done(function(listFieldData, textStatus, jqXHR){
console.dir(listFieldData)
if (listFieldData.d.Title == title)
{
//var updateStatus = "<p>Field added, adding field to default view.</p>"
//jQuery("#subTask").append(updateStatus) ;
//addValueFieldToView();
}
});
}
else if (type == 6)
{
var newColumnMetadata = {
"__metadata": { "type": "SP.FieldChoice" },
'Title': title,
'FieldTypeKind': type,
'Required': required,
'Choices': { '__metadata': { 'type': 'Collection(Edm.String)' },'results': [ 'Internal', 'External' ] }, 'EditFormat': 1 };
var newColumn = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists(guid'" + listGuid + "')/fields",
type: "POST",
data: JSON.stringify(newColumnMetadata),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}});
newColumn.done(function(listFieldData, textStatus, jqXHR){
console.dir(listFieldData)
if (listFieldData.d.Title == title)
{
//var updateStatus = "<p>Field added, adding field to default view.</p>"
//jQuery("#subTask").append(updateStatus) ;
//addValueFieldToView();
}
});
}
else if (type == 20)
{
var newColumnMetadata = {
'__metadata': { 'type': 'SP.FieldUser' },
'Title': title,
'Required': required,
'FieldTypeKind': type };
var newColumn = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists(guid'" + listGuid + "')/fields",
type: "POST",
data: JSON.stringify(newColumnMetadata),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}});
newColumn.done(function(listFieldData, textStatus, jqXHR){
console.dir(listFieldData)
if (listFieldData.d.Title == title)
{
//var updateStatus = "<p>Field added, adding field to default view.</p>"
//jQuery("#subTask").append(updateStatus) ;
//addValueFieldToView();
}
});
}
}
function createView(viewName,listName,query)
{
var newViewData = {
'__metadata': { 'type': 'SP.View' },
'Title': viewName,
'PersonalView': false,
'ViewQuery': query
} ;
var newView = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/views",
type: "POST",
data: JSON.stringify(newViewData),
headers: {
"accept": "application/json; odata=verbose",
"content-type":"application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}});
newView.done(function(listFieldData, textStatus, jqXHR){
});
}
function addFieldToView(fieldName,listName)
{
var getViews = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/Views",
contentType: "application/json;odata=verbose",
method: "GET",
headers: {"Accept": "application/json; odata=verbose"}
});
getViews.done(function(itemData, textStatus, jqXHR){
console.dir(itemData) ;
for (var i = 0 ; i < itemData.d.results.length ; i++)
{
var viewId = itemData.d.results[i].Id ;
var fieldToView = jQuery.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/Views(guid'" + viewId + "')/ViewFields/AddViewField",
contentType: "application/json;odata=verbose",
data: JSON.stringify({"strField":fieldName}),
method: "POST",
headers: { "Accept": "application/json; odata=verbose","X-RequestDigest": $("#__REQUESTDIGEST").val()}
});
fieldToView.done(function(itemData, textStatus, jqXHR){
});
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment