Add a Chart based on SharePoint list

Hi,
I'm looking for a way to add a Chart based on list data. I've tried the following article but no Chart is showing after teh upload.
I read about Excel services as replacements to the 2010 Chart web part but how to accomplish that in 2013?
Any thoughts?
Thanks a lot in advance

Hi,
As I understand, you want to add a Chart based on list data in SharePoint 2013.
You cannot see the chart web part in web part area in SharePoint 2013. There is a workaround, you can export the chart web part in SharePoint 2010 and import it to the SharePoint 2013.
1. Export chart web part in SharePoint 2010:
Site action->site setting->Galleries->web parts->select the MossChartWebPart.webpart and edit it -> export the web part.
2. Import the chart web part into SharePoint 2013:
Go to the page you want to add the web part and edit the page->click add web part -> browse the chart web part you have saved ->upload the chart web part.
After these steps you can use the chart web part, and you can use data & appearance to connect the chart to data, then you can connect to the list.
There is a similar case:
https://social.technet.microsoft.com/Forums/sharepoint/en-US/b011e137-70eb-4092-b8e2-e5ed9a5ead7e/sharepoint-2013-how-do-i-chart-a-list
More reference:
https://support.office.microsoft.com/en-us/article/Manage-and-share-Web-Parts-and-Web-Part-Pages-00ff95a0-62ba-42dc-91c3-bf0dba34e053?pid=CH101021211033&CorrelationId=06402e5c-f71d-49d6-a64d-c0c3efb9b52f&ui=en-US&rs=en-US&ad=US
Best regards,
Sara Fan
Sara Fan
TechNet Community Support

