Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 09/16/2021 in all areas

  1. It will take a couple Data Pages and a couple new fields in your user table. Confirmation code field unique is required random isn't exactly required, but it shouldn't be predictable Confirmation status field i.e. if confirmation_status !== 'confirmed' { do not allow login } An update Data Page to send the email with a link to the confirmation Data Page, set confirmation status to something like sent or pending, and add a unique value to the confirmation code field. Another update Data Page where the email will link members to that filters the user table by email and confirms the followed the magic link using the confirmation code. This Data Page would update confirmation status to "confirmed" Boom Hope this helps
    2 points
  2. It isn't much of a help but you can check this link to see if there is any downtime or increase in latency on your account's site. http://status.caspio.com/ You can click on the site name and it will show some information about the current performance of the server. Edit: You can check your account site in Account > Account Settings There is also a tweet about an upcoming maintenance. Let's just hope this maintenance helps with the slight performance issues lately.
    2 points
  3. Hi @Joemac - you can check this forum post:
    1 point
  4. Unfortunately I don't as there's a lot of other stuff going on. I'll see on Monday if I can create a stripped down version to post--that's a really good idea.
    1 point
  5. Are you talking about when you add a new element or page to the weebly site? Major changes like that would always require a refresh, I would believe. Or, do you mean, if a user updates a record in a report, or submits a form or something, they need to refresh to see the data? If that is the case, you don't have 'Disable AJAX Loading' turned on, on your datapages, do you?
    1 point
  6. I am experiencing this in one of the five accounts I work in. My experience is slightly different than your description as after about 3 minutes the objects would load and it was not all objects. Data Page editor, app parameters, and table design were all that I can recall. Support knows about this and I would assume are working hard to resolve it - not a minor thing.
    1 point
  7. It’s hard to say something with this info. Where is the symbol? Typed into a field of submission form as a text? Into the url calling the page as parameter? Where you miss it? Into a search result table? Into the table field when you see it from Caspio tables? I tried it on a demo app I have (you can try it here) addin & and something’s to the address field. It seems working.
    1 point
  8. You can use javascript to get the copy the value of the first date field's criteria and pass it to the other fields then hide them so it would show only the first date field with 2 criteria (start and end). There is quite a lot of steps to follow here but it worked for me. First, add two Criteria to all of them. One for Start Date, another for End Date. Configure one criteria as “Greater than or Equal” and the other as “Less Than or Equal” to include all Dates within the selected range. This goes for every single one of the date fields. Afterwards, hide all of the Date Fields except for the first Date field using what I call the "HTML block method". Like this: Just use the same code I used on HTML Block 1 then put </div></div> to HTML Block 2. This creates a separate section for those fields and hides them. Next, add a Header and Footer block and put the script below in the Footer. Dont forget to disable HTML editor: <script> document.addEventListener('input', function drange() { document.getElementById('Value3_1').value = document.getElementById('Value1_1').value; document.getElementById('Value3_2').value = document.getElementById('Value1_2').value; document.getElementById('Value4_1').value = document.getElementById('Value1_1').value; document.getElementById('Value4_2').value = document.getElementById('Value1_2').value; }); </script> But note that this is assuming that the Date fields are positioned at the very top of the DataPage Wizard. The ID 'Value3_1' can change depending on the position. A good way to check is to remove the codes in the HTML blocks to unhide the fields first and inspect the element using F12. Lastly, go to the Logic section and set the Logic to be multiple AND blocks inside a big OR blocks like this: This basically copies and pastes the dates in the first date fields to the others pass them secretly.
    1 point
  9. The way I did it: Make a table called Quiz_Table. Put in fields to record the user and the date. Next, add in as many 'Integer' fields as you want to have questions on your quiz. If there are 20 questions per quiz, add 20 of these fields. I just named mine Q1-Q20. Add a formula field to the table, for the formula you'll need to add together all quiz questions and divide that by the number of quiz questions to get your score. Finally, add a 'Quiz_Number' field, this will tell you which quiz the user took. Now, create a Form datapage. Use the Quiz_Table as the datasource. Add the Quiz Question fields to the form. Type the actual question in the Label of the question field. Set the question fields to 'Radio Buttons'. Add your multiple choices as the options below. For all of the wrong answers, make the value 0. For correct answer, make the value 1. This will make it so if they get the question correct, the value will be 1. If wrong, 0. This plays into the Formula field in the table to calculate score. Then, add in the Quiz_Number field, go to Advanced tab, and check 'On Load, receive default value' and type in a number, and hide the field. This number will be different for each quiz you create, so you can tell in the table which user took which quiz. Now you can duplicate this form datapage and change the questions for all 13 quizzes you need to make, and give them each a different Quiz_Number.
    1 point
  10. Tubby

    Caspio User logs

    Unfortunately there is no way to download the logs in the new UI. But you can still access the old user logs by typing this to the URL: https://<accountID>.caspio.com/ui/userlogs Just change <accountID> to your account ID which you can find in account settings.
    1 point
  11. It is possible to change the currency sign dynamically, but only with a JavaScript solution. For the Report DataPage, set the fields formatting to US dollar ('$'). Then the following code should be put in the Footer of the DataPage: Note that if you are not using all the elements in the Report as described in the code, just delete the parts using that elements. <script> document.addEventListener('DataPageReady', () => { /* Declaring the function for replacing the specific text value in some array of HTML elements */ const replacing = (obj,whatToReplace,withWhatToReplace) => { obj.forEach(record => { let modified = record.textContent.replaceAll(whatToReplace, withWhatToReplace); record.textContent = modified; }); } /* Selecting all cells where we want to replace signs */ let table = document.querySelectorAll('.cbResultSetTableCellNumberDate'); // Table cells let htmlBlocks = document.querySelectorAll('.cbResultSetTableCell'); // HTML blocks inside the table let calculated = document.querySelectorAll('.cbResultSetCalculatedField'); // Calculated values in the table let sumAggregate = document.querySelectorAll('.cbResultSetTotalsDataCellNumberDate'); // Aggregates Total let aggregate = document.querySelectorAll('.cbResultSetGroup1LabelCellNumberDate'); // Aggregates in Group-level aggregations let dollar = '$'; let euro = '€'; let pound = '£'; /* Calling the Function 'replacing' for the declared elements, with arguments, based on the authentication field */ switch('[@authfield:Localization]'){ case 'Europe': replacing(table, dollar, euro); replacing(htmlBlocks, dollar, euro); replacing(aggregate, dollar, euro); replacing(sumAggregate, dollar, euro); replacing(calculated, dollar, euro); break; case 'Britain': replacing(table, dollar, pound); replacing(htmlBlocks, dollar, pound); replacing(aggregate, dollar, pound); replacing(sumAggregate, dollar, pound); replacing(calculated, dollar, pound); break; case 'USA': // Note that this case is redundant if using the dollar as default sign replacing(table, dollar, dollar); replacing(htmlBlocks, dollar, dollar); replacing(aggregate, dollar, dollar); replacing(sumAggregate, dollar, dollar); replacing(calculated, dollar, dollar); break; } }); </script> In the case you are using the "In Line Insert", then the part with declarations of variables "table" and "htmlBlocks" should be a replaced with the following code: /* Delete the variable "htmlBlocks" and replace the declaration of variable "table" with the code */ let tableParent = document.querySelectorAll('tr[data-cb-name="data"]') let table = []; tableParent.forEach(el => { let cells = el.querySelectorAll('.cbResultSetTableCellNumberDate'); table.push.apply(table, cells); let htmlBlocks = el.querySelectorAll('.cbResultSetTableCell'); table.push.apply(table, htmlBlocks); }); Also, delete the "replacing(htmlBlocks, currency, currency)" from Switch statement in this case. The resulting Report will look something like this if the user with European localization is logged in:
    1 point
  12. Talbot

    Exporting to pdf

    We do a lot of custom PDFs with Graphics, such as Insurance Policy Documents, Certificates, Invoices, and we generally custom code these, not using the standard Caspio PDF approach. The coding is not very complex, and I would be happy to share an example of the code. dtalbot@workmovr.com
    1 point
  13. I am using two different divs, but I haven't tried a specific container. Thank you! This helps a lot.
    1 point
  14. Unfortunately, I haven't figured out how to change them... without breaking things. Two work arounds that I use... Iframes I use iframes in most of my Caspio applications that rely on DataPages. <form id="caspioform" ... is not the only duplicated ID. Buttons and fields common to both data pages are also duplicated. Iframes let each data page be the only one in the page. Containers Simply putting the data pages into containers can help with this. <div class="dp-container" id="dp-1"> <script type="text/javascript" src="https://*******.caspio.com/dp/12345***************/emb"></script> </div> <div class="dp-container" id="dp-2"> <script type="text/javascript" src="https://*******.caspio.com/dp/12789***************/emb"></script> </div> This approach won't stop the error for non-unique ids, but you can now at least identify the elements accurately. const form1 = document.querySelector('#dp1 #caspioform'); const form2 = document.querySelector('#dp2 #caspioform'); Hopefully this helps!
    1 point
  15. <style> #UIToolBox{ left: 55% !important; } </style> This in the header will move the dropdown list to the right a bit.
    1 point
  16. EmmePGN

    View table not getting updated

    SOLVED! Thank you all for assistance. I finally figured out my issues and what I now have, works. The first thing I did was to calm my brains AND look at things from a 10K view. I finally quit trying to combine two events in one trigger. I was forcing the Insert and Update events together in one trigger, which is not a best practice. This can kill brain cells really quick. So, I separated these two events into 2 triggers. They now work perfectly well. Yeayyyy me! My first objective was to "INSERT" the new records to multiple tables after said new records are entered into the parent table (yes, they are relationally linked). That first image has multiple tables getting their records from the parent table. This block arrangements for the Insert trigger works really well. My second objective was to "UPDATE" the records from the multiple tables after they are updated from the parent table. The block arrangements for update also works really well for me. I thought I'd share my experience and I hope this helps others. Lesson learned = "NEVER OVERTHINK" BE SIMPLE. Simple helped me. I must add that the EEID, which is the trigger point is an auto number. I defined a scenario that as long as EEID is greater than 0, things will be copacetic. Naturally though, EEID will be greater than zero when a new record is created. Hope I make sense.
    1 point
  17. autonumber

    dollar sign

    Hello! Just to add, you can check this forum post as well.
    1 point
  18. Tubby

    dollar sign

    Hi there, You can try using this JavaScript snippet to add a dollar sign to your cascading text field. <script> document.addEventListener('DataPageReady', function (event) { var src = document.querySelector('[id*=InsertRecordMoney]'); src.onchange = function() { if(src.value.charAt(0) == '$'){ src.value= this.value; } else{ src.value = '$' + this.value; } } }); </script> The if else statement just checks whether the dollar sign is already existing so it would not duplicate it if you happen to change the value of the currency field. This is what it will look like on DataPage startup:
    1 point
  19. Okay, I just checked. You can also have a virtual field on search forms, but the virtual fields on the search form cannot use a calculated value as a form element.
    1 point
  20. As mentioned above by @LittleMsGinger, the idea is to have a calculated value to convert the selected values from their actual value to their display value. However, take note that this will only work if you are coming from a form type of datapage (Submission, Single Record, Report Details) since these are the only page that has a virtual fields.
    1 point
  21. RuisiHansamu

    Page Break By Group

    Hi @eunha - You may want to also check this article that may help you out. https://howto.caspio.com/datapages/pdf-download/adding-page-breaks-to-details-page/ Also, you can adjust the page breaks based on your desired number. For example, you may want to add 20 page breaks. Then, you can edit it here. (Please refer to the screenshot). I hope this helps you out. Cheers!
    1 point
  22. NailDyanC

    How to speed things up

    Hi just to add in the previous comments above, here are some documentations that was sent to me by some support members of Caspio about best practices and guidelines to make your application better: https://howto.caspio.com/tech-tips-and-articles/common-customizations/tech-tip-optimize-your-web-forms-for-maximum-usability/ https://howto.caspio.com/tables-and-views/table-and-database-design/ https://howto.caspio.com/datapages/best-practices-in-creating-caspio-applications/
    1 point
  23. Joemac

    How to speed things up

    I've noticed my Caspio app has had performance hiccups lately and I'm not sure if its my setup. Sometimes it runs quick and other times is runs slow and/or needs to be refreshed to work. Are there any guidelines on how to get the best performance out of my application? I have 100+ datapages and over 6GB on storage so far - not sure if that affects speed.
    1 point
  24. GoodBoy

    Page Break By Group

    I believe this is possible by using some JavaScript. You may try the codes below. Header: <script src=https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js> </script> Footer: <script> $( "<div style='clear:both!important;'/></div><div style='page-break-after:always'></div><div style='clear:both!important;'/> </div>").insertBefore( ".cbResultSetGroup1Row:not(:first)" ); </script>
    1 point
  25. This hiding of the columns can also be achieved by using only JavaScript in the Footer: <script> document.addEventListener('DataPageReady', function (event) { let label = document.querySelector('table[data-cb-name="cbTable"] th:nth-of-type(8)'); // Select the label of eighth column let values = document.querySelectorAll('table[data-cb-name="cbTable"] td:nth-of-type(8)'); // Select all the values in the eighth column /* Removing the selected fields */ label.parentElement.removeChild(label) values.forEach(el => { el.parentElement.removeChild(el) }); /* If we want to remove additional columns */ label = document.querySelector('table[data-cb-name="cbTable"] th:nth-of-type(5)'); // Select the label of fifth column values = document.querySelectorAll('table[data-cb-name="cbTable"] td:nth-of-type(5)'); // Select all the values in the fifth column label.parentElement.removeChild(label) values.forEach(el => { el.parentElement.removeChild(el) }); }); </script> Main difference between this and approach with CSS is that here columns are entirely removed from the page, and not just hidden - in the CSS approach you could still find the elements if you inspect the page, and access the information in them, but in this JavaScript approach, they are completely removed from the page. Notice however, that in the above example we are first removing the column that comes after and work our way to the beginning. If we would also like to remove tenth column, we would put that code before the code for removal of the eighth.
    1 point
  26. If we want to show some column in the Tabular Report just for the user who is also Administrator, but for the regular Users we want to hide it, below is the example (note that this is one Report DataPage - Tabular Report): Admin view can see the Agent Name column: User view can see the table without Agent Name column: In order to achieve this functionality, we need to add the following code to the DataPage Result page footer section: <script> document.addEventListener('DataPageReady', function (event) { /* If user is not Admin, we will remove the column */ if('[@authfield:Admin^]'==='No'){ /* We need to select Parent node of the Table Label and remove the desired child element (nth-child(2)) */ let agentLabelParent = document.querySelector('tr[data-cb-name="header"]'); let agentLabel = document.querySelector('tr[data-cb-name="header"] th:nth-child(2)'); agentLabelParent.removeChild(agentLabel); /* There can be multiple rows in the Tabular Report, so we need to select them all */ let agentNameParents = document.querySelectorAll('tr[data-cb-name="data"]'); /* Using the loop to pass through each row, and remove the entry (nth-child(2)) we don't need */ agentNameParents.forEach(parent => { let agentName = parent.querySelector('tr[data-cb-name="data"] td:nth-child(2)'); parent.removeChild(agentName); }); } }); </script>
    1 point
  27. What you can do, if you want to use only one DataPage and show different navbars for users, is to have the "Users" table with the Yes/No field called Admin to check if user is Administrator, and to use Authentication based on the table. Then, make a Navbar in App Parameter like this: <p class="admin-navbar"> <a href="YOUR-URL">OPTION 1</a> <a href="YOUR-URL">OPTION 2</a> <a href="YOUR-URL">OPTION 3</a> <a href="YOUR-URL">OPTION 4 JUST FOR ADMIN</a> <a href="YOUR-URL">OPTION 5 JUST FOR ADMIN</a> </p> <p class="user-navbar"> <a href="YOUR-URL">OPTION 1</a> <a href="YOUR-URL">OPTION 2</a> <a href="YOUR-URL">OPTION 3</a> </p> We are making two Navbars, and we will filter out based on current user's field "Admin" which of these to show. So make a Footer in App Parameters with the following code: <script> document.addEventListener('DataPageReady', function (event) { /* We are selecting both navbars */ let navAdmin = document.querySelector('.admin-navbar'); let navUser = document.querySelector('.user-navbar'); /* We need to remove one only if both are present, this is to prevent console errors if reloading the page */ if(navAdmin && navUser){ let navParent = navAdmin.parentElement; '[@authfield:Admin^]'=== 'Yes' ? navParent.removeChild(navUser) : navParent.removeChild(navAdmin) } }); </script> Now just insert Navbar from App Parameters in DataPage Header section, and Footer from App Parameters into DataPage Footer section, and you'll see either admin-navbar or user-navbar based on the user authentication. Here is the result:
    1 point
  28. Hi, The simplest way I can think of is to create a new table that is chart-able in a sense that it contains numerical results (like the count of each option chosen by your participants) and use Task to insert values to the new table. Here is an sample task that I made based on your screenshot: The new table in this sample is "Chartstbl". This is, however, assuming that you only need the current values for your presentation. If there will be new records to your Survey table in the future, then you may need to create a Triggered Action instead. This is also assuming that there are only 3 choices as seen in your screenshot (a,b, and c). You will need to create another Insert block for each of the questions. Its kind of a hassle to do that but there is a duplicate function when you right-click on the insert block. That might help a bit. This is how the new table looks like after running the task. With this table, you can use QuestionNo as the Category field and the three other columns as the Value fields.
    1 point
  29. You can add a virtual field and set it as Calculated Value. You can have a formula to get the Name or the Display Value depending on the ID selected in the dropdown. Sample Formula: SELECT (NAME) FROM TABLE WHERE ID=target.[@Field:ID] Then, pass this virtual field as parameter. You can also hide this Virtual Field so it will not be visible in the form. https://howto.caspio.com/tech-tips-and-articles/common-customizations/how-to-hide-fields-in-datapages/
    1 point
  30. Hi @kpcollier, What type of Join are you using in the View? I can suggest adding a field with a default value "0" to Orders_Table and field with a default value "1" to Completed_Table. You should use newly added fields in Join settings of the View and also select ALL records from both tables. Hope this helps. Regards, vitaliksssss
    1 point
×
×
  • Create New...