Con SharePoint 2016 e l'aiuto della Web Part Script Editor è possibile disabilitare dei campi nella form di edit in base all'utente collegato.
Campi disabilitati
Campi disabilitati

Come prima cosa bisogna conoscere l'internal name dei campi interessati, ad esempio puoi usare la developer toolbar del browser.
In questo caso il nome interno è la parte prima del guid.
Identifica l'id del controllo
Identifica l'id del controllo
Questo valore servirà poi per popolare l'array ids nel JavaScript che verrà messo nella pagina di edit.

Inserisci la web part script editor nel form di edit e incolla questo JavaScript modificando l'array ids con i corretti nomi interni dei campi

JavaScript

<script>
function sgartDisableFiledByUser() {
  // in questo caso identifco i vari utenti in base al nome con un Regular Expression
  if(/[a-z]+\\pv[0-9]{3,}/i.test(_spPageContextInfo.userLoginName)===true) {
    console.log("Current user: " + _spPageContextInfo.userLoginName);
    // inserire la parte iniziale dell'id del controllo da disabilitare
    // es.: id="Test_x0021_Data_c173f190-5e70-4822-9d13-2a0d3fc34282_$TextField"
    // prendere solo "Test_x0021_Data" (senza l'ultimo underscore)
    var ids = ["Colazione", "Mail", "Test1Utente", "Test_x0021_Data"];
    console.log(" Disabling fileds: " + ids);
    
    var pickerFoundNotLoaded = false;
    var fieldFound = false;
    for(var i=0; i < ids.length; i++) {
    
      var element1 = document.querySelector("[id^='" + ids[i] + "_']");
      if(element1 !== null){
      	fieldFound = true;
      	console.log(" Disabling: " + element1.id + ", value: " + element1.value);
          if(element1.id.indexOf("$ClientPeoplePicker") > 0){
            // people picker
            if(element1.getAttribute("spclientpeoplepicker")==="true"){
              element1.querySelector("[id$='$ClientPeoplePicker_EditorInput']").style.display = "none";
              var aAll = element1.getElementsByTagName("a");
              if(aAll !== null){
                for(var c=0; c < aAll.length; c++) {
                  aAll[c].style.display = "none";
                }
              }
            } else {
              pickerFoundNotLoaded = true;
            }
          } else if(element1.id.indexOf("$DateTimeFieldTopTable") > 0){
            // date time
            element1.querySelector("[id$='$DateTimeFieldDate']").disabled=true;
            element1.querySelector("a").style.display = "none";
            var eHours = element1.querySelector("[id$='$DateTimeFieldDateHours']");
            if(eHours !== null) {
              eHours.disabled = true;
              element1.querySelector("[id$='$DateTimeFieldDateMinutes']").disabled = true;
            }
          }else {
            element1.disabled = true;
          }
      }
    }
  }
  // retry, per essere sicuri che venga eseguito dopo che 
  // il people picker è stato popolato (asincrono)
  // e per gestire eventuali ritardi del browser, soprattutto IE
  if(pickerFoundNotLoaded === true || fieldFound === false){
  	console.log("sgartDisableFiledByUser retry");
  	setTimeout(sgartDisableFiledByUser, 400);
  }
}
SP.SOD.executeFunc("sp.js", "SP.ClientContext", sgartDisableFiledByUser); 
</script>
In questo esempio lo script disabilita i campi per tutti gli utenti che hanno la login (_spPageContextInfo.userLoginName) nella forma dominio\asNNN dove N rappresenta un numero.
Il test sul nome utente viene fatto tramite una Regular Expression.

Il JavaScript gestisce anche i campi complessi come i People Picker o i campi Data e ora, oltre ai normali campi di testo, numerici e select.
Non è stato testato con altri campi come le lookup con molti valori, i campi ti tipo menage metadata ecc...

Inoltre, dato che i campi People Picker vengono valorizzati in modo asincrono rispetto al caricamento della pagina, c'è un sistema di retry, che riprova finché non trova il campo valorizzato. Questo comporta un piccolo ritardo sulla disabilitazione.
Anche per gestire Internet Explorer è stato introdotto lo stesso sistema di sistema di retry.
Attenzione è uno script che agisce lato client, quindi un utente malintenzionato, e capace, può riattivare i campi con la developer toolbar
N.B. Il form di edit ha una url di questo tipo:

URL

http://sharepoint.sgart.local/Lists/NomeElenco/EditForm.aspx?ID=<id>
Se copi la url dal popup, togli la parte finale &IsDlg=1 per poter vedere tutta la ribbon.
Tags:
JavaScript184 Script85 SharePoint498 SharePoint 201668
Potrebbe interessarti anche: