public void Create(ResourceObject resource) { if (resource == null) { throw new ArgumentNullException(nameof(resource)); } try { using (Message message = MessageComposer.CreateCreateMessage(resource)) { using (Message responseMessage = this.Invoke((c) => c.Create(message))) { responseMessage.ThrowOnFault(); ResourceCreatedType response = responseMessage.DeserializeMessageWithPayload <ResourceCreatedType>(); UniqueIdentifier id = new UniqueIdentifier(response.EndpointReference.ReferenceProperties.ResourceReferenceProperty.Text); resource.CompleteCreateOperation(id); } } } catch (FaultException <RepresentationFailures> e) { throw InvalidRepresentationException.GetException(e.Detail); } }
public void Create(IEnumerable <ResourceObject> resources) { if (resources == null) { throw new ArgumentNullException(nameof(resources)); } ResourceObject[] resourceArray = resources.ToArray(); try { using (Message message = MessageComposer.CreateCreateMessage(resourceArray)) { using (Message responseMessage = this.Invoke((c) => c.Create(message))) { responseMessage.ThrowOnFault(); foreach (ResourceObject resource in resourceArray) { resource.CompleteCreateOperation(resource.ObjectID); } } } } catch (FaultException <RepresentationFailures> e) { throw InvalidRepresentationException.GetException(e.Detail); } }
internal static Message CreateCreateMessage(ResourceObject[] resources) { Create op = new Create(); op.Dialect = Namespaces.RMIdentityAttributeType; if (resources == null || resources.Length == 0) { throw new ArgumentNullException(nameof(resources)); } else if (resources.Length == 1) { return(MessageComposer.CreateCreateMessage(resources[0])); } List <FragmentType> fragments = new List <FragmentType>(); foreach (ResourceObject resource in resources) { foreach (PutFragmentType fragment in resource.GetPutFragements()) { fragment.TargetIdentifier = resource.ObjectID.ToString(false); fragments.Add(fragment); } // Add Object ID PutFragmentType fragmentObjectID = new PutFragmentType( AttributeNames.ObjectID, ModeType.Insert, AttributeNames.ObjectID, null, false, resource.ObjectID.ToString(false)); fragmentObjectID.TargetIdentifier = resource.ObjectID.ToString(false); fragments.Add(fragmentObjectID); } if (fragments.Count == 0) { return(null); } op.Fragments = fragments.ToArray(); Message message = Message.CreateMessage(MessageVersion.Default, Namespaces.Create, new SerializerBodyWriter(op)); message.AddHeader(Namespaces.IdMDirectoryAccess, HeaderConstants.IdentityManagementOperation, null, true); message.AddHeader(Namespaces.ResourceManagement, HeaderConstants.CompositeTypeOperation, null); message.AddHeader(HeaderConstants.ResourceReferenceProperty, resources.Select(t => t.ObjectID.ToString(false)).ToCommaSeparatedString()); return(message); }