vLookup List view with calc column link to Child Items

Forums vLooup for SharePoint vLookup List view with calc column link to Child Items

Tagged: 

Viewing 7 reply threads
  • Author
    Posts
    • #13990
      Brett
      Participant

      HI Alexander,

      Regarding my last Post about vLookup Child Links in a List View:

      Is there a way that I can display the links to the Child Items without using the spjs-Utility? For example: in a calculated column? Or writing the link to a Rich Multi-line Text column?

      The issue I have is when using a custom List View solution (DataTables) rendered with DVWP, which wipes out your spjs-utility and the child items won’t load.

      So a direct link in a column of the Parent List would be great, if it can be done?
      If you need some screen-grabs for visual ref, let me know.

      I await your response 🙂

    • #14019
      Alexander Bautz
      Keymaster

      Hi,
      The vLookup solution works by running a “live” query each time you load the list view. There are no actual references to the child items in the parent itself (apart from the value used in the query to search for the children). This mean you need a completely different solution to make this work without vLookup.

      What you could do is to use code like this in your parent form to create a button (HTML Section in a tab):

      <div style="text-align:right;"><input type="button" onclick="addChild()" value="Add new child without vLookup" /></div>

      Then use this code in Custom JS:

      function addChild(){
          var res, currItems, b = [];
          res = spjs.utility.addItem({"listName":"DFFS_TestList","data":{"Title":"New child item added without vLookup"}});
          if(res.success){
              currItems = $("<div>"+getFieldValue("Links")+"</div>").find("a");
              $.each(currItems,function(i,item){
                  b.push("<a href='"+$(item).attr("href")+"' target='_blank'>Child item</a>");
              });
              b.push("<a href='"+res.listURL+"/DispForm.aspx?ID="+res.id+"' target='_blank'>Child item</a>");
              setFieldValue("Links",b.join("<br>"));
              var options = {
                  title: "My Dialog Title",
                  url: res.listURL+"/EditForm.aspx?ID="+res.id
              };
              SP.UI.ModalDialog.showModalDialog(options);
          }
      }

      Please note that you must change the field name “Links” to match a Rich text field in your list, and the list name “DFFS_TestList” to match either the display name or the GUID of your child list.

      I hope you can make use of this code snippet.

      Alexander

    • #14035
      Brett
      Participant

      Hi Alexander,
      Thanks for your prompt response.
      I tried your code, which is for creating New Child Items, thanks for coding that.
      When I click Save, the dialog box doesn’t close, though it does create 3x of the same Child Item.
      Beer money has been sent for your time.

      I knew this would be a difficult one, so I will explain more and see if this can be done.
      I don’t have an issue with creating the Child items, I have existing child items already created with vLookup and they display fine in the generic Parent List View with your vLookup ListView script is located.

      My issue is when I render that List View using jQuery and Datatables, the Child Items do not display.
      So I’m trying to write the link to each existing Child Item within a column of the Parent List View by either Calculated or DVWP.

      If there is a JavaScript solution that can write a link to a specific parent column once a child item is created, please let me know either way 🙂

      Many thanks.

    • #14104
      Alexander Bautz
      Keymaster

      I see. Use this code snippet in Custom JS:

      function vLookupLinksInRTE(sourceFIN,targetFIN){
      	if(spjs.vLookup.dataObj[sourceFIN] !== undefined){
      		var b = [], c, item, title, link;
      		$(".vLookupViewBtn_"+sourceFIN).each(function(i,td){
      			c = $(td).find("a").attr("onclick");
      			link = c.substring(23,c.indexOf(",")-1);
      			item = spjs.vLookup.dataObj.vLookupTasks[spjs.dffs.data.thisItemID].items[link.split("=")[1]];
      			if(item !== undefined){
      				title = item.Title;
      			}else{
      				title = "Child item";
      			}		
      			b.push("<a href='"+link+"' target='_blank'>"+title+"</a>");
      		});
      		setFieldValue(targetFIN,b.join("<br>"));
      	}	
      }
      
      function dffs_PreSaveAction(){
          vLookupLinksInRTE("vLookupTasks","MultilineRich");
      }

      Change “vLookupTasks” to match your vLookup column name and “MultilineRich” to match your rich text field where you want to store the links.

      Please note that this will only work when adding children from EditForm. It is possible to adapt the code to work in DispForm as well, but it will require some changes.

      Let me know how this works out.
      Alexander

    • #14120
      Brett
      Participant

      Hi Alexander, thanks for providing this code but it still won’t write the link to the column.
      Pasted your code in custom JS of the EditForm of the Parent List, changed the column names in the vLookupLinksInRTE line, to “_vLookupID”,”LinktoActions” (multi-line text column), saved config.
      From editform of Parent item, added a child item using the vLookup link configured on the Edit Form, saved child item, child dialog closed, Note: “LinktoActions” column is showing as blank, saved item.

      From ListView: LinktoActions column remains empty.

      Am I doing this correctly?

      Another way to look at this:
      Exporting the List to Excel, we would like the Child Items need to be shown in Excel also.

      Is there anything else I can try?

      Thanks for your efforts with this.

    • #14143
      Alexander Bautz
      Keymaster

      Hi,
      Could it be that you have multiple versions of the function “dffs_PreSaveAction” in the custom js?

      What do you see if you add an alert above this line:

      alert(b.join("<br>"));
      setFieldValue(targetFIN,b.join("<br>"));

      What do the alert show?

      PS: Do you have the view item button visible in the form? – the code snippet reads the URL from this “link”.

      Alexander

    • #14150
      Brett
      Participant

      Hi Alexander,

      It is now working!
      I managed to find why it wasn’t working, changed vLookupTasks to the name of my internal vLookup column name (I was using the _vLookupID column.)

      Also needed to change the item variable text “vLookupTasks” to the same name.
      So 2x locations in the code.

      Thank you for this, very much appreciated.

      • #14152
        Brett
        Participant

        And to follow on:

        What would I need to add to your script to replace the hyperlink Title to a hyperlink ID number of the Child List Item?
        Is it something with the item variable?

        Thanks,

        Brett

    • #14192
      Alexander Bautz
      Keymaster

      Hi,
      I’m not 100% sure what you mean, but to replace the hyperlink with only the ID you change this line:

      b.push("<a href='"+link+"' target='_blank'>"+title+"</a>");

      like this:

      b.push(link.split("=")[1]);

      If you want the full URL but not the <a> tag you can use this code:
      like this:

      b.push(link);

      Alexander

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