Tiempo estimado para completar: 30 minutos, dependiendo de su experiencia con MAUI
Realm proporciona un SDK .NET para crear aplicaciones multiplataforma en C# con MAUI. Este tutorial se basa en la aplicación de plantilla de sincronización flexible .NET, denominada maui.todo.flex, que ilustra la creación de una aplicación de tareas pendientes en MAUI. Esta aplicación permite a los usuarios:
Registrar su correo electrónico como una nueva cuenta de usuario.
Inicie sesión en su cuenta con su correo electrónico y contraseña (y cierre sesión).
Ver, crear, modificar y eliminar tareas.
En este tutorial, añadirás un nuevo campo Priority al modelo existente Item y actualizarás la suscripción de Sync flexible para mostrar solo los elementos dentro de un rango de prioridades.
Nota
Consulte el inicio rápido
Si prefieres comenzar con tu propia aplicación en lugar de seguir un tutorial guiado, consulta la Guía de inicio rápido de .NET. Incluye ejemplos de código copiables y la información esencial necesaria para configurar un backend de Atlas App Services.
Requisitos previos
Asegúrese de tener instalado el software necesario. Seleccione la pestaña correspondiente a su entorno de desarrollo:
- Visual Studio para Mac
- 2019 o más reciente.
Xcode. 10 0 o posterior. Tenga en cuenta que Xcode 10 requiere macOS High Sierra (.)10 13o posterior.
Windows 7 o más reciente. Se recomienda Windows 10.
Visual Studio 2017 (se 2019 recomienda Visual Studio).
Para crear proyectos de iOS en Windows, también necesitará una computadora Mac, accesible en red desde la computadora Windows, que cumpla con los requisitos mínimos para ejecutar Xamarin en macOS.
Necesita experiencia previa implementando una aplicación MAUI o Xamarin en un emulador de Android, simulador de iOS o en un dispositivo físico.
Este tutorial comienza con una aplicación de plantilla. Necesita una cuenta de Atlas, una clave API y la CLI de App Services para crearla.
Puede obtener más información sobre cómo crear una cuenta de Atlas en la documentación de introducción a Atlas. Para este tutorial, necesita una cuenta de Atlas con un clúster de nivel gratuito.
También necesita una clave API de Atlas para la cuenta de MongoDB Cloud con la que desea iniciar sesión. Debe ser propietario del proyecto para crear una aplicación de plantilla mediante la CLI de App Services.
Para obtener más información sobre la instalación de la CLI de App Services, consulte Instalar la CLI de App Services. Después de la instalación, ejecute el comando de inicio de sesión con la clave API de su proyecto Atlas.
Comience con la plantilla
Este tutorial se basa en la aplicación de plantilla de sincronización flexible de MAUI llamada maui.todo.flex. Comenzamos con la aplicación predeterminada y desarrollamos nuevas funciones a partir de ella.
Para obtener más información sobre las aplicaciones de plantilla, consulte Aplicaciones de plantilla.
Si aún no tiene una cuenta Atlas, regístrese para implementar una aplicación de plantilla.
Siga el procedimiento descrito en la guía Crear una aplicación de servicios de aplicaciones y seleccione Create App from TemplateSeleccione la plantilla Real-time Sync. Esto crea una aplicación de Servicios de Aplicaciones preconfigurada para usarla con uno de los clientes de la plantilla de Sincronización de Dispositivos.
Después de crear una aplicación de plantilla, la interfaz de usuario muestra un modal con la etiqueta Get the Front-end Code for your Template. Este modal proporciona instrucciones para descargar el código del cliente de la aplicación de plantilla como un archivo .zip o usar la CLI de App Services para obtener el cliente.
Después de seleccionar el método .zip o la CLI de App Services, siga las instrucciones en pantalla para obtener el código de cliente. Para este tutorial, seleccione el código de cliente C# (.NET MAUI).
Nota
La utilidad ZIP predeterminada de Windows podría mostrar el archivo .zip vacío. Si esto ocurre, use un programa de compresión de terceros disponible.
El comando de creación de aplicaciones appservices configura el backend y crea una aplicación de plantilla C# (MAUI) para que la use como base para este tutorial.
Ejecute el siguiente comando en una ventana de terminal para crear una aplicación llamada "MyTutorialApp" que se implementa en la región US-VA con su entorno configurado en "desarrollo" (en lugar de producción o control de calidad).
appservices app create \ --name MyTutorialApp \ --template maui.todo.flex \ --deployment-model global \ --environment development
El comando crea un nuevo directorio en su ruta actual con el mismo nombre que el valor del indicador --name.
Puedes bifurcar y clonar un repositorio de GitHub que contenga el código del cliente de Device Sync. El código del cliente en C# está disponible en https://github.com/mongodb/template-app-maui-todo.
Si usa este proceso para obtener el código del cliente, debe crear una aplicación de App Services para usarla con el cliente. Siga las instrucciones de "Crear una aplicación de sync.todo plantilla" para crear una aplicación de plantilla basada en la plantilla.
Configurar la aplicación de plantilla
Explorar la estructura de la aplicación
En Visual Studio, dedique unos minutos a explorar la organización de la solución. Está organizada como una solución MAUI MVVM estándar, con un único proyecto que contiene las vistas, los modelos y los modelos de vista.
La aplicación utiliza un único modelo, Item, que implementa IRealmObject. Disponemos de tres vistas: una para iniciar sesión (LoginPage), otra para ver elementos (ItemsPage) y una tercera para editar y crear nuevos elementos. Cada vista tiene su modelo correspondiente.
Además de la estructura estándar de MVVM, hemos centralizado toda la lógica del reino en una clase RealmService, ubicada en la carpeta "Servicios". Esta arquitectura garantiza que compartamos el mismo reino en todo momento.
Ejecutar la aplicación
Sin realizar cambios en el código, debería poder ejecutar la aplicación en el emulador de Android, el simulador de iOS o en un dispositivo físico. No necesita realizar cambios, ya que, al configurar la plantilla en la interfaz de usuario de App Services o con la CLI, Atlas App Services también configura un nuevo backend. Si descargó la aplicación de plantilla, deberá agregar el ID de su aplicación de App Services. Para ello, abra el archivo Services/RealmService.cs y agregue su ID en la línea private const string appId = "appId";.
Ejecute la aplicación, registre una nueva cuenta de usuario y luego agregue un nuevo elemento a su lista de tareas pendientes.
Comprueba el Backend
Inicie sesión en Atlas App Services. En la pestaña, haga Data Services clic Browse Collections en. En la lista de bases de datos, busque y expanda la todo base de datos y, a continuación, la Item colección. Debería ver el documento que creó en esta colección.
Modificar la aplicación
Agregar una nueva propiedad
Ahora que ha confirmado que todo funciona correctamente, podemos realizar cambios. En este tutorial, hemos decidido añadir una propiedad "Prioridad" a cada elemento para poder filtrarlos por su prioridad. La propiedad Prioridad se asignará a una enumeración PriorityLevel para limitar los valores posibles.
Para ello siga estos pasos:
Agregar la propiedad de prioridad
En el proyecto
RealmTodo, expanda la carpetaModelsy abra el archivo de claseItem.Agregue la siguiente propiedad pública:
[] public int? Priority { get; set; } Tenga en cuenta que hemos establecido esta propiedad como nula, lo que garantizará que los elementos existentes en nuestra base de datos (que no tienen una propiedad de Prioridad) seguirán estando disponibles.
Establecer la prioridad al crear o modificar un elemento
El modelo de vista
EditItemViewModelse utiliza tanto para crear nuevos elementos como para modificar los existentes. Al crear o modificar un elemento, el usuario necesita que la interfaz de usuario (y el código) establezcan su prioridad.Agregue una ObservableProperty para contener la prioridad:
[] private int? priority; Nota
Atributo [ObservableProperty]
El
[ObservableProperty]atributo es una característica proporcionada por el kit de herramientas MVVM para simplificar la vinculación de datos.El método
ApplyQueryAttributesactúa como un constructor para este modelo de vista, comprobando si se pasa un elemento existente a esta vista para su edición. Aquí, capturamos los valores existentes para mostrarlos en la vista.Si estamos editando un elemento existente, queremos establecer la Prioridad del elemento existente:
Priority = InitialItem.Priority;.Del mismo modo, si estamos creando un nuevo elemento, establezca la prioridad predeterminada en "Media":
Priority = 2;.Una vez completado, este método debería verse así:
public void ApplyQueryAttributes(IDictionary<string, object> query) { if (query.Count > 0 && query["item"] != null) // we're editing an Item { InitialItem = query["item"] as Item; Summary = InitialItem.Summary; Priority = InitialItem.Priority; PageHeader = $"Modify Item {InitialItem.Id}"; } else // we're creating a new item { Summary = ""; Priority = 2; PageHeader = "Create a New Item"; } } Finalmente, en el método
SaveItem(), queremos persistir el valor de Prioridad. Dado que estamos creando o modificando un objeto gestionado, los cambios se envuelven en una llamada arealm.WriteAsync.Para el elemento existente, configure el
InitialItem.Priorityen el objeto existente y, para un elemento nuevo, configure la propiedad en la llamadaAdd(). El bloqueWriteAsynccompletado debería verse así:await realm.WriteAsync(() => { if (InitialItem != null) // editing an item { InitialItem.Summary = Summary; InitialItem.Priority = Priority; } else // creating a new item { realm.Add(new Item() { OwnerId = RealmService.CurrentUser.Id, Summary = summary, Priority = Priority }); } });
Actualizar los elementos de la Interfaz de Usuario
La tarea final es agregar los elementos de UI necesarios para establecer y mostrar la prioridad.
Primero, en
ItemsPage.xaml, agregaremos una etiqueta a ListView que muestra la prioridad. Dentro de ViewCell, agreguemos una etiqueta para mostrar la prioridad del elemento:<Label Text="{Binding Priority}" HorizontalOptions="Center" VerticalOptions="Center"/> En
EditItemsPage.xaml, agregaremos dos elementos de la interfaz de usuario: un selector que permite al usuario elegir el nivel de prioridad del nuevo elemento y una etiqueta para el selector. Busque el elementoEntrypara configurar el resumen y agregue los siguientes elementos debajo:<Label Text="Priority:"/> <Picker x:Name="newItemPriority" SelectedIndex="{Binding Priority}"> <Picker.Items> <x:String>Severe</x:String> <x:String>High</x:String> <x:String>Medium</x:String> <x:String>Low</x:String> </Picker.Items> </Picker>
Ejecutar y probar
En este punto, puede volver a ejecutar la aplicación. Inicie sesión con la cuenta que creó anteriormente en este tutorial. Verá el elemento que creó anteriormente. Añada un nuevo elemento y verá que ahora puede establecer la prioridad. Seleccione High como prioridad y guarde el elemento.
Ahora, regrese a la página de datos del Atlas en su navegador y actualice la Item colección. Debería ver el nuevo elemento con el priority campo agregado y configurado como. También observará que el elemento existente ahora también tiene 1 un priority campo y está configurado como nulo, como se muestra en la siguiente captura de pantalla:

Nota
¿Por qué no se rompió esta sincronizar?
Añadir una propiedad a un objeto Realm no supone un cambio drástico y, por lo tanto, no requiere restablecer el cliente. La aplicación de plantilla tiene habilitado el modo de desarrollo, por lo que los cambios en el objeto Realm del cliente se reflejan en el esquema del servidor. Para obtener más información, consulte Modo de desarrollo y Actualizar el modelo de datos.
Cambiar la suscripción
Actualizar la suscripción
En el archivo RealmService.cs, definimos dos suscripciones de Flexible Sync. Una muestra solo los elementos creados por el usuario actual, mientras que la otra muestra todos los elementos de todos los usuarios.
Vamos a agregar una nueva suscripción que muestra los elementos del usuario actual que tienen una prioridad de 0 o 1.
En la parte inferior de la clase
RealmService, agregue una entrada a la enumeraciónSubscriptionTypellamada "MyHighPriority":public enum SubscriptionType { Mine, MyHighPriority, All, } Desplácese hacia arriba para encontrar el método
GetQueryForSubscriptionType. Aquí definimos las suscripciones.Copie el primero, donde
subType == SubscriptionType.Mine, y péguelo en un bloqueelse ifinmediatamente debajo.Establezca la nueva condición en
subType == SubscriptionType.MyHighPriority.Modifique esta nueva consulta de suscripción para insertar una consulta LINQ que aún filtre por OwnerId y también por valores de prioridad menores a 2.
4. Cambie el nombre de la nueva consulta a "myHighPri". Su código se verá así:
if (subType == SubscriptionType.Mine) { query = realm.All<Item>() .Where(i => i.OwnerId == CurrentUser.Id) .Where(i => i.Priority < 2); queryName = "mine"; } else if (subType == SubscriptionType.MyHighPriority) { query = realm.All<Item>() .Where(i => i.OwnerId == CurrentUser.Id && i.Priority < 2); queryName = "myHighPri"; } else if (subType == SubscriptionType.All) { query = realm.All<Item>(); queryName = "all"; } En el método
GetCurrentSubscriptionTypeinmediatamente anterior, agregue el nuevo nombre de suscripción a la declaración switch, para que se vea así:return activeSubscription.Name switch { "all" => SubscriptionType.All, "mine" => SubscriptionType.Mine, "myHighPri" => SubscriptionType.MyHighPriority, _ => throw new InvalidOperationException("Unknown subscription type") }; Finalmente, abra la clase
ItemsViewModely busque el métodoOnIsShowAllTasksChanged. En lugar de cambiar la interfaz de usuario para habilitar las suscripciones 3, simplemente reemplazaremos la suscripción "mine" existente por la nueva. Modifique el métodoSetSubscriptionpara que se vea como sigue:await RealmService.SetSubscription(realm, value ? SubscriptionType.All : SubscriptionType.MyHighPriority);
Ejecutar y probar
Ejecute la aplicación de nuevo. Si se le solicita, inicie sesión con la cuenta que creó anteriormente en este tutorial.
Deberías esperar ver cualquier elemento que hayas creado con prioridad "Alta" (1) o "Grave" (0). Si activas la opción "Mostrar todas las tareas", deberían aparecer todas las tareas de todos los usuarios.
Tip
Cambiar suscripciones con el modo de desarrollador habilitado
En este tutorial, al cambiar la suscripción y la consulta en el campo de prioridad por primera vez, este se añade automáticamente a la sincronización de dispositivos Collection Queryable Fields. Esto se debe a que la aplicación de plantilla tiene el modo de desarrollo habilitado de forma predeterminada. Si el modo de desarrollo no estuviera habilitado, tendría que añadir manualmente el campo como consultable para usarlo en una consulta de sincronización del lado del cliente.
Para obtener más información, consulte Campos consultables.
Conclusión
Agregar una propiedad a un objeto Realm existente es un cambio importante y el modo de desarrollo garantiza que el cambio de esquema se refleje en el lado del servidor.
¿Que sigue?
Lea nuestra documentación del SDK .NET.
Encuentre publicaciones de blog orientadas a desarrolladores y tutoriales de integración en MongoDB Developer Hub.
Únase a las comunidades de MongoDB en Reddit o Stack Overflow para aprender de otros desarrolladores y expertos técnicos de MongoDB.
Explore proyectos de ingeniería y ejemplos proporcionados por expertos.
Nota
Compartir comentarios
¿Cómo te fue? Usa el Rate this page widget en la parte inferior derecha de la página para evaluar su efectividad. O reporta un problema en el repositorio de GitHub si tuviste algún problema.