Search Results for 'form.getRecords'
Tap Forms – Organizer Database App for Mac, iPhone, and iPad › Forums › Search › Search Results for 'form.getRecords'
-
AuthorSearch Results
-
January 16, 2023 at 2:25 PM #48675
In reply to: Learning JavaScript
Glen Forister
ParticipantThat is great. I put it in the script right after the other “var”s near the top. Hope that is the right place.
function Get_Previous_Record() {
var records = form.getRecords();
var currentRecordIndex = records.indexOf(record);
// added var for Oct 1st.
var previousRecord = nil;
var date = record.getFieldValue(‘fld-0720a5baa6fc4980aee22798bd089714’);
if (date.getMonth() == 9 && date.getDate() == 1){ // check for October 1st
return 0;
}
// end added var for Oct 1if (currentRecordIndex > 0) {
previousRecord = records[currentRecordIndex – 1];
}if (previousRecords != nil) {
// fetch some value and do some calculation with it and the current record
// the currently selected record is always accessed with the built-in variable
//record
}
}Get_Previous_Record();
January 15, 2023 at 10:52 PM #48670In reply to: Learning JavaScript
Daniel Leu
ParticipantThis should to the trick to reset the season total at the beginning of the year:
function Season_to_date() { var records = form.getRecords(); var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousRecord = records[currentRecordIndex-1]; } else { return 0; } // Is this the beginning of the year? var date = record.getFieldValue('fld-0720a5baa6fc4980aee22798bd089714'); if (date.getMonth() == 0 && date.getDate() == 1){ return 0; } var today = record.getFieldValue('fld-61c03b767f2c497491d10a28db8abdb3'); var previous_total = previousRecord.getFieldValue('fld-f6bc7e82da874579940fb8afc167dac4'); var total = today + previous_total; console.log("Today: " + today) console.log("Previous: " + previous_total) console.log("Total: " + total) return total; } Season_to_date();
January 14, 2023 at 2:38 PM #48648In reply to: Learning JavaScript
Daniel Leu
ParticipantHi Glen,
Thank you for sharing your form! The script Brendan posted is for a field of the type
Script
and notCalculation
.Here is the updated script that works for me:
function Season_to_date() { var records = form.getRecords(); var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousRecord = records[currentRecordIndex-1]; } else { return 0; } var today = record.getFieldValue('fld-61c03b767f2c497491d10a28db8abdb3'); var previous_total = previousRecord.getFieldValue('fld-f6bc7e82da874579940fb8afc167dac4'); var total = today + previous_total; console.log("Today: " + today) console.log("Previous: " + previous_total) console.log("Total: " + total) return total; } Season_to_date();
January 13, 2023 at 9:59 PM #48641In reply to: Learning JavaScript
Brendan
KeymasterYou can get the previous record with this code:
function Get_Previous_Record() { var records = form.getRecords(); var currentRecordIndex = records.indexOf(record); var previousRecord; if (currentRecordIndex > 0) { previousRecord = records[currentRecordIndex - 1]; } if (previousRecord != undefined) { // fetch some value and do some calculation with it and the current record // the currently selected record is always accessed with the built-in variable // record } } Get_Previous_Record();
November 27, 2022 at 12:12 AM #48321In reply to: Date comparison
Daniel Leu
ParticipantTo get the comparison to work, you need to get the numerical representation of the date. Additionally, the date object needs to set to the beginning of the day to properly detect a prior date.
function Delete_Expired_Docs() { var records = form.getRecords(); var field_id = 'fld-xxx'; // Get time in ms at beginning of today let now = new Date(); now.setSeconds(0); now.setMinutes(0); now.setHours(0); now.setMilliseconds(0); const today = now.getTime(); for (var index = 0, count = records.length; index < count; index++){ var aRecord = records[index]; var field_value = aRecord.getFieldValue(field_id); if (field_value.getTime() < today) { //form.deleteRecord(aRecord); console.log("found record"); } else { console.log("record doesn't match"); } } form.saveAllChanges(); } Delete_Expired_Docs();
BTW, I don’t like deleting records… I would just mark a record as ‘expired’. But that depends really on your data model.
November 26, 2022 at 4:32 AM #48313Topic: Date comparison
in forum Script TalkIan Wheeler
ParticipantHi Folks,
I am trying to check via a script whether a Date field contains a date that is earlier than today. If it is then I want to delete the record. Ideally this would be a manually run script. I am very new to TF (and loving it, and am in the process of migrating over from Filemaker) and Javascript. Below is the script that I have which just doesn’t work. I suspect it is my Date comparison element that is the problem as the Console.Log isn’t detecting any errors, but I don’t know how to fix it. Any help would be greatly appreciated
function Delete_Expired_Docs() { var records = form.getRecords(); var field_id = 'fld-46f16c00d13344e79478a8b629022ee7'; for (var index = 0, count = records.length; index < count; index++){ var aRecord = records[index]; var field_value = aRecord.getFieldValue(field_id); if (field_value < Date()) { form.deleteRecord(aRecord); } } form.saveAllChanges(); console.log(field_value); console.log(count); console.log(Date()); } Delete_Expired_Docs();
September 28, 2022 at 12:48 PM #48041In reply to: Increase a number by a percentage
Jake Gregory
ParticipantThank you for your response Brendan, I decided to have a bash on my own – not much luck though lol
However I have managed to rather clumsily get it working from the code you provided.
function Update_Prices() {var group_1_id = 'fld-0305473a4c7e41f69ee491266c99ec03';
var group_2_id = 'fld-93197576ce50421599626d9ccacff2f5';
var group_3_id = 'fld-ec93413e3880425da973d35d93b99595';
var group_4_id = 'fld-cd36a8501faf45408cd88e607e0bc4e1';var records = form.getRecords();
var price_increase_percent = 0.12;for (var index = 0, count = records.length; index < count; index++){
var rec = records[index];var g1_current_price = rec.getFieldValue(group_1_id);
var g2_current_price = rec.getFieldValue(group_2_id);
var g3_current_price = rec.getFieldValue(group_3_id);
var g4_current_price = rec.getFieldValue(group_4_id);var g1_new_price = g1_current_price + g1_current_price * price_increase_percent;
var g2_new_price = g2_current_price + g2_current_price * price_increase_percent;
var g3_new_price = g3_current_price + g3_current_price * price_increase_percent;
var g4_new_price = g4_current_price + g3_current_price * price_increase_percent;rec.setFieldValue(group_1_id, g1_new_price);
rec.setFieldValue(group_2_id, g2_new_price);
rec.setFieldValue(group_3_id, g3_new_price);
rec.setFieldValue(group_4_id, g4_new_price);}
form.saveAllChanges();}
Update_Prices();
I’m sure there’s a much better way to do this, but I’ll get there.
I want to add a prompt box that asks for a user input for a percentage and then have a confirmation box ask them to confirm.
I’m currently exploring the prompt options and I’m sure I’ll have more questions later lol
Thanks again for your replies.September 28, 2022 at 11:10 AM #48040In reply to: Increase a number by a percentage
Brendan
KeymasterHi Jake,
I replied to your email about this topic, but I’ll reply here too with the code I wrote for you in case anyone else needs this type of code:
function Update_Prices() { var price_field_id = 'fld-.....'; var records = form.getRecords(); var price_increase_percent = 0.05; for (var index = 0, count = records.length; index < count; index++){ var rec = records[index]; var current_price = rec.getFieldValue(price_field_id); var new_price = current_price + current_price * price_increase_percent; rec.setFieldValue(price_field_id, new_price); } form.saveAllChanges(); } Update_Prices();
September 1, 2022 at 10:56 PM #47893In reply to: Table : Copy records from
John Cranney
ParticipantIt does make sense, thanks.
I was trying to get it to work using a script and I think I found some odd behaviour.
Say I have a linked form (stuff_link_id) and a table that I want to display a view of records in that table (stuff_table_id). If I click the checkmark button as you mention above, I get a copy of the selected stuff_link record in my table, with values magically populated.
However if I run the following (which I was hoping would populate the table with a view of whatever is linked in link) it deletes the record from link and moves it to table. Is that intentional? I expected it would do the same magic population. I’ve got a workaround which is to use duplicate() but I need to manually set all the columns.
var records=form.getRecords();
for (var rec of records){
for (var stuff_rec of rec.getFieldValue(stuff_link_id)) {
rec.addRecordToField(stuff_rec,stuff_table_id);
}
}document.saveAllChanges();
June 3, 2022 at 1:38 AM #47426In reply to: Searching for a record using URL scheme or script
David Gold
ParticipantI’ve had a go at some Javascript but can’t get it to work. Basically I want it to take a search term off the clipboard, do a search and get the record ID for the found item and then copy that to the clipboard. It isn’t working so could someone tell me what I have done wrong?
var myForm = document.getFormNamed(‘Scopus RE’);
var records = myForm.getRecords();
var search_term = Utils.copyTextFromClipboard();
var result_count = 0;
var results = [];
var selected;function search_records( haystack , needle ) {
var name_id = ‘fld-90984efc3585456ab56763adff0a5228’;
var rec;for (const rec of haystack) {
if ( rec.getFieldValue( name_id ).toLowerCase().includes( needle.toLowerCase() ) ) {
results.push( { name: rec.getFieldValue( name )
} );
result_count++;
}}
if( result_count == 0 ){
console.log( ‘No results found!’ );
}else if( result_count > 1 ){
multiple_results();
}else{
copy_record.getId( results[0] );
}}
May 31, 2022 at 8:05 PM #47414Daniel Leu
ParticipantI would use something like this:
if (typeof search !== 'undefined'){ var records = search.getRecords(); } else { var records = form.getRecords(); }
This doesn’t address the corner case where
search
exists but doesn’t contain any records, egrecords.length == 0
.I wouldn’t use
record
invar record = ...
since that is a predefined value.May 31, 2022 at 5:22 PM #47413Topic: Recordset from Search or Form for Random Record script
in forum Script TalkDavid Schwane
ParticipantI have this script that returns a random record regardless if I’m on a form or a saved search. Works great but I know using try catch this way is not correct. What is a better way to resolve if I’m trying to get a form recordset or search recordset?
Random_Record();
try {
var records = search.getRecords();
}
catch (err) {
var records = form.getRecords();
}
var record = records[Math.floor(Math.random() * records.length)];
form.selectRecord(record);
May 17, 2022 at 7:36 PM #47360In reply to: Difference in Value from one record to the next
Brendan
KeymasterTry this:
function Diff_Calc() { let records = form.getRecords(); let value_id = 'fld-ee301521ec6549aa9a657a0b457a3e5e'; let difference_id = 'fld-816a0c97ff40447d9e13fb14d3dfc912'; let first_rec = records[0]; var prev_value = first_rec.getFieldValue(value_id); if (prev_value == undefined) { prev_value = 0; } first_rec.setFieldValue(difference_id, 0); for (var index = 1, count = records.length; index < count; index++){ let rec = records[index]; var value = rec.getFieldValue(value_id); var diff = value - prev_value; rec.setFieldValue(difference_id, diff); prev_value = value; } form.saveAllChanges(); } Diff_Calc();
May 10, 2022 at 7:18 PM #47271In reply to: Creating a dictionary
Goutalco
ParticipantHello everybody,
Since the number of dictionaries is significant the import of images for every page of the dictionary blows up my Tap Forms 5 document to a size > 40 GB. So I opted for the second option, i.e. searching for a root and opening the dictionary as a PDF file.
The solution suggested by Brendan by setting up a Website Address field which when clicked will launch the default PDF Viewer was not working for me. I got the following Error:
The application “Tap Forms 5” does not have permission to open “Test.pdf.”
So I found another solution which opens the PDF Viewer via a form script and tells the default PDF viewer to open the dictionary on the page that contains the term searched by the user.
In case anybody is confronted with a similar problem, i.e. searching for alphabetically arranged items in PDF files, I share my script.
var root; var user_input = function Show_Page(ok) { if (ok == true) { // Variable for the record searched by root var page_for_root; // Getting the pages (records) of the dictionary var pages = form.getRecords(); // Getting the id of the field that takes the // first root present on a page var root_1_id = 'fld-8ab2fc88535e49dbb60df845f4157590'; // Getting the id of the field that takes the last root // present on a page var root_2_id = 'fld-fa1b6724b80f4780b1779ab4ef098c75'; // Looping through the pages for (var index = 0, count = pages.length; index < count; index++){ // Getting the first root present the current page var root_1 = pages[index].getFieldValue(root_1_id); // Getting the last root present the current page var root_2 = pages[index].getFieldValue(root_2_id); // Compare root to root_1 and root_2 var compare_1 = root_1.localeCompare(root, 'ar') var compare_2 = root_2.localeCompare(root, 'ar') // Try to get the first page that contains root // and leave the loop in this case if (compare_1 <= 0 && 0 <= compare_2) { page_for_root = pages[index]; break; } } // If there is at least one page that // contains root, show the first one if (!(page_for_root === undefined)) { // Getting the URI for the dictionary // file (with appropriate page number) // stored in DevonThink var devon_id = 'fld-16ada2521a864aae8646222a6661a422'; var devon = page_for_root.getFieldValue(devon_id); // Open the dictionary on the the requested page Utils.openUrl(devon); // Go to the page (record) of the dictionary // in Tap Forms 5 form.selectRecord(page_for_root); } else { console.log("Root not found"); } } else { console.log("Cancel button pressed."); } } function Search_Dic() { let prompter = Prompter.new(); prompter.cancelButtonTitle = 'Cancel'; prompter.continueButtonTitle = 'OK'; prompter.addParameter('Root: ', 'root') .show('Dictionary', user_input); } Search_Dic();
May 8, 2022 at 2:17 PM #47236In reply to: Creating a dictionary
Goutalco
ParticipantThank you Brendan,
I converted all my dictionaries to images and using your hint I successfully imported these images to my document via a CSV file. This part was quite straightforward.
Now I like to create a search inside a form script via the Prompter class and since my understanding of JavaScript is at best rudimentary I really appreciate any comment to the script that I was able to generate using the help file.
var root; var user_input = function printOut(continued) { if (continued == true) { var page_for_root; // Getting the pages of the dictionary var pages = form.getRecords(); // Getting the id of the field that takes the first root present on a page var root_1_id = 'fld-e724350c999d4fddafc12d258d407a3c'; // Getting the id of the field that takes the last root present on a page var root_2_id = 'fld-a01b915c72904b2caba68eb8c2657055'; for (var index = 0, count = pages.length; index < count; index++){ // Getting the first root present the current page var root_1 = pages[index].getFieldValue(root_1_id); // Getting the last root present the current page var root_2 = pages[index].getFieldValue(root_2_id); // Compare the root the user is searching for to root_1 and root_2 var compare_1 = root_1.localeCompare(root, 'ar') var compare_2 = root_2.localeCompare(root, 'ar') // Try to get the first page that contains root and // leave the loop in this case if (compare_1 <= 0 && 0 <= compare_2) { page_for_root = pages[index]; break; } } // If there is at least one page that contains root, show the first one if (!(page_for_root === undefined)) { form.selectRecord(page_for_root); } else { console.log("Root not found"); } } else { console.log("Cancel button pressed."); } } function Search_For_Root() { let prompter = Prompter.new(); prompter.cancelButtonTitle = 'Cancel'; prompter.continueButtonTitle = 'OK'; prompter.addParameter('Root: ', 'root').show('Enter a root', user_input); } Search_For_Root();
Thank you for your patience.
Cheers
-
This reply was modified 2 years, 11 months ago by
Goutalco.
Attachments:
You must be logged in to view attached files. -
This reply was modified 2 years, 11 months ago by
-
AuthorSearch Results