Hello Silvio.....I've almost managed but I really don't like this...hope you can give me guidelines to improve my code... He'res the EndEdit method that will do the process
public IEnumerable<IResult> EndEdit(object sender, EditEndedEventArgs e)
{
switch (e.EditAction)
{
case Telerik.Windows.Controls.Data.DataForm.EditAction.Cancel:
repository.RejectChangesAsync();
break;
case Telerik.Windows.Controls.Data.DataForm.EditAction.Commit:
var script = (sender as RadDataForm).CurrentItem as SCRIPT;
OperationResult operation;
var checkedItems = ListaVariabiliExt.Where(o1=>o1.IsChecked);
yield return (operation = repository.DeleteOldRelationsScriptVariabili(script, SelectedDataItem.SCRIPT_VARIABILI));
if (operation.CompletedSuccessfully)
{
yield return (operation = repository.SaveAsync());
if (operation.CompletedSuccessfully)
{
yield return (operation = repository.UpdateScript(script, checkedItems));
if (operation.CompletedSuccessfully)
{
yield return (operation = repository.SaveAsync());
}
}
}
if (operation.HasError)
{
//todo : add logging
}
break;
default:
throw new InvalidOperationException("Edit action should be Cancel or Commit only.");
}
IsEditing = false;
yield break;
} And here's the repository implementation
public OperationResult UpdateScript(SCRIPT script, IEnumerable<VARIABILI> variabili, Action<IEnumerable> onSuccess = null, Action<Exception> onFail = null)
{
entityManagerProvider.Manager.AddEntity(script);
if (variabili.Any())
{
variabili.ForEach((item) =>
{
var scriptVariabili = entityManagerProvider.Manager.CreateEntity<SCRIPT_VARIABILI>();
scriptVariabili.ID_SCRIPT = script.ID;
scriptVariabili.ID_VARIABILE = item.ID;
entityManagerProvider.Manager.AddEntity(scriptVariabili);
});
}
return AlwaysCompletedOperationResult.Instance;
}
public OperationResult DeleteOldRelationsScriptVariabili(SCRIPT script, RelatedEntityList<SCRIPT_VARIABILI> variabili, Action<IEnumerable> onSuccess = null, Action<Exception> onFail = null)
{
if (variabili.Any())
{
for (int i = variabili.Count - 1; i >= 0; i--)
variabili.EntityAspect.Delete();
}
return AlwaysCompletedOperationResult.Instance;
}
How can I improve this? all those nested yield return are not so good for me... and even for maintenability... Thanks
|