Het ontwikkelen en debuggen van gebruikersfuncties in mobiele apps
Recentelijk kwam ik deze opmerking tegen in een codebeoordeling van een ervaren ontwikkelaar, waarin het werk van een collega werd bekeken: "De gebruikersfunctie lichtelijk aangepast om correct te werken wanneer andere talen dan Engels worden gebruikt." Dit was een opvallende opmerking – de code is de code, en het zou geen verschil mogen maken welke taal de ontwikkelaar of de eindgebruiker spreekt! Een gebruikersfunctie is simpelweg een expressie die invoerparameters kan accepteren en een resultaat teruggeeft.
Altova MobileTogether ondersteunt gebruikersfuncties binnen een platformonafhankelijk ontwikkelingsframework voor mobiele applicaties dat een intuïtieve gebruikersinterface-ontwerpfunctie combineert met gestandaardiseerde functionele programmering voor het selecteren en verwerken van data. Verschillende demo-applicaties van MobileTogether zijn sterk afhankelijk van gebruikersfuncties, en de MobileTogether Designer bevat functies die het creëren en valideren van deze functies aanzienlijk vereenvoudigen.
Laten we eens kijken naar de functies die beschikbaar zijn voor gebruikers in mobiele apps, door een van deze demo-apps te bekijken.

In een eerdere post noemden we de Parcel Delivery-app als een voorbeeld van geavanceerde programmeertechnieken voor mobiele ontwikkeling. Parcel Delivery is een elegante implementatie van een ervaren ontwikkelaar, die sterk leunt op functies die door de gebruiker worden gebruikt.
Het voorbeeld "Parcel Delivery" is een complete simulatie van een echte app voor pakketbezorging. De eindgebruiker neemt de rol aan van een bezorger voor een transportbedrijf, die pakketten moet bezorgen van een magazijn in New Jersey naar bestemmingen in New York City, onder begeleiding van GPS. U kunt de app uitvoeren in het simulatievenster van MobileTogether Designer om realistische bewegingen naar elke bestemming te zien. Als u "Parcel Delivery" op uw eigen telefoon uitvoert vanaf de MobileTogether Demo-server, gebruikt uw telefoon de ingebouwde GPS-functionaliteit.
Hieronder ziet u twee schermafbeeldingen van de pagina voor het toewijzen van chauffeurs, zoals deze eruitzien op een iPhone met donker thema en op een Android-telefoon met licht thema:

Gebruikersfuncties die tijdens runtime worden uitgevoerd, genereren de lijst met leveringsopdrachten en de markeringen op de kaart. We kunnen de functiedefinities bekijken in het venster "XPath Expression Builder" van de MobileTogether Designer:

De optie "Builder" biedt hulpmiddelen om invoer te vereenvoudigen, pop-up beschrijvingen van contextgevoelige XPath/XQuery-constructies, en automatische aanvulling terwijl expressies worden aangemaakt. De optie "Evaluator" geeft u een voorbeeld van de resultaten van een expressie, zodat u deze kunt valideren of aanpassen indien nodig.
Wanneer de app draait in de MobileTogether Simulator, heeft de XPath-evaluator toegang tot alle runtime-waarden van de paginabrongegevens. We kunnen de XPath-evaluator in de simulator openen om gebruikersfuncties in mobiele apps te evalueren:

De functie RemainingDestinations() retourneert een lijst met de kenmerken van elke bestemming, die vervolgens wordt gebruikt om de tekstlijst in het onderste gedeelte van de "Todo"-pagina te vullen.
De gebruikersfunctie DestinationMarkerList() roept de functie RemainingDestinations() aan en maakt een lijst van kaartmarkeringen aan om elke bestemming op de kaart weer te geven:

De tekst en de titel voor elke bestemming verschijnen wanneer de gebruiker op een markering op de kaart klikt

De functie DestinationMarkerList() is een eigenschap van de kaartcomponent:

