Лучший отвечающий
"SPClientPeoplePicker is not defined" Sharepoint 2013

Вопрос
-
Добрый день, кастомизирую форму редактирования элемента списка, добавляю ClientPeoplePicker по статье http://ulmaskulov.blogspot.ru/2014/08/sharepoint-2013-clientpeoplepicker.html
Добавил код на форму создания - работает без нареканий.
Пытаюсь адаптировать форму редактирования путем вставки в "редактор сценариев (Script Editor)" следующего кода
<script language="javascript" type="text/javascript" src="http://document/bills/scripts/jquery-1.11.2.min.js"></script> <script language="javascript" type="text/javascript" src="http://document/bills/scripts/jquery.SPServices-2014.02.min.js" xmlns:ddwrt2="urn:frontpage:internal"></script> <SharePoint:ScriptLink name="clienttemplates.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="clientforms.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="cui.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="autofill.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="sp.RequestExecutor.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="sp.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="sp.runtime.js" runat="server" LoadAfterUI="true" Localizable="false" /> <SharePoint:ScriptLink name="sp.core.js" runat="server" LoadAfterUI="true" Localizable="false" /> <script language="javascript" type="text/javascript"> // Заполняем поля в ClientPeoplePicker var UserFieldPP = $().SPServices.SPFindPeoplePicker({ peoplePickerDisplayName: "Кто согласовывает"}); var UserFieldPPPeopleList = UserFieldPP.currentValue.split(";"); UserFieldPPPeopleList.pop(); var picker = SPClientPeoplePicker.SPClientPeoplePickerDict["ctl00_ctl35_g_aa29397d_5f3f_414d_b2a5_b5c63deea1aa_UserFieldCPP_TopSpan"] for (i = 0; i < UserFieldPPPeopleList.length; i++) { var name = UserFieldPPPeopleList[i]; $("#ctl00_ctl35_g_aa29397d_5f3f_414d_b2a5_b5c63deea1aa_UserFieldCPP_TopSpan_EditorInput").val(name); picker.AddUnresolvedUserFromEditor(true) } </script>
Получаю ошибку SPClientPeoplePicker is not defined.
Как избежать этой ошибки?
Шарик только изучаю, прошу сильно не пинать =)
- Изменено Леонид Леонидович 3 февраля 2015 г. 12:51
3 февраля 2015 г. 12:49
Ответы
-
Не хватало вот такой строки
<script language="javascript" type="text/javascript" src="http://document/_layouts/15/clientpeoplepicker.js"></script>
После её добавления всё заработало как нужно.
Выкладываю код как работает у меня на форме редактирования:
<script language="javascript" type="text/javascript" src="http://document/bills/scripts/jquery-1.11.2.min.js"></script> <script language="javascript" type="text/javascript" src="http://document/bills/scripts/jquery.SPServices-2014.02.min.js" xmlns:ddwrt2="urn:frontpage:internal"></script> <script language="javascript" type="text/javascript" src="http://document/_layouts/15/clientpeoplepicker.js"></script> <script language="javascript" type="text/javascript"> SP.SOD.executeOrDelayUntilEventNotified(function () { UserFieldPP = $().SPServices.SPFindPeoplePicker({ peoplePickerDisplayName: "Кто согласовывает" }); UserFieldPPPeopleList = UserFieldPP.currentValue.split(";"); UserFieldPPPeopleList.pop(); picker = SPClientPeoplePicker.SPClientPeoplePickerDict["UserFieldCPP_TopSpan"]; for (i = 0; i < UserFieldPPPeopleList.length; i++) { name = UserFieldPPPeopleList[i]; $("#UserFieldCPP_TopSpan_EditorInput").val(name); picker.AddUnresolvedUserFromEditor(true) } }, "sp.bodyloaded"); function PreSaveAction() { // Заполняем поля в PeoplePicker var arrUserField = []; $("#ctl00_ctl35_g_aa29397d_5f3f_414d_b2a5_b5c63deea1aa_UserFieldCPP_TopSpan span span span[class='ms-entity-resolved']").each(function(index, elem){ arrUserField.push($(this).text()); }); var strUserField = arrUserField.join(";"); $().SPServices.SPFindPeoplePicker({ peoplePickerDisplayName: "Кто согласовывает", valueToSet: strUserField , checkNames: true }); return true; } </script>
Я не в чем не ошибся?
- Изменено Леонид Леонидович 5 февраля 2015 г. 10:02
- Предложено в качестве ответа Alexander Surbashev 5 февраля 2015 г. 15:02
- Помечено в качестве ответа Иван ПродановMicrosoft contingent staff, Moderator 6 февраля 2015 г. 8:53
5 февраля 2015 г. 10:01
Все ответы
-
Для начала стоит прочитать несколько статей:
http://gandjustas.blogspot.com/2013/07/sharepoint-script-on-demand.html
http://gandjustas.blogspot.com/2014/07/sharepoint-script-load.html
http://gandjustas.blogspot.com/2014/05/jquery-sharepoint-what-you-need-to-know.html
Business Solutions Architect, SharePoint Expert, Trainer, Speaker and Author http://gandjustas.blogspot.com/ Join Russian SharePoint Community at https://www.facebook.com/groups/sharepointrussian/
4 февраля 2015 г. 9:52 -
Скорее всего не подгрузились файлы, которые описывают объект , для начала попробуйте обернуть код в функцию и вызвать его так:
setTimeout("fillCPPFromPP();", 1500);}
Попробуйте, если не получится, увеличить с 1500 до 5000. Ну или просто руками из консоли.
Если заработает, значит вам следует крайне внимательно изучить статьи, которые указал gandjustas.
Начать с этой. Это очень важно, так как есть особенности применения JavaScript в SharePoint.Примерно так можно ждать пока что-то необходимое загрузиться в браузер, потом исполниться код с использованием объектов, описанных в ожидаемых скриптах:
SP.SOD.executeOrDelayUntilScriptLoaded( fillCPPFromPP(), 'sp.js');
Но код выше только ждет пока что-то необходимо загрузиться, но не загружает его.
Так что попробуйте использовать это:
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', fillCPPFromPP);
4 февраля 2015 г. 15:25 -
Не хватало вот такой строки
<script language="javascript" type="text/javascript" src="http://document/_layouts/15/clientpeoplepicker.js"></script>
После её добавления всё заработало как нужно.
Выкладываю код как работает у меня на форме редактирования:
<script language="javascript" type="text/javascript" src="http://document/bills/scripts/jquery-1.11.2.min.js"></script> <script language="javascript" type="text/javascript" src="http://document/bills/scripts/jquery.SPServices-2014.02.min.js" xmlns:ddwrt2="urn:frontpage:internal"></script> <script language="javascript" type="text/javascript" src="http://document/_layouts/15/clientpeoplepicker.js"></script> <script language="javascript" type="text/javascript"> SP.SOD.executeOrDelayUntilEventNotified(function () { UserFieldPP = $().SPServices.SPFindPeoplePicker({ peoplePickerDisplayName: "Кто согласовывает" }); UserFieldPPPeopleList = UserFieldPP.currentValue.split(";"); UserFieldPPPeopleList.pop(); picker = SPClientPeoplePicker.SPClientPeoplePickerDict["UserFieldCPP_TopSpan"]; for (i = 0; i < UserFieldPPPeopleList.length; i++) { name = UserFieldPPPeopleList[i]; $("#UserFieldCPP_TopSpan_EditorInput").val(name); picker.AddUnresolvedUserFromEditor(true) } }, "sp.bodyloaded"); function PreSaveAction() { // Заполняем поля в PeoplePicker var arrUserField = []; $("#ctl00_ctl35_g_aa29397d_5f3f_414d_b2a5_b5c63deea1aa_UserFieldCPP_TopSpan span span span[class='ms-entity-resolved']").each(function(index, elem){ arrUserField.push($(this).text()); }); var strUserField = arrUserField.join(";"); $().SPServices.SPFindPeoplePicker({ peoplePickerDisplayName: "Кто согласовывает", valueToSet: strUserField , checkNames: true }); return true; } </script>
Я не в чем не ошибся?
- Изменено Леонид Леонидович 5 февраля 2015 г. 10:02
- Предложено в качестве ответа Alexander Surbashev 5 февраля 2015 г. 15:02
- Помечено в качестве ответа Иван ПродановMicrosoft contingent staff, Moderator 6 февраля 2015 г. 8:53
5 февраля 2015 г. 10:01 -
Ты ошибся в том, что выбрал клиентский скрипт для решения этой задачи.
Business Solutions Architect, SharePoint Expert, Trainer, Speaker and Author http://gandjustas.blogspot.com/ Join Russian SharePoint Community at https://www.facebook.com/groups/sharepointrussian/
5 февраля 2015 г. 11:14