Tim Murphy's .NET Software Architecture Blog

February 2010 Entries

Why Does Bing Not Have Blog Search

This is more of a short rant than anything.  For the most part I like Bing.  Once in a while I still find I get better results from Google.  The main thing I find myself missing that I had with Google is the blog search feature.  All to often I can filter out a lot of garbage just by using that option.  So my request is “when will Bing implement blogsearch”?

del.icio.us Tags: ,,

March 2010 Chicago Architects Group Meeting


The Chicago Architects Group will be holding its next meeting on March 16th.  Please come and join us and get involved in our architect community.


Presenter: Mike Vogt 
Topic: Data Integration Architecture   
Location: Illinois Technology Association
200 S. Wacker Dr., Suite 1500
Room A/B
Chicago, IL 60606
Time: 5:30 - Doors open at 5:00

February 2010 Chicago Architects Group – Wrap Up

Cloud services such as Azure from Microsoft and Amazon’s Cloud Services have replaced Web 2.0 as the latest buzz word.  It was enlightening to see how companies, including my own, are using these services.

Chris did a wonderful job of explaining the evolution of the Amazon services and some of the alternatives that existing.  It was also great to get a speaker in front of the group who isn’t from the Microsoft camp.

Thanks to those who came out after meeting us at the MSDN Cloud Computing and Azure event.

Please come and join us for our next meeting.  I will be sending out an announcement later today with the details.

Bolding and Underlining Text In Word Documents

Note: Cross posted from Coding The Document.

In the templates that I have processed with Open XML there are usually a number of tables.  Some times we have to add an extra paragraph to a cell and we want to keep the formatting of the text already in the cell.  In this post I will go over how to apply bold and underline formatting to text as well as how to steal it from existing text and apply it to a new paragraph or run.

In order to apply an underline format to a paragraph by hand you have to start with the ParagraphProperties.  To that you append a ParagraphMarkRunProperties object to which you have appended an Underline object.  It isn’t that complicated.  There are just a lot of objects that have to be instantiated to format a paragraph.  Below is an example of what I have just described.

Paragraph newParagraph = new Paragraph();
ParagraphProperties newProperties = new ParagraphProperties();
ParagraphMarkRunProperties markRunProperties = new ParagraphMarkRunProperties();
Underline newUnderline = new Underline { Val = UnderlineValues.Single };
wordprocessing.Run newRun = new wordprocessing.Run();
wordprocessing.Text newText = new wordprocessing.Text("Text for the new paragraph");

In order to make a paragraph or run bold you append a Bold object instead of or as well as the Underline object.

If you have an existing paragraph that you can steal from the code gets a lot easier.  The code below does just that by cloning the ParagraphProperties from the existing paragraph and appending it to the new paragraph.

ParagraphProperties properties = (ParagraphProperties)oldParagraph.ParagraphProperties.Clone();

Of course which approach you take will depend on what you situation is.  If you are allowing a user to define formatting through an interface other than a template you will have to use the first example.  This is one more reason to use a base file as a template.  Either way you should be able to accomplish the goal of formatting your text.

Sending Email Through Lotus Notes Via SMTPClient

The topic covered in this post actually have applicability beyond Lotus Notes, but that is just where I ran into the problem.  The real subject is adding credentials to your SMTP client.  Normally I would just make sure that the service sending the email has permission to send email to an Exchange server.  The problem I had to send the email through Lotus and it wanted a separate login from the identity running the program. 

The only error message I got back when I originally wrote the code without specifying a user name and password was that my code had violate a policy.  How helpful.

Now this isn’t rocket science, but finding information on this subject can be difficult at times.  Note in the code sample below that it is adding a NetworkCredential object to the SMTP client. 

// Format the email body
emailBody = emailBody.Replace("$$WEBSITE$", website).Replace("$$NAME$", NameText.Text).Replace("$$ADDRESS$", AddressText.Text)
.Replace("$$STATE$", StateDropDownList.SelectedValue).Replace("$$COUNTRY$", CountryDropDownList.SelectedValue)
.Replace("$$ZIP$", ZipText.Text).Replace("$$PHONE$", PhoneText.Text).Replace("$$EMAIL$", EmailText.Text);

