Accessing Raw Calendar and Business Card Data
In addition, to high-level interfaces, the IT Hit Collab library provides low-level interfaces for accessing components, properties, property parameters and their values.
To access properties, the IComponent interface provides Properties member. Properties is a dictionary, where all properties are grouped by property name. Each property is represented by IRawProperty interface which has a list of parameters and a raw value. Each parameter, in turn, can contain a list of values.
To access components, the IComponent interface provides Components member, which is a dictionary with all components being grouped by component name. Only calendars can have internal components, the Components dictionary is always empty for card.
Enumerating Properties, their Parameters and Values
Below is an example of enumerating all properties, their values and all parameters of each property for VEVENT component:
string strCal = File.ReadAllText("C:\\event.ics"); IEnumerable<IComponent> compList = new vFormatter().Deserialize(strCal); // read iCalendar(s) or vCard(s) IComponent compCal = compList.FirstOrDefault(); IComponent evt = compCal.Components["VEVENT"].FirstOrDefault(); foreach (KeyValuePair<string, IList<IRawProperty>> keyValue in evt.Properties) { Console.WriteLine("\nProperty: " + keyValue.Key); foreach (IRawProperty prop in keyValue.Value) { Console.WriteLine(" Raw Value: " + prop.RawValue); foreach (var param in prop.Parameters) { Console.WriteLine(" Parameter: " + param.Name + ": " + string.Join(",", param.Values)); } } }
Output:
Property: UID Raw Value: 59E6D26F-AD9A-4B1C-A070-275E2331A944 Property: DTSTAMP Raw Value: 20170114T025637Z Property: SUMMARY Raw Value: Meeting Property: DTSTART Raw Value: 20170420T094000 Parameter: TZID: America/Toronto Property: DTEND Raw Value: 20170420T101000 Parameter: TZID: America/Toronto Property: COMMENT Raw Value: Bring project documentation Raw Value: Define project scope
Adding a Custom Property
To create a new custom property use the CreateRawProperty method, to add it to the list use IComponent.AddProperty method. To add a new parameter to the list use the ParameterList.Add method.
IRawProperty customProp = evt.CreateRawProperty(); customProp.RawValue = "PropVal"; customProp.Parameters.Add(newParameter("PARAM1", "VAL1")); customProp.Parameters.Add(newParameter("PARAM2", "VAL2")); comp.AddProperty("X-PROP1", customProp);
Deleting a Custom Property
To delete a property remove it from the Properties dictionary calling Remove method:
evt.Properties.Remove("X-PROP1");