Home › Forums › vLooup for SharePoint › Creating a ‘bill-of-materials’ type structure
- This topic has 1 reply, 2 voices, and was last updated 4 years, 3 months ago by Alexander Bautz.
-
AuthorPosts
-
-
July 29, 2020 at 21:17 #31023
Hi Alexander –
Am looking to implement a semi bill of materials type structure for a dependency type constructParent list: “Deliverables” (imagine a list of business deliverable for a team”
Child List: “Dependencies” this list defines the predecessor / successor relationship between two deliverables. Using Vlookup to created the parent child relationship between Deliverables –> Dependencies. “dependencies” has a standard SP Lookup for the related (subordinate) Deliverable called “Related Deliverable”. All works perfectly.Use Case: is I would like to filter the list of Deliverables presented in the “Related Deliverables” lookup based on another lookup (or text) field in the child/Dependency listitem that is in context (CurrentItem} in EditForm or NewForm
Deliverables list has approx 600 items in it, which is a bother to scroll through
The field I want to use to filter should cut it down to a max of 20 or so.
The field I want to use to filter is NOT a multi select – and using the same underlying SP list as the source for the lookup in both the Deliverables list, and the Dependency listSorry if this is too much of a ‘how too’ – and thanks for all of your support over the years!
-
July 30, 2020 at 17:33 #31031
I created this simple filter for a multilookup field – maybe you can use it as a starting point and see what you can do.
Add this to your Custom JS:
function filterMultiLookup(elm, fin) { var s = jQuery(elm).text().toLowerCase(); if (s === "") { jQuery(elm).addClass("customFilterEmpty"); } else { jQuery(elm).removeClass("customFilterEmpty"); } } function applyMultiLookupFilter(fin) { var s = jQuery("#filter_" + fin).text().toLowerCase(); jQuery("#dffs_" + fin + " select:first option").each(function() { if (jQuery(this).text().toLowerCase().match(s) || jQuery(this).val() === "0") { if (jQuery(this).parent().is("span")) { jQuery(this).unwrap().show(); } } else { if (!jQuery(this).parent().is("span")) { jQuery(this).prop("selected", false).wrap("<span>").hide(); } } }); } function addFilterToMultilookup(fin) { jQuery("#dffs_" + fin).find("td.ms-formbody").prepend("<div style='margin-bottom:4px;'><div id='filter_" + fin + "' placeholder='Type here to filter the list...' class='customFilter customFilterEmpty' contenteditable='true' onkeydown='if(event.keyCode===13){applyMultiLookupFilter(\"" + fin + "\");return false;}' onkeyup='filterMultiLookup(this,\"" + fin + "\")'></div><input type='button' onclick='applyMultiLookupFilter(\"" + fin + "\")' value='Filtrer' /></div>"); } addFilterToMultilookup("MultiLookupPartNumber");
Just change the fieldinternalname in the addFilterToMultilookup function call in the last line.
Also add this to your Custom CSS:
/* Filter over multilookup */ .customFilter{ width:300px; display:inline-block; margin-bottom:2px; padding:2px 4px; border:1px silver solid; cursor:text; } .customFilterEmpty::before { content: attr(placeholder); color: #c5c5c5; }
Alexander
-
-
AuthorPosts
- You must be logged in to reply to this topic.