我正在使用 msgraph-sdk-java 构建 Graph-Connector 来创建连接/架构并创建 ExteralItems。
我想构建删除由我们的连接器创建的所有
ExternalItems
的功能。问题是我无法获取 ExternalItems
的列表或 ExternalItems
的 id 列表。
我可以通过 ID 收到 ExternalItem
,但没有所有项目的列表。
此方法返回
null
:
getGraphClient().external().connections().byExternalConnectionId(connectionId).get().getItems()
这种方法会抛出一个
ODataError
UnknownError:
getGraphClient().external().connections().byExternalConnectionId(connectionId).items().get().getValue()
这种方法会抛出:
"Forbidden","message":"Application permission is only supported for the following entity types:site, list, listItem, drive and driveItem."
:
QueryPostRequestBody queryPostRequestBody = new QueryPostRequestBody();
List<SearchRequest> requests = new LinkedList<>();
SearchRequest searchRequest = new SearchRequest();
LinkedList<EntityType> entityTypes = new LinkedList<>();
entityTypes.add(EntityType.ExternalItem);
searchRequest.setEntityTypes(entityTypes);
LinkedList<String> contentSources = new LinkedList<>();
contentSources.add("/external/connections/" + connectionId);
searchRequest.setContentSources(contentSources);
SearchQuery query = new SearchQuery();
query.setQueryString("*");
searchRequest.setQuery(query);
searchRequest.setRegion("CHE");
requests.add(searchRequest);
queryPostRequestBody.setRequests(requests);
var result = getGraphClient().search().query().post(queryPostRequestBody);
我应该如何收到
ExternalItems
?有没有另一种方法可以删除连接器的所有ExternalItems
而不删除整个连接器?
仅当您知道外部项目的 ID 时,才可以删除该项目。
当您创建外部项目时,您可以指定该项目的 ID。您必须将所有项目 ID 存储在某处。
其他选项是使用
/search/query
搜索外部项目并返回 substrateContentDomainId
属性作为响应。您可以解析该值并获取逗号 ,
后面的子字符串,即图形连接器项的 itemId
。限制是/search/query
不支持externalItem
的应用程序权限。如果您尝试代表登录用户(具有委派权限)进行搜索,则该用户必须有权访问所有项目。
POST https://graph.microsoft.com/v1.0/search/query
{
"requests": [
{
"entityTypes": [
"externalItem"
],
"contentSources": [
"/external/connections/<connection_id>"
],
"query": {
"queryString": "*"
},
"from": 0,
"size": 3,
"fields": [
"substrateContentDomainId"
]
}
]
}
因此,如果您想避免删除整个连接器,则没有简单的解决方案。