Filters
If you mean "filter" as in "filter the records that come down to the iPad via sync", read this: sync found sets.
Can I change the fields GoMaps filters on? (Currently Status and Property Type)
Yes. This is easily done by editing the script "Filters And Headers" in GoMaps (the mobile file). You'll probably want to do it before you distribute GoMaps to your users
You'll find a SetVariable line for each filter you have, and you can select which field we search on (a field in the Properties table) and which field acts as the filter (a field in the Interface table). The script is well commented, so read through every line above the comment "You shouldn't have to edit below this line". (My favorite comment in all of scriptdom.)
Note that if you make your own drop down fields for you own filters, you'll want to add the same script triggers we have on ours:
How do I change the value lists used for filters?
You do this right in the value lists of the mobile GoMaps file (again, you probably want to do it before you distribute GoMaps to your users).
You'll notice that there are two value lists for ever filter. For example, there is both a "PropertyStatus" and a "PropertyStatus_Filter" list. Edit the one without "_Filter" in the name. We use the "_Filter" one solely so we can add "All" to the filters when we present them to users.
How can I create my own filters?
In addition to repurposing the filters that come with ProMaps & GoMaps, you can add your own. Let's say you have a field in the properties table called "active" and this contains either "yes" or "no". Here is how you'd add a filter for active:
//The field to search in
sc_field = Properties::Active ;
//The value we are searching on
sc_value = MapSettings::SelectActiveGlob ;
//The value we are using to represent "All"
sc_allString = "All"
$sc_propertyType ;
$sc_propertyStatus ;
$sc_propertyActive
)
Can I default the map to show zero properties unless it is fltered?
Yes. This is easily done by editing the script "Filters And Headers" in GoMaps (the mobile file) and is generally a good idea if you have a large data set. You'll probably want to do it before you distribute GoMaps to your users.
There is a couple of set variable script steps toward the top of the script that helps build the filter queries. They are "$sc_propertyType" and "$sc_propertyStatus". You will need to reference which one (or both) of these filters should be populated before querying for map data. To do this, just wrap the script step where we set the map data package "$$sc_mapDataPackage" in an if/else statement.
The if calculation will read "not IsEmpty ($sc_propertyType) or not IsEmpty($sc_propertyStatus)" without the quotes. Then within the if statement you will run the set variable for "$$sc_mapDataPackage" as it is now. After that add an "Else" statement and within that a script step that sets the variable "$$sc_mapDataPackage" to null / empty using two quotes. That's it... Now pins will only appear on the map when at least one filter is selected.
Can I change those filters to checkboxes?
Sure. Checkboxes let you select more than one item in the same filter: like properties that are "active" and those that are "waiting". This is an easy change to make and you'll find instructions here.
Can I show a FileMaker found set on the map?
Yes. This is possible but will require a few script modifications. The first step in the process is getting a list of ID's from your found set. This can be accomplished by either looping through records and building a return delimited list or if you are using FileMaker 13 or later you can use the Summary field type "List Of".
In this case we recommend using List Of if possible. Create a new field in your properties table called "IDList", select a field type of "Summary" and make sure in the options to select "List Of" summarizing your property table ID field.
Once you have your summary field created you will need to create a way to set that field data to a global variable. Either create a new script or edit an existing script you might have for viewing the map from the context of a property record / records. In that script add a script step to set a global variable. Name the global variable "$$sc_IDList" and set the contents of that variable to the summary field "IDList we created in the previous step. You will then want to reload the map data by adding a "Perform Script" script step the will execute the script "Load Map". Then a "GoTo Layout" script step that navigates to the map layout.
Now that we have a script that will set a global var to our list of ID's and take us to the map we need to modify our query process to accept this ID list. In script manager find and edit the script "Filters and Headers" and add an "if" code block as pictured below.
In the set variable script step "$sc_idList" add the following calculation contents:
Let ([ //The field to search in sc_field = Properties::_id ; //The value we are searching on sc_value = Substitute ($$sc_IDList ; "¶" ; "','") ; //The value we are using to represent "All" sc_allString = "All" ] ; Case ( sc_value <> sc_allString ; "a.\"" & GetValue (Substitute (GetFieldName (sc_field) ; "::" ; "¶") ; 2) & "\" IN ('" & sc_value & "')" ) )
Then simply add our new "$sc_idList" variable to top of the list calculation in the "$sc_searchFieldString" set variable script step.
That's it!