Esempio n. 1
0
        public static void AddRequiredQueryJoins(this XrmService xrmService, QueryExpression query, string source)
        {
            var typeFieldPaths   = xrmService.GetTypeFieldPath(source, query.EntityName);
            var splitOutFunction = source.Split(':');

            if (splitOutFunction.Count() > 1)
            {
                source = splitOutFunction.ElementAt(1);
            }
            var splitTokens = source.Split('.');

            if (typeFieldPaths.Count() == 1)
            {
                query.ColumnSet.AddColumn(typeFieldPaths.First().Value);
            }
            else
            {
                LinkEntity thisLink = null;

                for (var i = 0; i < typeFieldPaths.Count() - 1; i++)
                {
                    var lookupField = typeFieldPaths.ElementAt(i).Value;
                    var path        = string.Join(".", splitTokens.Take(i + 1)).Replace("|", "_");
                    if (i == 0)
                    {
                        var targetType    = typeFieldPaths.ElementAt(i + 1).Key;
                        var matchingLinks = query.LinkEntities.Where(le => le.EntityAlias == path);

                        if (matchingLinks.Any())
                        {
                            thisLink = matchingLinks.First();
                        }
                        else
                        {
                            thisLink             = query.AddLink(targetType, lookupField, xrmService.GetPrimaryKeyField(targetType), JoinOperator.LeftOuter);
                            thisLink.EntityAlias = path;
                            thisLink.Columns     = xrmService.CreateColumnSet(new string[0]);
                        }
                    }
                    else
                    {
                        var targetType    = xrmService.GetLookupTargetEntity(lookupField, thisLink.LinkToEntityName);
                        var matchingLinks = thisLink.LinkEntities.Where(le => le.EntityAlias == path);
                        if (matchingLinks.Any())
                        {
                            thisLink = matchingLinks.First();
                        }
                        else
                        {
                            thisLink             = thisLink.AddLink(targetType, lookupField, xrmService.GetPrimaryKeyField(targetType), JoinOperator.LeftOuter);
                            thisLink.EntityAlias = path;
                            thisLink.Columns     = xrmService.CreateColumnSet(new string[0]);
                        }
                    }
                }
                thisLink.Columns.AddColumn(typeFieldPaths.ElementAt(typeFieldPaths.Count() - 1).Value);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Returns list of key values giving the types and field name parsed for the given string of field joins
        /// key = type, value = field
        /// </summary>
        /// <param name="xrmService"></param>
        /// <param name="fieldPath"></param>
        /// <param name="sourceType"></param>
        /// <returns></returns>
        public static IEnumerable <KeyValuePair <string, string> > GetTypeFieldPath(this XrmService xrmService, string fieldPath, string sourceType)
        {
            var list             = new List <KeyValuePair <string, string> >();
            var splitOutFunction = fieldPath.Split(':');

            if (splitOutFunction.Count() > 1)
            {
                fieldPath = splitOutFunction.ElementAt(1);
            }
            var split       = fieldPath.Split('.');
            var currentType = sourceType;

            list.Add(new KeyValuePair <string, string>(currentType, split.ElementAt(0).Split('|').First()));
            var i = 1;

            if (split.Length > 1)
            {
                foreach (var item in split.Skip(1).Take(split.Length - 1))
                {
                    var fieldName = item.Split('|').First();
                    if (split.ElementAt(i - 1).Contains("|"))
                    {
                        var targetType = split.ElementAt(i - 1).Split('|').Last();
                        list.Add(new KeyValuePair <string, string>(targetType, fieldName));
                        currentType = targetType;
                    }
                    else
                    {
                        var targetType = xrmService.GetLookupTargetEntity(list.ElementAt(i - 1).Value, currentType);
                        list.Add(new KeyValuePair <string, string>(targetType, fieldName));
                        currentType = targetType;
                    }
                    i++;
                }
            }
            return(list);
        }
        public void PopulateField(string field, Entity entity)
        {
            var type      = entity.LogicalName;
            var fieldType = XrmService.GetFieldType(field, type);

            switch (fieldType)
            {
            case AttributeTypeCode.BigInt:
            {
                entity.SetField(field, 1);
                break;
            }

            case AttributeTypeCode.Boolean:
            {
                entity.SetField(field, true);
                break;
            }

            case AttributeTypeCode.CalendarRules:
            {
                break;
            }

            case AttributeTypeCode.Customer:
            {
                entity.SetField(field, CreateAccount());
                break;
            }

            case AttributeTypeCode.DateTime:
            {
                var now            = DateTime.UtcNow;
                var noMilliSeconds = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second,
                                                  DateTimeKind.Utc);
                entity.SetField(field, noMilliSeconds);
                break;
            }

            case AttributeTypeCode.Decimal:
            {
                entity.SetField(field, (decimal)1);
                break;
            }

            case AttributeTypeCode.Double:
            {
                entity.SetField(field, (double)1);
                break;
            }

            case AttributeTypeCode.EntityName:
            {
                break;
            }

            case AttributeTypeCode.Integer:
            {
                entity.SetField(field, 1);
                break;
            }

            case AttributeTypeCode.Lookup:
            {
                var target         = XrmService.GetLookupTargetEntity(field, type);
                var typesToExlcude = new[]
                {
                    "equipment", "transactioncurrency", "pricelevel", "service", "systemuser", "incident",
                    "campaign", "territory"
                };
                if (!typesToExlcude.Contains(target))
                {
                    entity.SetField(field, CreateTestRecord(target).ToEntityReference());
                }
                break;
            }

            case AttributeTypeCode.ManagedProperty:
            {
                break;
            }

            case AttributeTypeCode.Memo:
            {
                entity.SetField(field, "blah blah blah \n blah");
                break;
            }

            case AttributeTypeCode.Money:
            {
                entity.SetField(field, new Money(1));
                break;
            }

            case AttributeTypeCode.Owner:
            {
                entity.SetField(field, new EntityReference("systemuser", CurrentUserId));
                break;
            }

            case AttributeTypeCode.PartyList:
            {
                entity.AddActivityParty(field, "systemuser", CurrentUserId);
                break;
            }

            case AttributeTypeCode.Picklist:
            {
                entity.SetField(field, new OptionSetValue(XrmService.GetOptions(field, type).First().Key));
                break;
            }

            case AttributeTypeCode.State:
            {
                break;
            }

            case AttributeTypeCode.Status:
            {
                break;
            }

            case AttributeTypeCode.String:
            {
                entity.SetField(field, "1234");
                break;
            }

            case AttributeTypeCode.Uniqueidentifier:
            {
                break;
            }

            case AttributeTypeCode.Virtual:
            {
                break;
            }
            }
        }