更新 synchronizationSchema
本文内容
命名空间:microsoft.graph
重要
Microsoft Graph版本下的 /beta API 可能会发生更改。 不支持在生产应用程序中使用这些 API。 若要确定 API 是否在 v1.0 中可用,请使用 版本 选择器。
更新给定作业或模板的同步架构。 此方法将当前架构完全替换为请求中提供的架构。 若要更新模板的架构,请调用 application 对象。 您必须是应用程序的所有者。
权限
要调用此 API,需要以下权限之一。要了解详细信息,包括如何选择权限的信息,请参阅权限 。
权限类型
权限(从最低特权到最高特权)
委派(工作或学校帐户)
Directory.ReadWrite.All
委派(个人 Microsoft 帐户)
不支持。
应用程序
Application.ReadWrite.OwnedBy、Directory.ReadWrite.All
HTTP 请求
PUT /servicePrincipals/{id}/synchronization/jobs/{jobId}/schema
PUT /applications/{id}/synchronization/templates/{templateId}/schema
名称
类型
说明
Authorization
string
Bearer {token}。必需。
请求正文
在请求正文中,提供 synchronizationSchema 对象以替换现有的架构。
响应
如果成功,则返回 204 No Content 响应代码。 它不会在响应正文中返回任何内容。
示例
请求
请求示例如下所示。
注意: 为了可读性,缩短了此处显示的请求对象。 在实际调用中提供所有属性。
PUT https://graph.microsoft.com/beta/servicePrincipals/{id}/synchronization/jobs/{jobId}/schema
Content-type: application/json
{
"directories": [
{
"name": "Azure Active Directory",
"objects": [
{
"name": "User",
"attributes": [
{
"name": "userPrincipalName",
"type": "string"
}
]
},
]
},
{
"name": "Salesforce",
}
],
"synchronizationRules":[
{
"name": "USER_TO_USER",
"sourceDirectoryName": "Azure Active Directory",
"targetDirectoryName": "Salesforce",
"objectMappings": [
{
"sourceObjectName": "User",
"targetObjectName": "User",
"attributeMappings": [
{
"source": {},
"targetAttributeName": "userName"
},
]
},
]
},
]
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var synchronizationSchema = new SynchronizationSchema
{
Directories = new SynchronizationSchemaDirectoriesCollectionPage()
{
new DirectoryDefinition
{
Name = "Azure Active Directory",
Objects = new List<ObjectDefinition>()
{
new ObjectDefinition
{
Name = "User",
Attributes = new List<AttributeDefinition>()
{
new AttributeDefinition
{
Name = "userPrincipalName",
Type = AttributeType.String
}
}
}
}
},
new DirectoryDefinition
{
Name = "Salesforce"
}
},
SynchronizationRules = new List<SynchronizationRule>()
{
new SynchronizationRule
{
Name = "USER_TO_USER",
SourceDirectoryName = "Azure Active Directory",
TargetDirectoryName = "Salesforce",
ObjectMappings = new List<ObjectMapping>()
{
new ObjectMapping
{
SourceObjectName = "User",
TargetObjectName = "User",
AttributeMappings = new List<AttributeMapping>()
{
new AttributeMapping
{
Source = new AttributeMappingSource
{
},
TargetAttributeName = "userName"
}
}
}
}
}
}
};
await graphClient.ServicePrincipals["{servicePrincipal-id}"].Synchronization.Jobs["{synchronizationJob-id}"].Schema
.Request()
.PutAsync(synchronizationSchema);
const options = {
authProvider,
};
const client = Client.init(options);
const synchronizationSchema = {
directories: [
{
name: 'Azure Active Directory',
objects: [
{
name: 'User',
attributes: [
{
name: 'userPrincipalName',
type: 'string'
}
]
},
]
},
{
name: 'Salesforce',
}
],
synchronizationRules: [
{
name: 'USER_TO_USER',
sourceDirectoryName: 'Azure Active Directory',
targetDirectoryName: 'Salesforce',
objectMappings: [
{
sourceObjectName: 'User',
targetObjectName: 'User',
attributeMappings: [
{
source: {},
targetAttributeName: 'userName'
},
]
},
]
},
]
};
await client.api('/servicePrincipals/{id}/synchronization/jobs/{jobId}/schema')
.version('beta')
.put(synchronizationSchema);
MSHTTPClient *httpClient = [MSClientFactory createHTTPClientWithAuthenticationProvider:authenticationProvider];
NSString *MSGraphBaseURL = @"https://graph.microsoft.com/beta/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[MSGraphBaseURL stringByAppendingString:@"/servicePrincipals/{id}/synchronization/jobs/{jobId}/schema"]]];
[urlRequest setHTTPMethod:@"PUT"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
MSGraphSynchronizationSchema *synchronizationSchema = [[MSGraphSynchronizationSchema alloc] init];
NSMutableArray *directoriesList = [[NSMutableArray alloc] init];
MSGraphDirectoryDefinition *directories = [[MSGraphDirectoryDefinition alloc] init];
[directories setName:@"Azure Active Directory"];
NSMutableArray *objectsList = [[NSMutableArray alloc] init];
MSGraphObjectDefinition *objects = [[MSGraphObjectDefinition alloc] init];
[objects setName:@"User"];
NSMutableArray *attributesList = [[NSMutableArray alloc] init];
MSGraphAttributeDefinition *attributes = [[MSGraphAttributeDefinition alloc] init];
[attributes setName:@"userPrincipalName"];
[attributes setType: [MSGraphAttributeType String]];
[attributesList addObject: attributes];
[objects setAttributes:attributesList];
[objectsList addObject: objects];
[directories setObjects:objectsList];
[directoriesList addObject: directories];
MSGraphDirectoryDefinition *directories = [[MSGraphDirectoryDefinition alloc] init];
[directories setName:@"Salesforce"];
[directoriesList addObject: directories];
[synchronizationSchema setDirectories:directoriesList];
NSMutableArray *synchronizationRulesList = [[NSMutableArray alloc] init];
MSGraphSynchronizationRule *synchronizationRules = [[MSGraphSynchronizationRule alloc] init];
[synchronizationRules setName:@"USER_TO_USER"];
[synchronizationRules setSourceDirectoryName:@"Azure Active Directory"];
[synchronizationRules setTargetDirectoryName:@"Salesforce"];
NSMutableArray *objectMappingsList = [[NSMutableArray alloc] init];
MSGraphObjectMapping *objectMappings = [[MSGraphObjectMapping alloc] init];
[objectMappings setSourceObjectName:@"User"];
[objectMappings setTargetObjectName:@"User"];
NSMutableArray *attributeMappingsList = [[NSMutableArray alloc] init];
MSGraphAttributeMapping *attributeMappings = [[MSGraphAttributeMapping alloc] init];
MSGraphAttributeMappingSource *source = [[MSGraphAttributeMappingSource alloc] init];
[attributeMappings setSource:source];
[attributeMappings setTargetAttributeName:@"userName"];
[attributeMappingsList addObject: attributeMappings];
[objectMappings setAttributeMappings:attributeMappingsList];
[objectMappingsList addObject: objectMappings];
[synchronizationRules setObjectMappings:objectMappingsList];
[synchronizationRulesList addObject: synchronizationRules];
[synchronizationSchema setSynchronizationRules:synchronizationRulesList];
NSError *error;
NSData *synchronizationSchemaData = [synchronizationSchema getSerializedDataWithError:&error];
[urlRequest setHTTPBody:synchronizationSchemaData];
MSURLSessionDataTask *meDataTask = [httpClient dataTaskWithRequest:urlRequest
completionHandler: ^(NSData *data, NSURLResponse *response, NSError *nserror) {
//Request Completed
}];
[meDataTask execute];
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
SynchronizationSchema synchronizationSchema = new SynchronizationSchema();
LinkedList<DirectoryDefinition> directoriesList = new LinkedList<DirectoryDefinition>();
DirectoryDefinition directories = new DirectoryDefinition();
directories.name = "Azure Active Directory";
LinkedList<ObjectDefinition> objectsList = new LinkedList<ObjectDefinition>();
ObjectDefinition objects = new ObjectDefinition();
objects.name = "User";
LinkedList<AttributeDefinition> attributesList = new LinkedList<AttributeDefinition>();
AttributeDefinition attributes = new AttributeDefinition();
attributes.name = "userPrincipalName";
attributes.type = AttributeType.STRING;
attributesList.add(attributes);
objects.attributes = attributesList;
objectsList.add(objects);
directories.objects = objectsList;
directoriesList.add(directories);
DirectoryDefinition directories1 = new DirectoryDefinition();
directories1.name = "Salesforce";
directoriesList.add(directories1);
DirectoryDefinitionCollectionResponse directoryDefinitionCollectionResponse = new DirectoryDefinitionCollectionResponse();
directoryDefinitionCollectionResponse.value = directoriesList;
DirectoryDefinitionCollectionPage directoryDefinitionCollectionPage = new DirectoryDefinitionCollectionPage(directoryDefinitionCollectionResponse, null);
synchronizationSchema.directories = directoryDefinitionCollectionPage;
LinkedList<SynchronizationRule> synchronizationRulesList = new LinkedList<SynchronizationRule>();
SynchronizationRule synchronizationRules = new SynchronizationRule();
synchronizationRules.name = "USER_TO_USER";
synchronizationRules.sourceDirectoryName = "Azure Active Directory";
synchronizationRules.targetDirectoryName = "Salesforce";
LinkedList<ObjectMapping> objectMappingsList = new LinkedList<ObjectMapping>();
ObjectMapping objectMappings = new ObjectMapping();
objectMappings.sourceObjectName = "User";
objectMappings.targetObjectName = "User";
LinkedList<AttributeMapping> attributeMappingsList = new LinkedList<AttributeMapping>();
AttributeMapping attributeMappings = new AttributeMapping();
AttributeMappingSource source = new AttributeMappingSource();
attributeMappings.source = source;
attributeMappings.targetAttributeName = "userName";
attributeMappingsList.add(attributeMappings);
objectMappings.attributeMappings = attributeMappingsList;
objectMappingsList.add(objectMappings);
synchronizationRules.objectMappings = objectMappingsList;
synchronizationRulesList.add(synchronizationRules);
synchronizationSchema.synchronizationRules = synchronizationRulesList;
graphClient.servicePrincipals("{id}").synchronization().jobs("{jobId}").schema()
.buildRequest()
.put(synchronizationSchema);
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := msgraphsdk.New()
requestBody.SetAdditionalData(map[string]interface{}{
"directories": []Object {
}
"synchronizationRules": []Object {
}
}
servicePrincipalId := "servicePrincipal-id"
synchronizationJobId := "synchronizationJob-id"
graphClient.ServicePrincipalsById(&servicePrincipalId).Synchronization().JobsById(&synchronizationJobId).Schema().Put(requestBody)
响应
响应示例如下所示。
HTTP/1.1 204 No Content