Monday, August 1, 2016

Use Managed Metadata field value in SharePoint Designer Workflow emails

Hi Folks,

I've struggled a lot in using a value of Managed Metadata field value in SPD Workflow emails as it has issues with workflows and calculated fields. We can't read the Managed Metadata field values in Calculated column even.

But I got a way to use its value at least in SPD Workflow emails. Lets begin.

Create a SharePoint list say "Terms" with 2 fields: Title (Type: Single Line of Text) and TermCol (Type: Managed Metadata). Assign "TermCol" field to a term set you've created for business terms.

Then create a SPD workflow named "WF1 Terms".

1. Create a variable called 'Term' of type String. Within workflow, 2 fields will be created for "TermCol" field: TermCol and TermCol_0. We'll use TermCol_0 to read the value.

2. Set workflow variable 'Term' to value of 'TermCol_0'.




3. The value stored in variable 'Term' is like EFG-1DENA-NICOLE|19bd6c3e-0fa4-4b98-98cf-ca6da92e2bf0. The exact value is separated from its ID by "|". We need to split the values to read only the value in the workflow email.

4. Use the action "Find Substring in String" to split the value and ID in workflow variable 'Term'.



5. Use the action "Extract Substring from the start of string" to read only the value of Managed Metadata field.



6. Add the email step and use the value of workflow variable 'Term' to read the value of Managed Metadata field.

7. Run the workflow. It'll provide you the value of Managed Metadata field in the email generated via. workflow.

Monday, June 27, 2016

Get Datepart in SharePoint Designer Workflow

Hi Folks,

Yesterday, I got a task to split the date and get the day from there. I got a very good link to split date into 3 parts: Year, Month & Day.

First you have to start by asigning a new workflow string variable to a date value, and make sure to select the ISO Formatted option for the return field as parameter. This will set the string variable to something like 2010-12-28 according to the ISO format(yyyy-mm-dd).

We can now use the Utility Actions for string variables to extract our Year, Month and Day.

Screenshot

With this we can store the year in 'DatePartYear', month in 'DatePartMonth' & day in 'DatePartDay' variables and use it accordingly.

For reference, Please use the below link.
http://weblogs.asp.net/wesleybakker/get-datepart-in-sharepoint-designer-workflow 

Sunday, April 17, 2016

SPServices Code to update list items

Hi Folks,

I did an enhancement in my project to update multiple list items using jQuery SPServices. I tried very hard to use EcmaScript to update multiple list items but unfortunately it didn't work out. Finally, I had to depend on my old buddy i.e. SpServices to implement it. Basically, I've a parent list with a Primary Key which acts as a Foreign Key in Child list. From Parent list's Editform.aspx, I've to update the items based on 1 Yes/No field value in parent list which will update the Yes/No field in child list items. The Key is helpful in doing that but we've to use ID field to update items.
Here's the code below.

<script type="../SiteAssets/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="../SiteAssets/sputility.min.js"></script>
<script type="text/javascript" src="../SiteAssets/url.js"></script>
<script type="text/javascript" src="../SiteAssets/jquery.SPServices-2013.01.min.js"></script>
<script type="text/javascript" src="../SiteAssets/jquery.SPServices-2013.01.js"></script>


<script type="text/javascript">

var cuidSox;
var context;
var website;
var list;
var items;
var itemCount;
/*$(document).ready(function() {
});*/

function PreSaveAction(){

SP.SOD.executeFunc('sp.js', 'SP.ClientContext', SharePointReady);
// Update SOx list
return true;
}

