azure msgraph-sdk-go不能在一个用户上创建两个以上的扩展

xkrw2x1b  于 2023-03-03  发布在  Go
关注(0)|答案(2)|浏览(181)

当我尝试像这样在用户上创建模式扩展时

schemaExtension := graphmodels.NewSchemaExtension()
additionalData := map[string]interface{}{
    "extensionName": "dean.ext.test.1",
    "theme":         "dark",
    "color":         "purple",
    "lang":          "English",
}
schemaExtension.SetAdditionalData(additionalData)

if result, err := client.UsersById(userId).Extensions().Post(context.Background(), schemaExtension, nil); err != nil {

我得到这个错误:

Error: error status code received from the API
    code: BadRequest
    msg: Maximum number of extensions values supported per application is 2.

但我没有在此用户上创建任何架构扩展。我创建了两个打开的扩展,但我应该能够创建其他架构扩展。
为什么错误消息说扩展是针对每个应用程序的?上面的代码试图在特定用户上创建扩展,而不是应用程序。
我想删除此用户的扩展,但在门户中找不到任何显示用户扩展的内容。在门户中何处可以找到用户的扩展?
门户显示了似乎适用于所有用户的用户属性。用户属性与扩展有关吗?我如何使用msgraph-sdk-go访问这些用户属性?

iqxoj9l9

iqxoj9l91#

msgraph-sdk-go目前版本为0.55,是一个非生产预览版。在与一些同事讨论后,我们决定放弃MS Graph SDK,直接使用1.0版Graph REST端点。他们在这方面取得了成功,但发现SDK没有太大帮助。

2cmtqfgy

2cmtqfgy2#

我尝试在我的环境中重现相同的结果,结果如下:

当我运行下面的请求通过Graph Explorer创建扩展时,我得到了相同的错误如下:

POST https://graph.microsoft.com/v1.0/users/<userID>/extensions

{
    "extensionName": "dean.ext.test.1",
    "theme": "dark",
    "color": "purple",
    "lang": "English"
}
    • 答复:**

请注意,您只能为任何目录资源(如用户、组、设备等)创建2个开放扩展。要确认这一点,您可以检查此MS Doc的限制。
如果目录中已有2个打开的扩展名,则通常会发生此错误。您可以使用下面的MS Graph查询列出用户打开的扩展名。

GET https://graph.microsoft.com/v1.0/users/<userID>/extensions
    • 答复:**

您可以使用msgraph-sdk-go和以下代码获得相同的结果:

graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)

result, err := graphClient.UsersById("user-id").Extensions().Get(context.Background(), nil)

要从用户中删除分机,您可以使用以下查询,包括如下分机名称:

DELETE https://graph.microsoft.com/v1.0/users/<userID>/extensions/<extension_name>
    • 答复:**

您可以使用msgraph-sdk-go从用户处删除打开扩展,代码如下:

graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
  
graphClient.UsersById("user-id").ExtensionsById("extension-id").Delete(context.Background(), nil)

当我现在运行查询列出打开的扩展名时,我只得到了1扩展名的响应,因为其他扩展名已成功删除,如下所示:

GET https://graph.microsoft.com/v1.0/users/<userID>/extensions
    • 响应:**

您当前用于创建模式扩展的代码正在创建open extensions
要使用msgraph-sdk-go创建模式扩展,请使用以下示例代码交叉检查您的代码:

graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)

requestBody := graphmodels.NewSchemaExtension()
id := "domainName_schemaName"
requestBody.SetId(&id) 
description := "My schema extension"
requestBody.SetDescription(&description) 
targetTypes := []string {
    "User",

}
requestBody.SetTargetTypes(targetTypes)

extensionSchemaProperty := graphmodels.NewExtensionSchemaProperty()
name := "theme"
extensionSchemaProperty.SetName(&name) 
type := "String"
extensionSchemaProperty.SetType(&type) 
extensionSchemaProperty1 := graphmodels.NewExtensionSchemaProperty()
name := "color"
extensionSchemaProperty1.SetName(&name) 
type := "String"
extensionSchemaProperty1.SetType(&type) 
extensionSchemaProperty2 := graphmodels.NewExtensionSchemaProperty()
name := "lang"
extensionSchemaProperty2.SetName(&name) 
type := "String"
extensionSchemaProperty2.SetType(&type) 

properties := []graphmodels.ExtensionSchemaPropertyable {
    extensionSchemaProperty,
    extensionSchemaProperty1,
    extensionSchemaProperty2,

}
requestBody.SetProperties(properties)

result, err := graphClient.SchemaExtensions().Post(context.Background(), requestBody, nil)
    • 参考:**创建架构扩展-Microsoft Graph v1.0
    • 更新日期:**

正如您在回答中提到的,THE GO SDK IS IN PREVIEW. IT IS FOR NON-PRODUCTION USE ONLY。因此,目前最好坚持使用REST API调用,通过MS Graph管理资源。

相关问题