Hola a todos!
Aunque la astrología no ha sido algo que me haya llamado especialmente la atención, resulta un área estupenda para crear una APP. Y aprovechando que hace unos días Alicia, mi hija, me preguntó sobre su signo del zodíaco y algunas cosas más, pues le creé una app para que fuese aprendiendo.
Por eso me he puesto manos a la obra y os presente este boceto de app que estoy seguro que os va a gustar.

Para comenzar, lo que debemos hacer es copiar este código y pegarlo en la propiedad OnSelect del botón Buscar:
Set(SignoEncontrado;Blank());;
ClearCollect(
SignosZodiacales;
{ Signo: "Aries"; InicioMes: 3; InicioDia: 21; FinMes: 4; FinDia: 19; Elemento: "Fuego"; Afines: "Leo, Sagitario, Géminis, Acuario"; Contrarios: "Tauro, Cáncer, Virgo, Capricornio, Piscis, Escorpio, Libra" };
{ Signo: "Tauro"; InicioMes: 4; InicioDia: 20; FinMes: 5; FinDia: 20; Elemento: "Tierra"; Afines: "Virgo, Capricornio, Cáncer, Piscis, Escorpio"; Contrarios: "Aries, Géminis, Libra, Sagitario, Leo, Acuario" };
{ Signo: "Géminis"; InicioMes: 5; InicioDia: 21; FinMes: 6; FinDia: 20; Elemento: "Aire"; Afines: "Libra, Acuario, Aries, Leo"; Contrarios: "Tauro, Escorpio, Capricornio, Piscis, Cáncer, Virgo" };
{ Signo: "Cáncer"; InicioMes: 6; InicioDia: 21; FinMes: 7; FinDia: 22; Elemento: "Agua"; Afines: "Escorpio, Piscis, Tauro, Virgo, Capricornio"; Contrarios: "Aries, Libra, Géminis, Sagitario, Leo, Acuario" };
{ Signo: "Leo"; InicioMes: 7; InicioDia: 23; FinMes: 8; FinDia: 22; Elemento: "Fuego"; Afines: "Aries, Sagitario, Géminis, Libra"; Contrarios: "Tauro, Escorpio, Capricornio, Acuario, Piscis, Virgo" };
{ Signo: "Virgo"; InicioMes: 8; InicioDia: 23; FinMes: 9; FinDia: 22; Elemento: "Tierra"; Afines: "Tauro, Capricornio, Cáncer, Escorpio, Piscis"; Contrarios: "Géminis, Sagitario, Leo, Acuario, Aries, Libra" };
{ Signo: "Libra"; InicioMes: 9; InicioDia: 23; FinMes: 10; FinDia: 22; Elemento: "Aire"; Afines: "Géminis, Acuario, Leo, Sagitario"; Contrarios: "Cáncer, Capricornio, Tauro, Escorpio, Aries, Piscis" };
{ Signo: "Escorpio"; InicioMes: 10; InicioDia: 23; FinMes: 11; FinDia: 21; Elemento: "Agua"; Afines: "Cáncer, Piscis, Tauro, Virgo, Capricornio"; Contrarios: "Géminis, Leo, Libra, Acuario, Sagitario, Aries" };
{ Signo: "Sagitario"; InicioMes: 11; InicioDia: 22; FinMes: 12; FinDia: 21; Elemento: "Fuego"; Afines: "Aries, Leo, Géminis, Acuario"; Contrarios: "Virgo, Piscis, Cáncer, Capricornio, Tauro, Escorpio" };
{ Signo: "Capricornio"; InicioMes: 12; InicioDia: 22; FinMes: 1; FinDia: 19; Elemento: "Tierra"; Afines: "Tauro, Virgo, Escorpio, Piscis, Cáncer"; Contrarios: "Aries, Géminis, Leo, Libra, Sagitario, Acuario" };
{ Signo: "Acuario"; InicioMes: 1; InicioDia: 20; FinMes: 2; FinDia: 18; Elemento: "Aire"; Afines: "Géminis, Libra, Aries, Sagitario"; Contrarios: "Tauro, Escorpio, Cáncer, Virgo, Piscis, Leo" };
{ Signo: "Piscis"; InicioMes: 2; InicioDia: 19; FinMes: 3; FinDia: 20; Elemento: "Agua"; Afines: "Cáncer, Escorpio, Tauro, Capricornio, Virgo"; Contrarios: "Géminis, Leo, Sagitario, Acuario, Aries, Libra" }
);;
If(
// Controlar fecha vacía
IsBlank(txtFechaNacimiento.Text);
Notify("Fecha vacía. Introduce una fecha válida en formato dd/mm/yyyy."; NotificationType.Error);
// Longitud de 10 caracteres
Len(txtFechaNacimiento.Text) <> 10;
Notify("La fecha debe tener exactamente 10 caracteres en formato dd/mm/yyyy."; NotificationType.Error);
// Controlamos resto errores
IsError(DateValue(txtFechaNacimiento.Text; "es-ES")) ||
!IsMatch(txtFechaNacimiento.Text; "^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/([0-9]{4})$");
Notify("Formato inválido. Introduce una fecha válida en formato dd/mm/yyyy."; NotificationType.Error);
Set(
FechaNacimiento;
DateValue(txtFechaNacimiento.Text; "es-ES")
);
If(
IsBlank(FechaNacimiento);
Notify("Fecha inválida. Verifica el formato dd/mm/yyyy."; NotificationType.Error);
Set(
SignoEncontrado;
LookUp(
SignosZodiacales;
(Month(FechaNacimiento) = InicioMes && Day(FechaNacimiento) >= InicioDia) ||
(Month(FechaNacimiento) = FinMes && Day(FechaNacimiento) <= FinDia)
)
)
)
)
Una vez que pulsemos el botón, y que los datos del textInput (txtFechaNacimiento) son correctos. Ya tendremos en nuestra variable SignoEncontrado todos los elementos que vamos a colocar en los diferentes textInput:
SignoEncontrado.Signo
SignoEncontrado.Elemento
SignoEncontrado.Afines
SignoEncontrado.Contrarios
Cada uno de ellos en la propiedad Default de cada objeto.
El resultado es este:

Podríamos crear una tabla en SharePoint para hacer el ejercicio, pero he preferido crear toda la info en una Colección y para luego buscar directamente en la aplicación, sin usar conectores a otros sistemas.
Y esto es todo, espero que sea de utilidad y os haya gustado!!
