How to: Test Incoming Enable Libraries in SharePoint

joostFor a project I am currently involved with, we had to create email enabled libraries within SharePoint. At first sight this wasn’t such a problem and we’ve created an installation manual in order to configure all parts related to the Incoming mails. The part of installing and configuring all parts is heavily discussed all over the Internet and the document we’ve created was mainly based on the Blog written by Harmeet Walia. However due to some technical limitations we were not able to test the entire mail flow to date. However we really would want to test the pickup of the messages from the mail server and wanted to see them added to the configured library.

The only option I thought of was with the Command Prompt. However out of the box this isn’t possible, on the other side the good news was that sending emails using command prompt can be done using a Telnet session. The Telnet client can be installed from the Windows Server 2008 R2 Server Manager.

When everything is in place, it is possible to send the email to the SMTP service. In order to do so, first start Command Prompt as an Administrator.

Next execute the following command:

telnet {Server FQDN} 25

In the above mentioned command line first the program Telnet is used. Second the server name to which the connection needs to be set-up is defined, this needs to be the FQDN of the server. And the last part (here 25) is the port number. For mail client’s in most cases port 25 is being used.

When the Enter button is hit, a connection to the server is made. We see a new screen within the Command Prompt and we can start defining the email. First we have to configure several parts. In order to do this, execute the following command lines.

helo {server FQDN}
mail from:{your email address}
rcpt to:{email address of email enabled library}
data

Within the first line we say hello to the SMTP server (the helo as spelled above is the correct spelling format!). Don’t ask me why this has to be done with this spelling, but it has to be done anyway. Second you have to add a valid email address from which the mail is being send, and next to recipient of the email needs to be configured, which is in our case the email enabled library. Finish this block with data. When the Enter button is being hit, the message can be configured. For configuring the e-mail, use the following example:

From: joost.van.lier@centric.eu
Subject: test email

this is a test e-mail
Hello World
sent from Command Prompt
.

The From and Subject address are being displayed in you message. This can be any valid value. After hitting Enter twice it is possible to configure the body of the email. in this case we have defined three lines (but can be more or less). When the entire email is configured, a dot (.) needs to be entered in the Command Prompt. By entering a dot it is declared that the message is done and can be send. In this case the message is sent and queued on your SMTP server.

Advertenties

NINTEX Workflow 2010: State machines

Joost

De afgelopen weken ben ik weer veel met NINTEX Wokflow 2010 bezig geweest. De laatste keer dat ik een workflow heb ingericht was met behulp van een zogenaamde state machine workflow. Deze methode om workflows te creëren is zeer interessant maar behoeft wel wat extra uitleg.

Wat is een state machine?
Een state machine is een onderdeel van Microsoft .NET Framework 4.0. Hierdoor heeft NINTEX deze actie ook mogelijk gemaakt in NINTEX Workflow 2007 en de 2010 versie. Aan de hand van deze ‘state machine’ acties kunnen er binnen de workflow vele verschillende statussen worden gedefinieerd. Een state machine heeft altijd twee of meer statussen, en een van deze statussen is actief tijdens de uitvoer van de state machine. Het gebruik van een ‘state machine’ actie is zeer handig indien er veel tussen statussen gewisseld moet worden.

Zoals gezegd kan een state machine workflow handig zijn voor verschillende doeleinden. hierbij zijn verschillende voorbeelden te geven:

  • Offerte proces, waarbij de offerte sequentieel moet worden goedgekeurd door meerdere personen;
  • Beoordeling van een item of aanvraag waarbij er meerdere uitkomsten zijn bij de beoordeling;

Het maken van een State Machine workflow is binnen NINTEX Workflow heel eenvoudig. Door de workflow actie ‘state machine’ (uit de categorie Logic and flow) op de juiste plaats in de workflow designer te slepen, wordt er een state machine aangemaakt. De volgende stap is het aanmaken van alle benodigde ‘states’. Binnen deze ‘states’ worden dan de verschillende acties helemaal ingericht. Zo kunnen er onder andere berichten verzonden worden, kan CRM geüpdate worden en kan het lijstitem of bestand geüpdate worden.

