internal Guid CreateActivityParty(Entity entity) { if (entity.GetType() == typeof(Entity)) { entity = GenericMethodCaller.InvokeToEntity(entity, Info); } return((Guid)GenericMethodCaller.InvokeLocalCrmDatabaseStaticGenericMethod(Info, entity.LogicalName, "Create", this, entity)); }
public Guid Create(Entity entity) { AssertValidForOperation(entity, nameof(Create)); if (entity.GetType() == typeof(Entity)) { entity = GenericMethodCaller.InvokeToEntity(entity, Info); } return((Guid)GenericMethodCaller.InvokeLocalCrmDatabaseStaticGenericMethod(Info, entity.LogicalName, nameof(Create), this, entity)); }
public void Update(Entity entity) { AssertValidForOperation(entity, "Update"); if (entity.GetType() == typeof(Entity)) { entity = GenericMethodCaller.InvokeToEntity(entity, Info); } GenericMethodCaller.InvokeLocalCrmDatabaseStaticGenericMethod(Info, entity.LogicalName, "Update", this, entity); }
/// <summary> /// CRM will convert non typed arrays into an IEnumerable<T>. Handle that conversion here /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity">The entity.</param> /// <param name="key">The key.</param> /// <param name="properties">The properties.</param> private static void ConvertEntityArrayToEntityCollection <T>(T entity, string key, Dictionary <string, List <PropertyInfo> > properties) where T : Entity { if (!(entity[key] is Array value) || value.Length == 0) { return; } var prop = properties[key].FirstOrDefault(p => p.PropertyType.GetGenericArguments().Length >= 0); var genericArgs = prop?.PropertyType.GetGenericArguments()[0]; // ReSharper disable once SuspiciousTypeConversion.Global if (genericArgs != null && value is IEnumerable <Entity> entityEnumerable && IsSameOrSubclass(typeof(Entity), genericArgs)) { var entities = new EntityCollection(); foreach (var att in entityEnumerable) { entities.Entities.Add(GenericMethodCaller.InvokeToEntity(att, genericArgs)); } entity[key] = entities; } }