FileMaker techniques from a full-time FileMaker developer. http://crm.fm
Monday, November 30, 2009
FileMaker Flot Chart (offline charts without plugins)
Thursday, November 26, 2009
FileMaker Multiple word(part) portal filter
AllTextCombinations ( FirstName ) &"¶" & AllTextCombinations ( LastName ) & "¶" & AllTextC
ombinations ( City ) & "¶_ALL_"
The "¶_ALL_" at the end will be important later. That's used to show all the records is the searchfield is empty.
If we have this, we need three additional fields, which will help us to create a 3 word search ability. (note: if you want four words, then you'll need four, but I think 3 must be enough).
I call them SearchField1, SearchField2 and SearchField3, and they are unstored text calculations:
SearchField1:
Let ( s = Substitute ( SearchField_Display ; "-" ; " " ) ;If ( IsEmpty(s) or IsEmpty(MiddleWords(s;1;1)) ;"_ALL_";MiddleWords(s;1;1) ))
SearchField2:
Let ( s = Substitute ( SearchField_Display ; "-" ; " " ) ;If ( IsEmpty(s) or IsEmpty(MiddleWords(s;2;1)) ;"_ALL_";MiddleWords(s;2;1) ))
SearchField3:
Let ( s = Substitute ( SearchField_Display ; "-" ; " " ) ;If ( IsEmpty(s) or IsEmpty(MiddleWords(s;3;1)) ;"_ALL_";MiddleWords(s;3;1) ))
As you may notice the only difference is the word which we get from them.
I also used a Substitute ("-" to a Space char) as my data contained many "-" chars, and I wanted them as different words).
By these we can create a relation to AllVariation:
As you can see we'll have 3 criterias. (If you want 4 word you'll need 4).
After this, if we use the portal filter we'll be able to search for things like: "we la c", or "an li v" or "Bil bar abi" so basically any part of our fields.
I attached a demo file which you can download from here . (right click- save as).
FileMaker Snake game - a FM 10 Demonstration
Tuesday, November 24, 2009
Filemaker MineSweeper clone
Started it, finished in about 2 hours.
So here it is, actually it's pretty straight forward and fully unlocked so you can check it.
The main fields of the database are the Display, and the Game Repeating field.
The Display shows the board, while the Game contains the yet unrevealed fields, mines.
The Init method initializes the board, sets the random mines, counts the neighbor cells (how many one mine has), etc.
The ClickHandler method takes care of the clicks, by using hidden clickable layout elements behind the repeating fields.
(Actually these clickable elements weren't created by me one by one, setting up different script paramters 300 times, instead I created a script to generate the appropriate XML for me, and then pasted it on the layout using Clip Manager 3 by MyFmButler. (Maybe I will show this technique in a separate article later if you're interested).
Filemaker - Using Growl without plugins
"tell application \"System Events\"¶
set isRunning to count of (every process whose name is \"GrowlHelperApp\") > 0¶
end tell¶
¶
if isRunning then¶
tell application \"GrowlHelperApp\"¶
register as application \"GrowlSampleApp\" all notifications {"& Quote ("TestNotify") & "} default notifications {"& Quote ("TestNotify") & "} icon of application \"FileMaker Pro" & Case ( PatternCount ( Get ( ApplicationVersion ) ; "Advanced" ) ; " Advanced\"" ; "\"" ) & "¶
notify with name "& Quote ("TestNotify") & " title " & Quote (GrowlSample::Title) & " description " & Quote(GrowlSample::GrowlText) & " application name \"GrowlSampleApp\""& " sticky "& Quote (GrowlSample::Sticky) &"¶
end tell¶
end if¶"
----
The first part checks if Growl is up and running. The second part registers the application, and notifies with the set parameters.
The icon it shows is the Icon of FileMaker, but it can be changed to anything you wish.
We also have to check for Get(LastError) -609 to be sure.
I attached the sample file which you can download from here. (right click- save as!)
UPDATE: A commenter (doug says:) Here is a custom function that does a similar thing:http://www.briandunning.com/cf/1064
Based on ideas and code from Michael Gaslowitz http://www.gaslowitz.net/filemaker/blog/2008/07/video-growl-integration/
Thanks for that!
Note by Adam: However that custom function needs to be modified a little bit, as it doesn't checks for the GrowlHelper app running, be sure to change that!
Sunday, November 22, 2009
Filemaker - Applescript Printer list / faxing a file
set allprinters to every printer
set printernames to name of every printer
end tell
set backvalue to ""
repeat with printername in printernames
set backvalue to backvalue & printername & (ASCII Character(13))
end repeat
set cell "PrinterList_Global" of current record to backvalue
---
This can be used to set the default printer on OSX.
2)
The second option uses the lpstat OSX command to get the printer names. This will give you a different list. But the printer names this one gives can be used for the "lp" OSX command. This will be important later when we get to fax sending.
---
set oldDelims to AppleScript's text item delimiters
set PrinterStatusList to {}
try
set cmd to "lpstat -p | grep ^printer"
set PrinterStatus to do shell script cmd as text
set AppleScript's text item delimiters to {" "}
repeat with i from 1 to count of paragraphs of PrinterStatus
set s to paragraph i of PrinterStatus
set p to text item 2 of s as list
copy p to end of PrinterStatusList
end repeat
on error
set PrinterStatus to ""
end try
set AppleScript's text item delimiters to oldDelims
set backvalue to ""
repeat with printername in PrinterStatusList
set backvalue to backvalue & printername & (ASCII Character(13))
end repeat
set cell "PrinterList_Global" of current record to backvalue
--
Okay, now you have the printer list. You can easily create a value list based on this, and let the user choose from it.
What about faxing??
This is where the lp command comes in.
With lp you can send a file (pdf), to a number.
The syntax is the following:
lp -d PrinterNameHere -o phone=PhoneNumberHere filepathandnameHere
You can call this from FileMaker using a do shell script AppleScript Command.
I attached a sample file for printer listing, the faxing is up to you, but based on this, you can easily create it.
You can download the demo file here. (right click - save as).