Script to bypass AD range
Active Directory has a default limit for returning values of a multi-valued attribute, called range.
The following script can be used to bypass this limit. You can register it in an external js file (see Scripting).
function getRangeValues(attrName) { var newDataset = new Array(); var rangeStart = null; var rangeEnd = null; var rangeSize = null; var arrayCounter = 0; var tmpDataset = srcBean.getDatasetValuesById(attrName).toArray(); if (tmpDataset.length > 0) { rangeStart = 0 rangeEnd = "*" rangeSize = 0 } else { var attrList = srcBean.getDatasetsNames().toArray() if (attrList != null) { if (attrList.length > 0) { for (var i = 0; i < attrList.length; i++) { if (attrList[i].toString().contains(attrName + ";range")) { var startPos = null var sepPos = null startPos = attrList[i].toString().indexOf(";range=") + 7 sepPos = attrList[i].toString().indexOf("-", startPos) rangeStart = attrList[i].toString().substring(startPos, sepPos) rangeEnd = attrList[i].toString().substring(sepPos + 1) rangeSize = Number(rangeEnd) - Number(rangeStart) break } } } } } if (rangeStart != null) { var tmpAttrName = ""; while (rangeStart != "*") { if (rangeStart == "0" && rangeEnd != "*") { tmpAttrName = attrName + ";range=" + rangeStart.toString() + "-" + rangeEnd.toString() tmpDataset = srcBean.getDatasetValuesById(tmpAttrName).toArray() } else if (rangeStart != "0") { tmpAttrName = "member;range=" + rangeStart.toString() + "-" + rangeEnd.toString() tmpDataset = srcLdap.attribute(srcBean.getMainIdentifier(), tmpAttrName).toArray() } if (rangeEnd == "*") { rangeStart = "*" } if (tmpDataset != null) { if (tmpDataset.length > 0) { for (var i = 0; i < tmpDataset.length; i++) { // Add attribute value processing logic here; // Be sure to explicitly type the array elements to prevent conversion to an object array; newDataset[arrayCounter++] = String(tmpDataset[i]) } if (rangeEnd != "*") { rangeStart = Number(rangeEnd) + 1 rangeEnd = Number(rangeStart) + Number(rangeSize) } } else { rangeEnd = "*" } } else { rangeEnd = "*" } } } return newDataset; }