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 - 661 through 675 (of 3,053 total)
  • Author
    Search Results
  • #49250
    smartin
    Participant

    We gave it a try at coding and came up with what I will paste below. Unfortunately we’re getting a Syntax Error —> Permute_Short_Prints: SyntaxError: Unexpected end of script, line:78

    note: line 78 is the final line of the code.

    here’s the code. thanks to anyone looking it over and feeding back where we’ve gone wrong!

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    
    // Here goes nothing! We're going to try some Tap Forms Java to make a permutation of short print variants in our 2022 Topps Series One Form;
    // First we will define the Short Print field Id's from this Short Print Form with the following variable names using the const instruction;
    
    		const shortPrintId = form.getFieldNamed("Short Print").getId();
    		const superShortprintId = form.getFieldNamed("Super Short Print").getId();
    		const ultraShortprintId = form.getFieldNamed("Ultra Short Print").getId();
    
    // We'll call this script the Permute_Short_Print;
    // I don't know if this is where the function instruction should be placed, but here it is;
    
    function Permute_Short_Prints() {
    
    // These variables probably can (should?) be declared here outside of the search Loop (I think);
    // "2022 Topps Series 1" is another Form in the database with a full checklist of available cards (minus all of the permutations of variants);
    
    		const seriesOne = document.getFormNamed("2022 Topps Series 1");
    		let seriesOneRecord = seriesOne.addNewRecord();
    
    // Now we'll Loop over the fields in the Short Print Form. This script will be placed at the Short Print Form level using script button;
    		
    	for (field of form.getFields()){
    
    		// We'll define these variables inside of the Loop. Not sure if it has to happen this way, but seems right.
    			let seriesOneFieldId=seriesOne.getFieldNamed(field.name).getId();			let seriesOneShortPrintId=seriesOne.getFieldNamed("Short Print");
    			let shortPrint = getFieldValue(shortPrintId);
    			let superShortPrint = getFieldValue(superShortPrintId);
    			let ultraShortPrint = getFieldValue(ultraShortPrintId);
    				
    			// This one additional variable will be used to set a flag in the seriesOne Table to sort for scripted entries (in case we need that later)
    			let seriesOneScriptAutoEntryId=seriesOne.getFieldNamed("Script Auto Entry");
    				
    				
    		// IF NUMBER 1 -- This first If Statement will create a record in the seriesOne Form for short prints called "SP";
    				if (shortPrint = "SP") {
    				// true condition;
    					seriesOneRecord.setFieldValue(seriesOneFieldId, record.getFieldValue( field.getId()));
    					seriesOneRecord.setFieldValue(seriesOneShortPrintId, record.getFieldValue(shortPrint));
    					seriesOneRecord.setFieldValue(seriesOneScriptAutoEntryId, "Y");				} else {
    				// false condition is to just move on;
    					continue;
    				}
    	
    		// IF NUMBER 2 -- This second If Statement will create a record in the seriesOne Form for short prints called "SSP", or SUPER short prints;
    				if (superShortPrint = "SSP") {
    				// true condition;
    					seriesOneRecord.setFieldValue(seriesOneFieldId, record.getFieldValue( field.getId()));
    					seriesOneRecord.setFieldValue(seriesOneShortPrintId, record.getFieldValue(superShortPrint));
    					seriesOneRecord.setFieldValue(seriesOneScriptAutoEntryId, "Y");				} else {
    				// false condition is to just move on;
    					continue;
    				}
    	
    		// IF NUMBER 3 -- This third If Statement will create a record in the seriesOne Form for short prints called "USP", or ULTRA short prints;
    				if (superShortPrint = "USP") {
    				// true condition;
    					seriesOneRecord.setFieldValue(seriesOneFieldId, record.getFieldValue( field.getId()));
    					seriesOneRecord.setFieldValue(seriesOneShortPrintId, record.getFieldValue(ultraShortPrint));
    					seriesOneRecord.setFieldValue(seriesOneScriptAutoEntryId, "Y");				} else {
    				// false condition is to just move on;
    					continue;
    				}
    		
    		// save 
    		seriesOne.saveAllChanges();
    
    // ...and we are done!;
    
    }
    
    Permute_Short_Prints();
    

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    • This reply was modified 3 years ago by Brendan. Reason: Added back-ticks to the code
    #49245
    Ronald Kroeker
    Participant

    Daniel, Thanks for your patience.
    You were correct I had a typo 😔…I had written
    “CONCAT((Date[Date];yyyy-MMM-dd);[Name field])”
    I had bracket in wrong order and forgot quotes.
    Thanks again for the assistance.
    P.S. What is the correct formatting for long date?
    You had used yyyy-MMM-dd but would like to display full date? Haven’t ventured into scripting yet but will once I have finished my transition with tapforms.

    #49227
    Charlie
    Participant

    Daniel Thanks for the script. I have linked fields that don’t show up as they do on the computer. Even if i make a pdf the field don’t show the linked form. So at the moment i’m stuck. But thanks for support Daniel

    #49203
    Daniel Leu
    Participant

    Yeah, you could write a script or use the calculation field to strip “A “, “An “, or “The ” from the title string. The script or calculation would then return the shortened title on which you could perform your search.

    Using calculation seems to be a bit more complicated than using a script:

    function Stripped_Title() {
    	// Define Id of title field
    	const title_id = 'fld-dec6b20e27d343e181e37a813624b467';
    	let title = record.getFieldValue(title_id);
    
    	// Check for "A "
    	if (title.toLowerCase().substr(0,2) == "a "){
    		return title.substr(2)
    	}	
    
    	// Check for "An "
    	if (title.toLowerCase().substr(0,3) == "an "){
    		return title.substr(3)
    	}	
    	
    	// Check for "The "
    	if (title.toLowerCase().substr(0,4) == "the "){
    		return title.substr(4)
    	}
    }
    
    Stripped_Title();
    

    I don’t know if all your titles start with an uppercase character. So I translate them to lowercase to catch “a”, “an” and “the” as well. Good luck!

    • This reply was modified 3 years, 1 month ago by Daniel Leu.

    Cheers, Daniel

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

    #49202
    Susan Chute
    Participant

    Hello there,
    I just want to say I am enjoying this database, which has solved many problems I previously had with LibreBase. I posted a good review in the Apple Store. It seems very robust. I’m not up to scripting in JavaScript yet (after all, I just finished learning SQL in the W3school for LibreBase). So my question is, I have a big database of poems. I want to sort it by title, but for the sort to ignore A, An and The. I know that you could probably write a script, but as of yet I don’t know how (start after 1st 2, 3, or 4 characters, maybe, is part of it?). Can you explain? or is there an easier way?
    Thanks for TapForms! Yay!

    #49178
    Charlie
    Participant

    is their a script to do what Brecht ask for? It would be much easier than Mail PDF and do it manually.

    #49165

    In reply to: Email Record?

    Glen Forister
    Participant

    Just look at in plain text. Like I’m talking with a person and telling them about a book – email him the record so he can find it.

    Or, I need to copy a record from one form to another. Can’t be done apparently without so much Script my head swims. So if I can email it to myself, at least I can copy and paste from my email to the other form.

    Thanks.

    #49163

    In reply to: Email Record?

    Glen Forister
    Participant

    I don’t want to email a record based on anything except the record I am looking at on my screen. I just want to email the record I am in and no other. This would have to be a Script that would work on any Form and send all the fields of that one record.

    I would also like it to work on my laptop as well as my iPhone.

    You say “Just email it as normal”. Do I copy the record? I don’t see a way to do that.

    Any ideas how this can be created?
    Thanks.

    #49159
    Glen Forister
    Participant

    Since I haven’t finished my training yet (http://www.asmarterwaytolearn.com/js/) I haven’t utilized your suggestion about copying a record from one Form to another Form.

    Instead of running a script to copy one record to a different form, I looked for something I used all the time in my old database but couldn’t find.

    Can go into a record on my iPhone and email that single record in text or html format to someone? This has been extremely useful for me in the past.

    I saw a recent Script discussion about emailing a record if it was a certain date, but it was way over my head and more complicated than just emailing the current record including all its fields with the field names?

    Any hints to do this?
    Thanks.

    #49127
    Daniel Leu
    Participant

    Re: 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').

    Cheers, Daniel

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

    #49126
    Kirk Williams
    Participant

    <p>
    Does WooCommerce have a REST API? Maybe as you edit your data in Tap Forms, a script can use the Utils. postContentToUrlWithContentType() or Utils.postJsonToUrl() functions.
    </p>

    This is an interesting question, one that I’d need to investigate. I suspect there numerous APIs for WordPress in general; that would be the most likely point of entry for any transactional functions between TapForms & WooCommerce. I won’t lie, though – it already sounds like a project that is well beyond by coding expertise!

    <p>
    To avoid the refreshing issue, maybe instead of using a Field Script, use a Form Script and have it loop through your records, updating the exportable fields with the values from the regular fields. So when you’re going to export, just run the script first. Then it won’t be interrupting you while you edit the records.
    </p>

    Yes, this is precisely what I’ve been working on, but thus far have not been able to create with any success. Your suggestion that such a function is indeed possible is more than enough motivation for me to take another crack at it.

    Thank you for the suggestions!!!

    #49125
    Kirk Williams
    Participant

    Thanks for the suggestion Daniel!

    I know WC accepts CSV and XML; I feel like I’ve seen references to text imports but I’d have to dig into the documentation to confirm. Since it’s within the WordPress environment, I imagine there’s likely some security components that would prevent text-based script imports, but I may be able to circumvent those by tweaking the php settings. It’s an interesting angle – thanks!

    #49120
    Brendan
    Keymaster

    Does WooCommerce have a REST API? Maybe as you edit your data in Tap Forms, a script can use the Utils. postContentToUrlWithContentType() or Utils.postJsonToUrl() functions.

    To avoid the refreshing issue, maybe instead of using a Field Script, use a Form Script and have it loop through your records, updating the exportable fields with the values from the regular fields. So when you’re going to export, just run the script first. Then it won’t be interrupting you while you edit the records.

    #49119
    Daniel Leu
    Participant

    To duplicate a field value I would use a calculation field. You just have to pay attention to use the correct return type.

    Another option I could imagine is creating the CSV from a form script. Once done, copy it to the clipboard with Utils.copyTextToClipboard(). I don’t know if you directly can use the copied text in WooCommerce. If you need a file, then maybe use an AppleScript that calls your TF script to get the data and then saves them to a file. But that’s getting a bit more complicated.

    Cheers, Daniel

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

    #49118
    Kirk Williams
    Participant

    Greetings!

    I have a form that contains a database of products that are exported to a WooCommerce site. Each item has a number of “attribute” fields that are included when exporting the record data.

    The problem I was attempting to solve with the script below is that WooCommerce requires specific titles for CSV columns. I initially named my fields to correspond with the export requirements but quickly found that having to remember that “Attribute 5” equals “Model”, etc. was too cumbersome.

    My first crack at a workaround was to rename my fields with logical identifiers, then use MS Excel to rename the exported columns to the terms required by WooCommerce. This worked but still felt like an unnecessary extra task.

    I then concocted this script that essentially involves duplicate fields within TapForms itself. One column is named logically (ex: “Model”), while the duplicate is named to accommodate the WooCommerce import requirements (ex: “Attribute 5”). Obviously, the data in both fields need to be identical, so I’m using this script to automatically update certain fields whenever its corresponding field is modified:

    function wc_attributes_update() {

    var year_id = 'fld-bcf37649c9ee4332b7100a9589110f96';
    var year = record.getFieldValue(year_id);
    var manufacturer_id = 'fld-17e5cb32753f43eea332701c2587d2d6';
    var manufacturer = record.getFieldValue(manufacturer_id);
    var model_id = 'fld-81bfab5a547e4c59a46fb5c3fb795fbc';
    var model = record.getFieldValue(model_id);
    var gauge_id = 'fld-28d551114d734843a0e64680575e991e';
    var gauge = record.getFieldValue(gauge_id);
    var container_id = 'fld-b0c7a9bbb57a40a891c659346fa63ae0';
    var container = record.getFieldValue(container_id);
    var era_id = 'fld-0101387087f044ddb402ae2111b2a854';
    var era = record.getFieldValue(era_id);
    var railroad_id = 'fld-c522d3a2b0e245e69f21f8eb3553be83';
    var railroad = record.getFieldValue(railroad_id);
    var brand_id = 'fld-f2dcf5e1818a4e588863424cc70e9804';
    var brand = record.getFieldValue(brand_id);
    var collection_id = 'fld-b133cb39179f4083b5377f7f01ecb1ea';
    var collection = record.getFieldValue(collection_id);
    var tca_grade_id = 'fld-0699ee653f564342855aa82798c88a01';
    var tca_grade = record.getFieldValue(tca_grade_id);
    var attribute_1_value_s_id = 'fld-722b1a029a2e4e8bbadd9cbf481d060f';
    var attribute_2_value_s_id = 'fld-828e1965c3ce4fa88b6a12b2dba89d39';
    var attribute_3_value_s_id = 'fld-a3e517222cd143e79323d7e99641c00c';
    var attribute_4_value_s_id = 'fld-8480a45102ed499cb00008b4c38625c7';
    var attribute_5_value_s_id = 'fld-9c0b1069d7024d46a519749589fef59e';
    var attribute_6_value_s_id = 'fld-f95371e7ac824cba92cf80da77c2fd7a';
    var attribute_7_value_s_id = 'fld-8651f7fbbfe0429690a9e0175b6eeaa4';
    var attribute_8_value_s_id = 'fld-56222dff96644bd9b9b3bd6d72d39db5';
    var attribute_9_value_s_id = 'fld-f4be5cac1b5d4ce48805765a2ff47a51';
    var attribute_10_value_s_id = 'fld-da36f2e28e1d4a8f8207a8a0e7f6b24d';
    record.setFieldValue(attribute_1_value_s_id, year);
    record.setFieldValue(attribute_2_value_s_id, manufacturer);
    record.setFieldValue(attribute_3_value_s_id, model);
    record.setFieldValue(attribute_4_value_s_id, gauge);
    record.setFieldValue(attribute_5_value_s_id, container);
    record.setFieldValue(attribute_6_value_s_id, era);
    record.setFieldValue(attribute_7_value_s_id, railroad);
    record.setFieldValue(attribute_8_value_s_id, brand);
    record.setFieldValue(attribute_9_value_s_id, collection);
    record.setFieldValue(attribute_10_value_s_id, tca_grade);
    form.saveAllChanges()

    }

    wc_attributes_update();

    While this works surprisingly well with regard to producing a proper CSV export, what I’ve found is that, as it’s currently scripted, the active record is saved immediately any time one of the “paired” fields is edited. This results in a “refresh” of sorts that results in my cursor being returned to the first field of the form. It’s functional, but grossly inefficient for data entry.

    I’m convinced there is a better method to perform this function, but having limited scripting experience, I’m hoping some of you that are more agile with TF may offer some better guidance. Since the “duplicate” columns’ ONLY purpose is for exporting (they are all hidden within TF), I tried to create a “form” script that I could execute on-demand prior to export (vs. my current “field” script that executes automatically any time data is added/changed in one of these fields). Sadly, I haven’t been able to get anything even close to doing that thus far.

    If there’s a way to have this field replication execute on-demand, or even a “back to the drawing board” alternative strategy, I’d be grateful and eager to hear anyone’s suggestions.

    Thanks in advance for any suggestions!

    Cheers

Viewing 15 results - 661 through 675 (of 3,053 total)