SharePoint JavaScript варианты обновления field.set_choice не существует - PullRequest
0 голосов
/ 09 марта 2020

Я работаю с надстройкой, размещенной в SharePoint, в которой есть компонент JavaScript, который я хотел бы использовать для обновления некоторых значений выбора для одного из созданных мной столбцов сайта. Все, что я вижу, указывает, что у меня должен быть доступ к spChoiceField.Choices.Add (значение), или spChoiceField.AddChoice (значение), или spChoiceField.set_choices (значение), но ни один из них не является действительным для меня.

I я работаю с кодом, который выглядит следующим образом:

if (clientContext! = undefined && clientContext! = null) {

        var web = clientContext.get_web();
        fieldTitle = "TQM Requesting:";
        fieldChoice = clientContext.castTo(web.get_availableFields().getByTitle(fieldTitle), SP.FieldChoice);
        TQMtoAdd = TQMToInsert.value;
        clientContext.load(fieldChoice);

Я ожидаю, что fieldChoice предоставит одну из функций добавления, но это не так .

Я проверил следующие статьи: Как обновить столбец выбора в SharePoint Обновите поле множественного выбора в sharepoint с помощью rest api Поле выбора Sharepoint

Спасибо, Дункан

1 Ответ

0 голосов
/ 10 марта 2020

Протестированный сценарий на моем локальном компьютере для обновления поля выбора веб-узла в размещаемой надстройке SharePoint.

<%-- The following 4 lines are ASP.NET directives needed when using SharePoint components --%>

<%@ Page Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" MasterPageFile="~masterurl/default.master" Language="C#" %>

<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%-- The markup and script in the following Content element will be placed in the <head> of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
    <script type="text/javascript" src="../Scripts/jquery-1.9.1.min.js"></script>
    <SharePoint:ScriptLink Name="sp.js" runat="server" OnDemand="true" LoadAfterUI="true" Localizable="false" />
    <meta name="WebPartPageExpansion" content="full" />

    <!-- Add your CSS styles to the following file -->
    <link rel="Stylesheet" type="text/css" href="../Content/App.css" />

    <!-- Add your JavaScript to the following file -->

    <script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
    <script type="text/javascript" src="/_layouts/15/sp.js"></script>

    <script type="text/javascript" src="../Scripts/App.js"></script>
    <script type="text/javascript">
        var appWebContext;
        var listResult;
        var hostweburl;

        $(document).ready(function () {
            UpdateChoice();
        });

        function UpdateChoice() {
            appWebContext = new SP.ClientContext.get_current();
            hostweburl = decodeURIComponent($.getUrlVar("SPHostUrl"));
            var hostwebContext = new SP.AppContextSite(appWebContext, hostweburl);
            var web = hostwebContext.get_web();
            var fieldTitle = "MyChoice";
            var fieldChoice = appWebContext.castTo(web.get_availableFields().getByTitle(fieldTitle), SP.FieldChoice);
            appWebContext.load(fieldChoice);
            appWebContext.executeQueryAsync(function () {
                var newValues = "NewOption";//strStatusValues.split(",");
                var currentChoices = fieldChoice.get_choices();
                //for (var i = 0; i < newValues.length; i++) {
                //    currentChoices.push(newValues[i]);
                //}
                currentChoices.push(newValues);
                fieldChoice.set_choices(currentChoices);
                fieldChoice.updateAndPushChanges();
                debugger;
                appWebContext.executeQueryAsync(function () {
                    console.log("Added new choice values to the column");
                }, function (sender, args) {
                    deferred.reject(args.get_message());
                });
            },
                function (sender, args) {
                    deferred.reject(args.get_message());
                });
        }


        // jQuery plugin for fetching querystring parameters  
        jQuery.extend({
            getUrlVars: function () {
                var vars = [], hash;
                var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
                for (var i = 0; i < hashes.length; i++) {
                    hash = hashes[i].split('=');
                    vars.push(hash[0]);
                    vars[hash[0]] = hash[1];
                }
                return vars;
            },
            getUrlVar: function (name) {
                return jQuery.getUrlVars()[name];
            }
        });
    </script>
</asp:Content>

<%-- The markup in the following Content element will be placed in the TitleArea of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">
    Page Title
</asp:Content>

<%-- The markup and script in the following Content element will be placed in the <body> of the page --%>
<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">

    <div>
        <p id="message">
            <!-- The following content will be replaced with the user name when you run the app - see App.js -->
            initializing...
        </p>
    </div>

</asp:Content>
...