International City Picker for Webdirect

Here’s one for our resident micro-service specialist @anon45965781 or anyone who can help!

Our solution is in Webdirect. Our client’s customers must be able to specify the location of an event/venue. Currently it’s a regular edit field with all the problems that creates or a popup menu (too limiting since not editable in Webdirect).
Since one of the functions of our app is to provide a shipping estimate (using FedEx api), the location entered by the customer must be accurate. So we would like to implement a search&pick something that the customer can use to specify the location of their event. Source must be accurate. Output must be usable by Webdirect (granulated to city, state/province, country)

How would you proceed?

A micro-service is code that runs outside of FMP/S. Web Direct has no issues using that code. You just POST or do a GET to the service using INSERT FROM URL (or the service can even "reach in" to the FMP/S database using JDBC, if you allow it.).

Sounds like you're talking about creating an enhanced UI in FMP? A micro-service wouldn't be part of that piece. A micro-service is you own API you create and use.

The return of a micro-service, since you write the code, can literally be any format you need or could dream up.

I would probably suggest a discovery contract for further investigation.

HTH

If I understood correctly the microservice cannot feed the UI directly.

I create it to fetch some data somewhere and use the data to populate a table or virtual list that which can be used by my ui?

How do I find the (free) somewhere to find the (free) data?

I wonder if using Google Map in a WebViewer - if they play nice with WebDIrect - could be the solution. If they don't, then still use Google Map in a Web App that would gather the information and then push it to FMS.

1 Like

Interesting!

The direction would typically be from the UI POSTing to the micro-service not vice versa. However, there's nothing to prevent you from creating a UI in the micro-service; it just would only run on the server and for the files there (IOW, not that useful and rarely done).

If you can be more specific, I will try to help.

I would recommend you start by writing down your exact requirements with examples. Include a UML activity diagram if possible. The goal is to clearly and as completely as possible, communicate your requirements. What you expect to pass, what data you expect to get back. Document the returned data format with an example. I often use a mindmap or an outline format (using OmniOutliner in my case) to get the ideas down and get things moving.

I would also specify "non-functional" requirements like performance. How fast does it need to be? Etc.

FedEx has an extensive API. I've not used it, but it looks straightforward to implement.

Why not use some type of address validation API? Take the user input, run it by the API, see if the return contains something that you can work with or not. Either ask the user to accept one of the suggestions from the API or provide more details until the address is considered valid.

See:
https://smartystreets.com/products/apis/international-street-api
https://smartystreets.com/docs/cloud/international-street-api
https://smartystreets.com/pricing/international

2 Likes

Smarty Streets is really cool, easy to use, and free for the first 250 addresses per month.

Here's what it returns for the FMI HQ:

[
{
"input_index": 0,
"candidate_index": 0,
"addressee": "FileMaker",
"delivery_line_1": "5201 Patrick Henry Dr",
"last_line": "Santa Clara CA 95054-1164",
"delivery_point_barcode": "950541164014",
"components": {
"primary_number": "5201",
"street_name": "Patrick Henry",
"street_suffix": "Dr",
"city_name": "Santa Clara",
"default_city_name": "Santa Clara",
"state_abbreviation": "CA",
"zipcode": "95054",
"plus4_code": "1164",
"delivery_point": "01",
"delivery_point_check_digit": "4"
},
"metadata": {
"record_type": "S",
"zip_type": "Standard",
"county_fips": "06085",
"county_name": "Santa Clara",
"carrier_route": "C019",
"congressional_district": "17",
"rdi": "Commercial",
"elot_sequence": "0122",
"elot_sort": "A",
"latitude": 37.40567,
"longitude": -121.98415,
"precision": "Zip9",
"time_zone": "Pacific",
"utc_offset": -8,
"dst": true
},
"analysis": {
"dpv_match_code": "Y",
"dpv_footnotes": "AABB",
"dpv_cmra": "N",
"dpv_vacant": "N",
"active": "Y"
}
}
]

1 Like