Search Results for 'form.getRecords'
Tap Forms – Organizer Database App for Mac, iPhone, and iPad › Forums › Search › Search Results for 'form.getRecords'
-
AuthorSearch Results
-
March 10, 2023 at 9:36 AM #49127
In reply to: A more efficient way to perform this function?
Daniel Leu
ParticipantRe: Form script:
You just need to loop over all your records and then assign the values on each one:
function wc_attributes_update() { // definitions var year_id = 'fld-bcf37649c9ee4332b7100a9589110f96'; .... for (rec of form.getRecords()){ rec.setFieldValue(attribute_3_value_s_id, model); rec.setFieldValue(attribute_4_value_s_id, gauge); rec.setFieldValue(attribute_5_value_s_id, container); rec.setFieldValue(attribute_6_value_s_id, era); rec.setFieldValue(attribute_7_value_s_id, railroad); rec.setFieldValue(attribute_8_value_s_id, brand); rec.setFieldValue(attribute_9_value_s_id, collection); rec.setFieldValue(attribute_10_value_s_id, tca_grade); } form.saveAllChanges() } wc_attributes_update();
This example works on all the records. If you only want to update the ones from a saved search, you might use
form.getSearchNamed('Genre: Action & Adventure')
.March 6, 2023 at 1:34 PM #49097In reply to: Simple previous
Daniel Leu
ParticipantI don’t really understand what you would like to calculate. But here are my 2 cents:
You get the error:
> “Tot$/dwr: ReferenceError: Can’t find variable: previousRecord_total, line:(null)”
because the variable previousRecord_total is not defined. It should bepreviousTotal
and the statement should be a line lower.> var previous_total = previousRecord.getFieldValue($_grp);`
getFieldValue() needs a field id and not a value.For the previous calculation, the field id is the id of the script. You can get it from the form inspector panel > field > select field and look for the ID under the description section.
I would change as well how the first initial value for
currentRecordIndex == 0
is handled:var previous_total = 0; if (currentRecordIndex > 0) { var previousRecord = records[currentRecordIndex-1]; previous_total = previousRecord.getFieldValue(totalId); }
Now
previous_total
is initialized to 0. If there is an earlier record, it is set accordingly.With these changes, my field script now looks like this:
function Add_Previous() { var $_dwr = record.getFieldValue('fld-c1faad7124f8400bbf9e55c477b101ef'); var $_grp = record.getFieldValue('fld-72156bcc2515453d80a4649d30cb938f'); var totalId = 'fld-9bc44cd8a52547fcab897dbfa04afcc2'; var records = form.getRecords(); // calls function getRecords() var currentRecordIndex = records.indexOf(record); var previous_total = 0; if (currentRecordIndex > 0) { var previousRecord = records[currentRecordIndex-1]; previous_total = previousRecord.getFieldValue(totalId); } console.log("dwr: " + $_dwr); console.log("grp: " + $_grp); console.log("previous total: " + previous_total); var total = $_dwr + previous_total; console.log("Total: " + total); return total; } Add_Previous();
Hope this helps!
February 20, 2023 at 8:55 PM #48974In reply to: days between dates
Daniel Leu
ParticipantI got several errors when I tried to run your code. This touched-up version works for me:
var date_id = 'fld-xxx'; function Days_Between_Dates(){ console.log("Days_Between_Dates() called ..."); var days = -1; var records = form.getRecords(); // calls function getRecords() var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousRecord = records[currentRecordIndex-1]; } else { return -1; } // get the two dates const today = record.getFieldValue(date_id); const previous_day = previousRecord.getFieldValue(date_id); // calculate the difference between the two date objects days = Math.round((today - previous_day) / (1000 * 60 * 60 * 24)); console.log("today: " + today) console.log("previous day: " + previous_day) console.log("difference: " + days) return days; } Days_Between_Dates()
In Javascript, the
Date
object represents the time in milliseconds since January 1, 1970, UTC. So the difference needs to be divided by milliseconds-per-day.I changed the return value to
-1
for the first record.When reporting a syntax error, it’s helpful to have the entire message.
When posting code, please encapsulate it in back-ticks. This way it is easier to copy&paste it and it looks prettier. Thanks!
Cheers & happy hacking!
-
This reply was modified 2 years, 1 month ago by
Daniel Leu.
February 20, 2023 at 7:12 PM #48971In reply to: days between dates
Glen Forister
ParticipantOk, Tried that.
End result = Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
Days_Between_Dates()
2/20/23, 6:24:40 PM / Psoriasis / Days since last Trt.
Days_Between_Dates()
Days since last Trt.: ReferenceError: Can’t find variable: previousRecord, line:(null)I’ve done lots of Basic, some Pascal, and some R in the past, but this is very different and I’m lost. Went through the basic training, but still new. It will take lots of experimenting and work to get to where I need to be to fix this. In time I will I hope, but still in the process of making TF usable to me before I branch off into another programming language.
PS, Have no idea what the “called…” after in the Console.log statement does. I just get a syntax error.
function Days_Between_Dates(){
console.log(“Days_Between_Dates()”);
var date_id = (‘fld-119ad5683104451ca6855e777a23ad21’);var records = form.getRecords(); // calls function getRecords()
var currentRecordIndex = records.indexOf(record);if (currentRecordIndex > 0) {
var previousday = records[currentRecordIndex-1];
} else {
return 0;
}var today = record.getFieldValue(date_id);
var previous_day = previousRecord.getFieldValue(date_id);
var total = today – previousday;console.log(“today: “)
console.log(“previousday: “)
console.log(“total: “)return total;
}
Days_Between_Dates()Thanks for looking, but…
-
This reply was modified 2 years, 1 month ago by
Glen Forister.
February 20, 2023 at 11:42 AM #48962In reply to: days between dates
Glen Forister
ParticipantI added that. It just prints to the screen after every recored looked at I guess. I don’t get it.
There aree 26 records.Here is the result.
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
Days_Between_Dates() called …
2/20/23, 10:38:59 AM / Psoriasis / Days since last Trt.
Days_Between_Dates() called …
————-function Days_Between_Dates(){ var date_id = ('fld-119ad5683104451ca6855e777a23ad21'); var records = form.getRecords(); // calls function getRecords() var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousday = records[currentRecordIndex-1]; } else { return 0; } var today = record.getFieldValue(date_id); var previous_day = previousRecord.getFieldValue(date_id); var total = today - previousday; console.log("today: ") console.log("previousday: ") console.log("total: ") return total; } function Days_Between_Dates(){ console.log("Days_Between_Dates() called ..."); } Days_Between_Dates();
-
This reply was modified 2 years, 1 month ago by
Glen Forister.
-
This reply was modified 2 years, 1 month ago by
Brendan.
February 19, 2023 at 10:20 AM #48954In reply to: days between dates
Glen Forister
ParticipantOk, missed that.
But I got all the syntax cleared and this script does nothing, not even printing to console the variable values. So I’ve proved I haven’t learned anything yet.
Any ideas?
Thanks.function Days_Between_Dates(){ var date_id = ('fld-119ad5683104451ca6855e777a23ad21'); var records = form.getRecords(); // calls function getRecords() var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousday = records[currentRecordIndex-1]; } else { return 0; } var today = record.getFieldValue(date_id); var previous_day = previousRecord.getFieldValue(date_id); var total = today - previousday; console.log("today: ") console.log("previousday: ") console.log("total: ") return total; }
-
This reply was modified 2 years, 1 month ago by
Glen Forister.
February 18, 2023 at 12:20 PM #48948Topic: days between dates
in forum Script TalkGlen Forister
ParticipantI did some study and tried to determine the #days between the date of one record and the previous record. I can’t get past line one syntax. Help please?
Function Days_Between_Dates(){ var date_id = 'fld-119ad5683104451ca6855e777a23ad21'); var records = form.getRecords(); // calls function getRecords() var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousday = records[currentRecordIndex-1]; } else { return 0; } var today = record.getFieldValue(date_id); var previous_day = previousRecord.getFieldValue(date_id); var total = today - previousday; return total; }
February 16, 2023 at 11:57 AM #48934In reply to: Repurpose previous record scipt
Daniel Leu
ParticipantYou need to select ‘script’ and not ‘calculation’ for the field type, return type is ‘number’.
The script had some errors too like incorrect field ids.
function Season_to_date() { var date_id = 'fld-e2d20da877cb4a6c8fd72153b86f1ab1'; var donation_id = 'fld-05c429d6a4484061b554aa584a45f8fc'; var total_id = 'fld-7c6b9bb288ab47e0b295af6eacc9cd26'; 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(date_id); if (date.getMonth() == 0 && date.getDate() == 1){ return 0; } var today = record.getFieldValue(donation_id); var previous_total = previousRecord.getFieldValue(total_id); var total = today + previous_total; console.log("Today: " + today) console.log("Previous: " + previous_total) console.log("Total: " + total) return total; } Season_to_date();
February 16, 2023 at 10:34 AM #48932In reply to: Repurpose previous record scipt
Glen Forister
ParticipantI did have a record that had no data, date or values. Deleted that. Also made sure my added records for Jan 1 had the value = 0 for donations (that field was empty).
Now the script runs without errors with the original lines, or those lines replaced with the above correction for undefined.But, all my records have nothing in the Totals value. All blank.
I checked the script window and the value = number. Also the field Total is calculated and that value = decimal with zero decimal places.
Stopped the program, loaded it again and brought up the Form and refreshed it many times and no totals show up.
Is there a way to do this?
Thanks. Code below just so you know what I’m working with.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 != undefined && date.getMonth() == 0 && date.getDate() == 1){ } // 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();
I just ran it again to verify and I get using one statement:
2/16/23, 9:26:49 AM / Donations / Yearly
Yearly: TypeError: undefined is not an object (evaluating ‘date.getMonth’), line:(null)The other statement gives me:
2/16/23, 9:29:25 AM / Donations / Yearly
Today: undefined
Previous: undefined
Total: NaNI’m really confused. Don’t know what is going on.
Here is my file.
I would like to see my donations for any single year that I can see with a search view.
I have a script in the Total Field and a similar one (maybe different now) in the Script designer field.Attachments:
You must be logged in to view attached files.February 15, 2023 at 6:26 PM #48925In reply to: Repurpose previous record scipt
Daniel Leu
ParticipantYou still need to reset the year-to-date field at the beginning of the year.
if (date.getMonth() == 9 && date.getDate() == 1){ return 0; }
Needs to be
if (date.getMonth() == 0 && date.getDate() == 1){ return 0; }
The function should look like this:
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();
And again, this only works if there is a record for January 1st.
February 15, 2023 at 5:43 PM #48921In reply to: Repurpose previous record scipt
Glen Forister
ParticipantThat didn’t help. I get error in line 16 and playing with that I’m not sure where I’m at.
Added a backtick char.Here is the code I was using for my rain totals, but the rain season was from Oct 1 to Sept 31 of each year which required a loop I think to check for the end of the season. Since for this purpose, the year I’m grouping is for the tax year Jan 1 to Dec 31. So, didn’t think I needed the search for Oct 1 date. I thought if I took out that portion that this script would do the job of letting me see all years worth of donations and set up a view of only one specific year and see donations starting at 0 and adding up the amounts until Dec 31. Seemed simple.
This is the Rain script, so I assume I have to replace the id code like this (‘fld-0720a5baa6fc4980aee22798bd089714) with the id code for the field I want in my donation form.
So, do I have to start over or can I use this code with the correct changes. Sorry, thought this would be easy. Hopeful and thank you.
================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() == 9 && 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();
-
This reply was modified 2 years, 2 months ago by
Glen Forister.
February 15, 2023 at 3:32 PM #48912Topic: Repurpose previous record scipt
in forum Script TalkGlen Forister
ParticipantThanks for the script for rain totals. Now I figure I can make that do the same for donations. Am I on the right track? I keep getting syntax errors or other errors trying to get the syntax right. Am I way off track? Attached is my screen shot. I can’t seem to get the {} deletions right.
– I deleted the “beginning of the year” section.
– Replaced the variables “today” & “previous_total” ID values with the ones appropriate for my form. Now it looks like this.function Season_to_date() { var records = form.getRecords(); var currentRecordIndex = records.indexOf(record); if (currentRecordIndex > 0) { var previousRecord = records[currentRecordIndex-1]; } else { return 0; // xx = line deleted xx } xx // Is this the beginning of the year? xx var date = record.getFieldValue('fld-0720a5baa6fc4980aee22798bd089714'); xx if (date.getMonth() == 9 && date.getDate() == 1){ xx return 0; } var today = record.getFieldValue('xxxxx'); //replaced val with my value from form var previous_total = previousRecord.getFieldValue('fld-xxxxx'); //replaced val with my value from form var total = today + previous_total; console.log("Today: " + today) console.log("Previous: " + previous_total) console.log("Total: " + total) return total; } Season_to_date();
-
This topic was modified 2 years, 2 months ago by
Brendan. Reason: Added back ticks around code -- Brendan
Attachments:
You must be logged in to view attached files.February 5, 2023 at 5:40 PM #48845In reply to: Result from one field in another field – same form
Daniel Leu
ParticipantOne cool feature in TF is that picklist entries can come from a form. So I have a form called ‘Brands’ that contains name and URL fields. I select this form to be the source of my picklist. Then in my main form, I use that picklist to select the brand. Further, I use a field script ‘URL Script’ to set the value of the URL field. The field script is triggered whenever a different brand is selected and then the URL field is updated accordingly.
When the script is triggered, it fetches all entries of the ‘Brands’ form and loops through them. Once a match is found, the URL field is set according to that matching record entry and the script aborted:
function Url_Script() { var brand_id = 'fld-feb500eed99747169d8d90db3a620243'; var url_id = 'fld-0a342472ca0b44b1a52c3758c5be92e4'; const brands_name_id = 'fld-8d373c0912154c69a7f579e696cd598c'; const brands_url_id = 'fld-0a342472ca0b44b1a52c3758c5be92e4'; let brand = record.getFieldValue(brand_id); // get the brands form. Note that the name of the form must match! let brandsForm = document.getFormNamed("Brands"); for (let rec of brandsForm.getRecords()){ if (rec.getFieldValue(brands_name_id) == brand){ let url = rec.getFieldValue(brands_url_id); console.log("found match: " + brand) + " with url " + url); record.setFieldValue(url_id, url); document.saveAllChanges(); return url; break; } } } Url_Script();
Hope this is what you were looking for. I have attached my example document.
Attachments:
You must be logged in to view attached files.January 18, 2023 at 10:46 PM #48715In reply to: List with Check box
Brendan
KeymasterThe
Advanced Find & Replace
function is under the Records menu on the Mac version.There’s a script snippet called
Basic Loop
which just sets up a loop. But you would have to fetch the records first withvar records = form.getRecords();
and then get each record within the loop and then set the value of the field using therecord.setFieldValue(some_checkmark_field_id, 0);
function. The 0 would set the checkmark field value back to off.Don’t forget to do a
form.saveAllChanges();
outside of the loop at the end before the program ends so Tap Forms can save the values.This Form Script will reset all the checkmark fields for your
Shield
field back to OFF:function Reset_Shields() { var shield_id = 'fld-d13c2bafe6e8482288c551bd8c931373'; var records = form.getRecords(); for (var index = 0, count = records.length; index < count; index++){ var theRec = records[index]; theRec.setFieldValue(shield_id, 0); } form.saveAllChanges(); } Reset_Shields();
January 16, 2023 at 3:55 PM #48679In reply to: Learning JavaScript
Daniel Leu
Participantfunction 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() == 9 && 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();
-
This reply was modified 2 years, 1 month ago by
-
AuthorSearch Results