1

I am trying to delete individual delete from Wrapper but i am getting this error.

Too many DML statements

VF Page

<apex:page id="page" controller="AttachmentListWithFilterController" sidebar="false" readOnly="true">
<apex:includeScript value="{!URLFOR($Resource.jQuery, 'js/jquery-1.6.2.min.js')}"/> 
<apex:includeScript value="{!URLFOR($Resource.jQuery, 'js/jquery-ui-1.8.16.custom.min.js')}"/>
<apex:stylesheet value="{!URLFOR($Resource.jQuery, 'css/ui-lightness/jquery-ui-1.8.16.custom.css')}"/>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js"></script>

  <link href="https://cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css" rel="stylesheet"/>

 <script type="text/javascript">

             j$ = jQuery.noConflict();
            j$(function () {
            j$("#example1").dataTable();            
        });          

    </script>

    <apex:actionStatus id="actStatusId" >
                <apex:facet name="start" >
                  <img src="/img/loading.gif" />                    
                </apex:facet>
            </apex:actionStatus>

 <!-- <c:waitScreen >
         <img src="/img/loading32.gif" />
         <div style="font-size:150%;padding:5px">Please Wait....</div>
  </c:waitScreen>     -->    

<script type="text/javascript">

        //This will load as soon as the page is ready and will setup our slider
        var str;
        j$ = jQuery.noConflict();

        j$(document).ready(function(){
          var i=0,a=0;

          str = document.getElementById('{!$Component.form.selectedF}').value;

          var b=document.getElementById('{!$Component.page.form.pb.slidervalue.idInputHiddenMax}').value;

          console.log('Value of b'+b);

            $("#slider-range").slider({ //This line creates a slider on the DIV specified, options are passed arguments, comma separated below
                range: true, //This give the slider and top and bottom
                min: 0, //Min value for slider
                max: b, //Max value for slider

                values: ['{!sSliderFieldMin }','{!sSliderFieldMax }'], //Start values for the slider
                slide: function(event, ui){ //This function executes every time slider is moved and applies the slider values to the inputHidden fields as well as the output below the slider
                    document.getElementById('{!$Component.page.form.pb.slidervalue.idInputHiddenMin}').value = ui.values[0];
                    document.getElementById('{!$Component.page.form.pb.slidervalue.idInputHiddenMax}').value = ui.values[1];
                   $("#amountValue").html( + ui.values[0] + 'KB - ' + ui.values[1] + 'KB');

                    //callfind();
                    //console.log(i++);
                },
                stop:function(event,ui){console.log(ui);callfind();}   
            });  

          $("#amountValue").html( + $("#slider-range").slider("values", 0) + 'KB - ' + $("#slider-range").slider("values", 1) + 'KB');
        });

        function checkMethod(){

         var i=0; 
          str = document.getElementById('{!$Component.form.selectedF}').value;
         var b=document.getElementById('{!$Component.page.form.pb.slidervalue.idInputHiddenMax}').value;

          console.log('Value of b'+b);

            $("#slider-range").slider({ //This line creates a slider on the DIV specified, options are passed arguments, comma separated below
                range: true, //This give the slider and top and bottom
                min: 0, //Min value for slider
                max: b, //Max value for slider

                values: ['{!sSliderFieldMin }',b], //Start values for the slider
                slide: function(event, ui){ //This function executes every time slider is moved and applies the slider values to the inputHidden fields as well as the output below the slider
                    document.getElementById('{!$Component.page.form.pb.slidervalue.idInputHiddenMin}').value = ui.values[0];
                    document.getElementById('{!$Component.page.form.pb.slidervalue.idInputHiddenMax}').value = ui.values[1];

                  $("#amountValue").html( + ui.values[0] + 'KB - ' + ui.values[1] + 'KB');


                    //callfind();
                    //console.log(i++);
                },
                stop:function(event,ui){console.log(ui);callfind();}   
            });  

          $("#amountValue").html( + $("#slider-range").slider("values", 0) + 'KB - ' + $("#slider-range").slider("values", 1) + 'KB');
        }
     </script>

         <script type="text/javascript">
           function selectAllCheckboxes(obj,receivedInputID){
                var inputCheckBox = document.getElementsByTagName("input");
                for(var i=0; i<inputCheckBox.length; i++){
                    if(inputCheckBox[i].id.indexOf(receivedInputID)!=-1){
                        inputCheckBox[i].checked = obj.checked;
                    }
                }
            }  
            function selectThis(ele,id){
                if(ele.checked)
                    str+=id;
                else
                    str = str.replace(id,'');
                document.getElementById('{!$Component.form.selectedF}').value = str;
            }


     </script>



 <apex:pageMessages ></apex:pageMessages>

   <apex:Form id="form">
    <apex:inputhidden id="selectedF" value="{!selectedFiles}"/>
       <apex:actionFunction name="callfind" action="{!searchByRange}" reRender="PGTable" status="actStatusId" />
   <apex:pageBlock id="pb" >
   <apex:pageblockSection title="Select Type" collapsible="false">          
             <apex:selectRadio value="{!Selected}">
                <apex:actionSupport event="onchange" action="{!TakeOther}" reRender="pblock,showOwner,showslider,slidervalue,demoid,example1_wrapper,table" onComplete="checkMethod();"/>
                   <apex:selectoptions value="{!radioValues}" />
            </apex:selectRadio>
   </apex:pageBlockSection>


   <apex:pageBlockSection title="Filter" collapsible="true" columns="2" id="pblock">
                <apex:panelGrid columns="3" id="showOwner">

                   <apex:outputLabel value="Owner" rendered="{!renderName4}"/>

                   <apex:inputField value="{!attachmentToUser.OwnerId}" rendered="{!renderName1}"  id="AttachmentID"   required="false"/> 
                   <apex:inputField value="{!cv.OwnerID}" rendered="{!renderName2}" id="FileID" required="false"/>
                   <apex:inputField value="{!documentToUser.AuthorId}" rendered="{!renderName3}"  id="DocumentID"  required="false"/>
                   <apex:commandButton action="{!searchByOwner}" value="Submit" reRender="DemoRepeat" rendered="{!ShowSumbit}"/> 

                </apex:panelGrid>

           <apex:pageBlockSectionItem id="showslider" >

                        <div id="slider-range" style="font-size: 90%; margin-top: 0.5em;width:100%"></div>
                        <div id="amountValue" style="text-align: center"></div>
                       <apex:actionFunction action="{!searchByRange}" name="myFunction"  reRender="RenderData"/> 

            </apex:pageBlockSectionItem>

               </apex:pageBlockSection>

                  <apex:pageBlockSection columns="1" id="slidervalue">

             <apex:inputhidden value="{!sSliderFieldMin}" id="idInputHiddenMin"/>
             <apex:inputhidden value="{!sSliderFieldMax}" id="idInputHiddenMax"/>

             </apex:pageBlockSection>  

               <center> <apex:commandButton value="Delete Selected" reRender="PGTable" action="{!deleteSelected}" rendered="{!ShowDelete}"/></center>


       <table id="example1" class="table table-bordered table-striped">

        <thead>
            <tr>
                <th>Select CheckBox</th>
                <th>Name</th>
                <th>BodyLength</th>
                <th>Created Date</th>
                <th>Owner Name</th>
                <th>(Click To View)</th>
            </tr>
        </thead>

           <tbody>




           <apex:repeat value="{!wraplist}" id="demoid" var="a">

           <tr>
    <td>  <apex:facet name="header">
                            <apex:inputCheckbox onclick="selectAllCheckboxes(this,'inputId')"/>
                        </apex:facet> 
                        <apex:inputCheckbox value="{!a.selected}" id="inputId" /></td>
    <td> <apex:outputText value="{!a.Name}"/></td>
    <td> <apex:outputText value="{!a.size}"/></td>
    <td> <apex:outputText value="{!a.Mydate}"/></td>
    <td> <apex:outputText value="{!a.OwnerName}"/></td>
    <td>  <apex:commandLink value="View" action="{!viewAttach}" target="_blank" >
                    <apex:param id="Wrapid" name="Attid" value="{!a.index}" assignTo="{!opget}"/>
              </apex:commandLink>&nbsp;
               <apex:commandLink value="Delete" action="{!deleteAttch}" reRender="PGTable">
                      <apex:param id="Deleteid" name="delete" value="{!a.index}" assignTo="{!opget}"/>
                 </apex:commandLink>  </td>
    </tr>


    </apex:repeat>