Het hoofdmenu van het project bevat een optie om een lijst te genereren van alle gebruikspatronen van gebruikersfuncties in de applicatie:

Voor een gedetailleerd overzicht van de evaluatie van een gebruikersfunctie, kunt u tijdens de simulatie de debugmodus activeren en de evaluatie van de functie stap voor stap volgen:

Naarmate de app wordt gebruikt, simuleert de gebruiker elke levering en registreert hij de ontvanger en de staat van elk pakket. Een overzichtspagina toont de resultaten:

Op deze kaart zijn de markeringen gekleurd, en de tekst die verschijnt bij het aanklikken van een markering beschrijft de status van elke levering. Voor de levering die hierboven is gemarkeerd, was Joan Jones de vervangende ontvanger, dus de markering is oranje in plaats van groen. De functie ReportMarkerList() haalt de samenvatting van de gegevens op en kleurt de markering, omdat de daadwerkelijke ontvanger niet de geadresseerde was.
De enige manier waarop we weten dat de uitvoering niet volledig succesvol was, is aan de hand van de uitvoertekst. En daar wordt het mysterie van de opmerking bij de codebeoordeling opgelost! De tekst is in het Engels, dus de codebeoordelaar heeft een gebruikersfunctie aangepast zodat deze in elke taal werkt.
MobileTogether biedt functionaliteit voor lokalisatie, waardoor tekst in berichten in verschillende talen eenvoudig tijdens runtime kan worden verwerkt.
De Parcel Delivery-app is beschikbaar in verschillende taalversies, waaronder Engels, Duits, Spaans, Japans en Frans, afhankelijk van de taalinstellingen van het besturingssysteem. Het bovenste gedeelte van het lokalisatievenster, zoals hieronder te zien is, toont een tabel met vertalingen voor vaste elementen zoals paginatitels, labels en knoppen.

Het onderste gedeelte definieert een vertalingstabel voor tekstreeksen, die tijdens de uitvoering wordt ingesteld op basis van omstandigheden die zich voordoen. MobileTogether bevat een ingebouwde functie, mt-load-string('naam'), die verwijst naar tekstreeksen op basis van hun toegewezen namen, ongeacht de taal van het apparaat.
De afbeelding hieronder toont de definitie van de functie ReportMarkerList(), die de kleuren van de markeringen en de tekst die verschijnt bij het openen van een markering op de kaart van het leveringsrapport instelt. Als de tekst die bij een levering wordt weergegeven overeenkomt met de string "delivered_C", dan wordt de markering groen. De tekst "delivered_C" in het Engels is "Persoonlijk aanvaarde levering." In het Spaans zou de tekst zijn: "Entrega aceptada en persona."

Als de ontwikkelaar simpelweg de "DeliverySummary" had vergeleken met de Engelse tekst "Persoonlijk afgeleverd", dan zouden de markeringen op de kaart niet correct gekleurd worden in andere talen.
We kunnen het gedrag van de gebruikersfunctie ReportMarkerText() in verschillende talen valideren in de MobileTogether Simulator. In het hoofdmenu van het project is een optie beschikbaar om de app in andere talen te testen:

We kunnen de app in het Spaans gebruiken en een reeks leveringen doorlopen om een leveringsrapport in het Spaans te genereren. De kleur van elke markering wordt correct ingesteld op basis van de beschrijving van de actie voor elke vermelding in het leveringsoverzicht.

Maak gebruik van al uw vaardigheden en tools, inclusief geavanceerde programmeertechnieken zoals gebruikersfuncties in mobiele apps, om uw eigen apps in recordtijd te ontwikkelen! Bekijk onze MobileTogether videodemonstraties, bekijk meer voorbeeld-apps, of raadpleeg zelfs de online handleiding voor een diepgaand overzicht van alle informatie. Wanneer u klaar bent om aan de slag te gaan en uw eigen mobiele apps voor verschillende platforms te ontwikkelen, download dan de MobileTogether Designer.