コード例 #1
0
        private async Task <List <ItemProcessed> > GetItems(SqlConnection conn, EntityMapDefinition definition, EntityMapDefinition parentDefinition, StreamWriter fileMappingStream)
        {
            Console.WriteLine($"GetItems: {definition.SourceCode}");

            var result = new List <ItemProcessed>();

            using (var command = new SqlCommand(
                       Queries.SourceQueries.EntityQuery(_sourceTenant,
                                                         definition.SourceKind,
                                                         definition.Attributes.Where(att => att.SourceCardinality == "1")
                                                         .Select(c => MapSourceColumn(c.Source))
                                                         .Distinct()
                                                         .ToArray()
                                                         ), conn))
            {
                command.Parameters.Add(new SqlParameter("@code",
                                                        definition.SourceCode
                                                        ));

                command.CommandTimeout = 360;

                using (var reader = await command.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        var mapping = new Dictionary <string, object>();

                        foreach (var attribute in definition.Attributes)
                        {
                            MapAttribute(mapping, reader, attribute);
                        }

                        foreach (var attribute in definition.Attributes.Where(a =>
                                                                              a.TargetType.Equals(EntityMapDefinition.AttributeMap.AttributeType.File)))
                        {
                            if (mapping.ContainsKey(attribute.Target))
                            {
                                mapping[attribute.Target] = await MapFile(mapping[attribute.Target]?.ToString(), parentDefinition.TargetCode,
                                                                          mapping["_code"]?.ToString(), fileMappingStream);
                            }
                        }

                        if (!mapping.ContainsKey("_name") && mapping.ContainsKey("_code"))
                        {
                            mapping.Add("_name", mapping["_code"]);
                        }

                        var parentId = reader.GetInt64(reader.GetOrdinal("MisEntityID"));
                        result.Add(new ItemProcessed(parentId, mapping));
                    }
                }
            }

            return(result);
        }
コード例 #2
0
        private async Task <Dictionary <long, List <Dictionary <string, object> > > > GetApprovalTrails(SqlConnection conn, string sourceCode, EntityMapDefinition trail, EntityMapDefinition parentDefinition, StreamWriter fileMappingStream)
        {
            var result = new Dictionary <long, List <Dictionary <string, object> > >();

            if (trail == null)
            {
                return(result);
            }

            using (var command = new SqlCommand(
                       Queries.SourceQueries.ApprovalTrailQuery(_sourceTenant), conn))
            {
                command.Parameters.Add(new SqlParameter("@code",
                                                        sourceCode
                                                        ));

                command.CommandTimeout = 360;

                using (var reader = await command.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        var parentId = reader.GetInt64(reader.GetOrdinal("ParentID"));

                        var mapping = new Dictionary <string, object>();

                        foreach (var attribute in trail.Attributes)
                        {
                            MapAttribute(mapping, reader, attribute);
                        }

                        if (!mapping.ContainsKey("_code"))
                        {
                            mapping.Add("_code", Guid.NewGuid());
                        }

                        if (!mapping.ContainsKey("_name"))
                        {
                            mapping.Add("_name", $"Approval_{mapping["_code"]}");
                        }

                        foreach (var attribute in trail.Attributes.Where(a =>
                                                                         a.TargetType.Equals(EntityMapDefinition.AttributeMap.AttributeType.File)))
                        {
                            if (mapping.ContainsKey(attribute.Target))
                            {
                                mapping[attribute.Target] = await MapFile(mapping[attribute.Target]?.ToString(), parentDefinition.TargetCode,
                                                                          mapping["_code"]?.ToString(), fileMappingStream);
                            }
                        }

                        if (result.ContainsKey(parentId))
                        {
                            result[parentId].Add(mapping);
                        }
                        else
                        {
                            result.Add(parentId, new List <Dictionary <string, object> > {
                                { mapping }
                            });
                        }
                    }
                }
            }

            return(result);
        }
