"We must let the world tell us how the world is, and accept no other sources as authentic."
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++;
}
}
Subscribe to:
Posts (Atom)