ContributionsMost RecentMost LikesSolutionsRe: Limiting size of files a user can upload. If you want to restrict the user from saving the record itself, if the file attachment in the form exceeds a specific limit like 1MB or 10MB or anything. The below javascript code using iol would help you achieve it. At high level the script will take over the handler on the save button when the page loads and checks the size of the file attached in the form, if it is more than 100K in this instance(which you can change in the code below from 100000 to the limit you want to set). it will show an alert and blocks the save action in other words it won't let user to save the record and if the size is within the accepted limit then the record will be saved. NOTE: Alert message and any other details you can customize since you have the full control on the form now. 1. Create a code page in the application and copy the below code into it. NOTE: 1. replace TABLE_DB_ID in the below code with dbid of the table where you are trying to restrict the file uploads based on the size. for instance, if table is file attachment then use dbid of that table. 2. replace files[0] with files[1] or files[2] if the form has more than one attachment. if not and form has only one file attachment then don't have to do anything. var backupHandlers; function checkFileSize() { var reader = new FileReader(); reader.readAsDataURL(document.querySelector('input[type=file]').files[0]); reader.addEventListener("load", function () { //console.log($("#_fid_X")[0].fileSize); //console.log(reader.result); console.log(reader); if(reader.result.length>100000){ alert("File size greater than 100k"); }else{ console.log("File size within the limits carry on with save."); $("#saveButton").each( function() { var elementData = jQuery ._data(this), events = elementData.events; //Restore default quickbase events var onClickHandlers = events['click']; //remove all the current click handlers on the save button for (var idx = 0; idx < onClickHandlers.length; idx++) { onClickHandlers.splice(0, 1); } //replace them with the handlers that quickbase configured when the page initially loaded if(backupHandlers!=undefined){ for (var idx = 0; idx < backupHandlers.length; idx++) { onClickHandlers.push(backupHandlers[idx]); } console.log("Total handlers left : "+ onClickHandlers.length); } //triggers save action $("#saveButton").trigger("click"); }); } }, false); } function alterSaveEventHandlers(){ console.log(DoSaveAdd); $("#saveButton").on("click", checkFileSize); $("#saveButton").each(function() { var elementData = jQuery._data(this), events = elementData.events; var onClickHandlers = events['click']; // Only one handler. Nothing to change. if (onClickHandlers.length == 1) { return; } backupHandlers = new Array(); // onClickHandlers.splice(0, 0, onClickHandlers.pop()); for (var idx = 0; idx < onClickHandlers.length; idx++) { backupHandlers.push(onClickHandlers[idx]); onClickHandlers.splice(0, 1); } console.log("onClickHandlers : "+JSON.stringify(onClickHandlers)); }); console.log("updated click handlers on save button."); } (function() { var querystring = document.location.search; console.log("got into custom code section."); if (/dlta=mog/i.test(querystring)) { // GRID EDIT PAGE ======================================== console.log("You are on the Grid Edit Page"); } else if (/a=er/i.test(querystring) && /TABLE_DB_ID/i.test(window.parent.location) ) { // EDIT RECORD PAGE ======================================== console.log("You are on the Edit Record Page"); alterSaveEventHandlers(); }else if (/a=API_GenAddRecordForm/i.test(querystring) && /TABLE_DB_ID/i.test(window.parent.location) ) { // API_GenAddRecordForm PAGE ======================================== console.log("You are on the GenAddRecordForm Page!"); alterSaveEventHandlers(); } else if (/GenNewRecord/i.test(querystring)) { // ADD RECORD PAGE ======================================== console.log("You are on the Add Record Page"); alterSaveEventHandlers(); } else if (/nwr/i.test(querystring)) { // ADD RECORD PAGE ======================================== console.log("You are on the Add Record Page"); alterSaveEventHandlers(); } else if (/a=dr/i.test(querystring)) { // DISPLAY RECORD PAGE console.log("You are on the Display Record Page"); //$("img[qbu=module]").closest("td").css("background-color", "#FFFFFF"); setTimeout(requestForUpdates, 2000); } else if (/a=q/i.test(querystring)) { // REPORT PAGE ======================================== console.log("You are on the Report Listing Page"); } else if (/a=td/i.test(querystring)) { //TABLE DASHBOARD PAGE ======================================== console.log("You are on the Table Dashboard Page"); } else if (/a=FinishEditRecord/i.test(querystring)) { //FINISH EDIT RECORD PAGE ======================================== console.log("You are on the Finish Edit Record Page"); } else { //OTHER PAGE ======================================== console.log("You are on the Some Other Page"); } })(); Step 2: follow the steps in the below url that helps you to load the above script file into the form https://community.quickbase.com/quickbase/topics/create-parent-record-on-loading-of-child-form Re: is there a way that we can export Quickbase data to an Oracle DB.Thank youGaurav.Re: is there a way that we can export Quickbase data to an Oracle DB. Hi Marco, There are different ways to build this cron/scheduled job to pull and store data into oracle DB. Since you wanted this to be built in oracle, below instructions are one way to achieve this. 1. Pull Data from Quickbase using HTTP API that gives data in XML format. Refer to the NOTES below for Quickbase API information. 2. Build an oracle stored procedure using PL/SQL, use HTTPURITYPEto consume HTTP GET request and read XML data received using Quickbase HTTP API. Use below link on how to do this. https://sonra.io/2009/03/12/consuming-a-rest-web-service-with-oracle/ 3. Once the stored procedure is ready, schedule it for timely download. Use below link for setting up scheduler. https://docs.oracle.com/cd/E11882_01/server.112/e25494/scheduse.htm 4. Use XMLTABLE to extract the data receivedfromQuickbaseAPIGET Response. Follow below link for using this or any other oracle library to read XML response. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions228.htm NOTES: Quickbase exposes HTTP API to read data, follow the below guide hosted by Quickbase to read data out of it in XML. https://help.quickbase.com/api-guide/index.html Steps to read Data Use API_Authenticate to get ticket which can be used to make https://help.quickbase.com/api-guide/index.html#authenticate.html Use API_DoQuery https://help.quickbase.com/api-guide/index.html#do_query.html Let me know if you need any additional information. Re: View usage and viewing statistics There is a way to know when it islast used and how many times its been used since its inception. if you have set a specific report for all the roles instead of the Default Report view in Table home page under settings for that table. NOTE: On Table home page if "Default Report" is been selected forall the roles and not a specific reportper role then the below steps won't work. Click on table -> Settings -> Reports & Charts it will provide below details per report Last Used Used Count Re: how do I hide reports and charts You can't hide the option itself but you can take away the privilege of creating or customizing reports. Go to app home -> settings -> Roles -> select the role you want to hide the option -> User Interface Tab Re: create parent record on loading of child form I totally see the point We can do a check on the params everytime the page refreshes, and if the "new param parent_related_record_id" which we received after creating the parent record is appended(which we are doing on page reload after creating the parent record) and available in the params then don't execute the script. This check should take care of it. Let me know if I mis-understood the concern Re: create parent record on loading of child formApplication -> Dashboard - Settings - variables you should see the below variables /iol /script appID iol script These are the java script variables that can be used in the formula fields in any of your table's fields. Step 2: Create formula field Type - Formula Text formula - [iol] & "custom.js" & [/iol] Step 3: Add the field from step 2 into the form (this is the form where the application will receive parameters) Step 4: Create a custom page "custom.js" in application pages and add the below script 1. read the params 2. create the parent record 3. from the response take the record id and reload the form by adding the is param using the fid of the related parent field. Below is the partial code that helps function readParams() { var params = {}; var locationObj = window.parent.location.search; if(!locationObj){ locationObj = window.location.search; } if (locationObj) { var parts = window.parent.location.search.substring(1).split('&'); for (var i = 0; i < parts.length; i++) { var nv = parts.split('='); if (!nv[0]) continue; params[nv[0]] = nv[1] || true; params[nv[0]] = decodeURIComponent(params[nv[0]]); } } console.log(JSON.stringify(params)); return params; }; function createRecordAndReload(){ var params = readParams(); //the params var will have all the data from the url //refer to https://help.quickbase.com/api-guide/index.html#add_record.html%3FTocPath%3DQuickBase%2520API%2520Ca... //make an ajax call using api API_AddRecord and with above params create parent record addParentRecord(params); //on success of the above ajax call reload the window adding a new param with fid of the related parent field //NOT: //when the form loads it will trigger the same script but this time you shouldn't run the above call to create a record. when you see the related parent field id don't execute the above ajax call. reloadPage(); } function addParentRecord(params){ } function reloadPage(){ } createRecordAndReload();Re: Formula to number each child record as related to parent recordThis won't work for import true. But It will number them sequentially within a parent proposal if you create them using form and steps are followed as above.Re: Formula to number each child record as related to parent recordI believe you have already defined a "one-many relationship" on the tables Proposals(parent) and Line Items(Child). If not define that relationship. Step 2: On table Proposals Go to -> settings -> Relationships -> click on the relationship defined between the tables. Step 3: On Master Table Proposals -> click on "Add Summary Field" -> on the next window leave the default selection to create "# of Proposals" field. Step 4: On Line Items table -> click on "Add Lookup Fields" -> on the next window select the "# of Proposals" field from the Proposals table and click on Create (name it as "Total Line Items Count"). Step 5: On Line Items table -> create a field "Line Item Number" -> type formula numeric and name it as "Line Item Number" or anything you want. Step 6: On table Line Items Go to -> settings -> Forms -> Go to the form and "Dynamic Form Rules" tab. Add a new rule using "Add New Rule" When The record -> Saved Action Change -> "Line Item Number" (field you created int step 5) to lookup field (Total Line Items Count) you created in step 4. Conclusion: With this settings Line Item Number will have the numbering you are expecting for. Re: understanding the API pricing planLimit varies based on the purchase order, based on the usage people purchase the calls. In your case, if you are an to Account Admin, you will have access to this on your My Apps tab, right hand side under create a new app there will be this section Account Adminand an option that says Manage domain(your domain) On that page, the first tab summarywill tell you how the API calls/day purchased for your domain. What counts an API Call HTTPS API Calls, or any other calls to quickbase from external programs or cloud services.