imageOp NINTEX Connect is een voorbeeld van een State Machine workflow uitgewerkt. De beschrijving is gemaakt voor SharePoint 2007 met NINTEX Workflow 2007. Deze beschrijving is ook zeer goed te gebruiken voor SharePoint 2010 en NINTEX Workflow 2010.

Safe loop mechanisme
Tijdens het inrichten van de laatste workflow kreeg ik de vraag waarom de gebruikers zo lang moeten wachten, immers men verwachte dat het item direct werd geüpdate. Het probleem wat men hier tegen komt is het safe loop mechanisme. Dit mechanisme zorgt ervoor dat er 5 minuten gewacht wordt wanneer er gewisseld moet worden van ‘state’. Dit heeft NINTEX gedaan om te voorkomen dat een oneindige loop alle resources opneemt van de SharePoint server. Indien dit gebeurt zal SharePoint niet meer werken…

Het is mogelijk om het safe loop mechanisme terug te brengen naar 1 minuut. Persoonlijk zou ik dit niet adviseren omdat je dan te weinig tijd zou hebben om de workflow te stoppen indien een oneindige loop gecreëerd is. Ook NINTEX adviseert om het safe loop mechanisme nooit lager te zetten dan 5 minuten. Een en ander is door NINTEX kort uiteengezet als antwoord op een vraag over dit mechanisme, klik hier voor de link.

Oneffenheidje
Aan het begin van het maken van een state machine workflow definieer je alle benodigde statussen. Tijdens het configureren van de state machine merkte ik dat ik de verkeerde statussen had gebruikt en dat daardoor de volgorde raar werd weergegeven. Ik besloot de state’s te hernoemen. Wat me opviel bij het uitvoeren van de worfklow was dat de aangepaste namen keurig werden verwerkt in de flow. Maar bij de workflow actie ‘change state’ wordt de naam van de state opgenomen in het onderste label veld. Dit veld wordt niet automatisch aangepast als de namen van de states worden aangepast. Dit leidde in eerste instantie tot verwarring bij mij en de gebruikers.
Bovenstaande is gemeld bij NINTEX en zal zeer waarschijnlijk niet worden opgelost in de volgende release (de nieuwe release met bugfixes wordt op zeer korte termijn verwacht). In de release hierna wordt bovenstaande oneffenheid zeer waarschijnlijk wel meegenomen.

Openen van URL’s in een nieuwe browser in SharePoint

Joost

Tijdens de uitvoering van mijn werkzaamheden voor een klant kwam de vraag naar voren of bepaalde snelkoppelingen in een apart venster geopend zouden kunnen worden. Hier ben ik naar op zoek gegaan hoe dit te bewerkstelligen is en ben ik tot enkele oplossingen gekomen.

Koppeling in bovenste navigatie balk
Als je een koppeling in de bovenste navigatiebalk wil plaatsen en deze in een nieuw scherm wil openen kun je een stukje Javascript gebruiken om dit te bewerkstelligen. Om dit te doen plak je bijvoorbeeld de onderstaande code in het URL veld:

