Hi William

You will likely have to do it in an htmlbox inside of the new webapp.

I do it in the older ASP style and I buid the HTML Code.

To see what we do, visit https://www.grasp.ca/promo and type in promocode WISHINFO

in my ASP HTML document, I call a server side process for each graph

Code:
  <% =oSurvey.Call("msg_pNEWBuildSummary",2,3,GraphType) %><br>
This is my code (it may help you get started)

Code:
Procedure pNEWBuildSummary Integer iSurvey Integer iQuestion String sShowType
    // This procedure will display the results of a survey
    // !!!! THIS IS THE OLD SURVEY METHOD !!!!!!
    String sStatus sLastType
    Integer iLastQuestion  iQuestionCount 
    Number i1 i2 i3 i4 i5 iDontCount iCount iTotal iTotalYes iTotalNo 
    
    
    //Send WriteHtml 'here'
    //Procedure_Return
        
    Clear SV_Answ
    Move iSurvey to SV_Answ.Survey
    Move iQuestion to SV_Answ.Question
    Move '' to SV_Answ.User
    Repeat
        Find gt SV_Answ by Index.1
            [not Found] Move 'done' to sStatus
            [Found] Begin
               If ((SV_Answ.Survey<>iSurvey) or (SV_ANSW.QUESTION<>iQuestion)) Move 'done' to sStatus
               Else Begin
                   //If (SV_Answ.Block<>'Y') Begin
