Delete "button" on child item with refresh for document library

Home Forums vLooup for SharePoint Delete "button" on child item with refresh for document library

Viewing 22 reply threads
  • Author
    Posts
    • #9968
      chgrnet
      Participant

        Is there a way for you to add a delete button option associated with a child item that shows in a parent list? And once the item is deleted, refresh your vLookup list?

      • #9993
        avala
        Participant

          On a similar note, when you delete a child item from the “popup” window it refreshes the parent item- loosing any work you may have done. Would love to see this “fixed.”

        • #10072
          Alexander Bautz
          Keymaster

            I’m not sure how to prevent the automatic refresh of the parent when deleting a child item in a dialog, but you can add a delete button to vLookup like described below.

            Add this code to vLookup:
            In the ViewFields section in the vLookup backend, add a “custom field” (not an actual field in the list) by adding this in the “Field” input:

            [Custom field]

            Then add this to the “Special configuration”:

            {"function":"init_delete_vLookuChild"}

            Then add this in the custom js textarea:

            function init_delete_vLookuChild(a,item){
            	return "<span style='cursor:pointer' onclick='doDeleteItem(\""+item.get_item("ID")+"\")'>Delete</span>";
            }
            
            function doDeleteItem(id){
            	if(confirm("Are you sure you want to delete this item?")){
            		var dRes = spjs.utility.deleteItem({"listName":"New Task(s)","id":id});
            		if(dRes.success){
            			$("#vLookupManualRefresh_vLookupTasks").click();
            		}
            	}
            }

            PS: Change the field name “vLookupTasks” for your own field.

            You should now have a custom “link” in your vLookup table to delete the child item.

            Alexander

            • #10348
              chgrnet
              Participant

                I apologize if I am missing something simple, but when I follow these instructions, I get the error I attached. Did I setup the ViewField correctly? Maybe I need to create an actual field?

            • #10365
              Alexander Bautz
              Keymaster

                I’m actually not sure when I added support for using [custom field], but just change it for “ID” and it should work.

                Alexander

                • #10371
                  chgrnet
                  Participant

                    I am using 2.252 of vLookup. I did try ID and it did not fail, but it just showed the ID number and there was no link.

                • #10401
                  Alexander Bautz
                  Keymaster

                    This version should handle the custom function setup so it might be something else. Do you see any errors in the developer console (hit F12 > Console)?

                    Alexander

                    • #10411
                      chgrnet
                      Participant

                        No errors, just what I included in the screen shots above.

                    • #10447
                      Alexander Bautz
                      Keymaster

                        Hi,
                        Are you 100% sure the vLookup frontend file is up to date in the form?

                        Alexander

                      • #12175
                        Michal Riha
                        Participant

                          Hi,
                          I have no error, but nothing is deleted.
                          I try change listName “New Task(s)” to my name of document library but with no success.

                          var dRes = spjs.utility.deleteItem({"listName":"New Task(s)","id":id});

                          Michal

                        • #12177
                          Michal Riha
                          Participant

                            I solved it. For child document library – delete document. It is not possible delete via item ID but you need exact document url.
                            Here it is – JS in textarea:

                            
                            
                            function init_delete_vLookuChild(a,item){
                            	return "<span style='cursor:pointer' onclick='deleteItem2(\""+ item.get_item('FileDirRef') + "/"+ item.get_item('FileLeafRef') + "\")'>Smazat</span>";
                            }
                            
                            function deleteItem2(URL,fin){
                            	var r = confirm("Smazat přílohu:" + URL);
                            	if (r == false) return;
                            	var clientContext;
                            	var oWebsite;
                            	var fileUrl=URL;
                            	clientContext = new SP.ClientContext.get_current();
                            	oWebsite = clientContext.get_web();
                            	clientContext.load(oWebsite);
                            	clientContext.executeQueryAsync(
                            		function () 
                            		{
                            			this.fileToDelete = oWebsite.getFileByServerRelativeUrl(fileUrl);
                            			this.fileToDelete.deleteObject();
                            			clientContext.executeQueryAsync(
                            				Function.createDelegate(this, successHandler),
                            				Function.createDelegate(this, errorHandler)
                            			);
                            			 }, errorHandler);
                            	function successHandler() {
                                  $("#vLookupManualRefresh_vLookupOpravneni").click();
                                  $("#vLookupManualRefresh_vLookupUcet").click();
                                  $("#vLookupManualRefresh_vLookupExistence").click();
                                  $("#vLookupManualRefresh_vLookupDramaturgickyPlan").click();
                                  $("#vLookupManualRefresh_vLookupLiterarniUkazka").click();
                                  $("#vLookupManualRefresh_vLookupPodrobnyPopis").click();
                                  $("#vLookupManualRefresh_vLookupZivotopis").click();
                                  $("#vLookupManualRefresh_vLookupProspekty").click();
                                  $("#vLookupManualRefresh_vLookupPrehledAkci").click();
                                  $("#vLookupManualRefresh_vLookupScenar").click();
                                  $("#vLookupManualRefresh_vLookupVyrocniZpravy").click();
                            	}
                            	function errorHandler()   {alert("Error"); }
                            }

                            I have several vLookups in parent list and I only do not know, how to call “refresh” for particular vLookup – according to vLookup in which I use delete function. Therefore I call vLookupManualRefresh for all of them.
                            Alexander, do you have some idea, how to refresh only current vLookup?
                            Michal

                          • #12235
                            Alexander Bautz
                            Keymaster

                              I’m glad you figured it out. I did not catch that you tried to delete a document.

                              You can use “my method” by adding the “docFullUrl” like this:

                              function init_delete_vLookuChild(a,item){
                              	return "<span style='cursor:pointer' onclick='deleteItem(\""+item.get_item('ID')+"\",\""+ item.get_item('FileDirRef') + "/"+ item.get_item('FileLeafRef') + "\")'>Smazat</span>";
                              }
                              
                              function doDeleteItem(id,docURL){
                              	if(confirm("Are you sure you want to delete this item?")){
                              		var dRes = spjs.utility.deleteItem({"listName":"DocumentLibrary_GUID_OR_DISPLAY_NAME","id":id,"docFullUrl":docURL});
                              		if(dRes.success){
                              			$("#vLookupManualRefresh_vLookupTasks").click();
                              		}
                              	}
                              }

                              Alexander

                              • This reply was modified 8 years, 5 months ago by Alexander Bautz. Reason: Fixed typo
                            • #12747
                              Michal Riha
                              Participant

                                Thanks, your method works perfect.

                                Is it possible to call #vLookupManualRefresh only for affected vLookup? I have 12 vLookups and need refresh only one that I am working with. I can do 12 doDeletexy() functions but I am not sure if it is perfect sollution.

                                Michal

                              • #12781
                                Alexander Bautz
                                Keymaster

                                  Yes, the selector has the field name in it: vLookupManualRefresh_vLookupTasks so you can target one field specifically.

                                  You can also call the function like this:

                                  spjs.vLookup._init("vLookupTasks",false,true);

                                  Change “vLookupTasks” for your field.

                                  Alexander

                                • #13595
                                  Michal Riha
                                  Participant

                                    Yes it works – but not in list view. How is it possible to refresh vlookup after item delete in list view?
                                    Many thanks
                                    Michal

                                  • #13613
                                    Alexander Bautz
                                    Keymaster

                                      Hi,
                                      Of course you could reload the entire list view, but I guess this is not what you want?

                                      Currently there is not built in method to refresh only one “line” in a list view. I’ll see if can get this added to a new release, but currently you can remove the deleted like like this snippet shows:

                                      <script>
                                      function init_delete_vLookuChild(a,item){
                                      	return "<span style='cursor:pointer' onclick='doDeleteItem(this,\""+item.get_item("ID")+"\")'>Delete</span>";
                                      }
                                      
                                      function doDeleteItem(elm,id){
                                      	if(confirm("Are you sure you want to delete this item?")){
                                      		var dRes = spjs.utility.deleteItem({"listName":"The list formerly known as Tasks","id":id});
                                      		if(dRes.success){
                                      			if(spjs.vLookup.data.isListView){
                                      				// Remove deleted line in list view
                                      				$(elm).parents(".vLookupTableRow:first").remove();
                                      			}else{
                                      				$("#vLookupManualRefresh_vLookupTasks").click();
                                      			}		 
                                      		}
                                      	}
                                      }
                                      </script>

                                      It will not recalculate “totals”, but it will remove the line from the table.

                                      Alexander

                                    • #13625
                                      Michal Riha
                                      Participant

                                        Hi Alexander,

                                        thanks, but how to change the code for deleting document from document library. I use this code with no “elm”:

                                        
                                        
                                        <script type="text/javascript">
                                        function init_delete_vLookuChild(a,item){
                                            return "<span style='cursor:pointer; font-style: italic; color: gray;' onclick='deleteItem3(\""+item.get_item('ID')+"\",\""+ item.get_item('FileDirRef') + "/"+ item.get_item('FileLeafRef') + "\")'>Delete</span>";  
                                        }
                                        
                                        function deleteItem3(id,docURL){
                                        	if(confirm("Delete document:" + docURL + "?")){
                                        		var dRes = spjs.utility.deleteItem({"listName":"7BBBADE3-1C24-417C-991E-BCF007CD6873","id":id,"docFullUrl":docURL});
                                        		if(dRes.success){
                                        	  spjs.vLookup._init("vLookupVyuctovani",false,true);
                                                  //$("#vLookupManualRefresh_vLookupVyuctovani").click();
                                                }
                                        	}
                                        }
                                        </script>

                                        How to refresh entire list view? I suppose I can use it as well.

                                        Thanks a lot

                                        Michal

                                      • #13650
                                        Alexander Bautz
                                        Keymaster

                                          Try this:

                                          <script type="text/javascript">
                                          function init_delete_vLookuChild(a,item){
                                              return "<span style='cursor:pointer; font-style: italic; color: gray;' onclick='deleteItem3(this,\""+item.get_item('ID')+"\",\""+ item.get_item('FileDirRef') + "/"+ item.get_item('FileLeafRef') + "\")'>Delete</span>";  
                                          }
                                          
                                          function deleteItem3(elm,id,docURL){
                                          	if(confirm("Delete document:" + docURL + "?")){
                                          		var dRes = spjs.utility.deleteItem({"listName":"7BBBADE3-1C24-417C-991E-BCF007CD6873","id":id,"docFullUrl":docURL});
                                          		if(dRes.success){
                                          			// Remove deleted line in list view
                                          			$(elm).parents(".vLookupTableRow:first").remove();
                                          			// Or use this to refresh the page
                                          			// location.href = location.href;
                                                  }
                                          	}
                                          }
                                          </script>

                                          I added “this” to the call to “deleteItem3” and picked up “elm” in the function. The “refresh entire page” looks a bit strange with location.href = location.href, but the reason for not using location.reload() is to avoid the “Confirm form Resubmission” alert in the list view.

                                          Hope this helps,
                                          Alexander

                                        • #13666
                                          Michal Riha
                                          Participant

                                            Works perfect!

                                            Note: ID column must be present in view.

                                            Thanks a lot

                                            Michal

                                          • #18371
                                            Greg Yamane
                                            Participant

                                              Sorry, read through the above trail and am trying to understand what is the solution to delete a child item from a list, not a document from a document library? Is it the solution posted in comment 10072?

                                              https://spjsblog.com/forums/topic/delete-button-on-child-item-with-refresh-for-document-library/#post-10072

                                            • #18394
                                              Alexander Bautz
                                              Keymaster

                                                Hi,
                                                Same approach as in the above snippet, but remove the “docFullUrl” part as this is only used in documents.

                                                Alexander

                                              • #26420
                                                HYM
                                                Participant

                                                  Hi Alex, when we make the vLookup field as read only the delete button will be clickable?

                                                  • #26425
                                                    Alexander Bautz
                                                    Keymaster

                                                      I’ll fix it so any custom button will be disabled when setting it as readonly.

                                                      Alexander

                                                  • #27254
                                                    HYM
                                                    Participant

                                                      HI alex any update please on this?

                                                    • #27266
                                                      Alexander Bautz
                                                      Keymaster

                                                        This was fixed in DFFS package v4.4.4.2 published on July 31, 2019: https://spjsblog.com/dffs/dffs-change-log/#SPJS-vLookup_v22135

                                                        Any buttons (also ones inserted in custom code) will be removed if the field is set as readonly. Please note that only buttons created like this:

                                                        <input type="button" onclick="myClickFunction()" value="My button">

                                                        and not like this:

                                                        <button onclick="myClickFunction()">My button</button>

                                                        This is handled in the DFFS_frontend.css file so this must be updated for this to apply.

                                                        Let me know if you have any questions.

                                                        Alexander

                                                      • #33594
                                                        William Ellis
                                                        Participant

                                                          I have noticed that the ‘Delete’ word does not appear in my ListViews, only on the forms where I am showing the child records. Is there something else I have to do to have the delete functionality in a listview?

                                                          • #33600
                                                            Alexander Bautz
                                                            Keymaster

                                                              Hi,
                                                              The reason it does not work in a list view is because the custom js you have added in the form does not load in a list view. You can try to add a script editor web part in the list view to include the relevant custom js there (wrapped in a script tag).

                                                              Alexander

                                                          • #35628
                                                            Steve
                                                            Participant

                                                              Hi Alex,
                                                              that’s perfect solution for deleting child items in the parent folder, but I’d like to ask you how to delete the parent folder. I’m also sending the attachment where you can see the folder and child item inserted. When I click on “Smazat” it’s asking me if I am aware of deleting the item – I press OK and the child item is deleted.
                                                              But, I’d like to delete also the parent folder.
                                                              Would you help me with that?
                                                              Thank you
                                                              Steo

                                                          Viewing 22 reply threads
                                                          • You must be logged in to reply to this topic.