Showing posts with label SharePoint. Show all posts
Showing posts with label SharePoint. Show all posts

Monday, June 12, 2017

SPUtility.js is a JavaScript library used to make modifications to SharePoint's list forms

SPUtility.js is a JavaScript library used to make modifications to SharePoint's list forms (NewForm.aspx and EditForm.aspx in a survey, custom list or library). It works with SharePoint 2007, 2010, and 2013 (including SharePoint Online / Office 365).
SPUtility.GetSPField('Title').SetValue('Hello world!');
Features:
  • Set or get field values in Document Libraries, all sorts of List forms (custom lists, issues, etc), and survey
  • Make a field read only
  • Hide a field from view
  • No server side code to deploy!
This can be used for:
  • Preventing a user from selecting a value when an item is initially created (ex: Status must be PENDING when the item is created)
  • Hiding fields from a submitter but allowing the field to be edited (or vice versa).
  • Auto-populating the form using a URL with query parameters
  • Auto-populate a list column with a sequential number
  • Hide/Show field on list form based on value from another field

Thanks to authors for making this wonderful utility.

Friday, May 12, 2017

Generic SharePoint Jquery / Javascript functions - 2

This is another part of SharePoint jQuery / Javascript functions.

//Get element from page with partial element id
//elemIdPart is the second half (after GUID) of the client id of hidden input 

function GetElement(elemIdPart) {
var inputElems = document.getElementsByTagName('input');
for (i = 0; i < inputElems.length; i++) {
if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
var inputElement = inputElems[i];
return inputElement;
}
}
}

//Disable element from page with partial element id
//elemIdPart is the second half (after GUID) of the client id of hidden input 

function DisableField(elemIdPart) {
    if (elemIdPart.toString().match("Lookup$") == "Lookup" || elemIdPart.toString().match("Choice$") == "Choice") {
        var selectElems = document.getElementsByTagName('select');
        for (i = 0; i < selectElems.length; i++) {
            if (selectElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                var selectElement = selectElems[i];
                selectElement.style.display = "none";

                var newElem = document.createElement("nobr");
                if (selectElement.selectedIndex >= 0 && selectElement.options[selectElement.selectedIndex])
                    newElem.innerHTML = selectElement.options[selectElement.selectedIndex].text;

                selectElement.parentNode.insertBefore(newElem, selectElement);
                break;
            }
        }
    }    
    else if (elemIdPart.toString().match("DateTimeFieldDate$") == "DateTimeFieldDate") {
        var inputElems = document.getElementsByTagName('input');
        for (i = 0; i < inputElems.length; i++) {
            if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                var inputElement = inputElems[i];
                inputElement.style.display = "none";
                inputElement.parentNode.parentNode.parentNode.parentNode.style.display = "none"; // hide Table
                var newElem = document.createElement("nobr");
                newElem.innerHTML = inputElement.value;
                inputElement.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(newElem);
                break;
            }
        }
    }
    else {
        var thisElem = null;
        var inputElems = document.getElementsByTagName('input');        
        for (i = 0; i < inputElems.length; i++) {
            if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                thisElem = inputElems[i];
                var inputElement = inputElems[i];
                inputElement.style.display = "none";

                var newElem = document.createElement("nobr");
                if (inputElement.type == 'checkbox') {
                    if (inputElement.checked)
                        newElem.innerHTML = 'Yes';
                    else
                        newElem.innerHTML = 'No';
                }
                else {
                    newElem.innerHTML = inputElement.value;
                }
                inputElement.parentNode.insertBefore(newElem, inputElement);
                break;
            }
        }

        if (thisElem == null) { // If type input not found, check in textarea
            var inputElems = document.getElementsByTagName('textarea');
            for (i = 0; i < inputElems.length; i++) {
                if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                    thisElem = inputElems[i];
                    var inputElement = inputElems[i];
                    inputElement.style.display = "none";

                    var newElem = document.createElement("nobr");                   
                    newElem.innerHTML = inputElement.value;
                    inputElement.parentNode.insertBefore(newElem, inputElement);
                    break;
                }
            }
        }
    }

    return 0;
}

// Function to disable lookup fields which have large number of items
function DisableLookUpField(elemIdPart) {
    var inputElems = document.getElementsByTagName('input');

    for (i = 0; i < inputElems.length; i++) {
        if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
            var inputElement = inputElems[i];
            inputElement.style.display = "none"; // hide the input element

            var newElem = document.createElement("nobr");
            newElem.innerHTML = inputElement.value;

            inputElement.nextSibling.style.display = 'none'; // hide the drop down arrow image

            inputElement.parentNode.insertBefore(newElem, inputElement);

            break;
        }
    }

    return 0;
}

