JSOM/Javascript获取所有其他列的内容类型名称
我有以下方法可以正确地从sharepoint查询中获取列表项,但是内容类型需要特殊处理,并且不会返回JSOM/Javascript获取所有其他列的内容类型名称,javascript,sharepoint,Javascript,Sharepoint,我有以下方法可以正确地从sharepoint查询中获取列表项,但是内容类型需要特殊处理,并且不会返回 function getListItems(listId, camlQueryString, selectProperties){ var deferred = $q.defer(); var context = SP.ClientContext.get_current();
function getListItems(listId, camlQueryString, selectProperties){
var deferred = $q.defer();
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getById(listId);
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(camlQueryString);
var listItems = list.getItems(camlQuery);
//var includesString = "Include(ID,Title,AssignedTo, WorkflowOutcome, ApproverComments, FileRef, WorkflowItemId, Created, Modified)"; // + selectProperties.join(", ") + ")";
if(selectProperties) {
var includesString = convertSelectPropertiesToIncludesString(selectProperties);
context.load(listItems, includesString);
} else {
context.load(listItems);
}
context.executeQueryAsync(
function() {
$log.info("Successfully retrieved list item result");
deferred.resolve(listItems);
},
function(error, errorInfo) {
$log.warn("Retrieving list item result failed");
deferred.reject(errorInfo);
}
);
return deferred.promise;
}
我需要将内容类型名称返回到与另一个字段相同的listitems数组中
我发现了一些示例,但我不确定如何将这些代码集成到我的代码中,因为似乎每个项目都需要双重调用
更新1
我尝试从以下方面使用上述方法:
function GetRelatedBillingDocumentsFromList(selectProperties, currentBillCyclePath, clientCode, jobCodes, engagementCode, enhanceFunctions) {
$log.info("Retrieving related billing documents for bill cycle with name [" + currentBillCyclePath + "]");
var deferred = $q.defer();
var webUrl = _spPageContextInfo.webAbsoluteUrl;
var viewFields = spService.ConvertSelectPropertiesToViewFields(selectProperties);
// query must return the documents for the same client but in other bill cycles not the current one
var camlQuery = '<View>' + viewFields +
'<Query>' +
'<Where>' +
//'<And>' +
'<Eq>' +
'<FieldRef Name="ClientCode" />' +
'<Value Type="Text">'+ clientCode + '</Value>' +
'</Eq>' +
// '<Neq>' +
// '<FieldRef Name="ContentType" />' +
// '<Value Type="Computed">Bill Cycle</Value>' +
// '</Neq>' +
//'</And>' +
'</Where>' +
//'<QueryOptions>' +
// '<ViewAttributes Scope="RecursiveAll" />' +
//'</QueryOptions>' +
'</Query>' +
'</View>';
var billCyclesListId = "{c23bbae4-34f7-494c-8f67-acece3ba60da}";
spService.GetListItems(billCyclesListId, camlQuery, selectProperties)
.then(function(listItems) {
var listItemsWithValues = [];
if(listItems) {
var enumerator = listItems.getEnumerator();
while (enumerator.moveNext()) {
var listItem = enumerator.get_current();
var listItemValues = [];
selectProperties
.forEach(function(propertyName) {
if(propertyName==='ContentType'){
var value = listItem.get_item('ows_ContentType');
}else{
var value = listItem.get_item(propertyName);
}
listItemValues[propertyName] = value;
});
listItemsWithValues.push(listItemValues);
}
}
// Create the full item url
listItemsWithValues.forEach(function(listItem) {
var fileDirRef = listItem["FileRef"];
var id = listItem["ID"];
var serverUrl = _spPageContextInfo.webAbsoluteUrl.replace(_spPageContextInfo.webServerRelativeUrl,"");
var dispFormUrl = serverUrl + fileDirRef + "/DispForm.aspx?ID=" + id;
listItem["FileRef"] = dispFormUrl;
});
var enhancedListItemValues = spService.SpSearchQuery.EnhanceSearchResults(listItemsWithValues, enhanceFunctions);
deferred.resolve(listItemsWithValues);
})
.catch (function (message) {
deferred.reject();
});
return deferred.promise;
}
函数从列表中获取相关计费文档(选择属性、currentBillCyclePath、客户端代码、作业代码、约定代码、增强函数){
$log.info(“检索名为[“+currentBillCyclePath+”]”的账单周期的相关账单文档);
var deferred=$q.deferred();
var webUrl=_spPageContextInfo.webAbsoluteUrl;
var viewFields=spService.ConvertSelectPropertiesToViewFields(selectProperties);
//查询必须返回同一客户机但在其他票据周期(而不是当前票据周期)中的单据
var camlQuery=''+视野+
'' +
'' +
//'' +
'' +
'' +
''+客户端代码+''+
'' +
// '' +
// '' +
//“票据周期”+
// '' +
//'' +
'' +
//'' +
// '' +
//'' +
'' +
'';
var billCyclesListId=“{c23bbae4-34f7-494c-8f67-acece3ba60da}”;
GetListItems(billCyclesListId、camlQuery、selectProperties)
.then(函数(列表项){
var listItemsWithValues=[];
如果(列表项){
var枚举器=listItems.getEnumerator();
while(枚举数.moveNext()){
var listItem=enumerator.get_current();
var listItemValues=[];
选择属性
.forEach(函数(propertyName){
如果(propertyName==='ContentType'){
var value=listItem.get_item('ows_ContentType');
}否则{
var值=listItem.get_项(propertyName);
}
listItemValues[propertyName]=值;
});
listItemsWithValues.push(listItemValues);
}
}
//创建完整的项目url
listItemsWithValues.forEach(函数(listItem){
var fileDirRef=listItem[“FileRef”];
变量id=listItem[“id”];
var serverUrl=_spPageContextInfo.webAbsoluteUrl.replace(_spPageContextInfo.webServerRelativeUrl,”);
var dispFormUrl=serverUrl+fileDirRef+“/DispForm.aspx?ID=“+ID;
listItem[“FileRef”]=dispFormUrl;
});
var enhancedListItemValues=spService.SpSearchQuery.EnhanceSearchResults(listItemsWithValues,enhanceFunctions);
延迟。解析(listItemsWithValues);
})
.catch(函数(消息){
拒绝();
});
回报。承诺;
}
正如您所见,我需要一种方法以简单的方式返回相同值数组中的内容类型名称您可以使用
ows\u ContentType
属性来获取内容类型名称
因此,在includestring
变量或selectProperties
参数中添加ows\u ContentType
之后,您可以在代码中使用它,如下所示:
context.executeQueryAsync(
function() {
var listItemEnumerator = listItems.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
console.log(oListItem.get_item('ows_ContentType'));
}
},
function(error, errorInfo) {
console.log(errorInfo);
}
);
更新-完整代码
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle("Test");
var includesString = "Include(ID,Title,Created, Modified, ows_ContentType)";
var camlQuery = SP.CamlQuery.createAllItemsQuery();
var listItems = list.getItems(camlQuery);
context.load(listItems, includesString);
context.executeQueryAsync(
function() {
var listItemEnumerator = listItems.getEnumerator();
while (listItemEnumerator.moveNext()) {
var oListItem = listItemEnumerator.get_current();
console.log(oListItem.get_item('ows_ContentType'));
}
},
function(error, errorInfo) {
console.log(errorInfo);
}
);
但是如何将其添加到相同的值数组中呢?如果是不同的回调,请参阅update1。我认为您的代码看起来不错,该值应该出现在
listItemValues[propertyName]=value中代码>。与提取标题
或ID
或任何其他自定义列的方式类似。有什么问题吗?我认为在selectProperties
中添加ows\u ContentType
应该可以实现这一点。当我尝试使用ows\u ContentType时,我得到的结果是:值不在预期范围内我在SharePoint online上试用过,它对我有效:)