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 - 376 through 390 (of 2,989 total)
  • Author
    Search Results
  • #50760

    In reply to: Tap Forms for RAG

    Brendan
    Keymaster

    Hi James,

    I’m not sure what Retrieval Augmented Generation is. But yes, I’m waiting to see what Apple provides developers at WWDC. Hopefully something that doesn’t cost us to integrate into our apps.

    I did write a simple ChatGPT script in Tap Forms to call out to their service though. It worked pretty well. Type in your question or statement into a field, then it goes out and gets the response and populates the Script field with the results. Great to keep int he database and be able to do queries on it.

    But I can see other uses for AI such as to create forms for you or analyze your data.

    Thanks,

    Brendan

    #50751
    Daniel Leu
    Participant

    First you have to link the two forms. In F01a, create a link to form field and give it a name (eg link). Then set the link type to join, select F04a as the form to link to and use the MatTar and TarRef fields for the values.

    Next turn F01a.TarNam into a script field. Following field script should do the trick. I have added comments to describe what I’m doing:

    function getTarCln() {
       // get F014a form
       let f04a_form = document.getFormNamed("F04a");
       // get field id for TarCln
       let tarCln__f04a_id = f04a_form.getFieldNamed("TarCln").getId();
       // get field id for link field
       let link_id = form.getFieldNamed("link").getId();
       // get linked records
       let f04a_recs = record.getFieldValue(link_id);
       // check that there's only one record
       if (f04a_recs.length > 1) {
          console.log("Error, more than one record");
          return;
       }
       // get value from F014a form
       let value = f04a_recs[0].getFieldValue(tarCln__f04a_id);
       console.log("Value fetched: " + value);
       // done, return value
       return value;
    }
    getTarCln();
    This script assumes that the field that links the two forms together is called link. You can change this on line 10.
    The return type of the script must match your field type, eg Number, Text, Date.
    This is JavaScript and not Java. Although they share part of their name, they are totally different beasts.

    Cheers, Daniel

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

    #50727
    Brendan
    Keymaster

    That’s is a very use case specific need you have there. Unfortunately it’s in a domain I’m not very familiar with, so don’t have any specific recommendations, but I would suggest just trying some things out to figure out what works for you. You could also use the Duplicate Document command to make a copy of your document that you could experiment with without affecting your original document.

    Sometimes Table fields can be used in lieu of Pick Lists. They’re kinda like Pick Lists on steroids in that they can display multiple values at the same time, copied from another form, but you can add additional information to the Table field if needed.

    If you want to try scripting if you think that might be a solution to your problem, then there’s instructions for that here:

    https://www.tapforms.com/help-mac/5.3/en/topic/scripts

    Sorry I don’t have a better solution for you.

    Brendan

    #50725
    Daniel Kefford
    Participant

    I am very new to tapforms having just downloaded the trial on my Mac and then just bought the iOS version this morning and all my playing so far has been on iPhone.

    Basically I want to use it to keep a database of movies but not really in the sense of a standard movie database. I basically want to keep track of which tracks on a blu ray disc are which.

    so I basically backup all my physical discs and either store them as entire backup folders or ISO  for playback in home theatre. I also sometimes make an mkv instead and one of the issue with creating an mkv file from a blu ray disc is that a blu ray disc is full of playlist and video files and they are joined up in a certain way to give you the episode or movie you want to watch. If you don’t have the menus (because you are trying to pull a movie or an episode out of the whole disc and save it as a single mkv file) then it can be hard to keep a track of which playlist is the one you want. Once I have figured this out I want to keep the data.

     

    so basically I have a video form which represent a movie or episode or equivalent. That form has some fields (eg. mpls, title, type etc). The mpls is the playlist file that is the one I care about in this instance. An mpls file links 1 or multiple m2ts files together to give you the video you want. So I have a table inside the form as well with the list of segments that make up this video. So far so good.

    Then each m2ts file contains a number of streams (video, audio and maybe subtitles). Right now I have this as another table.

    ok, so far so good.

    So, now I can have another form for a physical disc that can link to a number of these video forms to represent the individual videos I care about on that disc. So that means I can quickly lookup and find out all the different info about the streams and segments.

    So that table describes the videos on a disc that I care about and that’s part of what I want.

    but now I also want another form that I will call MKV which I want to represent each mkv file I create from these videos. So when I take a video form item I will extract the video and make an mkv file so the mpls and m2ts segments used to make that mkv file are the same between the 2 forms so I can just join or link. However the tricky thing is that when I make an mkv file I do not keep all the streams. I just take the streams I want (ie. The video, the English, maybe the Japanese and some or none of the subtitles). So when I create a new MKV form I would like it to point to my “Video” form which has all the mpls and segment info and they are the same but then I want to select some of the streams from the stream table that is in the video form and I can’t figure out how to do it. Each time I create an mkv it would need to be a manual human action to tick the ones I want or something similar and then have them stored in the mkv form as a table. The data stored for each stream can be the same but I just don’t want all streams. The closest I could think of was some sort of pick list that I could populate with a table form another form. It would still be uglier than I would like but it might be ok but it also doesn’t work as I can’t populate a picklist with the contents of a table in a specific video form entry.

    Is there some way to script what I want? I guess I could create a separate stream form that is keyed by the video title and then within the “video” form I can use a join to collate them all back up into a full list and then have some sort of 1 to many table in the mkv table so I can select all the streams I want?

    is this the best/only way to do it?

    im not sure if I’ve totally lost everyone with my rambling description….

    any advice appreciated!

    #50705
    Brendan
    Keymaster

    Hi Evan,

    Sorry for missing this. Your message got caught up in the forum spam filter. Not sure why.

    1. You can do a mail merge if you add a static text object to your custom layout. Then type in the field names surrounded by square brackets. For example:

    Dear [First Name] [Last Name],

    It is of utmost importance that you pay your bill totalling [Bill Total] or we will have to charge you an interest rate of [Interest Rate]

    Then when you use the Print function, the values in the field placeholders will be substituted with the values from those specific fields for the printed record(s).

    2. Tap Forms doesn’t actually send out emails, but you can have it create an email in Apple Mail that’s addressed to a bunch of people in your records in your form. Use the Email Selected Addresses function under the Edit menu for that.

    3. There’s no automated workflow functions built-in to Tap Forms, but if you’re good at JavaScript, or willing to learn, you can program Tap Forms to do all kinds of things. You can have it trigger a script when the value in a field changes for example. Your script would execute and maybe it would insert another record into a linked form or have it change the value of another field or read in a file or do any number of things you’d like it to do.

    4. There’s no function to trigger scripts to run at specific times, but as mentioned above, you can trigger a script to run when the value of a field in your form is changed. So maybe you can do something with that.

    See this page for information on scripting in Tap Forms:

    https://www.tapforms.com/help-mac/5.3/en/topic/scripts

    Thanks!

    Brendan

    (and sorry for your post getting marked as spam).

    letnic
    Participant

    Hi,

    When in a Custom layout, if I go to print and use the Save as PDF function, is it possible to give a tile different than the layout?

    It’s an invoice layout, so I’d like it to have a formatted title like “YYMMDD_ClientName-Inv#”.

    Is this something possible? Maybe with a script, I don’t know.

    What do you think?

    Thanks.

    Fernando DS
    Participant

    Hello everyone, I have an amount search script in the table field of all records. But it works for me with some quantities and not with others. And I don’t understand why.
    This is the script:

    // Definiciones de IDs de campos dentro de la tabla
    var pagos_cobros_tabla_id = ‘fld-a878bb1af5534101bcfab905279b1180’; // ID del campo Pagos/Cobros dentro de la tabla
    var movs_banco_tabla_id = ‘fld-57a5fdcd593e46b298948845321d78ac’; // ID del campo Mvtos. Banco dentro de la tabla
    var fecha_id = ‘fld-547c13e982e84d0793b0aba6c220cf76’; // ID del campo de fecha dentro de la tabla
    var nombre_id = ‘fld-baf116cd116e4cde9b65e79014a49f28’; // ID del campo de nombre dentro de la tabla
    var tabla_id = ‘fld-d8a58dbf35914f3c858c6dfb880c1c48’;
    var nota_id = ‘fld-7918261f865b489a8f7672cf733712a9’;
    var listado_de_script_id = ‘fld-555622f4bf0344f9b9e92af0806210fc’;
    // Reemplazar ‘XXXXXX’ con el ID del campo “Listado de script”

    // Define el importe a buscar
    var buscarImporte = “19.99”; // Ajusta este valor según el importe que desees buscar

    console.log(“”);
    console.log(“*************************************”);
    console.log(“Importe buscado: ” + buscarImporte);
    console.log(“*************************************”);
    console.log(“”);

    // Inicializar el contenido del campo “Listado de script”
    var output = “”;

    // Función para parsear el importe independientemente del formato
    function parseImporte(importeStr) {
    if (typeof importeStr === ‘string’) {
    return parseFloat(importeStr.replace(/[^\d.-]/g, ”)) || 0; // Devolver 0 si el valor no se puede convertir a número
    } else {
    return parseFloat(importeStr) || 0; // Devolver 0 si el valor no se puede convertir a número
    }
    }

    buscarImporte = parseImporte(buscarImporte);

    var records = form.getRecords();

    for (var i = 0; i < records.length; i++) {
    var record = records;
    var registrosTabla = record.getFieldValue(‘fld-d8a58dbf35914f3c858c6dfb880c1c48’) || []; // Reemplaza ‘tabla_id’ con el ID del campo de la tabla
    var nombre = record.getFieldValue(‘fld-baf116cd116e4cde9b65e79014a49f28’); // Obtener el nombre fuera del bucle de la tabla

    // Array para almacenar los movimientos correspondientes a cada nombre
    var movimientosNombre = [];

    for (var j = 0; j < registrosTabla.length; j++) {
    var registroTabla = registrosTabla[j];
    var pagosCobros = parseImporte(registroTabla.getFieldValue(pagos_cobros_tabla_id));
    var movsBanco = parseImporte(registroTabla.getFieldValue(movs_banco_tabla_id));
    var fechaRaw = new Date(registroTabla.getFieldValue(fecha_id));
    var fecha = ${('0' + fechaRaw.getDate()).slice(-2)}/${('0' + (fechaRaw.getMonth() + 1)).slice(-2)}/${fechaRaw.getFullYear().toString().substr(-2)};
    var nota = registroTabla.getFieldValue(nota_id);

    // Comparar el valor absoluto de los importes
    if (Math.abs(pagosCobros) === Math.abs(buscarImporte) || Math.abs(movsBanco) === Math.abs(buscarImporte)) {
    movimientosNombre.push({ fecha: fecha, movsBanco: movsBanco, pagosCobros: pagosCobros, nota: nota });
    }
    }

    // Mostrar el nombre y luego los movimientos correspondientes
    if (movimientosNombre.length > 0) {
    output += “\n” + nombre + “\n\n”;
    console.log(“” + nombre);
    console.log(“”);
    for (var k = 0; k < movimientosNombre.length; k++) {
    var movimiento = movimientosNombre[k];
    output += ${movimiento.fecha}: ${movimiento.movsBanco} | ${movimiento.pagosCobros}\n\n${movimiento.nota}\n;
    console.log(${movimiento.fecha}: ${movimiento.movsBanco} | ${movimiento.pagosCobros});
    console.log(“” + movimiento.nota);
    console.log(“”);
    }
    }
    }

    // Actualizar el campo “Listado de script” del primer registro con el texto generado
    record.setFieldValue(listado_de_script_id, output);

    // Guardar los cambios en los registros
    form.saveAllChanges();

    Any help will be welcome.

     

    #50672
    Daniel Leu
    Participant

    You can assign a ‘Menu Shortcut’ for a script. This way, you can start it with a keyboard shortcut like cmd-k. You find this in the script options.

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

    Cheers, Daniel

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

    #50660
    Daniel Leu
    Participant

    Are all your entries in the “1723-1756” format? If yes, you could split it into two integer fields. Then in the Saved Search, you can use comparison to find if a record matches the year in question.

    I assume that you already have many records and splitting the format is not really feasible and it doesn’t look aesthetically pleasing. But you can use two field scripts that do the work for you:

    function Year_X(num) {
    
    var year_period = record.getFieldValue('fld-xxx');
    
    return year_period.split('-')[num];
    
    }
    
    Year_X(0);

    <p class=”p1″>
    You would need to change fld-xxx to the field value of your year string.</p>
    For the start year, you use the code from above and for the end string you do the same and use Year_X(1) in the last line.

    By using this script fields, we could even enhance it a bit more to support cases where you have the year instead of the year range.

    Hope this helps.

    • This reply was modified 1 year, 10 months ago by Daniel Leu.

    Cheers, Daniel

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

    #50650
    Brendan
    Keymaster

    Hi Hannes,

    There are two types of scripts. Field scripts and Form scripts. Field scripts run automatically when a field referenced inside the script using the record.getFieldValue(field_id); function is executed. Tap Forms also saves to the database whenever you exit a field. Although if you run a script that changes things, you’ll also want to call form.saveAllChanges();

    So there’s no need to have a trigger to run a script when things are saved because with Field Scripts it happens automatically.

    Form scripts must be run manually by you.

    Thanks,

    Brendan

    #50647
    Hannes keller
    Participant

    Hi Everyone,

    I am new to Tapforms and experimenting right now with JavaScript. Is there an option to run a Script automatically during the “normal” saving process?

    Thanks for your Help.

    Hannes

    #50620
    Fernando DS
    Participant

    Hi Brendan,

    It is a form script. I have done what you have told me and this has made it very much easier for me to print listings.

    Thank you very much.

    #50618
    Brendan
    Keymaster

    Hi Fernando,

    Is this a Field script or a Form script?

    If it’s a Field script, then the results returned from the script can be printed directly with the rest of the fields in the record.

    If it’s a Form script, you’d need to write the results into another field, such as a Text field. Then you can print the contents of that field.

    Thanks,

    Brendan

    Fernando DS
    Participant

    I would like to know if this will be possible sometime. Now I have to copy lists and paste them on another app. It would be better can print directly.
    thank you.

     

    #50606
    Victor Warner
    Participant

    I am trying to learn to use loops in JavaScript combined with a saved search. I have been able to create a script that can obtain the required data from fields in records found by a saved search. However, I cannot write some data to a field for the records found by a saved search.

    Could I have some help in identifying what is wrong or what needs adding. The sample database is attached.

    
    
    // Fields
    var date_id = 'fld-93ed9225fc674e7c840266726e160538';
    var first_name_id = 'fld-edfdac34b4de4df79e5aced3c3ddc9be';
    var completed_id = 'fld-6a9df78c9df744e292f47e11077d3d6d';
    var client_name_id = 'fld-ec4fb9b85cb54d52813a9cd69c08198f';
    
    // Push variable
    
    var txt = [];
    
    // Getting saved search
    var saved_search = form.getSearchNamed('Completed');
    
    // get the records for the saved search
    var dupes_search = saved_search.getRecords();
    
    // Looping through the records for the saved search
    for (var index = 0, count = dupes_search.length; index < count; index++){
    var dupes_search_details = dupes_search[index];
    
    // getting the contents of fields
    var completed = dupes_search_details.getFieldValue(completed_id);
    var client_name = dupes_search_details.getFieldValue(client_name_id);
    
    // writing data to fields
    dupes_search_details.setFieldValue(first_name_id, "Johnny");
    //dupes_search_details.setFieldValue(date_id, "2024-03-06");
    
    // putting data from fields together
    txt.push((index+1) + ". " + client_name + " = " + completed + ", and the count of records found by saved search: " + count + "\n");
    
    }
    
    txt.join();
    
    console.log(txt);
    
    Attachments:
    You must be logged in to view attached files.
Viewing 15 results - 376 through 390 (of 2,989 total)