Similar Messages

  • Chart based on Select list with submit Lov problem

    Hi,
    I have one page with interactive report showing username with links, date and
    database actions.
    Another page contains one region having flash chart based on select list with submit Lov.
    The lov is created by dynamic query.
    Every time when i click the 1st page report link, the 2nd page lov is populating the value automatically. But the problem is chart displays NO DATA FOUND message though the LOV has many values.
    I don't want to display any null values so set to NO for LOV
    I tried to write Before header computation (PL/SQL Function Body) to set the lov value, but the query is displayed as such.
    I don't want to assign any static default value also as the values are dynamic for every link.
    The following is my Before header computation of Select list with submit (Item name is p11_schema). (PLSQL Function Body)
    begin
    if :p11_schema is null then
    return 'select distinct owner schema1, owner schema2 from auditing
    where access_date=' || :p11_access_date
    || ' and username=' || :p11_username
    || ' order by owner';
    end if;
    end;
    This is my chart query.
    select null link, obj_name label, sum(sel_count) "Select", sum(ins_count) "Insert", sum(upd_count) "Update", sum(del_count) "Delete" from auditing
    where username=:p11_username
    and access_date=:p11_access_date
    and owner=NVL(:p11_schema, OWNER)
    group by owner, obj_name
    Example: If there more than one records in the lov, the graph should display the 1st record. When i select another record, the chart accordingly display the selected values. But inially it should not display "NO DATA FOUND" message.
    I tried using all the combinations of computation type for the lov, SQL query ( I could not use if conditon then), PLSQL expression, PLSQL function body. But it does not work out.
    Can anyone please help me out.
    Thanks.

    Hi Scott,
    Thanks for your reply.
    I found out the solution for this problem as below.
    But i did it in different way to tackle the dynamic query wich returns more than one record using rownum always the 1st record when it is empty instead of assigning constant (static) value like '1'. And i am returning LOV itself for both null or not null condition as below.
    Declare
    q varchar2(4000);
    begin
    if :p11_schema is null then
    q:='select distinct owner schema from auditing';
    q:=q || ' where username=:p11_username ';
    q:=q || ' and access_date=:p11_access_date ';
    q:=q || ' and rownum<2 order by owner';
    Execute immediate q into :p11_schema USING :p11_username, :p11_access_date;
    end if;
    return :P11_SCHEMA;
    end;
    Thanks.

  • [Forum FAQ] A content management tool with dashboard based on SharePoint List

    1. 
    Scenario:
    The SharePoint OOTB List has saved us a lot of time on managing mess data. It provides three forms to create/view/edit items, the ability to save the views we want with some specific filtering and sorting condition, versioning for easy restoring, and we
    can make it advanced with workflow contains the specific business logic.
    However, if there is a need for better user experience, interacting with the public APIs and a bit of script to customize the web page would be required.
    Suppose there is a requirement like this:
    We need a content collection tool which collects ideas from contributors, the newly ideas will be reviewed by reviewers.
    We may need to filter the list in a convenient way, get the wanted result with the data from the list and display in a chart or rank list. 
    We can add some buttons in Metro style to display the counting result of the data from the list dynamically. When we click them, the list will be filtered and sorted to display a friendly set of items. Also, we need to display a trend of the mess data graphically
    in some beautiful charts.  If we want to find out some outstanding contributors, top contributor board would be more comfortable than the top N items in the OOTB list view.
    The page would look like this:
    2. 
    Introduction:
    Engineers will come up with some ideas in the daily job and write a content to enlighten others. Reviewers will help to review ideas or contents and publish the contents if qualified.
    The complete process looks like this:
    As we can see, only the approved idea can be written as a content and only the approved content can be published.
    2.1
    How it works
    We build the whole tool in one page. All ideas and contents will be saved in a custom list. This is how it looks like:
    There are three parts in this page:
    1       
    2       
    2.1       
    2.1.1       
    Top menu
    The top menu contains three elements:
    A Drop Down menu for filtering data by team, it will refresh the other two parts with the filtered data:
    A hyperlink “STATISTIC” links to a PowerBI report whose data source is the custom list.
    A hyperlink “FEEDBACK” for collecting feedbacks:
    The feedbacks will be saved in another list:
    2.1.2       
    Information menu
    This part will display the calculated data retrieved from the list within tiles, chart and ranking list.
    The tiles can be clicked to filter and refresh the list view.
    2.1.3       
    List view
    A list stores all ideas and contents with the properties needed. It can be filtered by the Top menu and Information menu.
    The customization on the OOTB custom list template makes it more powerful and more suit for this scenario:
    1. An item leveled comment feature (based on OOTB Tags & Notes feature) for other users make comments to an idea or content:
    2. Title column: When there is no attachment in the current item, it redirects to the default DisplayForm page. If there is, it will open the attachment (usually a .docx file) in Word Online in a new tab.
    3. ECB menu: Add some custom shortcuts for popular actions:
    4. A hyperlink column stores the hyperlink points to the website where the content is published to.
    3.   
    How to achieve it
    This solution will be hosted in SharePoint Online environment, so we do all the job using JavaScript, REST API and Client Object Model.
    The Drop Down menu, tiles, rank list are generated with some HTML+CSS.
    The Trend Chart, we take advantage of the Combo chart in the Google chart library.  
    The list view is hosted in a <iframe> which can be easily filtered and refreshed by just passing a generated URL with query string.
    For the customization on the list view and the ECB menu, JSLink with Client Object Model would be OK.
    3.1
    Specific to every part
    3.1.1       
    Top menu
    3.1.1.1 
    Drop Down menu for retrieving filtered data and refreshing the display of the related controls
    When user selects a team here, there will be a request sent out for retrieving items of the list. By default, the limit is 100 when using REST API to get list items, so we can append a “$top=1000” to require more items from server.
    Code snippet like this:
    $.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items?$top=1000",
    method: "GET",
    headers: { "Accept": "application/json; odata=verbose" },
    success: function (data) {
    console.log("getListItems succ");
    console.log(data);
    error: function (data) {
    alert("getListItems error");
    //failure(data);
    Then we will get the “data” as a JSON format string, it contains all the values we need from the list:
    We can get the values we want like this:
    //get item Count
    var arr = [], len;
    for(key in data.d.results)
    arr.push(key);
    len = arr.length;
    for(var ii=0; ii<len; ii++)
    var team = data.d.results[ii].Team;
    var month = data.d.results[ii].Month;
    As we need to know the counts of each type of ideas or contents, we use an array for saving the counters:
    //ary to store all counters for tiles: all/pendingIdea/pendingContent/my/approvedIdea/approvedContent
    var aryAllCounters = [0,0,0,0,0,0];
    for(var ii=0; ii<len; ii++)
    //get pendingIdeaCount
    if(data.d.results[ii].Statuss === 'Pending')
    aryAllCounters[1]++;
    Once all the numbers are ready, we can do the refreshing.
    As the list view page is hosted in a <iframe>, all we need to do is passing a constructed URL with query string:
    url_team = URL + "?FilterField1="+FIELD_MYTEAM+"&FilterValue1=" + sel_val;
    $iframe.attr('src', url_team);
    3.1.1.2 
    Hyperlink for popping up a dialog to collect feedbacks
    The feedback dialog hosts another page which contains two buttons and one text area.
    The HTML code of the FEEDBACK button:
    <a id="feedback" href="#" onclick="javascript:openDialogBox('../SitePages/Feedback.aspx');">FEEDBACK</a>
    The openDialogBox() function:
    function openDialogBox(url){
    var options = SP.UI.$create_DialogOptions();
    options.url = url;
    options.height = 130;
    options.width = 425;
    options.title = "Feedback";
    SP.UI.ModalDialog.showModalDialog(options);
    In the Feedback.aspx page, when user click submit button, we will save the content of the text area into the feedback list:
    function addListItem()
    this.clientContext = new SP.ClientContext.get_current();
    this.oList = clientContext.get_web().get_lists().getByTitle('Feedback');
    var itemCreateInfo = new SP.ListItemCreationInformation();
    this.oListItem = this.oList.addItem(itemCreateInfo);
    //set person field
    var userValue = new SP.FieldUserValue();
    //userValue.set_lookupId(this.currentUser.get_id());
    userValue.set_lookupId(_spPageContextInfo.userId);
    oListItem.set_item('Provider', userValue);
    //Sets the specified field value
    oListItem.set_item('Title', str);
    //datetime field
    var currDate = new Date();
    oListItem.set_item('Submit_Time',currDate);
    oListItem.update();
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded_add), Function.createDelegate(this, this.onQueryFailed));
    3.1.2       
    Information menu
    3.1.2.1 
    Tile shortcut
    In the click event of the tiles, the code will pass a generated URL with query string to the <iframe>:
    //filter list only
    $tile.click(function(){
    //distinguish tiles by id
    var v = $(this).attr('id');
    switch(v)
    case S_MY_CONTENT:
    url_team1 = URL + "?FilterField1="+FIELD_COMPOSER+"&FilterValue1=" + currentUsername;
    break;
    case S_PENDING_IDEA:
    url_team1 = url_team + "&FilterField2="+FIELD_STATUS+"&FilterValue2=Pending&FilterField3="+FIELD_IDEATYPE+"&FilterValue3=Idea";
    break;
    $iframe.attr('src', url_team1);
    3.1.2.2 
    Trend chart
    The chart will be initialized with the numbers by month stored in a 3D array:
    google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawVisualization);
    function drawVisualization(ary)
    // Some raw data (not necessarily accurate)
    var data = google.visualization.arrayToDataTable(ary);
    var view = new google.visualization.DataView(data);
    view.setColumns([0, 1,
    { calc: "stringify",
    sourceColumn: 1,
    type: "string",
    role: "annotation"
    2]);
    // Create and draw the visualization.
    var ac = new google.visualization.ComboChart(document.getElementById('chart1'));
    ac.draw(view, {
    //legend: 'top',
    legend: {
    title : '',
    //width: 0,
    //height: 285,
    vAxis: {title: "", format:'#',viewWindowMode:'explicit',
    viewWindow:{
    min:0
    },ticks: ticks
    //hAxis: {title: ""},
    lineWidth: 4,
    bar: {groupWidth: "60%"},
    seriesType: "bars",
    series: {1: {type: "line"}},
    chartArea:{
    colors: ['#A4C400', '#F9A13B']
    3.1.2.3 
    Top contributors rank list
    When retrieving list items, we can get the “AuthorId” which represents the id of the user in the siteUserInfoList. We run another request to retrieve all items in the siteUserInfoList which stores the username with the URL of profile.
    Then we can use a hash table(provided by jshashtable.js) to store the user id, username and profile URL:
    $.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/siteUserInfoList/Items",
    method: "GET",
    headers: { "Accept": "application/json; odata=verbose" },
    success: function (data) {
    console.log(data);
    //get item Count
    var arr = [], len;
    for(key in data.d.results)
    arr.push(key);
    len = arr.length;
    var ht_authors = new Hashtable();
    for(var ii=0; ii<len; ii++)
    if(authorSet.contains(data.d.results[ii].Id))
    if(data.d.results[ii].Picture != null)
    ht_authors.put(data.d.results[ii].Id, data.d.results[ii].Title+'|'+data.d.results[ii].Picture.Url);
    else
    ht_authors.put(data.d.results[ii].Id, data.d.results[ii].Title+'|');
    console.log("ht_authors.keys(): "+ht_authors.keys());
    console.log("ht_authors.values(): "+ht_authors.values());
    error: function (data) {
    alert("error");
    //failure(data);
    3.1.3       
    List view
    For the Comment button, custom title link and the custom published link of each item, we can use JSLink to achieve.
    Comment button: It is supposed to be the OOTB “Type” column, I change the icon and modify the click event of it to pop up a comment dialog which take advantage of the OOTB “Tags&Notes” feature;
    Custom Title link: As there will be two situations of an item: has attachment or not. We will need to run a request to get the URL of attachment and change the hyperlink of the Title field accordingly:
    (function () {
    // Create object that have the context information about the field that we want to change it output render
    var linkFiledContext = {};
    linkFiledContext.Templates = {};
    linkFiledContext.Templates.Fields = {
    //"Attachments": { "View": AttachmentsFiledTemplate }
    "LinkTitle": { "View": TitleFieldTemplate },
    "Published_x0020_Link": { "View": PublishedLinkFieldTemplate },
    "DocIcon": { "View": DocIconFieldTemplate },
    "MyTeam": { "View": MyTeamFieldTemplate }
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(linkFiledContext);
    function DocIconFieldTemplate(ctx)
    var htmlStr = "";
    var listId = ctx.listName;
    var itemId = ctx.CurrentItem.ID;
    var s = listId + "," + itemId;
    htmlStr += "<img width='16' height='16' class=' ms-draggable' alt='Comment' src='"+_spPageContextInfo.webAbsoluteUrl+"/Shared%20Documents/img/comment-icon.png' border='0' ms-draggableragId='0' onclick='CommentIcon(\""+ s +"\")'></img>";
    return htmlStr;
    function CommentIcon(s)
    var listId = s.split(',')[0];
    var itemId = s.split(',')[1];
    var url=_spPageContextInfo.webAbsoluteUrl+"/_layouts/15/socialdataframe.aspx?listid="+listId+"&id="+itemId+"&mode=1";
    console.log(url);
    openCustomDialog(url,"Comment",650,520);
    function openCustomDialog(pageUrl,title,width,height)
    SP.UI.ModalDialog.showModalDialog({
    url: pageUrl,
    width: width,
    height: height,
    title: title,
    dialogReturnValueCallback: function (result){
    if(result== SP.UI.DialogResult.OK)
    parent.window.location.href=parent.window.location.href;
    function PublishedLinkFieldTemplate(ctx)
    //console.log(ctx);
    var htmlStr = "";
    var itemPublishedLink = "";
    var itemPublishedLinkDesc = "";
    if((ctx.CurrentItem.Published_x0020_Link != ''))
    itemPublishedLink = ctx.CurrentItem.Published_x0020_Link;
    itemPublishedLinkDesc = ctx.CurrentItem["Published_x0020_Link.desc"];
    htmlStr = "<a href='" + itemPublishedLink + "' target='_blank'>" + itemPublishedLinkDesc + "</a>";
    return htmlStr;
    function MyTeamFieldTemplate(ctx)
    var htmlStr = "";
    var itemMyTeam = "";
    if((ctx.CurrentItem.MyTeam[0] != undefined) && (ctx.CurrentItem.MyTeam[0] != null))
    itemMyTeam = ctx.CurrentItem.MyTeam[0].lookupValue;
    htmlStr = itemMyTeam;
    return htmlStr;
    function TitleFieldTemplate(ctx) {
    console.log(ctx.CurrentItem);
    var itemId = ctx.CurrentItem.ID;
    var itemTitle = ctx.CurrentItem.Title;
    var listName = ctx.ListTitle;
    var siteUrl = _spPageContextInfo.webAbsoluteUrl;
    var listUrl = _spPageContextInfo.webAbsoluteUrl + "/Lists/" +listName;
    var fileNames = getAttachmentsNames(listName, itemId);
    console.log(fileNames);
    var fileNameAry = fileNames.split("|");
    var htmlStr = "";
    //check the attachment existence
    if(fileNameAry[0] != '')
    for(var j = 0; j < fileNameAry.length; j++)
    var fileName = fileNameAry[j];
    var s1 = "<a class=\"ms-listlink ms-draggable\" onmousedown=\"return VerifyHref(this, event, '1', 'SharePoint.OpenDocuments.3', '1";
    //1``https://microsoft.sharepoint.com/teams/spfrmcs
    var s2 = "/_layouts/15/WopiFrame.aspx?sourcedoc=";
    //2``/teams/spfrmcs/Lists/Content%20Pool
    var s3 = "/Attachments/";
    //3``137
    var s4 = "/";
    //4``[Forum FAQ] Highlight the list tab in Quick Launch when the list view changes.docx
    var s5 = "&action=default'); return false;\" href=\"";
    //5``https://microsoft.sharepoint.com/teams/spfrmcs/Lists/Content Pool
    var s6 = "/Attachments/";
    //6``137
    var s7 = "/";
    //7``[Forum FAQ] Highlight the list tab in Quick Launch when the list view changes.docx
    var s8 = "\" target=\"_blank\" DragId=\"1\">";
    //8``Highlight the list tab in Quick Launch when the list view changes
    var s9 = "</a>";
    var s = s1+siteUrl+s2+listUrl+s3+itemId+s4+fileName+s5+listUrl+s6+itemId+s7+fileName+s8+itemTitle+s9;
    htmlStr += s;
    //console.log(htmlStr);
    if (j != fileNameAry.length - 1)
    htmlStr += "<br/>";
    //if no attachments, set the <a> point to displayForm
    else
    htmlStr += "<a class='ms-listlink ms-draggable' onclick='EditLink2(this,28);return false;' onfocus='OnLink(this)' href='" + siteUrl + "/_layouts/15/listform.aspx?PageType=4&ListId=%7BE54A4FBB%2DDDC2%2D4F7E%2D8343%2D8A1C78757CF4%7D&ID=" + itemId + "&ContentTypeID=0x010079A1D928FF77984C80BFEF1D65C3809F' target='_blank' DragId='0'>" + itemTitle + "</a>";
    return htmlStr;
    function getAttachmentsNames(listName,itemId) {
    var url = _spPageContextInfo.webAbsoluteUrl;
    var requestUri = url + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")/AttachmentFiles";
    var str = "";
    // execute AJAX request
    $.ajax({
    url: requestUri,
    type: "GET",
    headers: { "ACCEPT": "application/json;odata=verbose" },
    async: false,
    success: function (data) {
    for (var i = 0; i < data.d.results.length; i++)
    if(i != 0)
    str += "|";
    str += data.d.results[i].FileName;
    error: function (err) {
    //alert(err);
    return str;
    3.2
    How to make them work together
    When selecting an option in the Drop Down menu, the Information menu and the List view will be refreshed separately.
    When clicking the tiles, only the list view will be filtered and refreshed, the other parts will not be influenced.
    When items created/modified, the whole page will be refreshed to keep all the numbers in each part updated.  A workflow will also be triggered to inform engineers or reviewers the progress of an item or content.
    3.3
    Other customizations
    3.3.1       
    ECB menu and permission control
    As we need to refresh the page when new item or modify item, we put all the form pages in a custom modal dialog and execute the refresh in the success callback function.
    There are three roles: Site owner, reviewer and engineer. They have limited privileges according to the roles they are:
    Site owner: Full control on the list, can see all the buttons in the ECB menu;
    Reviewer: There is another list which stores the names of each team and reviewers’ names of each team. The reviewer has limited full control only on the team they belong to. To other teams, the role can be seen as a visitor;
    Composer
    (create owner): The one who contribute an idea. For the ideas\contents from other teams, this role can be seen as visitor.
    The ECB menu they can see is:
    For the visitor, the ECB menu will only display a few buttons:
    The code:
    (function () {
    var viewContext = {};
    viewContext.Templates = {};
    viewContext.OnPostRender = OnViewPostRender;
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(viewContext);
    function OnViewPostRender(ctx) {
    $("a[title='More options']").removeAttr("onclick");
    $(".ms-list-itemLink").removeAttr("onclick");
    $("a[title='More options']").attr("onclick", "showMenuList(this);return false;");
    function showMenuList(obj) {
    var itemId = $(obj).parents("tr").attr("id").split(",")[1];
    //show ECB menu
    CoreInvoke('ShowECBMenuForTr', obj, event);
    var teamId = getCurrentTeamId("Content Pool", itemId);
    var styles = "";
    if (isSiteOwner("Technet SharePoint Team Owners")) {
    styles = "li[text='Delete Item ']{display:block;} li.ms-core-menu-separator:last-child{display:block;} ul.ms-core-menu-list > li:nth-last-child(5){display:block;} li[text='Edit Item ']{display:block;} li[text='Upload Document']{display:block;} li[text='Approve']{display:block;} li[text='Reject']{display:block;} li[text='Add Publish Link']{display:block;}";
    } else if (isReviewer("List1_FAQ_team", teamId, "Reviewers")) {
    styles = "li[text='Delete Item ']{display:block;} li.ms-core-menu-separator:last-child{display:block;} ul.ms-core-menu-list > li:nth-last-child(5){display:block;} li[text='Edit Item ']{display:block;} li[text='Upload Document']{display:block;} li[text='Approve']{display:block;} li[text='Reject']{display:block;} li[text='Add Publish Link']{display:block;}";
    } else if (isComposer(obj)) {
    styles = "li[text='Delete Item ']{display:block;} li.ms-core-menu-separator:last-child{display:block;} ul.ms-core-menu-list > li:nth-last-child(5){display:block;} li[text='Edit Item ']{display:block;} li[text='Upload Document']{display:block;} li[text='Approve']{display:none;} li[text='Reject']{display:none;} li[text='Add Publish Link']{display:none;}";
    } else {
    styles = "li[text='Delete Item ']{display:none;} li.ms-core-menu-separator:last-child{display:none;} ul.ms-core-menu-list > li:nth-last-child(5){display:none;} li[text='Edit Item ']{display:none;} li[text='Upload Document']{display:none;} li[text='Approve']{display:none;} li[text='Reject']{display:none;} li[text='Add Publish Link']{display:none;}";
    includeStyleElement(styles);
    //get current team id
    function getCurrentTeamId(listName,itemId){
    var teamId="";
    var requestUri = _spPageContextInfo.webAbsoluteUrl +
    "/_api/Web/Lists/getByTitle('"+listName+"')/items("+itemId+")?$select=MyTeamId";
    // execute AJAX request
    $.ajax({
    url: requestUri,
    type: "GET",
    headers: { "ACCEPT": "application/json;odata=verbose" },
    async: false,
    success: function (data) {
    if(data.d.MyTeamId!=null){
    teamId=data.d.MyTeamId;
    }else{
    teamId="0";
    error: function () {
    //alert("Failed to get details");
    return teamId;
    //check whether is owner
    //Technet SharePoint Team Owners
    function isSiteOwner(groupName) {
    var flag = false;
    var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/Web/effectiveBasePermissions";
    // execute AJAX request
    $.ajax({
    url: requestUri,
    type: "GET",
    headers: { "ACCEPT": "application/json;odata=verbose" },
    async: false,
    success: function (data) {
    var permissions = new SP.BasePermissions();
    permissions.fromJson(data.d.EffectiveBasePermissions);
    flag = permissions.has(SP.PermissionKind.managePermissions);
    error: function () {
    //alert("Failed to get details");
    return flag;
    function isComposer(obj) {
    var flag = false;
    var userId = _spPageContextInfo.userId;
    var composerId = $(obj).parents("tr").find("a[href*='userdisp.aspx']").attr("href").split("ID=")[1];
    if (composerId == userId) {
    flag = true;
    return flag;
    //check whether is reviewer
    function isReviewer(listName,teamId,peopleColumn){
    var flag=false;
    var userId=_spPageContextInfo.userId;
    // begin work to call across network
    var requestUri = _spPageContextInfo.webAbsoluteUrl +
    "/_api/Web/Lists/getByTitle('"+listName+"')/items?$select=ID&$filter=(ID eq '"+teamId+"' and "+peopleColumn+"Id eq '"+userId+"')";
    // execute AJAX request
    $.ajax({
    url: requestUri,
    type: "GET",
    headers: { "ACCEPT": "application/json;odata=verbose" },
    async: false,
    success: function (data) {
    if(data.d.results.length>0){
    flag=true;
    error: function () {
    //alert("Failed to get details");
    return flag;
    //insert style into page
    function includeStyleElement(styles) {
    var style = document.createElement("style");
    style.type = "text/css";
    (document.getElementsByTagName("head")[0] || document.body).appendChild(style);
    if (style.styleSheet) {
    //for ie
    style.styleSheet.cssText = styles;
    } else {
    //for w3c
    style.appendChild(document.createTextNode(styles));
    3.3.2       
    Workflow email customization
    The email will only be sent to engineer or team reviewer in the three scenarios:
    When engineer uploads an idea or content, reviewer will receive an email;
    When engineer uploads a content to an existing idea, reviewer will receive an email;
    When reviewer approve/reject an idea or content, engineer will receive an email;
    The design of the workflow process  :
     The email design like this:
    Email to engineer
    Email to reviewer
    Let us know if you are interested in it. Happy coding!
    Please click to vote if the post helps you. This can be beneficial to other community members reading the thread.

    A good solution. Liked it very much. Can you please make it a technet blog for others.
    [email protected]

  • HTML + JQuery (CSOM) to add multiple item to a Sharepoint list and get their IDs

    Hi everyone.
    I try to use HTML + JQuery in CEWP to build some sort of analog of InfoPath's repeating table in order to be able to insert multiple items in a Sharepoint list using CSOM.
    The current task is to get the IDs of inserted items (in order to use those IDs later to add attachments to the list items) as soon as they are added to the list. I've tried several ways but couldn't get the IDs of all inserted items. Usually
    I get "-1" as an ID for every item except the last one, which returns me the correct ID. 
    Bellow is the code.
    <script src="/testsite1/SiteAssets/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/testsite1/SiteAssets/jquery.SPServices.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(document).ready(function() {
    var click = 1;
    $("#btn_id_1").click(function() {
    click ++;
    $("#tr_id_1").clone().appendTo("#tbl_id_1").attr("id", "tr_id_" + click.toString()).find("input").val("");
    $("#btn_id_2").click(function() {
    Save();
    function Save() {
    var ctx = new SP.ClientContext.get_current();
    var taskList = ctx.get_web().get_lists().getByTitle('Tasks');
    var taskItemInfo = new SP.ListItemCreationInformation();
    var vendor;
    var certname;
    var certid;
    $("#tbl_id_1 tr").each(function() {
    vendor = ($(this).find(".vendor")).val();
    certname = ($(this).find(".certname")).val();
    certid = ($(this).find(".certid")).val();
    newTask = taskList.addItem(taskItemInfo);
    newTask.set_item('Title', vendor);
    newTask.set_item('Request_', certname);
    newTask.set_item('h', certid);
    newTask.update();
    ctx.load(newTask);
    ctx.executeQueryAsync(addTaskSuccess, addTaskFailure);
    //timeout();
    function timeout() {
    alert ("!!!");
    function addTaskSuccess(sender, args) {
    alert(newTask.get_id());
    //AddAttachment(newTask.get_id())
    function addTaskFailure(sender, args) {
    //alert(newTask.get_id());
    alert("no");
    window.location = window.location.pathname;
    </script>
    <div id="div_id_1" class="div_class_1">
    <table id="tbl_id_1">
    <tbody>
    <tr id="tr_id_1">
    <td>Vendor:<br><input type="text" class="vendor" /></td>
    <td>Cert. Name:<br><input type="text" class="certname" /></td>
    <td>Cert. ID:<br><input type="text" class="certid" /></td>
    <td>Attachment:<br><input type="file" class="attachment" /></td>
    </tr>
    </tbody>
    </table>
    <div><button id="btn_id_1" type="button" width="10" height="10">+</button></div>
    <div><button id="btn_id_2" type="button">Save</button></div>
    </div>

    Here's a working solution (thanks to
    this guy)
    <script src="/testsite1/SiteAssets/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/testsite1/SiteAssets/jquery.SPServices.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    var array = [];
    $(document).ready(function() {
    var click = 1;
    $("#btn_id_1").click(function() {
    click ++;
    $("#tr_id_1").clone().appendTo("#tbl_id_1").attr("id", "tr_id_" + click.toString()).find("input").val("");
    $("#btn_id_2").click(function() {
    //Save();
    //Call();
    var asyncPromises = Save();
    asyncPromises.done(function(result) {
    //alert(array.length);
    console.log(array.length);
    for (var i=0; i<array.length; i++) {
    //alert(array[i].get_id());
    console.log(array[i].get_id());
    asyncPromises.fail(function(result) {
    function Save() {
    var buildDeferredSaves = $.Deferred(function() {
    //var array = [];
    var ctx = new SP.ClientContext.get_current();
    var taskList = ctx.get_web().get_lists().getByTitle('Tasks');
    var taskItemInfo;
    var vendor;
    var certname;
    var certid;
    $("#tbl_id_1 tr").each(function() {
    vendor = ($(this).find(".vendor")).val();
    certname = ($(this).find(".certname")).val();
    certid = ($(this).find(".certid")).val();
    taskItemInfo = new SP.ListItemCreationInformation();
    newTask = taskList.addItem(taskItemInfo);
    newTask.set_item('Title', vendor);
    newTask.set_item('Request_', certname);
    newTask.set_item('h', certid);
    newTask.update();
    ctx.load(newTask);
    array.push(newTask);
    ctx.executeQueryAsync(
    function() {
    // Successful
    buildDeferredSaves.resolve();
    function(sender, args) {
    // Failure
    buildDeferredSaves.reject(args.get_message());
    return buildDeferredSaves.promise();
    </script>
    <div id="div_id_1" class="div_class_1">
    <table id="tbl_id_1">
    <tbody>
    <tr id="tr_id_1">
    <td>Vendor:<br><input type="text" class="vendor" /></td>
    <td>Cert. Name:<br><input type="text" class="certname" /></td>
    <td>Cert. ID:<br><input type="text" class="certid" /></td>
    <td>Attachment:<br><input type="file" class="attachment" /></td>
    </tr>
    </tbody>
    </table>
    <div><button id="btn_id_1" type="button" width="10" height="10">+</button></div>
    <div><button id="btn_id_2" type="button">Save</button></div>
    </div>

  • Excel would update charts based on a list.  I can't get Numbers to do this.

    Hey All,
    I'm working on porting over an employee sales figures spreadsheet from Excel to Numbers. The data that I have in Excel is in a list, so you can sort columns highest to lowest based on margins, or sales per hour, ect. When I make a chart of this data in Excel, the data in the chart changes in real time each time I sort a different column. Example, I have 3 different bar charts. One is for how many sales records are recorded each hour, ones is how much $$ is made per hour, and one is how much $$ margin is made per hour. If I decide to organize my list from descending to ascending based on the $$ per hour, that chart then adjusts instantly to show me highest to lowest for that category, however... if I then change the info in the records made per hour to see it from highest to lowest, that chart changes to show me that info, but then the other charts are out of order.
    My issue is that when I make the same charts in Numbers, they are made based on the where the table is when I make them, so if I want to quickly change which column is organized highest to lowest, the chart doesn't change with it. Can numbers do this like Excel? Is there something I'm missing?
    THANKS FOR THE HELP!!!

    Charting in Numbers is still a little primitive.
    Regards,

  • Excel Spreadsheet as Data Source & Copying that Data to an Existing SharePoint List

    Hello,
    I have an Excel spreadsheet that I get daily and cut and paste into an existing SharePoint list. Is there a way to make that Excel spreadsheet a data source and copy the data to an existing SharePoint list with less manual involvement?
    Tools at my disposal include: SharePoint 2010 Designer, InfoPath, and Access.
    I thought there might be a REST method I could use via InfoPath but I'm not aware of any offhand.
    Goal is to have a method to upload/overwrite an Excel file (stored in a SharePoint library), every day, and then automate the process of copy it to a SharePoint list (actually overwriting the old data in the SharePoint list).
    Any help would be greatly appreciated.

    Hi,
    We can create a console application and use C# code to read the data from the Excel file and using SharePoint .Net Client Object Model to add the data into a SharePoint list, then create a windows job to execute the console application.
    The following articles for your reference:
    How to: Create a Console Application
    https://msdn.microsoft.com/en-us/library/office/ms438026(v=office.14).aspx
    C# How To Read .xlsx Excel File With 3 Lines of Code
    http://www.codeproject.com/Tips/801032/Csharp-How-To-Read-xlsx-Excel-File-With-Lines-of
    How to: Create, Update, and Delete List Items
    https://msdn.microsoft.com/en-us/library/office/ee539976%28v=office.14%29.aspx?f=255&MSPPError=-2147217396
    Schedule a task
    http://windows.microsoft.com/en-au/windows/schedule-task#1TC=windows-7
    Best Regards
    TechNet Community Support
    Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact
    [email protected]

  • How to create multi chart dashboard in SharePoint 2013?

    Hi All,
    I would like to have a dashboard in SharePoint 2013 like this:
    Here, project details are from a list "Project", Budget consumption from a list "Budget". Different project should mention as option in tab like Project1, project2, project3. If i click project project 1 it should show its own details.
    In that tab itself like to mention KPI and Status bar. I plan to have this whole dashboard as a webpart or else what is the best way to achieve this? and thanks in advance!

    I could not find a exact solution to the issue.
    Here is how you can use caml query in char.  hope it helps:
    http://support.nevron.com/KB/a236/chart-from-multiple-sharepoint-lists.aspx

  • Split a text based on delimiter and add items to a sharepoint list using SPD workflow

    Hi All
    I have to store repeating table data into a sharepoint list. I have developed an approach to store data into a sharepoint list using web services as mentioned at
    http://www.bizsupportonline.net/infopath2007/how-to-submit-items-rows-repeating-table-infopath-sharepoint-list.htm. However this approach is working when form opened client only but when I opened it in browser this approach is giving error. Now I'm looking
    to promote repeating table data by combining items will a delimiter semi-colon (;). Please let me know how can I split the promoted field value using de-limiter and add it to a sharepoint list.
    Note:
    I'm working on SharePoint online 2010. (I don't have sharepoint on-premise, so I can't use SharePoint Object Model)
    If anybody know how to deal with this, please let me know.
    Thank you in advance.

    Hi Chuchendra,
    According to your description, my understanding is that you want to split the promoted field value in InfoPath form which was combined using semi-colon and add it to a SharePoint list.
    I recommend to submit the data to another SharePoint list first(use a column to store the value) and then create calculated columns to user formula to split the value, then use workflow to update the list where you want to add the value with the divided
    values.
    For example: the value is aa;bb;cc;dd.
    Based on the number of the semi-colons, we need to create one column to store the original value(named test for example), four calculated columns(v1,v2,v3,v4) to store the divided values and two more calculated columns(flag1,flag2) for use in the formula.
    v1: =LEFT([test],FIND(";",[test])-1)
    flag1: =RIGHT([test],LEN([test])-FIND(";",[test]))
    v2: =LEFT([flag1],FIND(";",[flag1])-1)
    flag2: =RIGHT([flag1],LEN([flag1])-FIND(";",[flag1]))
    v3: =LEFT([flag2],FIND(";",[flag2])-1)
    v4: =RIGHT([flag2],LEN([flag2])-FIND(";",[flag2]))
    We can also use Client Object Model to write code to split the value of the field.
    You can download the dll files form the link below:
    http://www.microsoft.com/en-in/download/details.aspx?id=21786
    Best regards.
    Thanks
    Victoria Xia
    TechNet Community Support

  • Using Sharepoint List Columns to create a simple trend chart

    Hello,
    I am trying to use a single sharepoint list fields with as my data to create a chart.
    I have only two columns I want to create the chart with: The date and time picker
    column where the user picked a date and time and it is formatted accordingly and the Item ID.
    I just want show how many items were created in each month and year. For e.g if there were 3 items created in between Jan 1st- 31st, 2014 then I want it to show a count of 3 for the month of Jan.
    I used the MonthName and string conversion for the X axis and it seems to be showing the month and year, but I cannot get the items that were created to show up for each month.
    Any guidance is welcome!
    I would like to create a trend chart that shows how many

    Hi PinkPowerRanger,
    Per my understanding that you have two fields in the table "Date and Time picker" which is Date/time type and another is "Item ID", you need to get the Month from the Date field to display in the X-axis and count(Item ID) related to each
    month to display in the Y-Axis, right?
    I have tested on my local environment and can do this by create two calculated fields to get the month and year values from the Date/Time field.
    Details information below for your reference:
    Right click the main dataset to select the "Add Calculated field", specify an name of the new calculated field and add the expression in the field source as below:
    Year:    =Year(Fields!Date.Value)
    Month:  =MonthName(Month(Fields!Date.Value))
    Add the three field in the Chart as below and remember in the Value area you have got the Count(ItemID) but not SUM(ItemID):
    Preview you will got the chart like below:
    If you still have any problem, please feel free to ask.
    Regards
    Vicky Liu
    Vicky Liu
    TechNet Community Support

  • Trigger email based on change in sharepoint list

    Hello,
    i have uploaded an access web database to SharePoint. i need to trigger an email whenever there is a change in the table of the database. kindly help how do i go ahead doing it.
    Thanks in advance.
    William

    Hi William,
    How did you upload the Access web database to SharePoint? I am wondering whether you import the Access web database table into SharePoint by creating a list.
    If yes, you can create a workflow(using SharePoint 2013 Designer) based on the list which hosts the table of the Access web database, and in the workflow, add an action "Send Email", you can set the receiver and the email body. Then in the workflow
    Start Options, set "Start workflow automatically when an item is created" and "Start workflow automatically when an item is changed".
    After the above, publish the workflow.
    Thanks,
    Wendy
    TechNet Community Support
    Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact
    [email protected]

  • Excel Services with SharePoint List Data in SharePoint 2013 - Chart is not refreshing automatically

    Hi Everyone,
    This is My req: I m going to display pie chart and Bar chart in share point 2013.
    Steps I have follwed:
    1. Export the list to excel.
    2.Using the Power Pivot table I have done the chart.
    3. Uploaded into document Library.
    4. Added into the web part. 
    Chart are displaying. But When ever user added the data into the list chart is refreshing.
    Is there any option to refresh the data in chart? Waiting for valuable replies.
    Regards, Manoj Prabakar

    SharePoint lists as data sources in Excel Services is not supported.That's the reason refreshing is not working. There are some work around you can use  -
    Export as Data Feed - Export your SharePoint list as Data Feed , use this data feed to a PowerPivot for Excel workbook and publish this PowerPivot using Excel Services.
    User-defined functions  - write UDF in C# and extend the Excel Services functionality to work with SharePoint lists.
    https://msdn.microsoft.com/library/bb267252(office.12).aspx#Office2007ExcelServicesUnlimited_SharePointLists
    Web Services API -
    The Web Services API can be used to push data from a database and then refresh the data in a SharePoint Server list by using Excel Services.
    JavaScript Object Model - The JavaScript Object Model for Excel Services in Microsoft SharePoint Server 2010 provides many solutions for Excel Services.
    More details  - 
    https://technet.microsoft.com/en-us/library/gg576960.aspx
    Thanks
    Ganesh Jat [My Blog |
    LinkedIn | Twitter ]
    Please click 'Mark As Answer' if a post solves your problem or 'Vote As Helpful' if it was useful.

  • How to add a running value from external field in a repeating table of SharePoint list

    I'me creating an infopath form that will display a SharePoint list. I want to add a link control in a repeating table using the value of the first column per row but I'm getting an issue. the link control displays only the first row. thanks in advance.

    Hi,
    I found a similar thread posted by you here:
    http://social.technet.microsoft.com/Forums/en-US/e1fa36c1-cb5c-456d-ba40-2f26301913d2/how-to-loop-through-each-row-in-a-repeating-table-using-sharepoint-workflows?forum=sharepointgeneralprevious
    I suppose both the threads are reuqesting the method to get values from repeating table via workflow, so we can focus on the issue on the other case. If there is more requestment here, let me know.
    Regards,
    Rebecca Tu
    TechNet Community Support

  • How to change the url of "Add New Item" of a particular list in SharePoint 2013???

    Hi Guys,
    How to change the url of "Add New Item" of a particular list in SharePoint 2013???
    I need to redirect it into the page where I have created my Visual web part.
    Please suggest
    Warm Regards,
    Tony Joy

    Hi,
         There are multiple ways to change the form url like javascript, SharePoint designer, custom code, editing default form to have custom web part etc, Please follow the url below that describe diffent methods and steps
    http://social.msdn.microsoft.com/Forums/sharepoint/en-US/ec2769a0-683c-4023-8804-b596e4f92a3a/change-default-forms-on-custom-list?forum=sharepointcustomizationlegacy
    Hope it helps!!!
    Please remember to mark your question as answered &Vote helpful,if this solves/helps your problem. Thanks, Ajeet

  • Sharepoint List Retention Policy based on Modified Date

    How do I implement a Sharepoint List Retention Policy that deletes list items that haven't been modified in X days?
    I've tried to create a retention policy in Sharepoint, but I only get the option to base the policy on:
    Created Date
    Declared Record
    I need the policy to be based on Modified Date, a standard date field that appears against all lists & document libraries. Is there a configuration change I can make to cause Modified Date to appear in the list of available fields on the Retention Policy
    dialog window?
    Thanks.

    Veda, thanks but I'm not really a hardcore C# coder.
    We found more elegant solution was to create a List View which returns all records that should be deleted, based on our own custom deletion criteria, and then create an very simple SSIS Package in Visual Studio using the
    Sharepoint Connectors for SSIS to delete all Sharepoint List Items returned from that List View. The Sharepoint Destination Connector has a delete operation.
    This worked for us and didn't require any coding.

  • How can anyone add to a SharePoint list but only some can edit all fields?

    My office has a list on our SharePoint for product requests. We were trying to make it so that the "+Add Item" link was available to all who want to request a map but only specific fields such as Name or Description would be editable on their
    end. Once the item is in the system, the SharePoint admins in our office could update things like Status or Analyst. However, after talking to the individual in charge of our SharePoint permissions told us that we cannot set this basic ability to "everybody"
    and instead need to create a special group with limited permissions. Unforunately we have high-turnover between our office and other locations and see this causing a problem in the near future. Is there a work around such as creating a web app or form that
    will push the necessary data into the SharePoint list or maybe just send it via email to designated recipients in our office to process it?

    I do not see any simple solutions here.  You have various options, each with different limitations and each will require some effort to implement.  Mix and match as best meets your needs:
    Create a standard list as usual*. In the lists's Advanced settings, in the Item-Level Permissions group, select the options Read all items and Create items and edit items that were created by the user.  This approach lets users create their own items
    and edit them, and they can still view other's, but they cannot edit other's.  Note: some list templates do not provide the Item-Level Permissions group of settings.
    Create a custom permissions level: copy it from Contribute.  Remove all of the Edit and Delete list permissions.  This approach lets your users create new and view existing entries, but not delete or edit them.
    Configure Incoming Email, and email-enable the target list.  You can configure the list to accept email according to the permissions that person has with respect to the list.  Thus, for example, a person with Contribute permission level would
    be able to send email to the list but a person with Read permission level would not.
    Create the list.  This will also create default New, Edit and View forms.  Customize the New form in SharePoint Designer 2013 so as not to display the fields you do not wish the user to edit.
    Create new site fields and content types: create one content type that displays only a few of these new fields and the other that displays all of them.  Add these to the list.  Configure a custom content type as the default for the list that displays
    only a few fields.  Users will see this content type when they create a new entry.  Edit the New list form to display only this content type.  Edit the View list form to display only this content type.
    References
    Configure custom permissions in SharePoint 2013
    Configure incoming email for a SharePoint 2013 farm.
    Create a custom list form using SharePoint Designer
    Create or customize a site content type

Maybe you are looking for

  • Intercompany stock transfer without billing

    Hi experts, I have one issue. We want to map intercompany stock transfer for spares and consumables  without billing. Is it possible in SAP? If possible can anybody tell the business process step by step with transaction? points will be awarded Regar

  • Screen not working

    Yesterday while using my ipod touch i saw that a few letters were not working while typing. Today i am unable to unlock or switch off the ipod. The unlocking bar goes half the way and doesn't work after that. Looks like the touch sensor is gone. What

  • Computer went into sleep mode and will not wake up!

    I have a HP Pavilion a350n which I love and have never had a problem with it.....until now. When I turn it on I get a black screen with a small window that reads "Warning" "PC entering power saving mode"  Then the screen goes blank and the blue power

  • Std Payment Terms in SAP

    Hi Wat are all the std payment terms in SAP. Vijay

  • Previous Version 8.0 no longer available from CC Installer?

    Because of the issues I've had with the 8.1 update, I am going back to 8.0.1.  I actually did this once before, early this week.  But now when I follow the same steps, the 8.0 version is not available to me for install -- only 6.0 and 7.0. I have the