Framework for calling FileMaker scripts from a webviewer and retrieving results using callback promises.
Promises in FM Web Viewers!
It's like fetch() for FileMaker! Go'fer some data. Call FileMaker scripts from JavaScript in a web viewer and get the response back using async/await.
Check out ./example/FMGofer.fmp12. This example demostrates the callback, resolve, reject, and timeout capabilities of the library. You can rebuild the example code used in the fm file by running npm run build && npm run build:example. This will output an html file in example/dist/index.html, which can be used in a FM webviewer.
``bash`
npm install --save fm-gofer
#### import syntax
`javascript`
import FMGofer, { Option } from 'fm-gofer';
#### require syntax
`javascript`
const FMGofer = require('fm-gofer');
const { Option } = FMGofer;
#### Via CDN for convenience
`html`
#### Or copy into yout HTML if you really want
`html`
#### In your JS
`javascript
import FMGofer, { Option } from 'fm-gofer';
const a = await FMGofer.PerformScript('FM Script', param);
// use the Option enum to specify the script option in human-readable form:
const b = await FMGofer.PerformScriptWithOption(
'FM Script',
param,
Option.SuspendAndResume
);
// Set a custom timeout/timeout message if the default to wait indefinitely is too long
import FMGofer, { Option } from 'fm-gofer';
const c = await FMGofer.PerformScript('FM Script', param, 5000, 'timed out!');
const d = await FMGofer.PerformScriptWithOption(
'FM Script',
param,
Option.SuspendAndResume,
5000,
'timed out!'
);
// Or if you file returns JSON, you can use the json() method to parse the result
const parsedData = await FMGofer.PerformScript('FM Script').json();
`
#### In your FileMaker script
To return data to JS, extract callbackName and promiseID from Get ( ScriptParameter ), and use it to call back to JS and resolve/reject the promise. Pass True as the last param ("failed") to reject the promise.
`bash
// NOTE: you can extract these as variables here or just use the provided custom functions to extract them
// Set Variable [ $callbackName ; JSONGetElement ( Get(ScriptParameter) ; "callbackName" ) ]
// Set Variable [ $callbackName ; FMGoferCallbackName ]
// Set Variable [ $promiseID ; JSONGetElement ( Get(ScriptParameter) ; "promiseID" ) ]
// Set Variable [ $promiseID ; FMGoferPromiseID ]this contains param data sent from JS
Set Variable [ $parameter ; JSONGetElement ( Get(ScriptParameter) ; "parameter" ) ]
// Set Variable [ $parameter ; FMGoferParameter ]
#### TypeScript support
`typescript
// You can assert the shape of the result returned from FM using typescript!
interface MyResult {
name: string;
age: number;
}
const j = await FMGofer.PerformScript('FM Script', param).json();
// Nested properties auto-complete in VSCode now!
const name = j.name;
const age = j.age;
`MISC
$3
`bash
npm test
`$3
`bash
npm run build
``If you see anything that should be improved please feel free to let me know or send pull requests.