Tap Forms app icon half
Tap Forms Forum text image
Blue gradient background

Exchange tips and ideas with the Tap Forms community

Search Results for 'script'

Viewing 15 results - 1,681 through 1,695 (of 2,989 total)
  • Author
    Search Results
  • #42125

    In reply to: Script stopped working

    David Gold
    Participant

    It’s working with your changes. Really appreciate it. Not coming up with any errors now. I’m going to try and expand what I want it so do and will come back if I have any queries (am just starting 201 of your Javascript/Tap Forms guide so getting there slowly…

    #42123

    In reply to: Script stopped working

    Sam Moffatt
    Participant

    One extra feature is that the console should make the link clickable so if you run it outside of the script editor (e.g. in the normal view with the console open) then it should take you to the record that it doesn’t think is setup properly.

    #42122

    In reply to: Script stopped working

    Sam Moffatt
    Participant

    Oh that’s an annoyance of the forum, it turns the backtick character into <code> and </code> respectively even though it’s inside a script context already. In Javascript the backticks are used to create template literals which allow you to embed variables inside the string. Not particularly necessary in this case but something I’m in the habit of doing.

    If you’re looking for the record that is problematic, you can use record.getUrl() for the record that fails the test and console.log it to find it.

    Here’s my copy of the script, I took out the template string so hopefully the forum doesn’t munge it and it’s been updated to point to different fields and field names (title and subtitle from the Books form in the document I use for the YouTube videos):

    var myForm = document.getFormNamed('Book');
    var records = myForm.getRecords();
    var search_term = Utils.copyTextFromClipboard();
    var result_count = 0;
    var results = [];
    var results_comments = [];
    var selected;
    
    function copy_comments( comments ) {
        Utils.copyTextToClipboard( comments );
    }
    
    function copy_result_multiple( comments ) {
    
        if ( comments == true ) {
            console.log( 'Index:' + results.indexOf( selected ) );
            console.log( results_comments[ results.indexOf( selected ) ] );
            copy_comments( results_comments[ results.indexOf( selected ) ] );
        } else {
            console.log( 'Cancelled' );
        }
    
    }
    
    function multiple_results( all_results ) {
    
        let prompter = Prompter.new();
        prompter.cancelButtonTitle = 'cancel';
        prompter.continueButtonTitle = 'Copy Comment';
        prompter.addParameter('Select Result ', 'selected', 'popup', all_results)
        .show('Multiple Results Found', copy_result_multiple );
    
    }
    
    function search_records( haystack , needle ) {
    	var title_id = 'fld-59b7b2dfa5c843afb969e74df4ad111c';
    	var subtitle_id = 'fld-b7d482d0db5d4554ad0948f19394f441';
        var rec;
    
        for (rec of haystack) {
        	var title = rec.getFieldValue( title_id );
        	
        	if (title && title.includes( needle ) ) {
                results.push( rec.getFieldValue( title_id ) );
                results_comments.push( rec.getFieldValue( subtitle_id ) );
                result_count++;
            } else {
            	if (!title) {
            		console.log("Empty field: " + rec.getUrl());
            	}
            }
    
        }
    
        if( result_count == 0 ){
            Utils.alertWithMessage("No Results", "No results were found for the search term: " + needle);
        }else if( result_count > 1 ){
            //multiple results
            multiple_results( results );
        }else{
            //single result
            copy_comments( results[0] );
        }
    
    }
    
    search_records( records , search_term );
    #42120

    In reply to: Script stopped working

    Sam Moffatt
    Participant

    Ok, that’s actually a data problem, one of your records doesn’t have location_id set on it and you’re getting undefined back from the getFieldValue call. When you then chain that to add the .includes, you’re getting the undefined is not an object error because getFieldValue returned undefined for the empty record. Chaining sometimes makes it have to figure out where something goes wrong, especially for contexts that can legitimately return a mix of return types.

    A simple fix would be to do something like:

    
    var location = rec.getFieldValue(location_id);
    if (location && location.includes ...

    An extra variable but Javascript will test if it’s “truthy” and continue. For your purposes that shouldn’t hurt anything because you want to see if it has a search value anyway so presumably any field that is empty can be ignored (undefined and an empty string are both falsy).

    Good to hear you enjoy the videos! Stuff on the forum is often the inspiration for videos so in a sense I’m putting my money where my mouth is because it’s sometimes easier to see something rather than read it.

    #42114

    In reply to: Script stopped working

    David Gold
    Participant

    Brendan – I’ve uploaded the file.

    Sam – I have the iOS version working (without the prompter – I didn’t realise the prompter was now supported). The issue I’m having is with the second script (the Mac one). The console is showing: “TypeError: undefined is not an object (evaluating ‘rec.getFieldValue( location_id ).includes’), line:(null)”
    Let me know if you know what is causing it.
    By the way love your videos!

    Attachments:
    You must be logged in to view attached files.
    #42113

    In reply to: Script stopped working

    Sam Moffatt
    Participant

    Do you mind being a little more specific about which part isn’t working?

    My first inclination would be to pepper the thing with console.log statements everywhere to see where it stops.

    I just copied the Mac version (the last post you did) and tried it out with a test document and it worked fine. I had to change the field names but when I ran it in the script editor it worked.

    One minor change is where you have if (result_count == 0 ){ instead of just logging the error message, use an alert box:

    
        if( result_count == 0 ){
            Utils.alertWithMessage("No Results", <code>No results were found for the search term: ${needle}</code>);
    

    Makes it a little more obvious there is no results available.

    I didn’t look at this on iOS though but generally my scripts work identically on iOS and MacOS. I think there was a time when the prompter wasn’t on iOS but it should be there now but perhaps there is still something funky there.

    #42112

    In reply to: Script stopped working

    Brendan
    Keymaster

    Can you upload your form (.tff file) with these scripts? I just fixed the attachment upload function.

    #42099

    In reply to: Script stopped working

    David Gold
    Participant

    I forgot to say I have separate Scripts for the iOS version and the Mac version of Tap Forms given some iOS limitations. The one above is the iOS version and below is the Mac version.

    var myForm = document.getFormNamed('Travel Database');
    var records = myForm.getRecords();
    var search_term = Utils.copyTextFromClipboard();
    var result_count = 0;
    var results = [];
    var results_comments = [];
    var selected;
    
    function copy_comments( comments ) {
        Utils.copyTextToClipboard( comments );
    }
    
    function copy_result_multiple( comments ) {
    
        if ( comments == true ) {
            console.log( 'Index:' + results.indexOf( selected ) );
            console.log( results_comments[ results.indexOf( selected ) ] );
            copy_comments( results_comments[ results.indexOf( selected ) ] );
        } else {
            console.log( 'Cancelled' );
        }
    
    }
    
    function multiple_results( all_results ) {
    
        let prompter = Prompter.new();
        prompter.cancelButtonTitle = 'cancel';
        prompter.continueButtonTitle = 'Copy Comment';
        prompter.addParameter('Select Result ', 'selected', 'popup', all_results)
        .show('Multiple Results Found', copy_result_multiple );
    
    }
    
    function search_records( haystack , needle ) {
    
        var location_id = 'fld-cf720b6ab4314f0bb5f47bc9bd61f0a9';
        var comment_id = 'fld-0096b55f012d4d4fb34a95f784951b55';
        var rec;
    
        for (rec of haystack) {
            if ( rec.getFieldValue( location_id ).includes( needle ) ) {
                results.push( rec.getFieldValue( location_id ) );
                results_comments.push( rec.getFieldValue( comment_id ) );
                result_count++;
            }
    
        }
    
        if( result_count == 0 ){
            console.log( 'No results found!' );
        }else if( result_count > 1 ){
            //multiple results
            multiple_results( results );
        }else{
            //single result
            copy_comments( results[0] );
        }
    
    }
    
    search_records( records , search_term );
    #42098
    David Gold
    Participant

    I have a Script that used to work perfectly but has stopped working in recent versions of Tap Forms and can’t workout why.

    The script is supposed to take a search term from clipboard, do a search, if one result is found bring up a screen displaying the “Comments” field and also copy it to the clipboard. If multiple results are found it presents them, you pick one and then it also displays the “Comments” field of the selected one and copies it to the clipboard. What has stopped this working? I’m not getting any errors in the Console and the variable references are correct.

    var myForm = document.getFormNamed('Travel Database');
    var records = myForm.getRecords();
    var search_term = Utils.copyTextFromClipboard();
    var result_count = 0;
    var results = [];
    var selected;
    
    function copy_comments( comments ) {
        Utils.copyTextToClipboard( comments );
    }
    
    function multiple_results() {
    
        var joined = '--multiple_matches--';
        var res;
        for (res of results) {
            joined = joined +
            res.location + '::' + res.comment;
        }
        copy_comments( joined );
    }
    
    function search_records( haystack , needle ) {
    
        var location_id = 'fld-c55265c3f56b43feb423f5a198dffe6c';
        var comment_id = 'fld-141d923e785148e3aec84576c746a4a4';
        var rec;
    
        for (const rec of haystack) {
            if ( rec.getFieldValue( location_id ).toLowerCase().includes( needle.toLowerCase() ) ) {
                results.push( { location: rec.getFieldValue( location_id ) , comment: rec.getFieldValue( comment_id ) } );
                result_count++;
            }
    
        }
    
        if( result_count == 0 ){
            console.log( 'No results found!' );
        }else if( result_count > 1 ){
            multiple_results();
        }else{
            copy_comments( results[0].comment );
        }
    
    }
    
    search_records( records , search_term );
    #42059
    matt coxon
    Participant

    Hi Daniel Doh no picture !, I’ve re-attached but if it doesn’t attach the error is “ ReferenceError: Can’t find variable: record, line:(null)”
    But actually when I select the record and then test the script (prompted by your reply) it does seem to work , so maybe a non issue (user error)

    Thanks
    Matt

    #42056
    Daniel Leu
    Participant

    Assign following single line to a script field:

    record.getId();

    You might need to click on the recalculate formulas icon to get the field updated. To avoid this, you can add a dummy getFieldValue at the beginning of the script:

    var name = record.getFieldValue('fld-xxxx');
    record.getId();

    The name variable is not used, but this way, the script is triggered when something changes with the name field. Obviously, use a field that exists in your form.

    Cheers, Daniel

    ---
    See https://lab.danielleu.com/tapformspro/ for scripts and tips&tricks

    #42052

    In reply to: Help with Scripts.

    Sam Moffatt
    Participant

    I did a video on building a script that joins a couple of values together and also shows an example of using the child records loop. Shows how to use the editor to put stuff together and also how to use extra values with the child records loop. Hopefully it’s helpful or useful.

    #42020

    In reply to: Help with Scripts.

    T.L. Ford
    Participant
    #42011

    In reply to: Help with Scripts.

    Brendan
    Keymaster

    Hi Michael,

    If both your fields are in the same form, then all you need to do is, in the Script Editor, double-click on the field you want to copy from. Tap Forms will write the code for you to retrieve the current value of that field.

    Then, look at the Snippets and double-click on the Set Field Value snippet. That’ll insert the command into your code at the cursor position that will set a value for a field.

    Here’s an example of copying a value from one field to another:

    function CopyScript() {
    
    	var from_field_id = 'fld-.....';
    	var from_field_value = record.getFieldValue(from_field_id);
    	var to_field_id = 'fld-.....';
    	record.setFieldValue(to_field_id, from_field_value);
    
    }
    
    CopyScript();

    So when the from_field is changed, whatever value was in it will be copied to the to_field.

    What you want to do with the from field value however is up to you. This is just a straight copy. But you may want to check the value, compare it with something, then set a different value into the to_field.

    #42010
    Michael Mckenna
    Participant

    Not sure if this has already been posted or seen , but it’s not showing in my list of posts so I will re post my questions.
    I am interested in understanding how scripts work and I read the dummies script lesson and still have no idea how it works. I have looked for videos on Youtube and found one that was still a bit complicated for me. I have read the definition sheets , JavaScript API sheet, that gives a brief explanation, however I am still scratching my head…. yes a really dummy.
    I have been through the script forum and I was wondering if someone could write me a simple script so I can copy and learn from there.
    Maybe theres a simple script video available… I am very much a monkey see monkey do kinda guy.
    I would like to populate a field entered on a form ,not linked, and have that field auto populate another on same form.
    Thank you for your time.
    Kind regards
    Michael

Viewing 15 results - 1,681 through 1,695 (of 2,989 total)