javascript:window.open(“http://www.centric.eu/”);void(0);

Door bovenstaande code in het veld te plakken zal er een nieuw scherm geopend worden waar de URL op wordt geopend. In het geval van dit voorbeeld zal de site www.centric.eu in een nieuw browserscherm geopend worden. Het toevoegen van links aan het menu aan de zijkant van een SharePoint pagina kan ook gedaan worden met behulp van dit stukje JavaScript. Ook hier zal de pagina in een nieuw venster geopend worden.  De bovenstaande oplossing kan ook gebruikt worden in editors die gebruikt worden voor het maken van blogs (Bijvoorbeeld Windows Live Writer 2011).
LET OP!: bovenstaande oplossing werkt niet als de publishing feature van SharePoint is geactiveerd. In dit geval heb je bij het aanmaken van een hyperlink al de mogelijkheid om aan te geven of de hyperlink in een nieuw scherm geopend moet worden of niet.

Koppeling in een lijst
Indien je een koppeling in een lijst wil plaatsen dan is dit ook mogelijk. Hiertoe dien je 4 velden toe te voegen aan een bestaande lijst, of als je een lijst met koppelingen wil maken dan dien je een custom list te maken (de template ‘Koppelingen’ is helaas niet te gebruiken omdat je bij de berekende kolom niet de beschikking hebt over het veld ‘Titel’ en ‘URL’):
– Naam Hyperlink
– URL
– selectievakje ‘Openen in een nieuw venster’
– Berekende kolom ‘Naam rapport’

door in de berekende kolom de volgende berekening toe te voegen wordt er een DIV gecreëerd waar de URL in wordt geplakt. Voeg in de berekende kolom de volgende berekening in (voor een Nederlandstalige site, zie onderstaande links voor de Engelstalige berekeningen):

=TEKST.SAMENVOEGEN(“<DIV><a href=”;URL;ALS([Openen in een nieuw venster]=WAAR;” target=’_blank'”;””);”>”;Titel;”</a></DIV>”)

Als de URL’s die in de berekende kolom opgebouwd worden, getoond moeten worden op een pagina, moet op deze pagina een stuk javascript geplaatst worden. Om dit te doen voeg je een ‘Inhoudseditor’ toe op de pagina. In de broneditor van dit type web part moet je de volgende Javascript code plakken:

   1:  <script type="text/javascript">
   2:  //
   3:  // Text to HTML
   4:  // Feedback and questions: Christophe@PathToSharePoint.com
   5:  //
   6:  var theTDs = document.getElementsByTagName("TD");
   7:  var i=0;
   8:  var TDContent = " ";
   9:  while (i < theTDs.length) {
  10:  try {
  11:  TDContent = theTDs[i].innerText || theTDs[i].textContent;
  12:  if ((TDContent.indexOf("<DIV") == 0) && (TDContent.indexOf("</DIV>") >= 0)) {
  13:  theTDs[i].innerHTML = TDContent;
  14:  }
  15:  }
  16:  catch(err){}
  17:  i=i+1;
  18:  }
  19:  //
  20:  // ExpGroupRenderData overwrites the default SharePoint function
  21:  // This part is needed for collapsed groupings
  22:  //
  23:  function ExpGroupRenderData(htmlToRender, groupName, isLoaded) {
  24:  var tbody=document.getElementById("tbod"+groupName+"_");
  25:  var wrapDiv=document.createElement("DIV");
  26:  wrapDiv.innerHTML="<TABLE><TBODY id=\"tbod"+ groupName+"_\" isLoaded=\""+isLoaded+ "\">"+htmlToRender+"</TBODY></TABLE>";
  27:  var theTBODYTDs = wrapDiv.getElementsByTagName("TD"); var j=0; var TDContent = " ";
  28:  while (j < theTBODYTDs.length) {
  29:  try {
  30:  TDContent = theTBODYTDs[j].innerText || theTBODYTDs[j].textContent;
  31:  if ((TDContent.indexOf("<DIV") == 0) && (TDContent.indexOf("</DIV>") >= 0)) {
  32:  theTBODYTDs[j].innerHTML = TDContent;
  33:  }
  34:  }
  35:  catch(err){}
  36:  j=j+1;
  37:  }
  38:  tbody.parentNode.replaceChild(wrapDiv.firstChild.firstChild,tbody);
  39:  }
  40:  </script> 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Door de ‘Inhoudseditor’ onder de web parts te plaatsen waar de links in gecreëerd worden, zal de code uitgevoerd worden. In dit geval zul je dus de waarde te zien krijgen die in het ‘titel’ veld is ingevuld.

Voor meer informatie, zie ook de volgende URL’s:
Creëren van de benodigde custom list – http://blog.pathtosharepoint.com/2008/09/01/how-to-open-hyperlinks-in-a-new-window-or-not/
Meer informatie over het Content Editor Web part – http://blog.pathtosharepoint.com/2008/08/10/the-content-editor-web-part/
Gebruik van ‘Calculated Columns’ en HTML – http://blog.pathtosharepoint.com/2008/09/01/using-calculated-columns-to-write-html/