While working on pre-filling ListItem fields on an item, I became a bit puzzled. The SPItemEventProperties.AfterProperties collection is a dictionary which can contain the named value for one of the fields of the item. In other words, if we wanted to set a value “Tax Area” to “Europe” we’d do:
properties.AfterProperties["Tax Area"] = "Europe";
In our case, however, we didn’t know what these properties were before hand. Rather, we were ‘inheriting’ values from a parent folder. Thus, we were going to use the parent folder’s SPField object for each field to define the value. I started out using:
properties.AfterProperties[parentField.Title] = parentItem[parentField.id];
But is Title the right property to use? Well, having looked through a number of blog posts, this seems to be the subject of some confusion.
At first Title is okay to use. However, you can change the display name of the field. For example, we could change our field’s Title to ‘Tax Region’ – but we still need to use ‘Tax Area’ in our AfterProperties collection.
So, InternalName is the right property of the SPField to use – but there is a hiccup. The InternalName is encoded – Tax_x0020_Area
– so you have to unescape it like I’ve talked about before.
The summary is, then, use the unescaped InternalName in your AfterProperties collection.