/// <summary> /// /// </summary> /// <param name="typeXrmSdk"></param> /// <param name="valueCRM"></param> /// <returns></returns> private static object ConfigureProperty(SDKore.Crm.Enum.TypeXrmSdk typeXrmSdk, object valueCRM) { switch (typeXrmSdk) { case SDKore.Crm.Enum.TypeXrmSdk.PartyList: var entities = (EntityCollection)valueCRM; SDKore.DomainModel.Lookup[] temp = new SDKore.DomainModel.Lookup[entities.Entities.Count]; for (int index = 0; index < temp.Length; index++) { EntityReference partyId = entities.Entities[index].GetAttributeValue <EntityReference>("partyid"); temp[index] = new SDKore.DomainModel.Lookup { Id = partyId == null ? Guid.Empty : entities.Entities[index].GetAttributeValue <EntityReference>("partyid").Id, Type = partyId == null ? null : entities.Entities[index].GetAttributeValue <EntityReference>("partyid").LogicalName, Name = partyId == null ? entities.Entities[index].GetAttributeValue <string>("addressused").ToString() : entities.Entities[index].GetAttributeValue <EntityReference>("partyid").Name }; } return(temp); case SDKore.Crm.Enum.TypeXrmSdk.EntityReference: return(new SDKore.DomainModel.Lookup() { Id = ((EntityReference)valueCRM).Id, Name = ((EntityReference)valueCRM).Name, Type = ((EntityReference)valueCRM).LogicalName }); case SDKore.Crm.Enum.TypeXrmSdk.OptionSetValue: return(((OptionSetValue)valueCRM).Value); case SDKore.Crm.Enum.TypeXrmSdk.Money: return(((Microsoft.Xrm.Sdk.Money)valueCRM).Value); case SDKore.Crm.Enum.TypeXrmSdk.Datetime: return((DateTime)valueCRM); //return ((DateTime)valueCRM).ToLocalTime(); //Atenção, usar o LocalTime no Framework altera o comportamento de hora de todo o sistema, e pode ser perigoso para tratamento de horas do banco de dados e do plugin //Foi decidido usar o LocalTime() somente na chamada das horas, quando necessário default: return(valueCRM); } }
public static SDKore.Crm.Enum.TypeXrmSdk GetTypeAttibute(string organization, string entity, string attribute, bool offline) { SDKore.Crm.Enum.TypeXrmSdk typeXrmSdk = SDKore.Crm.Enum.TypeXrmSdk.None; MetadataEngine.SetOrganization(organization); MetadataEngine.SetIsOffline(offline); var metaEntity = MetadataEngine.Metadata.Find(delegate(EntityMetadata e) { return(e.LogicalName.ToLower() == entity.ToLower()); }); if (metaEntity != null) { var metaAttribute = metaEntity.Attributes.FirstOrDefault(delegate(AttributeMetadata a) { return(a.LogicalName.ToLower() == attribute.ToLower()); }); if (metaAttribute != null) { switch (metaAttribute.AttributeType.Value) { case AttributeTypeCode.PartyList: typeXrmSdk = Enum.TypeXrmSdk.PartyList; break; case AttributeTypeCode.Money: typeXrmSdk = SDKore.Crm.Enum.TypeXrmSdk.Money; break; case AttributeTypeCode.Lookup: case AttributeTypeCode.Owner: case AttributeTypeCode.Customer: typeXrmSdk = SDKore.Crm.Enum.TypeXrmSdk.EntityReference; break; case AttributeTypeCode.Picklist: case AttributeTypeCode.Status: case AttributeTypeCode.State: typeXrmSdk = SDKore.Crm.Enum.TypeXrmSdk.OptionSetValue; break; } } } return(typeXrmSdk); }