microsoftgraph / microsoftgraph/msgraph-sdk-php

[2.0.0-RC13] TransitiveMemberOfRequestBuilder ignoring QueryParameters select

Open
#1,228 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

ToTriage
Dominant language
PHP
Stars
669
Forks
150
Avg merge
15h 21m
Merged PRs (30d)
3

Description

Upon creating a TransitiveMemberOfRequestBuilder and applying a TransitiveMemberOfRequestBuilderGetRequestConfiguration->queryParameters->select I can see the URL is changed to include the $select fields in odataNextLink. But when I actualy run the query with get($groupsRequestConfig) the additional fields are not returned.

If I take the URL and put it into graph explorer, it returns the fields as requested.

Sample code and var_dump's

<?php

$groupsRequest = $GraphServiceClient->me()->transitiveMemberOf();

$groupsRequestConfig = new TransitiveMemberOfRequestBuilderGetRequestConfiguration();
$groupsRequestConfig->queryParameters = new TransitiveMemberOfRequestBuilderGetQueryParameters();
$groupsRequestConfig->queryParameters->select = [
    'id',
    'samAccountName',
    'displayName',
    'groupTypes',
    'securityEnabled'
];

$groupsResponse = $groupsRequest->get($groupsRequestConfig);    # Http\Promise\FulfilledPromise
$groups = $groupsResponse->wait();  # Microsoft\Graph\Generated\Models\DirectoryObjectCollectionResponse

$myGroups = []
foreach ($groups->getValue() as $g) {
    $myGroups[] = $g->getDisplayName();
}

/*
$groups = object(Microsoft\Graph\Generated\Models\DirectoryObjectCollectionResponse)#302 (1) {
  ["backingStore":"Microsoft\Graph\Generated\Models\BaseCollectionPaginationCountResponse":private]=>
  object(Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore)#298 (4) {
    ["isInitializationCompleted":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
    bool(true)
    ["returnOnlyChangedValues":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
    bool(false)
    ["store":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
    array(3) {
      ["additionalData"]=>
      array(3) {
        [0]=>
        bool(false)
        [1]=>
        array(1) {
          ["@odata.context"]=>
          string(117) "https://graph.microsoft.com/v1.0/$metadata#directoryObjects(id,samAccountName,displayName,groupTypes,securityEnabled)"
        }
        [2]=>
        int(1)
      }
      ["odataNextLink"]=>
      array(2) {
        [0]=>
        bool(false)
        [1]=>
        string(303) "https://graph.microsoft.com/v1.0/me/transitiveMemberOf?$select=id%2csamAccountName%2cdisplayName%2cgroupTypes%2csecurityEnabled&$skiptoken=R..."
      }
      ["value"]=>
      array(3) {
        [0]=>
        bool(false)
        [1]=>
        array(100) {
          [0]=>
          object(Microsoft\Graph\Generated\Models\Group)#194 (1) {
            ["backingStore":"Microsoft\Graph\Generated\Models\Entity":private]=>
            object(Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore)#193 (4) {
              ["isInitializationCompleted":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
              bool(true)
              ["returnOnlyChangedValues":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
              bool(false)
              ["store":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
              array(6) {
                ["additionalData"]=>
                array(3) {
                  [0]=>
                  bool(true)
                  [1]=>
                  array(0) {
                  }
                  [2]=>
                  int(0)
                }
                ["odataType"]=>
                array(2) {
                  [0]=>
                  bool(true)
                  [1]=>
                  string(22) "#microsoft.graph.group"
                }
                ["id"]=>
                array(2) {
                  [0]=>
                  bool(true)
                  [1]=>
                  string(36) "b...4"
                }
                ["displayName"]=>
                array(2) {
                  [0]=>
                  bool(true)
                  [1]=>
                  NULL
                }
...

$g = object(Microsoft\Graph\Generated\Models\Group)#556 (1) {
  ["backingStore":"Microsoft\Graph\Generated\Models\Entity":private]=>
  object(Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore)#555 (4) {
    ["isInitializationCompleted":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
    bool(true)
    ["returnOnlyChangedValues":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
    bool(false)
    ["store":"Microsoft\Kiota\Abstractions\Store\InMemoryBackingStore":private]=>
    array(6) {
      ["additionalData"]=>
      array(3) {
        [0]=>
        bool(true)
        [1]=>
        array(0) {
        }
        [2]=>
        int(0)
      }
      ["odataType"]=>
      array(2) {
        [0]=>
        bool(true)
        [1]=>
        string(22) "#microsoft.graph.group"
      }
      ["id"]=>
      array(2) {
        [0]=>
        bool(true)
        [1]=>
        string(36) "8...8"
      }
      ["displayName"]=>
      array(2) {
        [0]=>
        bool(true)
        [1]=>
        NULL
      }
....
*/
?>

PS. Please create more documentation, this sdk is a monster for having so little documentation and examples.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at TransitiveMemberOfRequestBuilder->get() and its queryParameters->select handling, then trace how the response populates DirectoryObjectCollectionResponse and Group models. Compare the requested fields in the generated URL with the fields available after wait(); done means the selected properties are returned consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.