Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

PHP Enum do not support missing values, this causes my synchronization job schema get request to fail.

Abierto
#329 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
php
Área
api

Línea de trabajo

Comienza con Enum.php alrededor de la línea 57 y el ejemplo de AttributeDefinitionMetadata; inspecciona cómo se deserializa un valor desconocido como Secret. Compara el comportamiento de PHP con el ejemplo de Java forValue citado y, después, verifica que la solicitud de esquema de sincronización pueda manejar el valor desconocido del enum sin fallar.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

status:waiting-for-triage ToTriage type:bug
Describe the bug

I am trying to trigger on an on-demand provisioning job and need to get the synchronization rule ID to do so.

When I get query the api directly, I get a valid response

GET https://graph.microsoft.com/beta/servicePrincipals/xxxxxxx/synchronization/jobs/scim.7d175e27e908439982db3a45414e55e0.b36480ed-cde1-4a8f-aeab-a6a0b8f8d65d/schema?$select=id

Response

Xnip2024-10-10_17-15-13

The document I refer to is Get synchronizationSchema
https://learn.microsoft.com/en-us/graph/api/synchronization-synchronizationschema-get?view=graph-rest-beta&tabs=http

However, when I run it, I get the error: "Handling "App\Message\GetSynchronisationRuleIdMessage" failed: Invalid enum value Secret ".

Expected behavior

Graceful exception handling, when a missing enum value is present.

How to reproduce
public function handleGetSynchronisationRuleIdMessage(  
    GetSynchronisationRuleIdMessage $message  
): string  
{  
  
    $result = $this->graphServiceClient  
        ->servicePrincipals()  
        ->byServicePrincipalId($message->servicePrincipalId)  
        ->synchronization()  
        ->jobs()  
        ->bySynchronizationJobId($message->synchronizationJobId)  
        ->schema()  
        ->get()  
        ->wait();  
    return $result->getSynchronizationRules()[0]->getId() ??  
        throw new Exception(sprintf("No Rule found for job %s", $message->synchronizationJobId));  
}
SDK Version

2.19

Latest version known to work for scenario above?

No response

Known Workarounds

(failed)
Microsoft support informed me I can bypass the error by querying for the synchronizationRules only using one of the following:

$requestConfig = new MessagesRequestBuilderGetRequestConfiguration();

$requestConfig->queryParameters = MessagesRequestBuilderGetRequestConfiguration::createQueryParameters();

$requestConfig->queryParameters->select = ['synchronizationRules'];

// or with PHP 8


$requestConfig = new MessagesRequestBuilderGetRequestConfiguration(

    queryParameters: MessagesRequestBuilderGetRequestConfiguration::createQueryParameters(

        select: ['synchronizationRules']

    )

);

Reason: select is not supported for this endpoint.

Debug output

Pasted image 20241010141840

Click to expand log ``` Handling "App\Message\GetSynchronisationRuleIdMessage" failed: Invalid enum value Secret ".
</details>


### Configuration

_No response_

### Other information

### My Analyses

The problem I am having this error is because the way enums are handled inside php sdk.

### Enum.php

![Pasted image 20241010142045](https://github.com/user-attachments/assets/ec73a72a-6521-4b58-9c54-bac5299d60be)


See line: 57.



So when we receive a value, which is not supported. We get this exception.

```php


<?php  
  
namespace Microsoft\Graph\Beta\Generated\Models;  
  
use Microsoft\Kiota\Abstractions\Enum;  
  
class AttributeDefinitionMetadata extends Enum {  
    public const BASE_ATTRIBUTE_NAME = 'BaseAttributeName';  
    public const COMPLEX_OBJECT_DEFINITION = 'ComplexObjectDefinition';  
    public const IS_CONTAINER = 'IsContainer';  
    public const IS_CUSTOMER_DEFINED = 'IsCustomerDefined';  
    public const IS_DOMAIN_QUALIFIED = 'IsDomainQualified';  
    public const LINK_PROPERTY_NAMES = 'LinkPropertyNames';  
    public const LINK_TYPE_NAME = 'LinkTypeName';  
    public const MAXIMUM_LENGTH = 'MaximumLength';  
    public const REFERENCED_PROPERTY = 'ReferencedProperty';  
}

While If you look how java implements Enums.

This is my reasoning:

The Enum Requires that all values are defined.

"Secret"-value is not a defined value.

This bug is the php sdk, BUT in the Java SDK.
This problem is solved differently.

When an enum value does not exit.
It just return null.

source: https://raw.githubusercontent.com/microsoftgraph/msgraph-sdk-java/refs/heads/main/src/main/java/com/microsoft/graph/generated/models/AttributeDefinitionMetadata.java

package com.microsoft.graph.models;

import com.microsoft.kiota.serialization.ValuedEnum;
import java.util.Objects;

@jakarta.annotation.Generated("com.microsoft.kiota")
public enum AttributeDefinitionMetadata implements ValuedEnum {
    BaseAttributeName("BaseAttributeName"),
    ComplexObjectDefinition("ComplexObjectDefinition"),
    IsContainer("IsContainer"),
    IsCustomerDefined("IsCustomerDefined"),
    IsDomainQualified("IsDomainQualified"),
    LinkPropertyNames("LinkPropertyNames"),
    LinkTypeName("LinkTypeName"),
    MaximumLength("MaximumLength"),
    ReferencedProperty("ReferencedProperty");
    public final String value;
    AttributeDefinitionMetadata(final String value) {
        this.value = value;
    }
    @jakarta.annotation.Nonnull
    public String getValue() { return this.value; }
    @jakarta.annotation.Nullable
    public static AttributeDefinitionMetadata forValue(@jakarta.annotation.Nonnull final String searchValue) {
        Objects.requireNonNull(searchValue);
        switch(searchValue) {
            case "BaseAttributeName": return BaseAttributeName;
            case "ComplexObjectDefinition": return ComplexObjectDefinition;
            case "IsContainer": return IsContainer;
            case "IsCustomerDefined": return IsCustomerDefined;
            case "IsDomainQualified": return IsDomainQualified;
            case "LinkPropertyNames": return LinkPropertyNames;
            case "LinkTypeName": return LinkTypeName;
            case "MaximumLength": return MaximumLength;
            case "ReferencedProperty": return ReferencedProperty;
            default: return null;
        }
    }
}
Lenguaje dominante
PHP
Estrellas
13
Forks
8
Merge medio
14 h 58 min
PR fusionados (30 d)
3

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoftgraph/msgraph-beta-sdk-php

Todos los issues de microsoftgraph/msgraph-beta-sdk-php

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.