Differences

This shows you the differences between two versions of the page.

Link to this comparison view

documentation:howto:adrangescript [2017/01/30 17:10] (current)
Line 1: Line 1:
 +====== 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 [[documentation:​latest:​scripting:​]]).
 +
 +<file javascript>​
 +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;
 +}
 +</​file>​