MSCRM异步javascript SDK.REST.retrieveMultipleRecords只返回50条记录,一次需要所有记录

时间:2013-12-12 10:27:58

标签: javascript asynchronous dynamics-crm

我在“SDK.REST.retrieveMultipleRecords”函数的异步调用中遇到了一些问题。以下是我的问题的代码

function Main_Method(_AnimalList)
{
    new SearchInAnimalRecords(_AnimalList);
}

function SearchInAnimalRecords(_AnimalList)
{
    $('#divProgressDetail').append('<br>Start searching Animal Records...');
    for (var i = 0; i < _AnimalList.length; i++)
        if (_AnimalList[i].SchemaName != "Lion")
            this.Process(AnimalSchemaName);
}

SearchInAnimalRecords.prototype.Process = function (AnimalSchemaName)
{
    $('#divProgressDetail').append('<br>Retriving ' + AnimalSchemaName + ' Animal Records...');
    ///SDK.REST.retrieveMultipleRecords : Sends an asynchronous request to retrieve records.
    SDK.REST.retrieveMultipleRecords
        (
            AnimalSchemaName, /// The Schema Name of the Entity type record to retrieve.
            "$select=" + AnimalSchemaName + "Id", /// A String representing the OData System Query Options to control the data returned
            function (AnimalRecords) // "AnimalRecords" only contain 50 records

此函数将返回并为每个返回的记录页面调用。                  每页有50条记录。如果您希望返回多页记录,                  此函数应遍历结果并将记录推送到函数外部的数组中。                  使用OnComplete事件处理程序知道何时处理了所有记录。

            {
                var length = AnimalRecords.length;
                for (var i = 0; i < length; i++)
                {
                    var guid = AnimalRecords[i][AnimalSchemaName + 'Id'];
                    var IsGuidMatch = IsKeyGuidMatchWith(guid);
                    if (IsGuidMatch)
                    {
                        $('#divProgressDetail').append('<br>Key animal found in ' + AnimalSchemaName + ' Records.');
                        $('#divProgressDetail').append('<br>Searching stop.');
                        break;
                    }
                }
            },
            function () /// The function that will be passed through and be called by a failed response. 
            {
                $('#divProgressDetail').append('<br>Error while Retriving ' + AnimalSchemaName + ' Records.');
            },
            function () /// OnComplete EventHandler The function that will be called when all the requested records have been returned. No parameters are passed to this function.
            {
                $('#divProgressDetail').append('<br>Completed searching in ' + AnimalSchemaName + ' Records.');
            }
        );
}

在Process函数中,它们是一个匿名函数,它接受一个名为“AnimalRecords”的参数。所以问题是这个AnimalRecords只包含50条记录,我一次需要所有记录。

2 个答案:

答案 0 :(得分:0)

我认为这是对返回记录数量的限制。每次检索记录时,只返回查询中的前50个记录。如果有超过50条记录,则在结果集的末尾将有一个“XML”节点或一个JSON__next属性。您可以使用该节点或属性中的URL值继续下一组记录。 URL包含$ skiptoken参数,该参数提供有关分页边界的信息

参考:http://msdn.microsoft.com/en-us/library/gg334767.aspx

如果要访问所有记录,请尝试使用xrmservicetoolkit

XrmServiceToolkit.Soap.QueryAll:返回所有记录的方法(&gt; 5k +)。

http://xrmservicetoolkit.codeplex.com/

答案 1 :(得分:0)

我相信您正在使用Dynamics CRM 2011.之前SDK中提供的帮助文件仅返回前50个,但在最新的SDK版本中进行了修改。如果您可以访问最新的CRM 2011 SDK,那么'RetrieveMultiple'jQuery调用中的帮助文件已经自己处理了50个记录限制;意味着实现已经在那里检索所有记录,而不仅仅是前50个。

尝试下载最新的SDK并使用该代码。你应该得到理想的结果。