Sharepoint 2013 Javascript -获取列表字段
Sharepoint 2013 Javascript - Get List Fields
我在SharePoint 2013开发和JavaScript的双重学习曲线。
请参考下文
function GetListFields(listname, viewname, ResultCallBackFunction)
{
var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
if (viewname == "")
{
var view = list.get_views().getByTitle(viewname);
var listFields = view.get_viewFields();
}
else
{
this.listFields = list.get_fields().getByInternalNameOrTitle("Title");
}
clientContext.load(this.listFields);
clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed);
function onListFieldsQuerySucceeded()
{
console.log(listFields.get_fields().getByInternalNameOrTitle("Title").get_internalName());
var fldArray = new Array();
var fieldEnumerator = listFields.getEnumerator();
while (fieldEnumerator.moveNext())
{
var oField = fieldEnumerator.get_current();
fldArray.push(oField);
}
ResultCallBackFunction(fldArray);
}
function onListFieldsQueryFailed()
{
alert("Something went wrong. The End is Nigh.");
}
}
目的是调用GetListFields返回一个包含列表字段名的数组。这将在"console.log...."行返回错误"无法获取未定义或null引用的属性'get_fields'"。请注意,这是为了我的调试。
如果我更改函数GetListFields的代码,如下所示:
var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
if (viewname == "")
viewname = "All Items";
var view = list.get_views().getByTitle(viewname);
this.listFields = view.get_viewFields();
我确实得到了一个结果,但这包含一个名为"LinkTitle"的字段,我没有在我的列表中,因为我已经重命名了这个。我错过了什么?
更进一步,当使用
时,我得到了一个错误var listFields = ...
修复
this.listFields = ...
但不明白两者的区别
感谢您的帮助和指点。
我花了一点时间在我的Sharepoint 2013环境中测试了你的代码。
我做了一些改变,现在它可以工作了。
您可以看到下面的结果脚本。
下面是关于结果数组中字段名的一些重要信息。
Sharepoint返回的视图中字段的名称是内部名称,而不是字段的标题。
这就是为什么你得到LinkTitle而不是你的字段的真正标题的原因。
当您在Sharepoint界面中创建一个字段时,Sharepoint会为该字段创建一个标题,并根据该标题创建一个内部名称。
例如,如果我创建一个名为«my test field»的字段,Sharepoint将显示该字段的标题为«my test field»,内部名称为«my_x0020_test_x0020_field»。
<script>
function GetListFields(listname, viewname, ResultCallBackFunction)
{
var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
var listFields;
var view;
var defaultViewName = 'All Items';
if (viewname === "")
{
viewname = defaultViewName;
}
view = list.get_views().getByTitle(viewname);
listFields = view.get_viewFields();
clientContext.load(listFields);
clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed);
function onListFieldsQuerySucceeded()
{
var fldArray = new Array();
var fieldEnumerator = listFields.getEnumerator();
while (fieldEnumerator.moveNext())
{
var oField = fieldEnumerator.get_current();
fldArray.push(oField);
}
ResultCallBackFunction(fldArray);
}
function onListFieldsQueryFailed()
{
alert("Something went wrong. The End is Nigh.");
}
}
function MyCallBack(fieldArray) {
for (var x=0;x<fieldArray.length;x++) {
console.log(fieldArray[x]);
}
}
</script>
<a id="callGetListFields" href="#" onclick="GetListFields('MyListName','MyViewName', MyCallBack);">Call function GetListFields</a>
希望这有帮助!
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 只有在HTML表单中选择了某个下拉列表时,才需要字段
- Qualtrics(Javascript)-矩阵表-用下拉列表替换文本输入字段
- 根据另一个字段选择获取新值后更新下拉列表内容
- 如何在Sencha Touch应用程序的选择字段内自定义列表
- 如何检测从数据列表中选择时更改的输入字段
- 仅返回嵌入文档列表中的某些字段
- jQuery ui自动完成下拉列表中的两个字段
- 使用基于值的jQuery代码更改SharePoint列表字段颜色
- 提交带有已使用jQuery移动的列表框项目的隐藏字段
- 如何使用 couchdb 列表函数从 couchdb 视图结果中获取特定字段
- 从动态生成的输入字段中获取下拉列表中的数据,而无需保存值 - jquery
- 下拉列表自动填充到页面上的文本(非输入字段)中
- 在下拉列表中选择后,tr 中的输入字段不显示
- 获取剑道网格中已修改字段的列表
- 如何使用jQuery从数据列表中查找隐藏字段值
- AngularJS单击以编辑下拉列表等字段
- 选择其他字段元素时如何重置选择选项下拉列表
- 选择下拉列表时,按角度中的多个字段排序
- 当我尝试打印到文本区域字段中时,数据被[对象节点列表]替换