You could use Utils.postContentToUrlWithContentType() or Utils.postJsonToUrl() to post content to your server. Both API functions are documented in https://www.tapforms.com/help-mac/5.3/en/topic/javascript-api.
Cheers, Daniel
---
See https://lab.danielleu.com/tapformspro/ for scripts and tips&tricks
Hi David,
You could do this with a Script Field. Something like this:
function Sortable_Title() {
var title = record.getFieldValue('fld-3b1b39ccf20f43e583fe66b8aaa0602c');
var sortableTitle;
if (title.startsWith('A ')) {
sortableTitle = title.substring(2);
} else if (title.startsWith('An ')) {
sortableTitle = title.substring(3);
} else if (title.startsWith('The ')) {
sortableTitle = title.substring(4);
} else {
sortableTitle = title;
}
// console.log(sortableTitle);
return sortableTitle;
}
Sortable_Title();
You could enhance it to support other article words if you like.
Thanks,
Brendan
-
This reply was modified 1 year, 8 months ago by
Brendan.
Hi, I am quite new to Tap Forms. I wanted to know, since using JavaScript is an option, if you are able to use fetch (or another JS API) to make an HTTP Request.
I have a client using tap forms 5 and has some renewal_date column. I wanted to automate sending out emails on this renewal date. I wrote a script already to find records that are passed the renewal_date. Now, I have a webhook expecting some record data (email, client_No, renawal_date, …). I would like a way to make an HTTP request to my webhook providing the record data saved in tap form.
Could anyone advice me please as I don’t find a way to do it. Is this even possible in TapForm??
Many thanks!
There is at least one previous post about this topic, to get records not to sort by articles, where writing a script is suggested.
I have a music title database with titles in many languages, so getting the sorting right is important. I’m thinking of setting up two fields, a display title and a sorting title. The records would sort by the sorting title:
Étoile
Jahsager
Man in the High Castle
But the form would only include the display title, and so the sort would appear like this.
L’Étoile
Der Jahsager
The Man in the High Castle
Not like this:
Der Jahsager
L’Étoile
The Man in the High Castle
It’s a lot of work to do this obviously, so I’m checking to make sure there is no other easy solution. Also, I guess this will work?
Muchas gracias,
David
Hey again Brendan,
I just finished creating that second form. I followed the manual for the linking (I have to say, it’s so difficult for me to do simple things. I was searching everywhere how I should make the primary key, where it’s done automatically. So fantastic job in making things so easy).
Once done, I followed your post and everything works now as intended (Yay ! I’m so excited it does work, now I finally have a solution to not only deal with my extensive list of video games (18 000+), but I can also finally evaluate the real cost of a game with all its DLC listed.
That’s fantastic and no regrets in my choice to go for Tap Forms ! Thank you so much !
Edit : I would like to give back to you as a thank you a small change your could bring to the application. Don’t worry, I’m sure it’s very easy to do, just a field to edit at best I think. There is an annoying (to me it is annoying) translation in the field description for the French language. I guess it would be “Important Date” in the English version, but in French it’s been translated as “The important date”. That’s confusing to me for a field description. So the suggestion would be to change “La date importante” into “Date importante”
-
This reply was modified 1 year, 8 months ago by
Fabrice.
Hi Bryan,
You’d have to add the Number field and then fill in the numbers sequentially. However, if you have the Mac version, you could easily copy and paste a sequence of numbers by using Excel or Numbers to easily generate the number sequence down one column. Then copy the sequence of numbers and then in Tap Forms, switch to the multi-column list view, click the first record in that Number field and then paste. Tap Forms will copy the values from the clipboard to all of the records.
If you’re interested in scripting, then you could also write a Form Script that loops through all your records and sets the sequence value that way.
I think that is a tech problem that has been solved in most places, else tools like Make.com couldn’t access resources like AirTable. Even Zapier accesses another large dynamic database for a CRM (Daylite). However, it might be a problem for Shortcuts because Apple may not provide the methods for you to specify which database/fields an Action wants to access.
For an intermediary step, what can you access/control using AppleScript? I see that you do have some access to Tap Forms through AppleScript, but not enough to really use it for automation or RAG.
Here is a real world use case: Content Management for News Journal
Say I am an editor/journalist for a tech magazine. One of my less interesting but expected jobs is to post news about various company press releases. Typically, this is a time consumer without really being “journalistic”. So I want to use Shortcuts daily to poll all of the vendors I track (e.g. Apple, Belkin, Microsoft, Logitech, OpenAI, etc. there could be hundreds here). It will pull the news stories posted in the past 24 hours and store all of the information for each press release into Tap Forms (normally I use AirTable to do this currently). It then passes certain information from Tap Forms to ChatGPT to process (Title suggestions, keyword suggestions, summary suggestions per platform I publish to, suggested images for the my posts, etc). It presents the articles to me review along with the suggestions for me to edit/approve for publishing. The Shortcut then sends the edits and status of the article (e.g. published, postponed, not published, etc.) to Tap Forms.
This approach keeps everything on my local machine, justifies my buying and keeping up-to-date Tap Forms because I can eliminate one or more cloud subscriptions, and I have greater control, privacy, and security for my data. And this is just one use case. But we need Tap Forms to powerfully support AppleScript/Shortcuts.
Hope you find the attached useful. I used to use an app on my phone and Mac but the subscriptions costs increased by 100% and so I thought I would have a go myself. Hopefully you may find it useful as well.
Attachments:
You must be
logged in to view attached files.
I run into this the other day as well. The solution was just to add a dummy field id definition: const field_id = 'fld-xxx';. This was all TapForms 5 needed to detect the field dependency and trigger the execution of my field script.
Maybe the API could be enhanced to add a trigger parameter to the field script object that the user can set if needed.
Cheers, Daniel
---
See https://lab.danielleu.com/tapformspro/ for scripts and tips&tricks
Everything you’ve described is correct and is exactly how Field scripts behave.
You’ll need to be explicit about which fields you’re referencing in the getFieldValue('fld-...') function so that Tap Forms knows which fields to monitor. I’m sorry that it doesn’t work the way you want it to. But that’s another level of abstraction that Tap Forms doesn’t know how to deal with. And there could be unintended consequences if I evaluate your JavaScript code just to find out what the Field IDs are when using getFieldNamed() so I can monitor those fields.
Thanks for the reply, Brendan.
I believe your statement (that the getFieldNamed function is not disabled) is somewhat semantic. Maybe I am wrong, but my understanding of what you are saying is that the following process occurs in a field level script:
Prerequisites for execution of a field level script:
1. The function ‘getFieldValue’ MUST be present.
2. A valid fld_ID value MUST be present. This value can be explicit or the value can be contained within a variable.
Process:
1. Tapform’s Objective-C code scans the source code in my script.
2. It finds the function ‘getFieldValue’.
3. It fails to find a valid fld_ID as the code (within the field level script) has yet to be executed as a Javascript.
4. As the prerequisites have not been satisfied, no script execution actually takes place.
What I am saying is that the ‘getFieldNamed’ function and its use within a field level script are basically incompatible as (at the Objective-C code scan stage), there will NEVER be a fld_ID to satisfy the second prerequisite stated above.
That effectively makes useless any inclusion of ‘getFieldNamed’ in a field level script (for its primary function of retrieving a fld_ID). I agree that the function is not disabled, but it is inoperable (useless) within a field level script.
That is my reading of it, but perhaps my understanding of the process above is wrong?
The getFieldNamed() function is not disabled. It just doesn’t cause the field script to be executed when you enter a value into that field in the record. If there was another field that’s referenced with the field ID directly, then that will trigger the script to run.
The trigger is specifically on the getFieldValue() function.
So if I am understanding this correctly, that function (getFieldNamed) is effectively disabled within a field level script.
The script text MUST (at the outset) contain the fld_ID of a field that will “change value”.
So any function that returns the fld_ID will be ineffective in a field level script (unless the script already contains a fld_ID). Perhaps getFieldNamed is the only function that does that?
I cannot think of a workaround as you are very much limited when using a field level script.
Is this correct?
Thanks for help.
The issue is that my Objective-C code scans your source code to determine which fields you’re referencing in the script by looking for the text .getFieldValue('fld-.....'). Or when using a variable instead of ('fld-....'). But it doesn’t execute your code before your function is run to determine what the field ID is for getFieldNamed('Analysis_G2') so that it can trigger the script when that value in that field changes.
It works as a Form script because you’re manually executing the script when you want. But a Field script relies on monitoring the fields in the form to see what’s changed and then it runs the script if the script has a reference to one of those fields with the hard coded field ID.
After you save your script, check the Fields list to see if you see a checkmark next to any of the fields. If so, those are the fields Tap Forms will monitor for changes. If you don’t see any, the script won’t be triggered automatically.
Ya, that would be easier to read and debug with a Script field. But can be done with a Calculation field:
IF(FieldA = 1; DATEADD(FieldC;0;0;-2;0;0;0;0); IF(FieldA = 2 ~ FieldA = 3; DATEADD(FieldC;0;-1;0;0;0;0;0); IF(FieldA > 3; DATEADD(FieldC;0;-2;0;0;0;0;0); "")))
I haven’t tested this, so it might not work, but that’s the general idea. The ~ character means or