Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SharePoint JavaScript更新选项字段.set\u选项不存在_Javascript_Jquery_Sharepoint_Csom_Sharepoint Jsom - Fatal编程技术网

SharePoint JavaScript更新选项字段.set\u选项不存在

SharePoint JavaScript更新选项字段.set\u选项不存在,javascript,jquery,sharepoint,csom,sharepoint-jsom,Javascript,Jquery,Sharepoint,Csom,Sharepoint Jsom,我正在使用SharePoint托管的加载项,该加载项有一个JavaScript组件,我想使用该组件更新我创建的某个站点列的一些选项值。我看到的所有内容都表明我应该有权访问spChoiceField.Choices.Add(value)或spChoiceField.AddChoice(value)或spChoiceField.set_选项(value),但这些选项对我都无效 我使用的代码如下所示: if(clientContext!=undefined&&clientContext!=null){

我正在使用SharePoint托管的加载项,该加载项有一个JavaScript组件,我想使用该组件更新我创建的某个站点列的一些选项值。我看到的所有内容都表明我应该有权访问spChoiceField.Choices.Add(value)或spChoiceField.AddChoice(value)或spChoiceField.set_选项(value),但这些选项对我都无效

我使用的代码如下所示:

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

我希望fieldChoice提供一个add函数,但它没有

我查看了以下文章:

谢谢,,
Duncan

在“我的本地”中测试脚本,以更新SharePoint托管加载项中主机web的选择字段

<%-- 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>

var appWebContext;
var列表结果;
var hostweburl;
$(文档).ready(函数(){
更新Echoice();
});
函数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\u availableFields().getByTitle(fieldTitle),SP.fieldChoice);
appWebContext.load(fieldChoice);
appWebContext.executeQueryAsync(函数(){
var newValues=“NewOption”//strStatusValues.split(“,”);
var currentChoices=fieldChoice.get_choices();
//对于(var i=0;i
正在初始化。。。


No Choices变量定义在我的脚本中,这是完整的代码(App.js由项目模板生成,我没有更改任何内容)这是我最初评论的意思。我必须添加var deferred=new$.deferred();使之生效。我希望在我的Add-in.js中包含代码。我将上面的代码添加到aspx文件中,然后将下面的代码添加到我的Add-in.js中(所有上面的代码在注释中没有空间)。var currentChoices=fieldChoice.get_choices();此操作失败,因为属性或字段选项尚未初始化。我尝试在上面添加var选项,但没有成功。我缺少什么?当我创建页面时,它没有包含上面显示的代码。这是SharePoint托管的C#项目的JavaScript。看起来我必须执行var fieldChoice=n之类的操作ew SP.FieldChoice();在代码后面执行此操作后,我可以调用FieldChoice.set_choices(choiceId);。问题是var FieldChoice=new SP.FieldChoice();在运行时引发异常:JavaScript运行时错误:Sys.ArgumentNullException:Value不能为null。参数名称:context。虽然我还没有让它工作,但我离它更近了。以下操作:-在clien的成功函数中编写语句以查找要修改的字段-让clientContext.executeQueryAsync执行tContext.executeQueryAsync您将拥有set_choice函数。-成功函数执行更新,然后您再次调用clientContext.executeQueryAsync以更新字段。
<%-- 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>