SmtpClient client = new SmtpClient(host);
client.Credentials = new System.Net.NetworkCredential(credentialName, credentialPwd);

MailMessage message = new MailMessage(fromEmail, toEmail, subject, emailBody);


The thing that amazed me was that even though the class you need to use is called NetworkCredentials it seems to be more appropriate to call it mail server credentials.  I was able to put in a Lotus user ID and password that was separate from the any existing network ID and it picked up the authentication properly.  Hopefully this helps someone else avoid the same pain in the future.

How Does Simple Text Markup Differ Across The Office 2007 Suite

Note: Cross posted from Coding The Document.


Our theme recently is things that need to be made more consistent in the office products in order to make document generation development more efficient for developers.  This time around we will focus on difference between the way text is marked up in Word and PowerPoint.

I have found that there are a number of subtle but important differences in the way text is written to the Open XML standard.  This is then reflected in the Open XML SDK’s API.

Examples of these differences are apparent in features such as text color, bolding, underlining and bulleted lists.  The main difference seems that the Word team seems to have taken a more object approach and conversely the PowerPoint team seems to favor attributes.  The result is that the PowerPoint definition ends up with more moving parts.  To illustrate this let’s take a look at the setting of text color and underlining a group of text.

Text color is handled in Word simply by applying a Color object to the run properties.  PowerPoint requires a SolidFill object and child SchemeColor and LuminanceModulation objects to get the same effect.

The differences in the way that text is bolded is very similar.  In Word the run is assigned a bold object, but PowerPoint it is a boolean attribute of the run properties.

So what is the impact to the developer.  Code reuse for those of us who have to generate both documents and presentations is next to nothing.  On top of that the learning curve is practically doubled.

I realize that the two products have evolved through separate paths and isolated team, but time for that type of development is long past.  The Open XML standard should be unified where ever possible across the Office Applications and allow for greater interaction between the products.  Ultimately the synchronizing of these tools will lead to greater adoption.

What Makes CustomXml More appealing Than Content Controls

Note: Cross posted from Coding The Document.

Word 2007 has two built-in methods for tagging content.  If you go to the developers tab you will find the ribbon has a section for Controls and a section for XML.  The Controls are also referred to as Content Controls.  The XML section allows you to define schemas that can be applied to your document and is sometimes called Custom XML.

Both of these constructs can be used when you are coding an application which needs to identify a part of a document and take some action on it.  The Content Controls are represented by SdtBlocks and SdtRuns in the Open XML SDK 2.  Where as, the Custom XML is represented by CustomXMLBlocks and CustomXMLRuns.

The Content Controls made for a lot of confusion when I first investigated using them since there are multiple types.  For my purposes only one really makes sense and that is the Rich Text.  It can be applied to any area of a document regardless of content.  Even with this capability I found that Content Controls didn’t fit my needs.

I realize that Microsoft views Custom Controls as more reliable because they are not tied to a schema that defines an strict document, but that isn’t how we use the schema.  Our schemas are a list of custom identifiers which the users can reliably apply to a document.

As an example, the name of a company may need to be inserted 100 times in random locations throughout a document.  This doesn’t fit a tightly structured schema, but it is also a risky to have the person editing the template enter an identifier by hand for each Content Control.

Accurate naming is just as important if not more important than identifying the type of objects contained in a tag when processing a template.  Add to this the fact that you may need to identify sections by business usage and can contain multiple child objects such as charts, tables, images and paragraphs.

Between law suites and a change in approach by Microsoft it seems that Custom XML is going away.  Microsoft needs to supply more guidance as to what approaches should be taken for marking up templates in a consistent fashion.  They also need to come up with a solution for what I see as major a major weakness of Content Controls for this type of usage. 

Lastly, both features are only available in Word.  We do more template work with PowerPoint than we do Word which puts our development at a disadvantage.  People want this data to “present” and therefore need be able to generate “presentations”.  Getting similar functionality in PowerPoint is essential.  Hopefully we will see these improvements going forward.