Search code examples
phpazureazure-active-directorymicrosoft-graph-apimicrosoft-graph-sdks

msgraph-sdk-php v2 how to pass skiptoken to request?


im trying to get more users than 100 (default limit). Unfortunately, documentation is pretty simple (lot of stuff i search in sources of sdk) But i have no clue how to pass nextLink argument skiptoken. In v1 of SDK i just expand url in GET i suppose, but i would like to use v2 of SDK. I saw nextLink in delta-query (but this is something else).

i try this, but its not working.

$nextlink = str_replace('https://graph.microsoft.com/v1.0/users?$skiptoken=','',$response->getOdataNextLink());
$request = new UsersRequestBuilderGetRequestConfiguration();
$request->queryParameters = UsersRequestBuilderGetRequestConfiguration::createQueryParameters();
$request->queryParameters->expand = array('skiptoken' => $nextLink);
$response = $o365->users()->get($request)->wait();

i also try, i know there is no skiptoken param

$request = new UsersRequestBuilderGetRequestConfiguration();
$request->queryParameters = UsersRequestBuilderGetRequestConfiguration::createQueryParameters();
$request->queryParameters->skiptoken = $nextLink;
$response = $o365->users()->get($request)->wait();

thank you.


Solution

  • In v2 SDK, there should be PageIterator for paging through a collection

    $users = $graphServiceClient->users()->get()->wait();
    
    $pageIterator = new PageIterator($users, $graphServiceClient->getRequestAdapter());
    
    $counter = 0;
    $callback = function Microsoft\Graph\Generated\Models\User $user) use (&$counter) {
        echo "Id: {$user->getId()}\n";
        $counter ++;
        return ($counter % 5 != 0);
    };
    
    while ($pageIterator->hasNext()) {
        // iteration pauses and resumes after every 5 users
        $pageIterator->iterate($callback);
    
        echo "\nPaused iteration...Total users: {$counter}\n\n";
    }
    

    Paging through a collection