//Function to disable people/group picker field in Sharepoint.
Where, 
//elemIdPart is the second half (after GUID) of the client id of hidden input Element ().
//This input element is the first child node of , the starting tag for the people picker field.

function DisablePeoplePickerField(elemIdPart) {
    var inputElems = document.getElementsByTagName('input');

    for (i = 0; i < inputElems.length; i++) {
        if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
            var inputHiddenElement = inputElems[i];

            /*
            Value of the hidden input element is in the format ##.....
            Split the value using # as the separator, the resulting array will have USERACCOUNT(UID) at it's Odd(Even) positions.
            */
            var useraccounts = inputHiddenElement.value.split('#');
            var strUserAccounts = "";
            for (j = 1; j < useraccounts.length; j += 2) {
                strUserAccounts += useraccounts[j] + " ";
            }

            var newElem = document.createElement("nobar");
            newElem.innerHTML = strUserAccounts;

            inputHiddenElement.parentNode.childNodes[2].style.display = 'none';
            inputHiddenElement.parentNode.insertBefore(newElem, inputHiddenElement);

            break;
        }
    }

    return 0;
}


function DisableCascadingLookupField(FieldIdPart) {
    var selectElems = document.getElementsByTagName('select');

    for (i = 0; i < selectElems.length; i++) {
        if (selectElems[i].getAttribute('id').indexOf(FieldIdPart) > -1) {
            var CascadingFieldElem = selectElems[i];
            var strSelectedVals = "";

            for (i = 0; i < CascadingFieldElem.length; i++) {
                if (CascadingFieldElem.options[i].selected)
                    strSelectedVals += CascadingFieldElem.options[i].text + ";";
            }

            var newElem = document.createElement("nobr");
            newElem.innerHTML = strSelectedVals.substr(0, strSelectedVals.length - 1);

            CascadingFieldElem.style.display = 'none';
            CascadingFieldElem.parentNode.insertBefore(newElem, CascadingFieldElem);

            break;
        }
    }

    return 0;
}


//Function to hide fields in forms
//Parameter fieldLabelName is the name of the field label's element.

function HideFieldInDisplayForm(fieldLabelName) {
    var elems = document.getElementsByName(fieldLabelName);
    if (elems.length > 0) {
        var elemToHide = elems[0];
        while (elemToHide.tagName.toLowerCase() != "tr") {
            elemToHide = elemToHide.parentNode //traverse up the TR element
        }
        elemToHide.style.display = 'none';
    }
}

function HideField(elemIdPart) {
    var el = GetField(elemIdPart);
    if (el) {
        while (el.tagName.toLowerCase() != "tr") {
            el = el.parentNode; // breaks if no "tr" in path to root
        }

        el.style.display = "none";
    }
}

function ShowField(elemIdPart) {
    var el = GetField(elemIdPart);
    if (el) {
        while (el.tagName.toLowerCase() != "tr") {
            el = el.parentNode; // breaks if no "tr" in path to root
        }

        el.style.display = "";
    }
}

function HideDateTimeField(elemIdPart) {
    var el = GetField(elemIdPart);
    if (el) {
        while (el.tagName.toLowerCase() != "tr") {
            el = el.parentNode; // breaks if no "tr" in path to root
        }

        el = el.parentNode;

        while (el.tagName.toLowerCase() != "tr") {
            el = el.parentNode; // breaks if no "tr" in path to root
        }

        el.style.display = "none";
    }
}

function ShowDateTimeField(elemIdPart) {
    var el = GetField(elemIdPart);
    if (el) {
        while (el.tagName.toLowerCase() != "tr") {
            el = el.parentNode; // breaks if no "tr" in path to root
        }

        el = el.parentNode;

        while (el.tagName.toLowerCase() != "tr") {
            el = el.parentNode; // breaks if no "tr" in path to root
        }

        el.style.display = "";
    }
}

