Hi all,
Environment: SharePoint Online
Background: Client have multiple tasks in SharePoint
OOTB Task list for different workflows and each workflow has its different business logic using Nintex workflows. Client requested to have bulk
approval as custom action on Ribbon Control on
the task list.
Challenge:
I am developing SharePoint Add-in to meet this above requirement.
- User selects Tasks from the SharePoint Task list.
- Click on Bulk Approval custom action.
-
I am able to show the selected IDs. As shown
below:
-
I need to show to user click Yes to approve
the selected tasks and No if he wishes to
cancel.
Q: How could I show Yes / No options (Javascript??) in the dialog box using custom ribbon action within the SharePoint Add-in?
This my custom action for ribbon control (Bulk Approval)
<?xml version="1.0" encoding="utf-8"?><Elements xmlns="http://schemas.microsoft.com/sharepoint/"><CustomAction Id="9809f0a6-4abc-4c2a-a6e6-c57ef9647647.BulkApprovalCustomAction" RegistrationType="List" RegistrationId="107" Location="CommandUI.Ribbon" Sequence="10001" Title="Bulk Approval" HostWebDialog="true" HostWebDialogHeight="300" HostWebDialogWidth="400"><CommandUIExtension><!-- Update the UI definitions below with the controls and the command actions that you want to enable for the custom action. --><CommandUIDefinitions><CommandUIDefinition Location="Ribbon.ListItem.Actions.Controls._children"><Button Id="Ribbon.ListItem.Actions.BulkApprovalCustomActionButton" Alt="Bulk Approval" Sequence="100" Command="Invoke_BulkApprovalCustomActionButtonRequest" LabelText="Bulk Approval" TemplateAlias="o1" Image32by32="data:image/png;base64,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" Image16by16="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAIAAADAAbR1AAAABnRSTlMAAAAAAABupgeRAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAADW0lEQVQ4y+1Ua0hTYRg+FNmFJMuwm0lWGllQPyoqMyIl0yJmhhJIlmkRRZrLsMQsLbXmtc1t52w7ntvcKg3dbF4qzWUbNstpKrO8z61mVqZu0x23k9OgwqKfEfT8eHl5vu95vof3hQ8A/uNPYK1n2Vi23li9k95JZ+iv6a/Rve7P7E/rExlshoYEacLmhJOyUkmZ9KnFSm4lHfJA9gI2IF/3vOh5kTJJ9U5lUL6vp9UfVFhVUlXmxYY497jt1eCTiCfvqUkAPAf+Sv5Kajok9pJ6NPlKCpwek+h2bUHGbIaGkcEvgl1gR+o3SG1PzrkRkHvq5un0PmIdcZjYCHCbwSrwMWn5fsmq/963eGvimpl18S+uK4+lPLqxOsU9V8TcygymLv3gGjKpUtlribjMtewaNpsIFC5JiEl0TfQEQAcQBy9bt/060WfEdIKiyA57j3thZmRW9itmNCt6nGNnbP4TxnOti3+txWeIgkVygLcIagLN04+7fIwi0mOfMjGoej0UpUjSj+ChKMRPywni3oIkI41Nw4pa3Tn6kYPawTa5qPL4UOwXoanV2Kuoqj5DUR8cuuMFm/FGohfA5iFRAk+1y4CfKUcx0OP/MX0y2+PkB9jOuqwgPCW25t3nYjuHYPAY1JqlyZNzPKgWO/PlWXkyAWn0gVI3X2Vn2MujFTpZobqgdCoi7x6mJfwA4SFcDo/U7mzd80kYQkuaU32EXsJsqTq/Vx1dUShpc9ORxogpATgEbeHmZS1nxbDvTDHmDy3Nxb697pc8Ahhvhi+cCR0fLHgaeV/97YFyVIlrAbQBjYY7pyhZSH3HoP9uX/rM0r2y/Spld+mPQwMp3kPe1dwVkASmkVjb6Avbxw10NNBKavUGnYrqGdVapKZNhd45qya2ljYwDJcIs8XBAHcF18z1MnlYDpk2WTInhmN45dyu0SMmI6k200j5hPNS8ydr3Piz3EYmzJTfqYfCBY5j4TrXt+62PW3BdZyfd2e5aSmiqLHGIZ/8JmK4YD4g1osZ4tPoMtQZicTbMQMiE6UK56O70EfIS3gof2H+FhjDdmCp2FlBmGCtYAdLzY7kOPGUeKiwkocURN0N4HTBUL6RQ+efE6wBy5ESzBOuxX2J17e7GN0ZB/72R/IP4CumCKj64/tW0AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0xMi0wN1QxMDo0Nzo1My0wNjowMKGS4TgAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMTItMDdUMTA6NDc6NTMtMDY6MDDQz1mEAAAAAElFTkSuQmCC" /></CommandUIDefinition></CommandUIDefinitions><CommandUIHandlers><CommandUIHandler Command="Invoke_BulkApprovalCustomActionButtonRequest" CommandAction="~appWebUrl/Pages/Default.aspx?{StandardTokens}&SPListItemId={SelectedItemId}&SPListId={SelectedListId}"/></CommandUIHandlers></CommandUIExtension ></CustomAction></Elements
-
If a user choose the clicks Yes, then I need to
set the workflow statuses to be "Approved" for
all the document libraries and custom lists irrespective of the workflow business logic defined.
Q: How could I achieve this? Any sample code would be very beneficial.
This my App.js code for SharePoint Add-in code.
var context; var user; var hostweburl; var appweburl; var listItemIds; var countOfIDs var targetList = "Tasks" $(document).ready(function () { SP.SOD.executeFunc('sp.js', 'SP.ClientContext', constructURL); }); // This function is executed after the DOM is ready and SharePoint scripts are loaded // Place any code you want to run when Default.aspx is loaded in this function // The code creates a context object which is needed to use the SharePoint object model function constructURL() { hostweburl = getQueryStringParameter("SPHostUrl"); appweburl = getQueryStringParameter("SPAppWebUrl"); listItemIds = getQueryStringParameter("SPListItemId"); hostweburl = decodeURIComponent(hostweburl); appweburl = decodeURIComponent(appweburl); listItemIds = getQueryStringParameter("SPListItemId"); if (typeof listItemIds !== "undefined") { countOfIDs = listItemIds.split(',').length; } loadDependentScripts(); } function loadDependentScripts() { var scriptbase = hostweburl + "/_layouts/15/"; // Load the js files and continue to the successHandler $.getScript(scriptbase + "SP.Runtime.js", function () { $.getScript(scriptbase + "SP.js", function () { $.getScript(scriptbase + "SP.RequestExecutor.js", specificListFromHostWebUsingREST); } ); } ); } function specificListFromHostWebUsingREST() { var executor; //If User does not select any option if (!listItemIds) { listItemIds = "1, 2, 3"; } // although we're fetching data from the host web, SP.RequestExecutor gets initialized with the app web URL.. executor = new SP.RequestExecutor(appweburl); executor.executeAsync( { url: appweburl +"/_api/SP.AppContextSite(@target)/web/lists/getbytitle('" + targetList + "')/items?@target='" + hostweburl + "'&$select=Title", method: "GET", headers: { "Accept": "application/json; odata=verbose" }, success: Success, error: Fail } ); } function Success(data) { var jsonObject = JSON.parse(data.body); if (typeof countOfIDs !== "undefined") { $('#selectedIDs').text(countOfIDs.toString()); } for (var i = 0; i < jsonObject.d.results.length; i++) { //var currentObject = jsonObject[i] var result = jsonObject.d.results[i]; $('#Status').append("<div style='padding-gt;" + result.Title + "</div>"); } if (typeof countOfIDs !== "undefined") { $('#selectedIDs').text(countOfIDs.toString()); } } function Fail(data, errorCode, errorMessage) { alert('Failed to get host site. Error:' + errorMessage); } 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];
- Thank in advance.
Sandy