public void DoImport()
        {
            var param = (ImportHeadersParam)View.CurrentObject; // TODO: refactor for deduplication

            var csvStream = new MemoryStream();

            param.File.SaveToStream(csvStream);
            csvStream.Position = 0;

            var             xpoMapper = new Xafology.ExpressApp.Xpo.ValueMap.XpoFieldMapper();
            ICsvToXpoLoader loader    = null;

            if (param.ImportActionType == ImportActionType.Insert)
            {
                loader = new HeadCsvToXpoInserter(param, csvStream, xpoMapper, null);
            }
            else if (param.ImportActionType == ImportActionType.Update)
            {
                loader = new HeadCsvToXpoUpdater(param, csvStream, xpoMapper, null);
            }
            else
            {
                throw new ArgumentException("Invalid Import Action Type", "ImportActionType");
            }

            loader.Execute();
        }
예제 #2
0
        public void UpdateSimpleHeaderCsv()
        {
            // arrange parameters

            var map1 = ObjectSpace.CreateObject <HeaderToFieldMap>();

            map1.SourceName = "Description";
            map1.TargetName = map1.SourceName;
            map1.IsKeyField = true;

            var map2 = ObjectSpace.CreateObject <HeaderToFieldMap>();

            map2.SourceName = "Amount";
            map2.TargetName = map2.SourceName;

            var param = ObjectSpace.CreateObject <ImportHeadersParam>();

            param.HeaderToFieldMaps.Add(map1);
            param.HeaderToFieldMaps.Add(map2);

            param.ObjectTypeName = "MockFactObject";

            // arrange XPO objects

            var obj1 = ObjectSpace.CreateObject <MockFactObject>();

            obj1.Description = "Hello 1";
            obj1.Amount      = 10;

            var obj2 = ObjectSpace.CreateObject <MockFactObject>();

            obj2.Description = "Hello 2";
            obj2.Amount      = 20;

            var obj3 = ObjectSpace.CreateObject <MockFactObject>();

            obj3.Description = "Hello 3";
            obj3.Amount      = 30;

            ObjectSpace.CommitChanges();

            // arrange loader

            string csvText = @"Description,Amount
Hello 1,100
Hello 2,200
Hello 3,300";

            var             csvStream      = ConvertToCsvStream(csvText);
            var             request        = ObjectSpace.CreateObject <ImportRequest>();
            var             logger         = new ImportLogger(request);
            var             xpoFieldMapper = new XpoFieldMapper();
            ICsvToXpoLoader loader         = new HeadCsvToXpoUpdater(param, csvStream, xpoFieldMapper, logger);

            // act

            loader.Execute();

            // assert
            var updated = new XPQuery <MockFactObject>(ObjectSpace.Session);

            Assert.AreEqual(3, updated.Count()); // returns 6 because it inserts instead of updates

            MockFactObject result = updated.Where(x => x.Description == "Hello 1").FirstOrDefault();

            Assert.AreEqual(100, result.Amount);

            result = updated.Where(x => x.Description == "Hello 2").FirstOrDefault();
            Assert.AreEqual(200, result.Amount);

            result = updated.Where(x => x.Description == "Hello 3").FirstOrDefault();
            Assert.AreEqual(300, result.Amount);
        }