//                                        If ((iLastQuestion<>SurvAnsw.Question) and (iCount>1)) Begin
//                                            If (sLastType='1') Send pWriteFooter (iQuestionCount-iDontCount) iTotal iNotHappy iHappy '1'
//                                            If (sLastType='Y') Send pWriteFooter (iQuestionCount-iDontCount) (iTotalYes+iTotalNo) iTotalNo iTotalYes 'Y'
//                                            Move 0 to iTotal
//                                            Move 0 to iQuestionCount
//                                            Move 0 to iTotalYes
//                                            Move 0 to iTotalNo
//                                            Move 0 to iHappy
//                                            Move 0 to iNotHappy
//                                                                        Move 0 to iDontCount
//                                            Send WriteHtml "<br><br>"
//                                        End
//                                        Move SurvAnsw.Question to iLastQuestion
//                                        Move SurvAnsw.Type to sLastType
                          
                          If (iCount=0) Begin
                                 //send WriteHtml ('<b><i><u>'+(htmlencode(Survline.Question))+'</b></i></u><br>')
                              If (SV_Answ.type<>'T') Send WriteHtml ('<div class="GW_Text">'+(htmlencode(SV_Answ.Question_Asked))+'</div>')
                              //If (SV_Answ.type='T') Send WriteHtml '<div class="GSCxSmall_Grey"><b>(Note: Only non-blank anonymous comments shown)</b></div><br>'
                              Move SV_ANSW.TYPE to sLastType
                          End
                          Increment iCount
                          If ((SV_Answ.Type='1')) Begin
                              //increment iQuestionCount
                              If (SV_Answ.OneToFive=0) Increment iDontCount
                              If (SV_Answ.OneToFive=1) Increment i1
                              If (SV_Answ.OneToFive=2) Increment i2
                              If (SV_ANSW.ONETOFIVE=3) Increment i3
                              If (SV_Answ.OneToFive=4) Increment i4
                              If (SV_Answ.OneToFive=5) Increment i5
                              Move (iTotal+SV_Answ.OneToFive) to iTotal
                          End
                          If ((SV_Answ.Type='Y')) Begin
                              //increment iQuestionCount
                              If (SV_Answ.YN='Y') Increment iTotalYes
                              If (SV_Answ.YN='N') Increment iTotalNo
                              If (SV_Answ.YN='') Increment iDontCount
                          End
                          If ((SV_Answ.Editted>'') and (SV_Answ.Type='T')) Begin
                                                                    //increment iQuestionCount
                              Send WriteHtml ('<div class="'+sShowType+'">'+(htmlencode(SV_Answ.Editted))+' <br>- Survey Response</div>')
                          End
                                        
                   //End
               End
               
            End


    Until (sStatus='done')
    If (sLastType='1') Begin
          If (sShowType='BAR5') Begin        
               Send WriteHtml '<div Class="row">'
               Send WriteHtml '   <div Class="lside">'
               Send WriteHtml '      <div class="GSCxSmall_Grey">5 star</div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="middle">'
               Send WriteHtml '      <div Class="bar-container">'
               Send WriteHtml ('        <div Style="width: '+(String((100*(i5/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
               Send WriteHtml '      </div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="rside">'
               Send WriteHtml ('     <div class="GSCxSmall_Grey">'+(String(i5))+'</div>')
               Send WriteHtml '   </div>'
               Send WriteHtml '</div>'
               //4
               Send WriteHtml '<div Class="row">'
               Send WriteHtml '   <div Class="lside">'
               Send WriteHtml '      <div class="GSCxSmall_Grey">4 star</div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="middle">'
               Send WriteHtml '       <div Class="bar-container">'
               Send WriteHtml ('         <div Style="width: '+(String((100*(i4/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
               Send WriteHtml '       </div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="rside">'
               Send WriteHtml ('      <div class="GSCxSmall_Grey">'+(String(i4))+'</div>')
               Send WriteHtml '   </div>'
               Send WriteHtml '</div>'
               //3
               Send WriteHtml '<div Class="row">'
               Send WriteHtml '   <div Class="lside">'
               Send WriteHtml '      <div class="GSCxSmall_Grey">3 star</div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="middle">'
               Send WriteHtml '       <div Class="bar-container">'
               Send WriteHtml ('         <div Style="width: '+(String((100*(i3/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
               Send WriteHtml '       </div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="rside">'
               Send WriteHtml ('      <div class="GSCxSmall_Grey">'+(String(i3))+'</div>')
               Send WriteHtml '   </div>'
               Send WriteHtml '</div>'
               //2
               Send WriteHtml '<div Class="row">'
               Send WriteHtml '   <div Class="lside">'
               Send WriteHtml '      <div class="GSCxSmall_Grey">2 star</div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="middle">'
               Send WriteHtml '       <div Class="bar-container">'
               Send WriteHtml ('         <div Style="width: '+(String((100*(i2/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
               Send WriteHtml '       </div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="rside">'
               Send WriteHtml ('      <div class="GSCxSmall_Grey">'+(String(i2))+'</div>')
               Send WriteHtml '   </div>'
               Send WriteHtml '</div>'
               //1
               Send WriteHtml '<div Class="row">'
               Send WriteHtml '   <div Class="lside">'
               Send WriteHtml '      <div class="GSCxSmall_Grey">1 star</div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="middle">'
               Send WriteHtml '       <div Class="bar-container">'
               Send WriteHtml ('         <div Style="width: '+(String((100*(i1/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
               Send WriteHtml '       </div>'
               Send WriteHtml '   </div>'
               Send WriteHtml '   <div Class="rside">'
               Send WriteHtml ('      <div class="GSCxSmall_Grey">'+(String(i1))+'</div>')
               Send WriteHtml '   </div>'
               Send WriteHtml '</div>'
          End
          If (sShowType='PIE3') Begin        
               
               
               Send WriteHtml "<div class='GSCxSmall'>"
               Send WriteHtml ('<span style="font-size:10px; color:#2d71af;"><i class="fas fa-circle"></i> Satisfied or Very Satisfied ('+(String(i4+i5))+')</span><br>')
               Send WriteHtml ('<span style="font-size:10px; color:green;"><i class="fas fa-circle"></i> Neutral ('+(String(i3))+')</span><br>')
               Send WriteHtml ('<span style="font-size:10px; color:red;"><i class="fas fa-circle"></i> Dissatisfied or Very Dissatisfied ('+(String(i1+i2))+')</span><br>')
               Send WriteHtml ('</div>')
               Send WriteHtml ('<div id="piechart'+(String(iSurvey))+'_'+(String(iQuestion))+'"></div>')
               
               Send WriteHtml '<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>'
               
               
               Send WriteHtml '<script type="text/javascript">'
               Send WriteHtml "google.charts.load('current', {'packages':['corechart']});"
               Send WriteHtml "google.charts.setOnLoadCallback(drawChart);"


               Send WriteHtml "function drawChart() {"
               Send WriteHtml "var data = google.visualization.arrayToDataTable(["
               Send WriteHtml "  ['Score', 'Votes'],"
               Send WriteHtml ("  ['Satisfied OR Very Satisfied', "+(String(i4+i5))+"],")
               Send WriteHtml ("  ['Neutral', "+(String(i3))+"],")
               Send WriteHtml ("  ['Dissatisfied OR Very Dissatisfied', "+(String(i1+i2))+"]")
               Send WriteHtml ']);'


               Send WriteHtml ("  var options = {'title':'', 'width':300, 'height':200, ")
               
               Send WriteHtml ("   'colors':['#2d71af', 'green', 'red'],")
               //Send WriteHtml ("   'legend': {position: 'top',maxLines: 3} };")
               //Send WriteHtml ("   'legend': {position: 'labeled'} };")
               Send WriteHtml ("   'legend': {position: 'none'} };")


               Send WriteHtml ("  var chart = new google.visualization.PieChart(document.getElementById('piechart"+String(iSurvey)+'_'+(String(iQuestion))+"'));")
               Send WriteHtml "chart.draw(data, options);"
               Send WriteHtml '}'
               Send WriteHtml '</script>'
               //Send WriteHtml "<div class='GSCxSmall'>** Indidated either Satisfied or Very Satisfied<br>*** Indicated either Dissatisfied or Very Dissatisfied</div>"


               
               
          End
  
    End
    If (sLastType='Y') Begin
        If (sShowType='BAR5') Begin
             //Yes
             Send WriteHtml '<div Class="row">'
             Send WriteHtml '   <div Class="lside">'
             Send WriteHtml '      <div class="GSCxSmall_Grey">Yes</div>'
             Send WriteHtml '   </div>'
             Send WriteHtml '   <div Class="middle">'
             Send WriteHtml '       <div Class="bar-container">'
             Send WriteHtml ('         <div Style="width: '+(String((100*(iTotalYes/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
             Send WriteHtml '       </div>'
             Send WriteHtml '   </div>'
             Send WriteHtml '   <div Class="rside">'
             Send WriteHtml ('      <div class="GSCxSmall_Grey">'+(String(iTotalYes))+'</div>')
             Send WriteHtml '   </div>'
             Send WriteHtml '</div>'
             //No
             Send WriteHtml '<div Class="row">'
             Send WriteHtml '   <div Class="lside">'
             Send WriteHtml '      <div class="GSCxSmall_Grey">No</div>'
             Send WriteHtml '   </div>'
             Send WriteHtml '   <div Class="middle">'
             Send WriteHtml '       <div Class="bar-container">'
             Send WriteHtml ('         <div Style="width: '+(String((100*(iTotalNo/iCount))))+'%; height: 10px; background-color: #4CAF50;"></div>')
             Send WriteHtml '       </div>'
             Send WriteHtml '   </div>'
             Send WriteHtml '   <div Class="rside">'
             Send WriteHtml ('      <div class="GSCxSmall_Grey">'+(String(iTotalNo))+'</div>')
             Send WriteHtml '   </div>'
             Send WriteHtml '</div>'
        End
        If (sShowType='PIE3') Begin        
               
               
               Send WriteHtml "<div class='GSCxSmall'>"
               Send WriteHtml ('<span style="font-size:10px; color:#2d71af;"><i class="fas fa-circle"></i> Yes ('+(String(iTotalYes))+')</span><br>')
               Send WriteHtml ('<span style="font-size:10px; color:red;"><i class="fas fa-circle"></i> No ('+(String(iTotalNo))+')</span><br>')
               Send WriteHtml ('</div>')
               Send WriteHtml ('<div id="piechart'+(String(iSurvey))+'_'+(String(iQuestion))+'"></div>')
               
               Send WriteHtml ('<div id="piechart'+(String(iSurvey))+'_'+(String(iQuestion))+'"></div>')
               Send WriteHtml '<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>'
               
               
               Send WriteHtml '<script type="text/javascript">'
               Send WriteHtml "google.charts.load('current', {'packages':['corechart']});"
               Send WriteHtml "google.charts.setOnLoadCallback(drawChart);"


               Send WriteHtml "function drawChart() {"
               Send WriteHtml "var data = google.visualization.arrayToDataTable(["
               Send WriteHtml "  ['Score', 'Votes'],"
               Send WriteHtml ("  ['Yes', "+(String(iTotalYes))+"],")
               Send WriteHtml ("  ['No', "+(String(iTotalNo))+"]")
               Send WriteHtml ']);'


               Send WriteHtml ("  var options = {'title':'', 'width':300, 'height':200,")
               Send WriteHtml ("   'colors':['#2d71af', 'red'],")
               //Send WriteHtml ("   'legend': {position: 'top',maxLines: 3} };")
               Send WriteHtml ("   'legend': {position: 'none'} };")


               Send WriteHtml ("  var chart = new google.visualization.PieChart(document.getElementById('piechart"+String(iSurvey)+'_'+(String(iQuestion))+"'));")
               Send WriteHtml "chart.draw(data, options);"
               Send WriteHtml '}'
               Send WriteHtml '</script>'
               
               
               
  
        End  
    End
End_Procedure
which ends up creating this in html

Code:
<div class="GW_Text">How would you rate the layout and functionality of the program                                                          </div><div class='GSCxSmall'><span style="font-size:10px; color:#2d71af;"><i class="fas fa-circle"></i> Satisfied or Very Satisfied (61)</span><br><span style="font-size:10px; color:green;"><i class="fas fa-circle"></i> Neutral (5)</span><br><span style="font-size:10px; color:red;"><i class="fas fa-circle"></i> Dissatisfied or Very Dissatisfied (1)</span><br></div><div id="piechart2_3"></div><script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script><script type="text/javascript">google.charts.load('current', {'packages':['corechart']});google.charts.setOnLoadCallback(drawChart);function drawChart() {var data = google.visualization.arrayToDataTable([  ['Score', 'Votes'],  ['Satisfied OR Very Satisfied', 61],  ['Neutral', 5],  ['Dissatisfied OR Very Dissatisfied', 1]]);  var options = {'title':'', 'width':300, 'height':200,    'colors':['#2d71af', 'green', 'red'],   'legend': {position: 'none'} };  var chart = new google.visualization.PieChart(document.getElementById('piechart2_3'));chart.draw(data, options);}</script><br>