Gebruikers kunnen vanuit allerlei bronnen gegevens in de database plakken, zonder zich druk te maken over een formaat. Zo kom je een telefoonnummer tegen als: 0123-1234567, +31 (0) 123 123 4567, 0(123)1234567 etc. etc.
Het zou dan wel handig zijn dat bij invoer dat automatisch wordt gecorrigeerd én dat er rekening wordt gehouden met groepering van net-/zone-/land-nummer. Ik liep er een paar dagen geleden weer eens tegenaan en bedacht toen om het maar eens structureel op te lossen. Het bleek eigenlijk helemaal niet zo moeilijk en na een uurtje had ik wat ik wilde hebben. Daarna bedacht ik me dat het ook voor anderen handig zou en vervolgens koste het me een halve dag om het netjes voor te bereiden om hier op de site neer te zetten. Hoe dan ook, ik hoop dat je er iets aan hebt.
Invoer herkennen
Er zitten in het voorbeeldbestand geen relaties, alleen een invoer-berekening op het veld ”TelNrInvoer” met Een Eigen Functie (Custom Function) om de formattering aan te passen.
PhonenumberFormat ( Phonenr ; Mask )
De berekening herkent aan de invoer of je een (inter-)nationaal nummer invoert, door te kijken naar 0, 00 of + aan het begin van de invoer. Er wordt daarbij alleen maar gekeken naar ”+0123456789” en alle andere karakters worden genegeerd.
Formatteren
De formattering wordt bepaald met een stukje SQL in de invoerberekening. In de tabel “Maskers” staan de verschillende mogelijke vormen van invoerformaten. Bij net-/zone- en landnummers staan die als voorkeuren ingevuld en dat haalt de berekening op om in de CF te gebruiken. Neem je de de werkwijze en de bijhorende tabellen over in je eigen bestand(en) dan moet je de gebruikte tabel- en veldnamen van “Netnummers”, “Zonenummers” en “Landnummers” dus letterlijk overnemen. De CF is wél generiek, dus die kan je overal toepassen.
Je kan het voorbeeldbestand ook gewoon aan je eigen bestanden knopen en dan hoef je alleen maar de Tabelweergaven van “Netnummers”, “Zonenummers” en “Landnummers” in je schema te zetten en de CF in je eigen bestand te zetten. Er is geen verder enkele relatie nodig om het te laten werken, zelfs geen carthesische relatie.
Nederland of België
Verder is de plaatsnaam-tabel voor Nederland ingericht en de zone-tabel bevat de zonenummers van België. De auto-enter op dit veld kan je aanpassen voor België door simpel één getalletje op de eerste lijn in de let-functie te wijzigen van 31 naar 32. Ik heb het met belgië eerlijk gezegd niet getest, maar ik denk dat het wel werkt. Maak hem anders even werkend en post dat gerust even op het het Calrify-forum, dan neem ik het hier over. In de velden met de namen kunnen meerdere waarden staan (bijvoorbeeld Canada en USA in de landentable bij Landcode 1, Almere en Zeewolde bij netnummer 36 of Brussel en Enghien bij zonenummer 2)
Informatie
Netnummers NL: https://nl.wikipedia.org/wiki/Lijst_van_Nederlandse_netnummers
Zonenummers BE: https://www.netnummersnederland.nl/netnummers-belgie/
Landnummers: https://nl.wikipedia.org/wiki/Lijst_van_landnummers_in_de_telefonie_op_nummervolgorde
Plaats-, zone- of landnaam opzoeken
Je kan zelf eventueel wat logica toevoegen om bijvoorbeeld het land of de plaatsnaam aan de hand van het telefoonnummer op te zoeken en bijvoorbeeld in een extra veld te tonen. Bij de plaatsnamen en zone-namen staan er bij de codes soms meer dan 1 naam in. Een naam van een plaats of zone tonen kan daarom snel complex worden, maar is denk ik te doen. Ik had het zelf niet nodig, dus zit het hier niet in het voorbeeld. Mocht iemand het leuk vinden om te maken, dan vooral: DO SHARE!
Ook bij de landen landen zal je bijvoorbeeld bij de USA/Canada er tegenaan lopen dat allebei de landen met +1 beginnen en dat je de area-code nodig hebt om het juiste land te bepalen. Zie o.a. https://www.areacodelocations.info/areacodelist.html voor meer informatie. Zoals gezegd kan het snel uit de hand lopen met de hoeveelheid code 🙂
Voorbeeldbestand
Er is een simpel voorbeeldbestand om te downloaden: Telefoonnummers Formatteren