Controller

public void deleteAttch()
{
    Integer q=opget;
    if(selected=='Attachment')
    {
        Id lid=wraplist.get(q).Attachid;
        system.debug('Deleted id'+lid);
        wraplist.remove(q);
        Attachment a=new Attachment();
        a=[Select id,Name from Attachment where id=:lid];
        system.debug('**********A'+a);
        delete a;



    }else if(selected=='ContentDocument')
    {

        Id lid=wraplist.get(q).Fileid;
        ContentDocument c=new ContentDocument();
        c=[Select id,Title from ContentDocument where id=:lid];
        delete c;
        wraplist.remove(q);


    }else if(selected=='Document')
    {

        Id lid=wraplist.get(q).Docid;
        Document d=new Document();
        d=[Select id,Name from Document where id=:lid];
        delete d;
        wraplist.remove(q);


    }


}
6
  • Suggest you post the actual code of deleteAttch and the fields it depends on. Hard to see a cause from what you have posted. – Keith C Oct 5 '15 at 14:05
  • 2
    Are you by any chance calling the delete method in a loop – Prady Oct 5 '15 at 14:16
  • @KeithC : I have uploaded new version of code – Shantanu Mahajan Oct 5 '15 at 16:30
  • I don't see anything in the code you have listed that would cause a "Too many DML statements" error. Do you have other code such as a trigger that runs when you delete an Attachment that could be causing the error? – Keith C Oct 5 '15 at 17:23
  • 1
    And you are sure no-one else has? Then unless anyone else can spot a problem you will have to add more system.debug output to narrow down where the problem is coming from. Also use any line number information included in the error output. (Checking the "Development Mode" flag on the User you are testing with provides more information in the error page.) Good luck. – Keith C Oct 5 '15 at 17:43
0

Yes there is small problem in code. This was initial code...

<apex:page id="page" controller="AttachmentListWithFilterController" sidebar="false" readOnly="true">

and now try this

 <apex:page id="page" controller="AttachmentListWithFilterController" sidebar="false">

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.