private static CSEntryChangeResult PutCSEntryChangeAdd(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config) { deltaCSEntry.ObjectModificationType = csentry.ObjectModificationType; IApiInterfaceObject primaryInterface = maType.ApiInterface; object instance = primaryInterface.CreateInstance(csentry); foreach (AttributeChange change in primaryInterface.ApplyChanges(csentry, type, ref instance)) { deltaCSEntry.AttributeChanges.Add(change); } deltaCSEntry.DN = primaryInterface.GetDNValue(instance); List <AttributeChange> anchorChanges = new List <AttributeChange>(); foreach (string anchorAttributeName in maType.AnchorAttributeNames) { object value = primaryInterface.GetAnchorValue(anchorAttributeName, instance); deltaCSEntry.AnchorAttributes.Add(AnchorAttribute.Create(anchorAttributeName, value)); anchorChanges.Add(AttributeChange.CreateAttributeAdd(anchorAttributeName, value)); } return(CSEntryChangeResult.Create(csentry.Identifier, anchorChanges, MAExportError.Success)); }
private static CSEntryChangeResult PutCSEntryChangeUpdate(CSEntryChange csentry, CSEntryChange deltaCSEntry, MASchemaType maType, SchemaType type, IManagementAgentParameters config) { deltaCSEntry.DN = csentry.GetNewDNOrDefault <string>() ?? csentry.DN; if (csentry.DN != deltaCSEntry.DN) { Logger.WriteLine($"DN rename {csentry.DN} -> {deltaCSEntry.DN}"); } bool canPatch = maType.CanPatch(csentry.AttributeChanges); IApiInterfaceObject primaryInterface = maType.ApiInterface; deltaCSEntry.ObjectModificationType = primaryInterface.DeltaUpdateType; object instance; if (canPatch) { Logger.WriteLine($"Performing PATCH update operation for {csentry.DN}"); instance = primaryInterface.CreateInstance(csentry); } else { Logger.WriteLine($"Performing FULL update operation for {csentry.DN}"); instance = primaryInterface.GetInstance(csentry); } foreach (AttributeChange change in primaryInterface.ApplyChanges(csentry, type, ref instance, canPatch)) { deltaCSEntry.AttributeChanges.Add(change); } return(CSEntryChangeResult.Create(csentry.Identifier, null, MAExportError.Success)); }