コード例 #3
0
        private async Task <IList <Dictionary <string, object> > > MapEntity(SqlConnection conn, EntityMapDefinition definition, StreamWriter fileMappingStream)
        {
            var currentNumber = 1;

            var result               = new List <Dictionary <string, object> >();
            var itemDictionary       = new Dictionary <string, List <ItemProcessed> >();
            var commitmentDictionary = new Dictionary <string, List <ItemProcessed> >();
            var eventDictionary      = new Dictionary <string, List <ItemProcessed> >();


            foreach (var item in definition.Items)
            {
                itemDictionary.Add(item.SourceCode, await GetItems(conn, item, definition, fileMappingStream));
            }

            foreach (var item in definition.Commitments)
            {
                commitmentDictionary.Add(item.SourceCode, await GetTransactionalEntity(conn, item, definition, fileMappingStream));
            }

            foreach (var item in definition.Events)
            {
                eventDictionary.Add(item.SourceCode, await GetTransactionalEntity(conn, item, definition, fileMappingStream));
            }

            var cardinalityDictionary = await GetAttributesWithCardinalityN(definition.SourceCode, conn);

            var approvalTrailDictionary = await GetApprovalTrails(conn, definition.SourceCode, definition.Trail, definition, fileMappingStream);

            using (var command = new SqlCommand(
                       Queries.SourceQueries.EntityQuery(_sourceTenant,
                                                         definition.SourceKind,
                                                         definition.Attributes.Where(att => att.SourceCardinality == "1").Select(c => MapSourceColumn(c.Source)).Distinct().ToArray()), conn))
            {
                command.Parameters.Add(new SqlParameter("@code", definition.SourceCode));
                try
                {
                    command.CommandTimeout = 360;

                    using (var reader = await command.ExecuteReaderAsync())
                    {
                        while (await reader.ReadAsync())
                        {
                            var sourceEntityId = reader.GetInt64(reader.GetOrdinal("ID"));
                            var mapping        = new Dictionary <string, object>();

                            foreach (var attribute in definition.Attributes)
                            {
                                if (attribute.SourceCardinality == "1")
                                {
                                    MapAttribute(mapping, reader, attribute);
                                }
                                else if (cardinalityDictionary.ContainsKey(sourceEntityId) && cardinalityDictionary[sourceEntityId].ContainsKey(attribute.Source))
                                {
                                    mapping[attribute.Target] = cardinalityDictionary[sourceEntityId][attribute.Source];
                                }
                            }

                            foreach (var item in definition.Items)
                            {
                                var data = itemDictionary[item.SourceCode].Where(i => i.ParentId.Equals(sourceEntityId))
                                           .Select(i => i.Data);

                                foreach (var parentAttribute in item.Attributes.Where(a => a.Source.StartsWith("Parent.")))
                                {
                                    foreach (var dataElement in data)
                                    {
                                        var attributeName = parentAttribute.Source.Split('.')[1];
                                        if (mapping.ContainsKey(attributeName))
                                        {
                                            dataElement[parentAttribute.Target] = mapping[attributeName];
                                        }
                                    }
                                }

                                mapping[item.TargetCode] = data;
                            }

                            foreach (var item in definition.Commitments)
                            {
                                var data = commitmentDictionary[item.SourceCode].Where(i => i.ParentId.Equals(sourceEntityId))
                                           .Select(i => i.Data);

                                foreach (var parentAttribute in item.Attributes.Where(a => a.Source.StartsWith("Parent.")))
                                {
                                    foreach (var dataElement in data)
                                    {
                                        var attributeName = parentAttribute.Source.Split('.')[1];
                                        if (mapping.ContainsKey(attributeName))
                                        {
                                            dataElement[parentAttribute.Target] = mapping[attributeName];
                                        }
                                    }
                                }

                                mapping[item.TargetCode] = data;
                            }

                            foreach (var item in definition.Events)
                            {
                                var data = eventDictionary[item.SourceCode].Where(i => i.ParentId.Equals(sourceEntityId))
                                           .Select(i => i.Data);

                                foreach (var parentAttribute in item.Attributes.Where(a => a.Source.StartsWith("Parent.")))
                                {
                                    foreach (var dataElement in data)
                                    {
                                        var attributeName = parentAttribute.Source.Split('.')[1];
                                        if (mapping.ContainsKey(attributeName))
                                        {
                                            dataElement[parentAttribute.Target] = mapping[attributeName];
                                        }
                                    }
                                }

                                mapping[item.TargetCode] = data;
                            }

                            if (definition.Trail != null && approvalTrailDictionary.ContainsKey(sourceEntityId))
                            {
                                mapping[definition.Trail.TargetCode] = approvalTrailDictionary[sourceEntityId];
                            }

                            // Rewrite series in case of documents
                            if (definition.TargetKind.Equals("Document", StringComparison.InvariantCultureIgnoreCase) &&
                                definition.SourceKind.Equals("Interaction", StringComparison.InvariantCultureIgnoreCase))
                            {
                                if (mapping.ContainsKey("_serie"))
                                {
                                    mapping["_serie"] = $"{reader.GetString(reader.GetOrdinal("CompanyCode"))}_{mapping["_serie"]}";
                                    mapping["_code"]  = $"{mapping["_serie"]}{mapping["_number"]}";
                                }
                                else if (!mapping.ContainsKey("_code"))
                                {
                                    mapping["_code"] = Guid.NewGuid().ToString("N");
                                }
                            }
                            else if (definition.TargetKind.Equals("Document", StringComparison.InvariantCultureIgnoreCase))
                            {
                                mapping["_serie"]  = "A";
                                mapping["_number"] = currentNumber++;
                            }
                            else if (definition.SourceKind.Equals("Interaction",
                                                                  StringComparison.InvariantCultureIgnoreCase) &&
                                     !definition.TargetKind.Equals("Document", StringComparison.InvariantCultureIgnoreCase))
                            {
                                if (!mapping.ContainsKey("_code"))
                                {
                                    mapping["_code"] =
                                        $"{reader.GetString(reader.GetOrdinal("CompanyCode"))}_{reader.GetString(reader.GetOrdinal("NumberSerieCode"))}{reader.GetInt64(reader.GetOrdinal("Number"))}";
                                }
                            }

                            foreach (var attribute in definition.Attributes.Where(a =>
                                                                                  a.TargetType.Equals(EntityMapDefinition.AttributeMap.AttributeType.File)))
                            {
                                if (mapping.ContainsKey(attribute.Target))
                                {
                                    mapping[attribute.Target] = await MapFile(mapping[attribute.Target]?.ToString(), definition.TargetCode,
                                                                              mapping["_code"]?.ToString(), fileMappingStream);
                                }
                            }

                            result.Add(mapping);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.GetType().ToString());
                    Console.WriteLine(ex.Message);
                }
            }

            return(result);
        }