Angular 2 – The WHATS & Why???

So now that I have to work using this wonderful technology, I have been trying to learn it.

Here’s my bit of understanding in a series the way I keep learning it…

What is Angular?

Angular is a leading framework for building JavaScript heavy applications and is often used in building single page applications or SPAs.

Continue reading


SharePoint event receiver getting triggered multiple times

Problem – Event receiver is getting fired twice.

My event receiver was supposed to send email to creator upon item added event. The event receiver was triggered, though it was sending two emails every time an item was created.

This was an indication that there were two event receivers attached to my list.

Solution – I followed the  below steps to troubleshoot

Continue reading the remote certificate is invalid according to the validation procedure.

Problem statement – While sending email using SMTP client using C# code, the following error comes up the remote certificate is invalid according to the validation procedure.

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel

Solution – Add the code before calling smtpClient.Send(mail)

//Add following namespaces
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

smtpClient.EnableSsl = true;

ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

Retrieve email id from a person or group field programatically

Requirement –  To retrieve email id of a user from a person or group field of a SharePoint list or library using C# code

Solution – Assuming that the query returns a list item collection

SPListItemCollection itemCollConfig = oConfigList.GetItems(oQuery);

if (itemCollConfig.Count > 0)
     SPFieldUser userField = (SPFieldUser)itemCollConfig.Fields.GetField("HOD");
     //strHODEmail = Convert.ToString(itemCollConfig[0]["HOD"]);
     SPFieldUserValue userFieldValue = (SPFieldUserValue)userField.GetFieldValue(itemCollConfig[0]["HOD"].ToString());

      SPUser user = userFieldValue.User;
      strHODEmail = user.Email;

First a reference is established to the field (field name – HOD in my case), and then the user value is retrieved from the particular index for that field.

Now remember, this would work when the person or group field is configured to accept only one value at a time.

If multiple users can be selected, then the class would vary slightly and collection will be used. Assuming item reference is available

string stEmails = string.empty;
SPFieldUser userField = (SPFieldUser)item.Fields.GetField("Users");
SPFieldUserValueCollection userFieldValueCollection = (SPFieldUserValueCollection)userField.GetFieldValue(item["Users"].ToString());
foreach (SPFieldUserValue userFieldValue in userFieldValueCollection)
strEmails = strEmails + userFieldValue.User.Email;


Next situation – When it is a people editor control on the page/web part, how to retrieve the user’s email. Below code would facilitate for the same. The people editor control here is “pplSendMail”

string strEmail = string.Empty;              
if (pplSendMail.ResolvedEntities.Count > 0)
    for (int i = 0; i < pplSendMail.ResolvedEntities.Count; i++)
        PickerEntity user = (PickerEntity)pplSendMail.ResolvedEntities[i];
        SPUser webUser = SPContext.Current.Web.EnsureUser(user.Key);
        SPFieldUserValue value = new SPFieldUserValue(SPContext.Current.Web, webUser.ID, webUser.Name);
        strEmail = strEmail + "," + webUser.Email;

Regex to validate email ids in InfoPath

Requirement – InfoPath form’s column should allow multiple valid email ids to be keyed in, separated by a comma.

InfoPath allows validation of an email id by default. It has a pattern to compare to. However, when the need arises to have multiple email ids inserted in a column, how to validate if all are valid email ids and are separated by a comma?

Solution – Write a validation rule for the column. The condition would be

Field: Email

Condition: does not match pattern

Custom pattern:  ([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\s*,\s*([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3}))*


Regex to validate title text in InfoPath

Requirement – InfoPath form title column should allow only alphabets and numbers to be keyed in, no special characters should be allowed.

Solution – Write a validation rule for the column. The condition would be

Field: Title

Condition: does not match pattern

Custom pattern:  -?[ a-zA-Z0-9]*[ a-zA-Z0-9]+



Send emails to distribution lists using SharePoint

It is easy to send emails to shared mailboxes or to distribution lists (DL) using your outlook. But have you ever wondered what happens when you try sending email to a DL using SharePoint (workflow).

I had the requirement to send emails to multiple DLs using my workflow and a 2 hours estimated work took me nearly 2 days to complete.

Basically, the email id of the DL won’t appear in your active directory while you search for it. Also, it is fair enough since a DL has no physical mailbox associated to it, just an id. Hence, the email id of the DL won’t be resolved.

Solution – Email enabled security group!!

In order to send emails to a DL from SharePoint, the DL needs to be converted to a security group that is email enabled. The same setting can be done by the exchange engineer either through command prompt or through exchange console. Below steps can be followed

  1. Go to Exchange Management Console -> Recipient Configuration -> Distribution group.
  2. Right-click on the problem group (i.e. the DL or the security group) and choose properties.
  3. On the Mail Flow Settings tab, double click on Message Delivery Restrictions.
  4. Uncheck the check box “Require that all senders are authenticated”.


Once done, the DL’s id can easily be searched in SharePoint’s directory and emails can be sent using workflows. However one thing to be kept in mind, it is the description or the display name that can be searched and not the DL’s email id directly.

Hope this helps!



2015 in review

Thank you all for the wonderful response. I want to thank each one of you for visiting my blog.

I wish you all a very happy new year 2016…


The stats helper monkeys prepared a 2015 annual report for this blog.

Here’s an excerpt:

Madison Square Garden can seat 20,000 people for a concert. This blog was viewed about 68,000 times in 2015. If it were a concert at Madison Square Garden, it would take about 3 sold-out performances for that many people to see it.

Click here to see the complete report.

Publishing a Nintex workflow to lists & libraries in multiple sites

My previous post was how can a Nintex workflow be published to multiple lists in the same site.
This time, it is a slight variation. The question this time is how can a workflow be published to multiple lists that reside on different sites.

Interesting stuff!! Trust me 🙂

Let me tell you how I came to this scenario

I have a site that is saved as a template, and close to 200+ sites have been created out of that template. All worked great until one day when I received this request for a change in one of my workflows in one of the lists of the site.

Also, this change had to be copied to almost 40 out of the 200 sites created.

Of course, I made the changes in the template site, but the challenge was how do I publish my updated workflow to the said sites.

This happened to be a slight extension to the same methodology that was used previously. Continue reading

Publishing a workflow to multiple lists and libraries (in same site!)

Requirement – I have a site that has around 40 country lists which have the same workflow. When there is a change in the workflow, there is a need to update the workflow in all 40 lists; which is practically impossible. Also, it wouldn’t be considered a good practice.

As most of the times, I knew there was a solution using Nintex. And the  moment I found it, I fell even more in love with this workflow tool. It keeps surprising me as always!

Solution – Nintex workflow comes with a web method called PublishFromNWFXML that will do this job for us.
Update your workflow at the parent location and export it. Upload the nwf file to a library (here – Shared Documents) and create the below workflow on this library, that will update it to the multiple lists.

Continue reading