function GetField(elemIdPart) {
    var ElementField;
    if (elemIdPart.toString().match("Lookup$") == "Lookup" || elemIdPart.toString().match("Choice$") == "Choice") {
        var selectElems = document.getElementsByTagName('select');
        for (i = 0; i < selectElems.length; i++) {
            if (selectElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                ElementField = selectElems[i];
                break;
            }
        }
    }
    if (elemIdPart.toString().match("DropDownChoice$") == "DropDownChoice") {
        var selectElems = document.getElementsByTagName('select');
        for (i = 0; i < selectElems.length; i++) {
            if (selectElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                ElementField = selectElems[i];
                break;
            }
        }
    }
    else if (elemIdPart.toString().match("DateTimeFieldDate$") == "DateTimeFieldDate") {
        var inputElems = document.getElementsByTagName('input');
        for (i = 0; i < inputElems.length; i++) {
            if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                ElementField = inputElems[i];
                break;
            }
        }
    }
    else {
        var inputElems = document.getElementsByTagName('input');
        for (i = 0; i < inputElems.length; i++) {
            if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                ElementField = inputElems[i];
                break;
            }
        }
        if (ElementField) return ElementField;
        inputElems = document.getElementsByTagName('textarea');
        for (i = 0; i < inputElems.length; i++) {
            if (inputElems[i].getAttribute('id').indexOf(elemIdPart) > -1) {
                ElementField = inputElems[i];
                break;
            }
        }
    }

    return ElementField;
}

// Cookie related functions 

function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

You can use above function like below....

$(document).ready(function () {

var inputDateField = GetElement('ID of the element ... you can provide partial ID'); 
inputDateField.onvaluesetfrompicker = function () {
//do something here in funtion.
var titleField = GetElement('ID of Title Field'); //Title Field
title.value = "Nilesh";
title.parentNode.childNodes[0].innerHTML = "Nilesh";
}

inputDateField.onchange = inputDateField.onvaluesetfrompicker;
});

Generic SharePoint Jquery / Javascript functions -1

Below are few very generic Jquery / Javascript functions which can be used by SharePoint developer in daily activities.

var getFileName = function () {
    var chkVisible = $('[id*="_onetidIOFile"]').is(':visible');
    var filename;

    if (chkVisible) {
        filename = $('[id*="_onetidIOFile"]').val() + $("span[dir='ltr']").text();
    }
    else {
        filename = $("[id*='_onetidIOFile']:eq(1), span[dir='ltr']").text();
    }
    return filename;
}

var setTitleField = function (strTitleVal) {
    $("input[Title='Title']").val(strTitleVal);
}

var hideTitleRow = function () {
    $("input[Title='Title']").closest('tr').hide();
}

var hideInputFieldRow = function (fldName) {
    $("nobr:contains('" + fldName + "')").closest("tr").hide();
}

var btnTextChange = function () {
    //setButtonAvailability(
    //currentElem ,
    //strCondition
    //btnValue

    setButtonAvailability(this, 'This file can be Published to SP', 'Publish File');
}


var setButtonAvailability = function (currElem, strCondition, btnValue) {

    //currentElem ,
    //strCondition
    //btnValue

    if ((currElem.innerText === strCondition) && ($("input[value$='" + btnValue + "']").is(":disabled"))) {
        $("input[value$='" + btnValue + "']").prop('disabled', false);
    }
    else if ((currElem.innerText != strCondition)) {
        $("input[value$='" + btnValue + "']").attr("disabled", "disabled");
    }
}


var changeButtonValue = function (btnID, strNewValue) {
    var btnVal = document.getElementById(btnID).value;
    $("input[value$='" + btnVal + "']").attr('value', strNewValue);
}


var IsValidFileName = function (strFileName) {
    var fileNameAdditionalDots = new RegExp("[(?!\.\w*$)\.]");
    var fileNameSpecialCharacters = new RegExp("[~#%&*{}<>':;?/+|\"]");

    if (strFileName !== '') {
        //if (fileNameSpecialCharacters.test(strFileName) || fileNameAdditionalDots.test(strFileName)) {
        if (fileNameSpecialCharacters.test(strFileName)) {
            alert("Please remove the special characters or additional dots from the file name.");
            return false;
        }
        else {
            return true;
        }
    }
    else {
        alert("File name cannot be empty.");
        return false;
    }
}

var ifSelectionSelected = function (strDocType,strFldName) {
    if (strDocType === '' || strDocType === '(None)') {
        alert('Please select value for field '+strFldName);
        return false;
    }
    else {
        return true;
    }
}

var stringEncripte = function (strToEncript) {
    var xorKey = 129;
    var EncryptedString = '';
    for (i = 0; i < strToEncript.length; ++i) {
        EncryptedString += String.fromCharCode(xorKey ^ strToEncript.charCodeAt(i));
    }
    return EncryptedString;
}

