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

Remove html tags from SharePoint list’s display form

Many a times, specially for look up columns in a SharePoint list, the display form returns html tags instead of the value.

For instance, below image has a look up field called Office, that shows the complete anchor tag instead of the value.

Post33

This happens while assigning the xsl value to a field in the display form. The optional attribute called “disable-output-escaping” plays the key role here. If it is set to ‘no’ (which is by default), special characters (like ‘<‘) will be output as ‘&lt;’. And if it set to ‘yes’, it means that special characters (like ‘<‘) should be output as is.

Hence, to implement this, open the display form in SharePoint designer and add this attribute i.e. disable-output-escaping=”yes” to the <xsl> tag.
For above example, the solution would be

<tr>
    <td width="190px" valign="top" class="ms-formlabel">
	<H3 class="ms-standardheader">
	     <nobr>Office</nobr>
	</H3>
    </td>
    <td width="400px" valign="top" class="ms-formbody">
	<xsl:value-of select="@Office" disable-output-escaping="yes"/>
    </td>
</tr>

Change default font of a rich text box in SharePoint

Requirement – To change the default font – style of the rich text box
The multiple lines of text field, when selected as rich text or enhanced rich text has an advantage of styling the content inside at the run time, which is actually very helpful.

But then I ran into the situation where the user asked me to change the default font-style and font-size. They didn’t wanted to go through the process of changing the styles every-time a user fills in the rich text box. Also, this was to ply with the organization’s standard styles.

So, the solution is to write css.

The default style is defined in the core.css file. Hence, to change the default values, either a new css can be created or the style can be written in a content editor web part of the new form. The class for the rich text box is .ms-rtestate-write.

Below is the css to style the rich text box.

<style type="text/css">
   .ms-rtestate-write 
   {
       FONT-FAMILY: Calibri; 
       COLOR: grey; 
       FONT-SIZE: 11pt
   }
</style>

jQuery to validate a people picker control for blank value in SharePoint

jQuery has made lives simpler by the validation techniques it uses. However, it can be big pain also the way it deals with various kind of controls. My case was to validate the people picker control.

The usual technique is to find the control, then match the value or text in the control to blank… and boom!!! you’re done with the validation.
But this seemed to work for the text boxes, drop downs, etc. The people picker, however, was returning by default the value – “&#160”. This is the blank value, but it never returned true upon comparison with blank.

So, the catch here is to find the correct control. It is not the people picker, instead you need to find the div with the id ‘divEntityData’. Then do the comparisons as in below code. It first checks the length, if nothing is entered. Later, if you’ve entered any value in the people picker, it will check whether it is resolved or not using the attribute “isresolved”. Use the below code for your reference.

function IsPeoplePickerValueResolved() { 
   var eEntityData = $("div[id='divEntityData']");
   if(eEntityData.length == 0)
   {
   		alert("Please enter a user for this user field");
   		return false;
   }
   else if(eEntityData.length > 0 ) 
   {
       var isResolved = eEntityData.attr("isresolved");
       if(isResolved == "True")
       {
	       return true;
       }
       else
       {
	     alert("Please select correct name and resolve it");
	     return false;
       }
   }
   else
   {    
	   return false;
   }
}

Hope you could save some time with this.