Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/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
JSOM/Javascript获取所有其他列的内容类型名称_Javascript_Sharepoint - Fatal编程技术网

JSOM/Javascript获取所有其他列的内容类型名称

JSOM/Javascript获取所有其他列的内容类型名称,javascript,sharepoint,Javascript,Sharepoint,我有以下方法可以正确地从sharepoint查询中获取列表项,但是内容类型需要特殊处理,并且不会返回 function getListItems(listId, camlQueryString, selectProperties){ var deferred = $q.defer(); var context = SP.ClientContext.get_current();

我有以下方法可以正确地从sharepoint查询中获取列表项,但是内容类型需要特殊处理,并且不会返回

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上试用过,它对我有效:)