Xamarin
, ASP NET ZERO
Cześć wszystkim. Testuję aplikację mobilną na produkcji. Wszystko działa idealnie poza jednym: Po kliknięciu w usunięcie elementu z listy aplikacja "wysypuje się" ale nie zawsze i tu cały pies pogrzebany. Sprawdziłem nawet id
obiektu w bazie danych i wszystko się zgadza. Ponad to po wysypaniu apki i ponownym włączeniu element jest poprawnie usunięty, więc _vehicleTasksAppService
działa poprawnie. Co najgorsze, ten problem występuje tylko na produkcji, w środowisku testowym nie wysypuje się nic. Tutaj kod obsługi komendy usunięcia elementu:
public ICommand RemoveTaskTappedCommand => new Command(async (vehicleTask) => await RemoveTaskTappedAsync((VehicleTaskModel)vehicleTask));
private async Task RemoveTaskTappedAsync(VehicleTaskModel vehicleTask)
{
Debug.WriteLine("RemoveTaskTappedAsync " + vehicleTask.Title + "(" + vehicleTask.Id + ")");
await SetBusyAsync(async () =>
{
await _vehicleTasksAppService.Delete(new Abp.Application.Services.Dto.EntityDto<Guid>(vehicleTask.Id));
});
await ResetAndRefreshAsync();
MessagingCenter.Send(this, MessagingCenterKeys.VehicleTasksChanged);
}
private async Task ResetAndRefreshAsync()
{
IsRefreshing = false;
if (IsNotBusy)
{
VehicleTasks.GetAllInput = new GSData.VehicleTasks.Dtos.GetAllVehicleTasksInput()
{
Filter = "",
MaxResultCount = PageDefaults.PageSize,
SkipCount = 0,
VehicleId = _vehicleId,
Sorting = "CreatingTime desc",
OnlyIncompleted = _hideCompletedTasks
};
VehicleTasks.Reset();
await RefreshAsync();
}
}
private async Task RefreshAsync()
{
await SetBusyAsync(async () =>
{
// vehicle
var vehicleDto = await _vehiclesAppService.GetVehicleForView(_vehicleId);
var vehicle = new VehicleModel()
{
Producer = vehicleDto.Vehicle.Producer,
Model = vehicleDto.Vehicle.Model,
RegistrationNumber = vehicleDto.Vehicle.RegistrationNumber,
Id = vehicleDto.Vehicle.Id,
ToDoAll = vehicleDto.TotalTaskCount,
ToDoIncompleted = vehicleDto.TotalTaskCount - vehicleDto.TotalCompletedTaskCount,
};
Vehicle = vehicle;
// VehicleTaskList
await WebRequestExecuter.Execute(async () => await _vehicleTasksAppService.GetAll(VehicleTasks.GetAllInput), result =>
{
foreach (var vehicleTask in result.Items)
{
VehicleTasks.Collection.Add(new VehicleTaskModel()
{
Id = vehicleTask.VehicleTask.Id,
CreatingTime = vehicleTask.VehicleTask.CreatingTime,
CompletedTime = vehicleTask.VehicleTask.CompletedTime,
Description = vehicleTask.VehicleTask.Description,
Title = vehicleTask.VehicleTask.Title,
});
}
VehicleTasks._totalProducts = result.TotalCount;
return Task.CompletedTask;
});
});
}
public class GSObservableCollection<CollectionType, GetAllInputType>
{
public GSObservableCollection()
{
Collection = new ObservableRangeCollection<CollectionType>();
_totalProducts = 0;
_currentPage = 0;
}
public int _totalProducts { get; set; }
public int _currentPage { get; set; }
public ObservableRangeCollection<CollectionType> Collection { get; set; }
public GetAllInputType GetAllInput { get; set; }
public void Reset()
{
Collection.Clear();
_totalProducts = 0;
_currentPage = 0;
}
}
Dodam, że SetBusyAsync
jest opakowane w przechwytywanie wyjątków, więc nie powinno się nic dziać specjalnego.
Jak sobie radzicie z debugowaniem aplikacji w środowisku produkcyjnym?
Macie jakieś pomysły lub widzicie co mogę robić źle? ;/