Wednesday, October 21, 2009
Monday, October 19, 2009
Output Active Directory LDAP user properties to MS Word
Sometimes you want to generate Outlook signatures automatically using a users's Active Directory data. There are plenty of articles on how to do this during a user login event, but I thought I'd pass along some code in C#, because almost everything out there is in VBscript, which is fine but I'm sick of using scripts and there are certain tricks you cannot pull, like making an image, like a logo or a twitter button, into a link within the signature. For that, you'll need the full Word Interop.
Here is a little function that will get you through the part I found trickiest. Note that you'll need to add the following references:
using Word = Microsoft.Office.Interop.Word;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
protected void PrintLdapProperties()
{
Word.Application oApplication = new Microsoft.Office.Interop.Word.Application();
oApplication.Visible = true;
if (oApplication == null)
{
return;
}
string strDistinguishedName = UserPrincipal.Current.DistinguishedName;
DirectoryEntry oEntry = new DirectoryEntry("LDAP://" + strDistinguishedName);
System.DirectoryServices.PropertyCollection oColl = oEntry.Properties;
Object oMissing = System.Type.Missing;
Word.Document oDocument = oApplication.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
Word.Selection oSelection = oApplication.Selection;
int NumRows = 2;
int NumColumns = 2;
Microsoft.Office.Interop.Word.Table oTable = oSelection.Tables.Add(oSelection.Range, NumRows, NumColumns, ref oMissing, ref oMissing);
Microsoft.Office.Interop.Word.Cell oCell = oTable.Cell(1, 1);
int i = 1;
foreach (string strPropertyName in oColl.PropertyNames)
{
oCell.Select();
oSelection.TypeText(strPropertyName);
oCell.Next.Select();
oSelection.TypeText(oColl[strPropertyName].Value.ToString());
oTable.Rows.Add(ref oMissing);
oCell = oTable.Cell(i + 1, 1);
i++;
}
}
Here is a little function that will get you through the part I found trickiest. Note that you'll need to add the following references:
- Microsoft.Office.Interop.Word
- System.DirectoryServices
- System.DirectoryServices.AccountManagement...
using Word = Microsoft.Office.Interop.Word;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
protected void PrintLdapProperties()
{
Word.Application oApplication = new Microsoft.Office.Interop.Word.Application();
oApplication.Visible = true;
if (oApplication == null)
{
return;
}
string strDistinguishedName = UserPrincipal.Current.DistinguishedName;
DirectoryEntry oEntry = new DirectoryEntry("LDAP://" + strDistinguishedName);
System.DirectoryServices.PropertyCollection oColl = oEntry.Properties;
Object oMissing = System.Type.Missing;
Word.Document oDocument = oApplication.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
Word.Selection oSelection = oApplication.Selection;
int NumRows = 2;
int NumColumns = 2;
Microsoft.Office.Interop.Word.Table oTable = oSelection.Tables.Add(oSelection.Range, NumRows, NumColumns, ref oMissing, ref oMissing);
Microsoft.Office.Interop.Word.Cell oCell = oTable.Cell(1, 1);
int i = 1;
foreach (string strPropertyName in oColl.PropertyNames)
{
oCell.Select();
oSelection.TypeText(strPropertyName);
oCell.Next.Select();
oSelection.TypeText(oColl[strPropertyName].Value.ToString());
oTable.Rows.Add(ref oMissing);
oCell = oTable.Cell(i + 1, 1);
i++;
}
}
Labels:
Automation,
Office,
Outlook,
Signature,
System.DirectoryServices,
Word
Subscribe to:
Posts (Atom)