In FMP 13.02 FileMaker apparently fixed the FMP URL for the desktop
client, such that it could be used to make a call to the same/local/self
file. So I would have a web viewer in a solution and it would use an
"fmp://web.address/dbname..." URL that would reference itself, the file
that was currently open.
I found some references to how to do this, but for some reason things
aren't working for me. Apparently, if you are on a non-mobile platform,
you need to use "$" as the IP address to reference the local file.
E.g.
"fmp://web.address/dbname.fmp12?script=AScriptName&$var1=1234&$var2=abcd".
This would make the database essentially accept AJAX calls. (Although
an unanswered question for me is how does the response or data get back
to the web viewer. But for now, I just want to register event that trigger sending new data into the DB.)
Here's the code I am using for my web viewer definition. The short
description is that I am trying to integrate Full Calendar into a web
viewer in a solution. I am trying to configure the onDrag event so that
when an event is modified it sends the new date range back to the DB.
-----------------------------
Let ( [
_IPDestination = If ( Left(Get(FilePath);7) = "fmnet:/"; Get ( HostIPAddress ) ; "$" ) ;
_fmpURLString = "fmp://" & _IPDestination & "/" & Get(FileName) & ".fmp12" ;
_fmScript1 = "?script=FullCalendarChangeDate";
$CurrDate = "2015/7/01" //hardcoding for testing purposes
];
"data:text/html,
<!DOCTYPE html>
<html><head><meta charset='utf-8' />
<link rel='stylesheet' type='text/css'
href='http://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.3.1/fullcalendar.min.css'
/>
<script src='http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js'></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.3.1/fullcalendar.min.js'></script>
<script>
$(document).ready(function() {
var httpXHR, fmpurl ;
$('#calendar').fullCalendar({
defaultDate: '" & $CurrDate & "',
editable: true,
allDayDefault: true,
eventStartEditable: true,
eventDurationEditable: true,
dayClick: function() {
alert('a day has been clicked!');
},
eventDrop: function(event, delta, revertFunc) {
if (!confirm(event.title + ' was dropped on ' + event.start.format() + '.\nAre you sure?')) {
revertFunc();
}
},
eventResize: function(event, delta, revertFunc) {
if (!confirm(event.title + ' end is now ' + ( event.end.format() ) + '.\n\nIs this okay?')) {
revertFunc();
} else {
fmpurl = '" & _fmpURLString &
_fmScript1 & "&$eventid=' + event.id + '&$newEndDate=' +
event.end ;
httpXHR = new XMLHttpRequest();
httpXHR.open(\"GET\", fmpurl, true);
}
},
events: [
{
id: 1,
title: "Project 1",
start: "7/1/2015",
end: "7/3/2015"
},
{
id: 2,
title: "Project 2",
start: "7/3/2015",
end: "7/7/2015"
},
{
id: 3,
title: "Project 3",
start: "7/7/2015",
end: "7/7/2015"
},
{
id: 4,
title: "Project 4",
start: "7/7/2015",
end: "7/11/2015"
},
{
id: 5,
title: "Project 5",
start: "7/14/2015",
end: "7/16/2015"
},
{
id: 6,
title: "Project 6",
start: "6/18/2015",
end: "7/3/2015"
},
{
id: 7,
title: "Project 7",
start: "7/30/2015",
end: "8/15/2015"
},
{
id: 15,
title: "Project 15",
start: "6/08/2015",
end: "6/19/2015"
}
]
});
});
</script>
<style>
body {
margin: 0;
padding: 0;
font-family: \"Lucida Grande\",Helvetica,Arial,Verdana,sans-serif;
font-size: 14px;
}
#calendar {
width: 900px;
margin: 40px auto;
}
</style></head>
<body>
<div id='calendar'></div>
</body>
</html>
"
)
-----------------------------
In the middle of that you will see these three lines, where I am trying
to make that call back to the local file from the webviewer:
fmpurl = '" & _fmpURLString & _fmScript1
& "&$eventid=' + event.id + '&$newEndDate=' + event.end ;
httpXHR = new XMLHttpRequest();
httpXHR.open(\"GET\", fmpurl, true);
Any one have experience achieving this? Todd Geist's Watermark module
uses this technique but I can't seem to extract that functionality for
my own purposes here. :)