function SharePointReady(){

cuidSox = $("input[title='Control UID']").val(); //Control UID from Sox control Master List which acts as Primary Key in Parent List and Foreign key in child list

if( $("input[id='ctl00_ctl40_g_48a5562b_7b23_4406_b69b_561200fe8c87_ff151_ctl00_ctl00_BooleanField']").is(':checked')) { 
    var queryXml = "<View><Query><Where><Eq><FieldRef Name = 'ControlUID'/><Value Type='Text'>" + cuidSox + "</Value></Eq></Where></Query></View>";
var query = new SP.CamlQuery();
query.set_viewXml(queryXml);
    context = new SP.ClientContext.get_current();
website = context.get_web();

list = website.get_lists().getByTitle('Monitoring List');
items = list.getItems(query);
context.load(items);
context.executeQueryAsync(onRequestSucceeded, onRequestFailed);
else{
//no action needed
}
}

function onRequestSucceeded() {
itemCount = items.get_count();
//alert(itemCount);  
var enumerator = items.getEnumerator();
while (enumerator.moveNext()) {           
var currentItem = enumerator.get_current();
var itemId = currentItem.get_item('ID');
//alert(itemId);
$().SPServices({
  operation: "UpdateListItems",
  async: false,
  batchCmd: "Update",  
  listName: "Monitoring List", 
  ID: itemId, //Without ID field it won't update the values based on parameter value. That's why with Control UID wasn't working before
  valuepairs: [["Retired",1]],
  debug: false,
  completefunc: function(xData, Status) {}
});

}

confirm(itemCount+" items got retired in Monitoring list");
}

function onRequestFailed(sender, args) {
        alert('Error: ' + args.get_message());
}


</script>


Preferred Links:

Wednesday, March 30, 2016

SharePoint Designer 2013 workflow loop to remove spaces

Hi Friends,

I wrote a workflow to generate a unique primary key which will reference all the SharePoint lists in site. However, I need to remove the whitespaces and zeros in the generated primary key.
I found the below link which provided a solution for that. I've also wrote the steps in case link got deactivated.
http://www.documentmanagementworkflowinfo.com/sharepoint-2013/sharepoint-designer-2013-workflow-loop-remove-spaces-string.htm 

You can use a SharePoint Designer workflow loop to loop through substrings in a string to remove any spaces that are embedded within the string, and then concatenate the strings with each other to be able to form a string that does not contain any spaces. In the example below, you are going to remove spaces from the string "SharePoint 2013 lists and libraries".


To use a SharePoint Designer workflow loop to remove spaces from a string:

1. In SharePoint 2013, create a new SharePoint list named MyList that has one column named Title.
2. In SharePoint Designer 2013, create a new List Workflow that runs on the MyList SharePoint list. Name the workflow RemoveSpacesFromStringWF and leave SharePoint 2013 Workflow selected as the Platform Type.
3. Create a local variable of type String named TextString1.
4. Add a Set Workflow Variable action to the SharePoint workflow, and configure it to say: 

(workflow step)
Set Variable: TextString1 to SharePoint 2013 lists and  libraries 

Note that there are two spaces between "and" and "libraries" (to test the removal of double spaces), and that an extra space was appended to the entire string to be able to find the last substring in the string.

5. Add a Find Substring in String action to the SharePoint workflow and configure it to say:

(workflow step)
then Find   in Variable: TextString1 (Output to Variable: index)

Here you are just trying to find the first space in the TextString1 variable.


6. Click to place the cursor below the last action you added, and then select Workflow > Insert > Loop > Loop with Condition, and configure the sentence for the loop to say: 

(workflow step)

The contents of this loop will run repeatedly while: Variable: index not equals -1


7. Click to place the cursor inside the loop, and then add an Extract Substring of String from Index with Length action to the SharePoint workflow, and configure it to say:

(workflow step)
Copy from Variable: TextString1, starting at 0 for Variable: index characters (Output to Variable: substring )


8. Create a local variable of type String named StringWithoutSpaces.

9. Click to place the cursor below the last action you added, and then select Workflow > Insert > Condition > If any value equals value, and configure the condition to say: 

(workflow step)
If Variable: substring is not empty


10. Add a Set Workflow Variable action inside the loop, inside of the If-Condition of the SharePoint workflow, and configure it to say: 

(workflow step)
Set Variable: StringWithoutSpaces to [%Variable: StringWithoutSpaces%][%Variable: substring%]

where you must use the String Builder dialog box to concatenate the strings that are stored in the variables.


11. Add a Do Calculation action inside the loop but outside of the If-Condition of the SharePoint workflow, and configure it to say: 

(workflow step)
then Calculate Variable: index plus 1 (Output to Variable: calc)


12. Add an Extract Substring from Index of String action inside the loop but outside of the If-Condition of the SharePoint workflow, and configure it to say:

(workflow step)
then Copy from Variable: TextString1, starting at Variable: calc (Output to Variable: TextString1)

13. Add a Find Substring in String action inside the loop but outside of the If-Condition of the SharePoint workflow, and configure it to say: 

(workflow step)
then Find   in Variable: TextString1 (Output to Variable: index)

Here you are trying to find the next space in what is left of the string stored in the TextString1 variable. This is also the last action within the loop. If the value of index is equal to -1, so no space is found, the looping will end; otherwise it will continue looping through the string stored in TextString1 until it does not find any more spaces.

14. Add a Log to History List action outside the loop to the SharePoint workflow, and configure it to say: 

(workflow step)
then Log Variable: StringWithoutSpaces to the workflow history list

15. End the SharePoint workflow with a Go to a stage action.
16. Configure the SharePoint workflow to start automatically when an item is created.
17. Publish the workflow to SharePoint 2013.


In SharePoint 2013, navigate to the MyList SharePoint list and add a new item. Once the workflow has run and completed, navigate to the workflow history list, and verify that the string SharePoint2013listsandlibraries was written to the history list.

Monday, March 21, 2016

Angular JS Code to read SharePoint list

Hi folks,

I did a learning POC to fetch items from a SharePoint list using REST API and then display them in HTML table using Angular JS. Here is the code below.

<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>

<script>

console.log(GetSiteUrl());


var spApp=angular.module('spApp',[]);
spApp.controller('spListCtrl',function($scope, $http){
$http(
{
method: "GET",
url: GetSiteUrl()+"/_api/web/lists/getByTitle('SAP Batch Jobs')/items?$select=Job%5Fx0020%5FName,Title,Client%5Fx0020%5FNumber,Location",
headers: { "Accept": "application/json;odata=verbose" }
}
).success(function (data, status, headers, config){
$scope.SAP = data.d.results;
}).error(function (data, status, headers, config){
});
});

function GetSiteUrl(){
var urlParts = document.location.href.split("/");
return urlParts[0] + "//" + urlParts[2] + "/" + urlParts[3] + "/" + urlParts[4];
}
</script>

<div ng-app="spApp">
<div ng-controller="spListCtrl">
<table width="100%" cellpadding="10" cellspacing="2">
<thead>
<th>Job Name</th>
<th>Job Status</th>
<th>Client Number</th>
<th>Location</th>
</thead>
<tbody>
<tr ng-repeat="s in SAP">
<td>{{s.Job_x0020_Name}}</td>
<td>{{s.Title}}</td>
<td>{{s.Client_x0020_Number}}</td>
<td>{{s.Location}}</td>
</tr>
</tbody>
</table>
</div>
</div>


Preferred links:
https://saikiran78.wordpress.com/2014/01/16/first-move-towards-angularjs-with-sharepoint-2013/
http://www.dotnetcurry.com/sharepoint/1009/sharepoint-webpart-angularjs-knockoutjs

Wednesday, March 2, 2016

Understanding Managed Paths in SharePoint

When we create Site Collections in Sharepoint web applications, they are created with URL as

http://servername:port/sites/

To have a specific URL other than /sites we would have to create a Managed Path.

When we create a Managed Path, we have two options:   Explicit Inclusion
                                                                                           Wildcard Inclusion


Explicit Inclusion:
When we are not planning to create further site collections under a specified managed path, then we use this option. Explicit Inclusion Managed paths allows in creation of only one site collection at the exact given URL.
In our case fahadexplicit would be the only site collection that can be created. SharePoint will allow creating only one site collection within this Managed Path.

The URL would be: http://servername:port/fahadexplicit


Wildcard Inclusion:
When we want to create more than one site collection under a specific managed path, we use this option. Wildcard Inclusion Managed Paths allow unlimited site collection to be created under a given URL.
In our case under fahadwildcard, we can create any number of site collections.

The URL of these site collections would be as below:

http://servername:port/fahadwildcard/sitecollection1
http://servername:port/fahadwildcard/sitecollection2



Preferred links:
http://www.sharepointpitstop.com/2012/11/managedpath-explicit-wildcard-inclusions.html
http://sureshpydi.blogspot.in/2013/03/share-point-managed-paths.html

Friday, February 26, 2016

Configuring Forms Based Authentication in SharePoint


Hi Guys,

I had a requirement in my project to allow external users to access our on-premise SharePoint site. It is difficult and need to follow many steps.

We need to implement Forms Based Authentication to allow external users access the site.
I've followed the below steps to achieve the functionality.

Steps:
1. Creating a Membership Database.

2. Add Users to the Membership Database.

3. Editing the Web.Config files

4. Configuring SharePoint.


For full explanation follow the below link

http://blogs.visigo.com/chriscoulson/configuring-forms-based-authentication-in-sharepoint-2013-part-1-creating-the-membership-database/