var DisableBtnIfPublished = function (isPublishedFieldID, btnValue) {
    var isPublished = GetField(isPublishedFieldID);
    if (isPublished.checked) {
        $("input[value$='" + btnValue + "']").attr("disabled", "disabled");
    }
    else {
        $("input[value$='" + btnValue + "']").prop('disabled', false);
    }
}

var isElementVisible = function (strControl, strControlText) {
    return $(strControl).filter(function () {
        return $(this).text() === strControlText;
    }).is(':visible');
}

var ToggleButtonBehavior = function () {

    if (isElementVisible('div', 'Please select a Document Type.')) {
        $("input[value$='Publish File']").attr("disabled", "disabled");
    }
    else if (isElementVisible('table', 'This file has failed validation. Please see below for details:')) {
        $("input[value$='Publish File']").attr("disabled", "disabled");
    }
    else if (isElementVisible('table', 'This file has passed column name validation')) {
        var isPublishedFldId = $("input[Title='Is Published']").attr('id');
        DisableBtnIfPublished(isPublishedFldId, 'Publish File');
    }
    else {
        $("input[value$='Publish File']").attr("disabled", "disabled");
        setTimeout(ToggleButtonBehavior, 1000);
    }
    
    try {
        SP.SOD.executeOrDelayUntilScriptLoaded(SP.UI.ModalDialog.get_childDialog().autoSize(), 'sp.ui.dialog.js');
    }
    catch (error) {
        /*console.log('Waiting for File Validation.');*/
    } 
}

Wednesday, August 12, 2015

Throttling on a list-by-list basis

Farm Administrator can disable Throttling on a list-by-list basis.  To do this, run the following:

$web = Get-SPWeb http://webURL
$list = $web.Lists["ListName"]
$list.EnableThrottling = $false
$list.Update()


   
To validate the Throttling settings are effective, run:

$list.IsThrottled

If it returns True, the the List has been throttled and it will have more items then he throtle limit.
If it returns false, it has less items then the Throttle limit or throttling has been disabled via the EnableThrottling property.

To re-enable throttling on a list, simply run
 

$list.EnableThrottling = $true
$list.Update()





Tuesday, August 11, 2015

JavaScript module, using jQuery, for manipulating SharePoint form fields from the URL

This is nothing new that I have built but this was one of the requirement where I can not implement custom solution of SharePoint and here it is showing nice and how powerful JQuery and JavaScript for some of nice implementation.
 
I would like to add this as my reference as this is really very handy script which can be used in different scenarios based on URL parameters.

/Lists/Tasks/NewForm.aspx?Title=this is a test of text field

2009-05-31_131517.png

This is what you will get it as text assigned on field text box.

This script file can be used in any module not limited to SharePoint only but any web application.

Reference : https://spff.codeplex.com/

 

Wednesday, November 20, 2013

Knockout JS with SharePoint 2010

1.      Create SharePoint webpart solution.
2.      Add Module to your project.
3.      Add Application page to module along with your Jquery-**.JS and Knockout-2.1.0.js file.
4.      Then add below code to your application page.aspx file.

<asp:Content ID="Content" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <script src="jquery-1.7.2.min.js" type="text/javascript"></script>
    <script src="jquery.tmpl.min.js" type="text/javascript"></script>
    <script src="knockout-2.1.0.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        $(function () {
            InitForm();
        });
        var viewModel;

        function InitForm()
        {
            $.getJSON('/_vti_bin/ListData.svc/MYTESTLIST',
                    function (data) {
                        viewModel = {
                            reports: ko.observableArray(data.d.results),
                            sortByName: function () {
                                this.items.sort(function (a, b) { return a.Title < b.Title ? -1 : 1; });
                            }
                        };
                        ko.applyBindings(viewModel);
                    });
        }
 </script>
    <script id='reportsRowTemplate' type='text/html'>
        <tr>
            <td><span data-bind='text:Id, uniqueName:true' /></td>
            <td><span data-bind='text:Title, uniqueName:true' /></td>
        </tr>
    </script>
     <p>You have <span data-bind='text: reports().length'> </span> report(s)</p>
     <table data-bind='visible: reports().length > 0'>
         <thead>
             <tr>
                 <th align=left>Report ID</th>
                 <th align=left>Report Name</th>
             </tr>
         </thead>
         <tbody data-bind='template: { name: "reportsRowTemplate", foreach: reports }' />
     </table>
     <button data-bind='click: sortByName, enable: reports().length > 0' type='submit'>Sort</button>
 </asp:Content>

Above example uses SharePoint web service and connect to  MYTESTLIST, it will fetch Title from the list and display it on the page.