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,321 through 1,335 (of 3,102 total)
  • Author
    Search Results
  • #45271

    In reply to: Mail Merge not working

    Brendan
    Keymaster

    Hi Kimberly,

    The only one I see not working is [Edition Nr.]. But in your fields list you have it defined as Edition Nummer. All the others appeared to be substituted properly when you print.

    For the series numbers, you won’t be able to reference those in your record directly. Since it’s a one-to-many, is it ALL of the series numbers that you want to display that are related to the parent record? You would most likely need a script field to extract the data from the Link to Form field to get the list of series numbers to include in the report.

    Thanks,

    Brendan

    • This reply was modified 4 years, 9 months ago by Brendan.
    #45237
    pinkcadillac
    Participant

    Wow Sam, that was the missing bit and it works perfectly and is far quicker to click “Now” than to type out the current date and exact time.

    Many, many thanks.

    I’ve no idea about scripts but this fixed it for me.

    I’ll retain both my old Date field (using it’s calendar accessory) for historic orders and use the new T&D with it’s calendar from now on.

    My Sorting is sorted too!

    Great – thank you everyone!

    PS is there a link to a file/doc/record which has all the possible TF fields and can it be added to my TF?

    #45236
    Sam Moffatt
    Participant

    Enable “show accessory controls” on the layout panel for your layout to see the calendar icon.

    You could probably use a quick form script to copy the date across to your new field if you want to use it exclusively.

    #45207

    In reply to: Help with script

    Daniel Leu
    Participant

    In Javascript, comparison is == not =. So you should use

    if (group==1) {
       record.setFieldValue('fld-e59ea447a29b4c518bd307507e243f92', 20);
    }
    • This reply was modified 4 years, 9 months ago by Daniel Leu.

    Cheers, Daniel

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

    #45204

    In reply to: Help with script

    Guillermo q
    Participant

    Thank you for your awesome work and help!! This is amazing, it worked!

    I have another question. I have a field (price) that has a fixed value depending on the input of another field (group).
    group 1= 20
    group 2= 40
    group 3 = 54

    I tried with my absolute ignorance of programming creating a field with a script.

    function pricetest() {
    
    var group = record.getFieldValue('fld-9565e24e59c6412ca388144d04e0bd07');
    
    if (group=1) {
    	record.setFieldValue('fld-e59ea447a29b4c518bd307507e243f92', 20);
    }
    
    if (group=2) {
    	record.setFieldValue('fld-e59ea447a29b4c518bd307507e243f92', 40);
    }
    
    if (group=3) {
    	record.setFieldValue('fld-e59ea447a29b4c518bd307507e243f92', 54);
    }
    
    }
    
    Pricetest();

    Any help? Thank you so much.

    • This reply was modified 4 years, 9 months ago by Guillermo q.
    #45198

    In reply to: Help with script

    Sam Moffatt
    Participant

    If you’re on iOS/iPadOS, I’d just copy the values out and paste into Numbers (Apple’s spreadsheeting tool) or Excel (free for phones, I think a charge exists on iPads). If you change the console output to use commas, it should paste fine.

    A small change could also directly put this on your pasteboard:

    
    	var lines = [];
    	// log to console the aggregated values.
    	for (var month in rollups) {
    		var line = month + "," + rollups[month]
    		console.log(line);
    		lines.push(line);
    	}
    
    	Utils.copyTextToClipboard(lines.join("\n"));
    

    The Mac version of Tap Forms has some charting functionality, I’m not entirely sure if it supports aggregation or not but that would be the first place I’d look. Supporting aggregation seems like a reasonable feature ask if it doesn’t exist but that can only be answered by the Keymaster.

    If you’re on the Mac, then an alternative could be to just write it to a new form and then chart it. To do this is going to be a bit more of a rewrite so that we can sort things easier

    	
    function Aggregate_By_Date() {	
    	// this is where we're going to store the rollups per day.
    	var rollups = {};
    	
    	// iterate to all of the records in the form
    	for (var rec of form.getRecords()) {
    		var purchase_date = rec.getFieldValue('fld-ccbd9a8f51d34246bebfb31aa4e397dd');
    		var price = parseFloat(rec.getFieldValue('fld-08129d71ab0f4fa4a2749456281fca07'));
    
    		// Skip entries that don't have a price or date set.
    		if (!price || !purchase_date) {
    			continue;
    		}
    		
    		// format the date for use in the rollup.
    		var formattedDate = purchase_date.getFullYear() + "-" + purchase_date.getMonth() + "-" + purchase_date.getDay();
    
    		// Rollup to this date, add to the existing value or set it if not set.
    		rollups[formattedDate] ? rollups[formattedDate] += price : rollups[formattedDate] = price;
    	}
    	
    	// Get the rollups form.
    	var rollupsForm = document.getFormNamed("Rollups");
    
    	// Delete previous roll up records.
    	rollupsForm.getRecords().forEach(rollupRec => rollupsForm.deleteRecord(rollupRec));
    	
    	var lines = [];
    	
    	// log to console the aggregated values.
    	for (var month in rollups) {
    		var line = month + "," + rollups[month]
    		console.log(line);
    		lines.push(line);
    
    		var rollupRec = rollupsForm.addNewRecord();
    		rollupRec.setFieldValue("fld-cd1d454672c84bce8103a4267507ca03", month);
    		rollupRec.setFieldValue("fld-9eeeff7120db401b830ccec4e06f2bc3", rollups[month]);
    	}
    	
    	document.saveAllChanges();	
    
    	Utils.copyTextToClipboard(lines.join("\n"));
    }
    
    Aggregate_By_Date();
    

    Change to match the form name and field IDs but that should populate a new form with the records in the right format. Then you can use the chart feature on the Mac to visualise it.

    Major changes in the full script, the formatted date is done by getting each value out:

    		// format the date for use in the rollup.
    		var formattedDate = purchase_date.getFullYear() + "-" + purchase_date.getMonth() + "-" + purchase_date.getDay();
    

    This produces a format that is easier to sort on but not zero padded, doing so would require grabbing the sprintf implementation via the Script Manager so I’ve left it out for simplicity sake.

    Next big change is our loop, I’ve incorporated the above pasteboard change but the core is as follows:

    	// Get the rollups form.
    	var rollupsForm = document.getFormNamed("Rollups");
    
    	// Delete previous roll up records.
    	rollupsForm.getRecords().forEach(rollupRec => rollupsForm.deleteRecord(rollupRec));
    	
    	var lines = [];
    	
    	// log to console the aggregated values.
    	for (var month in rollups) {
    		var line = month + "," + rollups[month]
    		console.log(line);
    		lines.push(line);
    
    		var rollupRec = rollupsForm.addNewRecord();
    		rollupRec.setFieldValue("fld-cd1d454672c84bce8103a4267507ca03", month);
    		rollupRec.setFieldValue("fld-9eeeff7120db401b830ccec4e06f2bc3", rollups[month]);
    	}
    	
    	document.saveAllChanges();	
    

    We’re getting a form named “Rollups”, we’re going to clean it out each script run and then as we go through the rollups, we’ll add a new record and set a text field and a number field. We need to tell Tap Forms to save the changes as well which is the last line of that snippet. As with previously, replace the field ID’s with your own.

    When doing this roll up, if in your main form you add a new script field (I called mine “Purchase Date Simplified”) and put this content in it:

    function Purchase_Date_Simplified() {
    		var purchase_date = record.getFieldValue('fld-ccbd9a8f51d34246bebfb31aa4e397dd');
    		if (!purchase_date) {
    			return;
    		}
    		
    		// format the date for use in the rollup.
    		return purchase_date.getFullYear() + "-" + purchase_date.getMonth() + "-" + purchase_date.getDay();
    }
    
    Purchase_Date_Simplified();
    

    Then in your rollup form you can create a new “Link to Form” field, link it to the original form, then you set it to the JOIN type and you can match the text field to the script field. Then you can easily go from a roll up record to see which items were in the rollup.

    #45196
    Mark Robbins
    Participant

    Thanks, Daniel.
    Your examples helped me get through the record looping, and things appear to be working as desired now. I ended up incorporating the original Fetch_Bgg_Information instead of calling it with form.RunScriptNamed(). When I get time for additional testing, I might pull it back out.

    #45195
    Daniel Leu
    Participant

    I treat form.runScriptNamed() like an include in other languages to define constants and functions. So at the beginning of my script, I’d have form.runScriptNamed(‘Fetch_Bgg_Information’); but without any local function calls.

    Then in the loop over records, you would call whatever function you have and provide the current record id as an argument. Maybe something like this:

    for (thisRecord in records) {
       // go to the record and run the function;
       console.log(“BGGid: ” + records[thisRecord].getFieldValue(field_bggid));
       console.log(“Index: ” + thisRecord);
       Fetch_Bgg_Information(records[thisRecord].getId());
    }

    And then in you Fetch_Bgg_Information script you would have the function

    function Fetch_Bgg_Information(myRecordId){
       let myRecord = form.getRecordWithId(myRecordId);
       .....
    }

    Or you could just define let myRecord = records[thisRecord] in the loop and then access myRecord in your function Fetch_Bgg_Information() without using an argument. I prefer to use function call arguments, specially when the function is defined in a different script.

    Cheers, Daniel

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

    #45192
    Brendan
    Keymaster

    Hi Mark,

    What does Fetch_Bgg_Information() do?

    Can you upload your form template?

    The form.selectRecord(record) function is generally just used as sort of the last thing in a script to have Tap Forms select a specific record in the user interface. It’s like if you added a new record in the script and wanted Tap Forms to select that new record after. At least that’s what I had in mind when I wrote that function.

    #45191
    Mark Robbins
    Participant

    I have a need to loop through each record in a table and run a script for that record. I wrote the script below, but it does not seem to work. I’m new to Tap Forms, and a bit new to javascript, so my understanding may be at fault. I know the called script works well when I run it from the Form window for a record, I just can’t get it to run against each record.

    Thanks.

    function Process_All_Records() {

    var records = form.getRecords();
    var field_bggid = “fld-ce86e98498894969839b4d574c754511”
    var value_bggid = 0

    for (thisRecord in records)
    {
    // go to the record and run the function;
    form.selectRecord(records[thisRecord]);
    console.log(“BGGid: ” + records[thisRecord].getFieldValue(field_bggid));
    console.log(“Index: ” + thisRecord);
    form.runScriptNamed(‘Fetch_Bgg_Information’);
    }
    }

    Process_All_Records();

    #45190

    In reply to: Help with script

    Guillermo q
    Participant

    Thank you very much, the script works like charm!

    Is there any possibilities to get a basic graph in that script??

    Thank you very much.

    #45189

    In reply to: Help with script

    Sam Moffatt
    Participant

    On the Mac, it’s at the top of the record list next to the form name with a little menu sort of icon. On most views, it’s pretty close but the MCLV has it all the way to the right because of the extra stuff.

    On iOS I don’t see a group summaries option, just the section headings. At that point I guess you’ll need to run the form script and check out the console log for the output.

    #45188

    In reply to: Help with script

    Guillermo q
    Participant

    Thank you for a so elaborated answer.
    Sorry for this basic question: where is the show group summaries option?

    Otherwise I will try the script. Thank you.

    #45187

    In reply to: Help with script

    Sam Moffatt
    Participant

    You can do that by sorting by that date field, enabling “show group summaries” (this will also enable section headings) and then in your form settings, set the calculation to be total and the price field. Then you’ll get a summary at the bottom of each section. If you use the multicolumn list view, it’ll give you the option to display a calculations row and control per field aggregations as well.

    In terms of a script, you’ll need to loop over all of the records in the form. Something simple like this could do it:

    function Aggregate_By_Date() {
    	// set our date format, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
    	// remove "day" from it and you'll roll up by month for example.
    	var dateFormat = { "day": "2-digit", "month": "2-digit", "year": "2-digit"};
    	
    	// this is where we're going to store the rollups per day.
    	var rollups = {};
    	
    	// iterate to all of the records in the form
    	for (var rec of form.getRecords()) {
    		var purchase_date = rec.getFieldValue('fld-ccbd9a8f51d34246bebfb31aa4e397dd');
    		var price = parseFloat(rec.getFieldValue('fld-08129d71ab0f4fa4a2749456281fca07'));
    
    		// Skip entries that don't have a price or date set.
    		if (!price || !purchase_date) {
    			continue;
    		}
    		
    		// format the date for use in the rollup.
    		var formattedDate = purchase_date.toLocaleDateString("en-AU", dateFormat);
    
    		// Rollup to this date, add to the existing value or set it if not set.
    		rollups[formattedDate] ? rollups[formattedDate] += price : rollups[formattedDate] = price;
    	}
    	
    	// log to console the aggregated values.
    	for (var month in rollups) {
    		console.log(month + ": $" + rollups[month]);
    	}
    }
    
    Aggregate_By_Date();
    

    If you want to do more with the date formatting you’d have to pull out the fields from the date object. This will also be sorted in the order you retrieve them from the form which I think will be the default form ordering, so you’ll want to make sure that your first sort field is set to the date field to get the script output in the format you need.

    #45184

    Topic: Help with script

    in forum Script Talk
    Guillermo q
    Participant

    Hello to all! I love this app, abd I hace discovered the scripts and this is amazing.

    I would like to know if there is a way to do the following

    – I have a form where every item has a date and a price. I have several items in every date.
    – I would like an script that sums everything in every date and gives me a list of dates with total prices(example: 23-5-21 > 250; 22>5>21 > 100

    Thank you very much

Viewing 15 results - 1,321 through 1,335 (of 3,102 total)