private void connection_PropertyChanged(object sender, Xrm.ComponentModel.PropertyChangedEventArgs e)
{
Connection connectionToUpdate = new Connection();
Connection updated = (Connection)sender;
connectionToUpdate.ConnectionID = new Guid(updated.Id);
bool updateRequired = false;
switch (e.PropertyName)
{
case "record2roleid":
// Check if the record1id is loaded - if not load it now so we can work out the opposite role
if (updated.Record1Id == null)
{
Connection connection = (Connection)OrganizationServiceProxy.Retrieve(Connection.LogicalName, updated.ConnectionID.Value, new string[] { "record1id" });
updated.Record1Id = connection.Record1Id;
}
connectionToUpdate.Record2RoleId = updated.Record2RoleId;
connectionToUpdate.Record1RoleId = ObservableConnection.GetOppositeRole(updated.Record2RoleId, updated.Record1Id);
updateRequired = true;
break;
case "description":
connectionToUpdate.Description = updated.Description;
updateRequired = true;
break;
case "effectivestart":
connectionToUpdate.EffectiveStart = updated.EffectiveStart;
updateRequired = true;
break;
case "effectiveend":
connectionToUpdate.EffectiveEnd = updated.EffectiveEnd;
updateRequired = true;
break;
}
// Auto save
if (updateRequired)
{
OrganizationServiceProxy.BeginUpdate(connectionToUpdate, delegate(object state)
{
try
{
OrganizationServiceProxy.EndUpdate(state);
ErrorMessage.SetValue(null);
}
catch (Exception ex)
{
ErrorMessage.SetValue(ex.Message);
}
});
}
}