none
Вывод компании и отдела пользователя создавшего элемент списка RRS feed

  • Вопрос

  • Добрый день.

    Помогите.

     Есть большой список и потребовалось вывести в отдельные поля компанию, отдел, емайл пользователя создавшего данный элемент, эта информация есть в профиле пользователя.

    Как сопоставить данные из Списка сведений пользователя и полем Кем создано????

    6 октября 2016 г. 10:35

Ответы

  • я же написал, что можно пойти двумя путями:

    1. добавить поле типа Пользователь. скрыть его от всех средствами js. и при создании элемента 

    а. заполнить это поле текущим пользователем

    б. получить из поля требуемые данные. и записать их в поля 

    2. получить текущего пользователя и сделать REST запрос службе UPS. ПОлучить требуемые свойства и записать их в поля.


    мой блог Немного о SharePoint

    • Помечено в качестве ответа Natalya_35 12 октября 2016 г. 8:18
    10 октября 2016 г. 7:50
    Модератор

Все ответы

  • Добрый день.

    я бы воспользовался PowerShell

    если знакомы с ним, то у меня было описано как записать свойства в UPS

    Экспорт дня рождения из BDC в User Profile с помощью PowerShell

    Вам же потребуется изменить запрос.

    т.е. пробежаться по всем элементам списка и для каждого элемента сделать запрос к UPS передавая туда логин сотрудника.


    мой блог Немного о SharePoint

    6 октября 2016 г. 11:05
    Модератор
  • Были мысли сделать через PowerShell,но данный список дополняется и это будет не одноразовая работа. т.е. по шедулеру ночью запускать обработчик ( в списке уже почти 4000 элементов.)

    Тогда можно сразу выгружать в Excel  и в нём настроить фильтры, отчеты и отправляить пользователю по почте.

    Это как вариант, будут ещё какие-нибудь предложения?

    Как связать список с заполненными полями с другим списком?

    Способ 2. Можно написать рабочий процесс или PowerShell запускать его только для необработанных элементов. Воспользовавшись вашим блогом, Владимир http://kaplin-vladimir.blogspot.ru/2016/06/powershell.html

    • Изменено Natalya_35 6 октября 2016 г. 11:25
    6 октября 2016 г. 11:18
  • задача делится на две

    1. в новых элементах сделать автозаполнение 

    добавить поле (скрыв его отпользователей ) и сделать как тут Заполнение свойств сотрудника при выборе его в People picker. 

    2. в существующих через powerShell


    мой блог Немного о SharePoint

    6 октября 2016 г. 12:05
    Модератор
  • что бы заполнить текущего пользователя в поле типа пользователь 

    function fillingCurrentUser(fieldId)
    {
    	//var currentUser;
    	// Ensure that the SP.js is loaded
    	if (SP.ClientContext != null) {
    	  SP.SOD.executeOrDelayUntilScriptLoaded(getCurrentUser, 'sp.js');
    	}
    	else {
    	  SP.SOD.executeFunc('sp.js',null, getCurrentUser);
    	}
    	
    	
    	var currentUser;
    	function getCurrentUser() {
    		
    	  var context = new SP.ClientContext.get_current();
    	  var web = context.get_web();
    	  currentUser = web.get_currentUser();
    	//  console.log(currentUser);
    	  context.load(currentUser);
    	  context.executeQueryAsync(onSuccessMethod, onRequestFail);
    	}
    
    	function onSuccessMethod(sender, args) {
    	  var account = currentUser.get_loginName();
    	  var currentUserAccount = account.substring(account.indexOf("|") + 1);
    	 // console.log(currentUserAccount);
    	  //console.log(currentUser)
    	  // заполение поля
    	  SetPeoplePickerValue(fieldId, currentUserAccount ) ;	  
    	}
    	// This function runs if the executeQueryAsync call fails.
    	function onRequestFail(sender, args) {
    	 // console.log('request failed' + args.get_message() + '\n' + args.get_stackTrace());
    	}	
    	
    };
    
    function SetPeoplePickerValue(fieldId, userName) {
    	var peoplePickerDiv = $("[id^='" +fieldId+"_']")
    	var peoplePickerEditor = $("input[id^='" + fieldId + "']");
    	var spPeoplePicker = SPClientPeoplePicker.SPClientPeoplePickerDict[peoplePickerDiv[0].id];
    		// Кэш
    	var cache = spPeoplePicker.PPMRU;
    	// Сбрасываем кэш
    	cache.ResetCache();	
    	peoplePickerEditor.val(userName);
    	spPeoplePicker.AddUnresolvedUserFromEditor(true);
    };
    использовать 
    fillingCurrentUser("Employee"); // где указывается id поля



    мой блог Немного о SharePoint

    6 октября 2016 г. 12:10
    Модератор
  • это один из вариантов

    еще можно не добавлять поле Пользователь, а пойти по другому пути.

    получить текущего пользователя

    спросить у UPS его свойства (через rest)

    заполнить полученное


    мой блог Немного о SharePoint

    6 октября 2016 г. 12:11
    Модератор
  • У меня пришла другая идея, чтобы данные были актуальные, добавить поле подстановки из Списка сведений пользователя а поля отображать этого списка. Само поле заполнять рабочим процессом копируя поле кем создано. Думаете получится?
    6 октября 2016 г. 12:25
  • не люблю РП
    дополнительно грузят сервер и выполняются после сохранения элемента. 
    так же могут быть конфликты сохранения, когда пользователь вдруг решил повторно отредактировать элемент, а РП еще не отработал.

    мне последнее время нравится работать через js


    мой блог Немного о SharePoint

    6 октября 2016 г. 13:19
    Модератор
  • пока js использую только для наведения "красоты". У этого списка уже есть РП, проверка результата.

    В голове пока не сложилось как можно через js взять поле Кем создано, найти соответствие в списке пользователей и записать в поле подстановки. Если поможете, постараюсь реализовать через js. Самой стало интересно попробовать.

    6 октября 2016 г. 13:57
  • я же написал, что можно пойти двумя путями:

    1. добавить поле типа Пользователь. скрыть его от всех средствами js. и при создании элемента 

    а. заполнить это поле текущим пользователем

    б. получить из поля требуемые данные. и записать их в поля 

    2. получить текущего пользователя и сделать REST запрос службе UPS. ПОлучить требуемые свойства и записать их в поля.


    мой блог Немного о SharePoint

    • Помечено в качестве ответа Natalya_35 12 октября 2016 г. 8:18
    10 октября 2016 г. 7:50
    Модератор
  • первый вариант немного проще, т.к. уже почти все есть, но имеет минус - доп поле. которое является посредником, но не требуется как таковое.

    второй вариант нужно реализовывать. у меня были подходы. но готового кода нет.


    мой блог Немного о SharePoint

    10 октября 2016 г. 7:52
    Модератор