Jump to content


Caspio Ninja
  • Posts

  • Joined

  • Last visited

  • Days Won


JEllington last won the day on August 1 2016

JEllington had the most liked content!

Recent Profile Visitors

1,293 profile views

JEllington's Achievements


Newbie (1/14)



  1. Resolved: the key to the issue is in the topic title. I had to reverse my logic and wrap the .map.filter within the forEach. This worked, but as .map.filter creates an array with the same name, each previous iteration was overwritten by the current iteration. The final solution wast to use another nested forEach instead of the .map.filter, then push the result to the eleBtn array. //button objects array var buttons = [ { eleId: "btnStop1", disp: "red", stat: "on" }, { eleId: "btnStop0", disp: "red", stat: "off" }, { eleId: "btnGo1", disp: "green", stat: "on" }, { eleId: "btnGo0", disp: "green", stat: "off" } ]; //display color array var eleColor = ["red", "green"]; //using the values of "eleColor" filtered through "buttons" //then store results in "eleBtn" var eleBtn = []; eleColor.forEach(ele => buttons.forEach(e => { if (e.disp === ele) {eleBtn.push(e)} })); console.log("eleBtn results", eleBtn); //eleBtn results (4) [{…}, {…}, {…}, {…}] // 0:{eleId: "btnUnassigned1", disp: "red", stat: "on"} // 1:{eleId: "btnUnassigned0", disp: "red", stat: "off"} // 2:{eleId: "btnOnsite1", disp: "green", stat: "on"} // 3:{eleId: "btnOnsite0", disp: "green", stat: "off"} // length:4
  2. Hello, I am having problems wrapping my head around nesting a forEach method within a .map .filter method. I have two arrays.. buttons: that contains key value pairs of button display statuses. eleColor: contains values that will be filtered through "buttons.disp" key values. I am using .map.filter methods to create a new array. When I assign the "disp" value statically all works and the new array is created. But when I try to iterate through eleColor for the parameter the code fails. Any recommendations on correct syntax or a better method to filter values from a different array is greatly appreciated. To make my objective clearer, I have included my code with explanation comments below. Thank you in advance for any and all comments/sugesstions on completing my objective. Jim //button objects array var buttons = [ { eleId: "btnStop1", disp: "red", stat: "on" }, { eleId: "btnStop0", disp: "red", stat: "off" }, { eleId: "btnGo1", disp: "green", stat: "on" }, { eleId: "btnGo0", disp: "green", stat: "off" } ]; //display color array var eleColor = ["red", "green"]; //create eleBtn array using the value of "red" filtered through "buttons" // this works filterring all disp: keys with the value of red.. eleBtn = buttons.map(e => e).filter(e => e.disp === "red"); console.log("eleBtn array ", eleBtn); // returns eleBtn array (2) [{…}, {…}] // 0:{eleId: "btnUnassigned1", disp: "red", stat: "on"} // 1:{eleId: "btnUnassigned0", disp: "red", stat: "off"} // length:2 //create eleButton array from "eleColor" filtered through "buttons" // but incorrect when eleColor array is iterated through forEach eleButton = buttons.map(e => e).filter(e => e.disp === (eleColor.forEach(ele => {ele}))); console.log("eleButton", eleButton); // how do I correctly iterate through each item in "eleColor", // so all red and green "disp" values are assigned to the "eleButton" array?
  3. just to put this out there.. if you are not concerned with the "Data Table" tooltip displaying on older (non ES6 compatible) browsers. You can skip the overhead of using jquery and use querySelectorAll with the script located at the end of the footer in your Tabular Report DataPages, such as... <!-- remove "Data Table" tooltip from Tabular report --> <script> document.querySelectorAll("table[data-cb-name='cbTable']")[0].removeAttribute("title"); </script> Keep in mind the reason for using the jquery in previous solutions is for backwards compatibility with older browsers that do not support querySelectorAll.
  4. Loading the script in the footer fixed the issue. With the script functioning correctly in legacy and not with async deployment, I didn't think to put the script code in the footer. Thank You so much for your help.
  5. Hello.. I have a tabular report that will not recognize an element using document.getElementById( "elmName" ) (loctated in the Header of a report), if the datapage is deployed using ASYNC deployment... <script type="text/javascript" src="http://b4.caspio.com/dp/d6a9blahblah/emb"></script> returning a console message " VM3106:22 Uncaught TypeError: Cannot set property 'innerHTML' of null". If i put the script in the console as.. document.getElementById( "elmName" ).innerHTML = '<a href="httpcodehere">Test Button</a>'; the script runs without errors and replaces the html in the <div id="elmName">Original Text</div>.I have found if I use the legacy deployment .. <script type="text/javascript" src="https://b4.caspio.com/scripts/e1.js"></script> <script type="application/javascript">try{f_cbload("d6a9blahblah","https:");}catch(v_e){;}</script> the script runs document.getElementById without errors. (I have tried running this script in other tabular report datapages deployed asynchronously all with the same error and results. Then switching them to legacy deployment and the script runs without error.) Can anyone give me any insight on why the document.getElementById will not work if the datapage is using ASYNC deployment?
  6. RESOLVED.. I was able to set the cbResultSetSearchAgainContainer display properties to none in the styles sheet..
  7. attached are screen shots of datapage resuylts with and without data. Search again only displays when no data is found for record
  8. Hello Vitlikssssss, yes I have unchecked all options. What is puzzling is the search again link only displays when there is no data found for the record (where if it were an option I would think it would show all the time regardless of the presence of data).
  9. Hello, I have a Details Report DataPage that if no data is found (351) the results html page displays a “Search Again” link button, that displays only if no data is found. I have gone into the styles for the page and disabled the search icon and in the localization cleared the “Search Again” in the labels and markers section and it still displays the Search Again link. If I put 1 character in the custom text area it displays just that one character but if I delete all characters in the area it reverts to displaying "Search Again". Can anyone please let me know how to disable the Search Again link altogether. All comments are greatly appreciated.
  10. Dazzler.. Thank you!! Brilliant fix. I was trying to figure out how to loop through each row and this does the trick perfectly. Many thanks on the amount of hair that can now remain on my head. (I was worried of pulling it all out over this one) Jim Ellington
  11. Since the CB 10.0 upgrade Ive been updating all the deploy codes in my datapages utilizing the new Asynchronous DataPage Deployment Method (a noticeable pageload improvement over the legacy deployment method, plus no more chrome deprecated warnings in the console Thank you for this improvement Caspio). One problem I am faced with now is I have several tabular report pages that conditionally load link buttons dependent on the status field of each row. With the legacy page deployment I was able to perform this with the following script in an html block... <script> var stat = '[@field:Status]' if (stat == 'Assigned') { document.write('<a class="recordActions" href="assignedwopage.html?on=[@field:WO_Num]&at=[@field:Assigned_Tech]&stat=begin">View/Open WO</a>'); } else if (stat == '~Suspended') { document.write('<a class="recordActions" href="resumewopage.html?on=[@field:WO_Num]&at=[@field:Assigned_Tech]">Resume WO</a>'); } else { document.write('<label>WO Pending Review</label>'); } </script> -------------------------------------------------------- The innerHTML solution I came up with to replace the document.write follows... <div id="linkto"></div> <script> var stat = '[@field:Status]' if (stat == 'Assigned') { document.getElementById("linkto").innerHTML = '<a class="recordActions" href="assignedwopage.html?on=[@field:WO_Num]&at=[@field:Assigned_Tech]&stat=begin">View/Open WO</a>'; } else if (stat == '~Suspended') { document.getElementById("linkto").innerHTML = '<a class="recordActions" href="resumewopage.html?on=[@field:WO_Num]&at=[@field:Assigned_Tech]">Resume WO</a>'; } else { document.getElementById("linkto").innerHTML = '<label>WO Pending Review</label>'; } </script> Apparently this does not work because the “linkto” div is an html collection within the html block and improperly assigns the last read value to only the first row in the table. I tried a createElement method along with several other ideas all with the same results. Can anyone please inform me on the proper method to perform for the desired result of displaying a link button conditionally in a report. Thanks in advance for any and all suggestions.
  12. I have a table with a field named Total_Time with a function datatype, that calculates total time using the flowing formula.. Round(((([@field:End_Hour] - [@field:Start_Hour]) * 60 + ([@field:End_Min]-[@field:Start_Min])) - (([@field:Break_Fin_Hour] - [@field:Break_Start_Hour]) * 60 + ([@field:Break_Fin_Min]-[@field:Break_Start_Min]))) /60 ,2) This works as expected… Now I would like to add a conditional statement that checks the value of the field "Assigned_Tech" and if the value is “Summary” then leave the Total_Time field blank, else run the formula. Im thinking.. CASE IF ([@field: Assigned_Tech])!==”Summary” THEN Round(((([@field:End_Hour] - [@field:Start_Hour]) * 60 + ([@field:End_Min]-[@field:Start_Min])) - (([@field:Break_Fin_Hour] - [@field:Break_Start_Hour]) * 60 + ([@field:Break_Fin_Min]-[@field:Break_Start_Min]))) /60 ,2) END Can someone please help me with the correct case statement to use. I spent 2 days writing the total_time formula and now am in a bit over my head using conditional statements in the formula. Thanks in advance for any an all help
  13. I am having a problem with the Signature Pad working correctly on an html page that has more than one datapage embedded in it. As per http://forums.caspio.com/index.php?/topic/4693-js-adding-a-digital-signature-to-a-submission-form The sig pad works as desired only in the first datapage embedded on an HTML page. Any additional datapages embedded into the html page throw console errors accessing the sig canvas. The problem is.. I have an HTML page that displays an invoice. The first embedded datapage displays customer information, a second embedded datpage displays inventory items used and a third datapage containing the sigpad script, requires a customer signature and collects closing details then submits the invoice. The third datapage throws console errors running the sig pad script. If I move the third datpage (the page that contains the signature script) to the top of the html page above the 1st and 2nd datapages the sigpag works correctly. Proving the script works only if it is contained within the first embedded datapage. To work around this I created an HTML popup window that handles the signature. except now I find that I must have the signature script within the third datpage. Any help on getting the sigpad working on an additional embedded datapage is greatly appreciated.
  14. The custom batch report works good. Is there a way to to save your session selections, so you dont have to go through the selection process every time? Thank You Mathilda
  • Create New...