Пример #1
0
        /// <summary>
        /// 生成main包
        /// </summary>
        /// <param name="ParentInfo"></param>
        private static void JobControl(Project Pj, PackageControl ParentInfo)
        {
            List <PackageControl> childs;

            using (AutossisEntities db = new AutossisEntities())
            {
                if (ParentInfo == null)
                {
                    ParentInfo = db.PackageControl.Where(p => p.ProjectId == Pj.ProjectId && p.ParentId == null).First();
                }
                childs = db.PackageControl.Where(p => p.ParentId == ParentInfo.id).ToList();
            }

            if (childs.Count() > 0)
            {
                EzPackage Package = new EzPackage {
                    Name = ParentInfo.name
                };
                ez.AddPackage(Package);
                foreach (PackageControl child in childs)
                {
                    EzExecPackage exPack = new EzExecPackage(Package)
                    {
                        PackageName         = child.name + ".dtsx",
                        UseProjectReference = true,
                        Name = child.name
                    };
                    JobControl(Pj, child);
                }
            }
        }
Пример #2
0
        private static void Main(string[] args)
        {
            Console.WriteLine("开始......");
            string         ProjectPath = ConfigurationManager.AppSettings.Get("ProjectPath");
            Project        Pj;
            List <Conmgr>  Conmgrs;
            List <Package> Packages;
            Dictionary <int, EzOleDbConnectionManager> CMS;

            using (AutossisEntities db = new AutossisEntities())
            {
                Pj       = db.Project.Where(p => p.ProjectName == projectName).First();
                Conmgrs  = db.Conmgr.Where(p => p.ProjectId == Pj.ProjectId).ToList();
                Packages = db.Package.Where(p => p.ProjectId == Pj.ProjectId).ToList();
                CMS      = getOledbConnectionManagers(Conmgrs);
            }

            ConventionBuilder conventions = new ConventionBuilder();

            conventions
            .ForTypesDerivedFrom <ICreatePackage>()
            .Export <ICreatePackage>()
            .Shared();


            Assembly[] assemblies = new[] { typeof(Program).GetTypeInfo().Assembly };

            ContainerConfiguration configuration = new ContainerConfiguration()
                                                   .WithAssemblies(assemblies, conventions);

            ICreatePackage Cp;

            using (CompositionHost container = configuration.CreateContainer())
            {
                Cp = container.GetExport <ICreatePackage>(ConfigurationManager.AppSettings.Get("ProjectType"));
                Cp.ezOleDbConnectionManagers = CMS;
            }
            foreach (Package package in Packages)
            {
                ez.AddPackage(Cp.Create(package));
                Console.WriteLine(package.PackageName + " 生成成功。");
            }
            JobControl(Pj, null);
            ez.SaveTo(ProjectPath + Pj.ProjectName + ".ispac");
            Console.WriteLine("全部成功!");
            Console.ReadKey();
        }
Пример #3
0
        public EzPackage Create(Package pk)
        {
            EzPackage ezPackage = new EzPackage
            {
                Name = pk.PackageName
            };

            ///添加变量
            ezPackage.Variables.Add("ExecuteId", false, "User", "0");
            ezPackage.Variables.Add("TimeList", false, "User", null);
            ezPackage.Variables.Add("StartTime", false, "User", "");
            ezPackage.Variables.Add("EndTime", false, "User", "");
            //变量集合
            Variables    Variables = ezPackage.Variables;
            IList <Task> tasks;

            using (AutossisEntities db = new AutossisEntities())
            {
                tasks = db.Task.Where(p => p.PackageId == pk.PackageId).ToList();
            }
            #region 第0步:GetTimeList
            Task          GetTimeListTask = tasks.Where(p => p.TaskName.StartsWith("GetTimeList")).First();
            EzExecSqlTask GetTimeList     = createEzExecSqlTask(ezPackage, GetTimeListTask, null);
            GetTimeList.ResultSetType = Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ResultSetType.ResultSetType_Rowset;
            GetTimeList.ParameterBindings.Add(Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, "0", "User::StartTime", OleDBDataTypes.NVARCHAR);
            GetTimeList.ParameterBindings.Add(Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ParameterDirections.Output, "1", "User::EndTime", OleDBDataTypes.NVARCHAR);
            GetTimeList.ResultBindings.Add("0", "User::TimeList");
            #endregion

            #region 第1步:Log_PackageStart
            Task          Log_PackageStartTask = tasks.Where(p => p.TaskName.StartsWith("Log_PackageStart")).First();
            EzExecSqlTask Log_PackageStart     = createEzExecSqlTask(ezPackage, Log_PackageStartTask, GetTimeList);
            Log_PackageStart.ResultSetType = Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask.ResultSetType.ResultSetType_SingleRow;
            Log_PackageStart.ResultBindings.Add("0", "User::ExecuteId");
            #endregion

            #region 第2步:truncate StagTable
            Task          truncateTask    = tasks.Where(p => p.TaskName.StartsWith("truncate")).First();
            EzExecSqlTask SQLTaskTruncate = createEzExecSqlTask(ezPackage, truncateTask, Log_PackageStart);
            #endregion

            #region  第3步 创建foreach容器
            EzForEachLoop ForeachContainer = CreateEzForEachLoop(ezPackage, SQLTaskTruncate);
            #endregion

            #region 第3.1步:Log_LoadDataToStag
            Task          Log_LoadDataToStagTask = tasks.Where(p => p.TaskName.StartsWith("Log_LoadDataToStag")).First();
            EzExecSqlTask Log_LoadDataToStag     = createEzExecSqlTask(ForeachContainer, Log_LoadDataToStagTask, null);
            Log_LoadDataToStag.ParameterBindings.Add("0", "User::ExecuteId", OleDBDataTypes.NVARCHAR);
            Log_LoadDataToStag.ParameterBindings.Add("1", "User::StartTime", OleDBDataTypes.NVARCHAR);
            #endregion

            #region 第3.2步 创建序列容器
            EzSequence ezContainer = CreateEzSequence(ForeachContainer, Log_LoadDataToStag);
            #endregion

            #region 第3.2.1步:load data
            List <Task> dataflowTasks = tasks.Where(p => p.TaskName.StartsWith("load data") && p.SourceTableName.TrimEnd() != "").ToList();
            foreach (Task dft in dataflowTasks)
            {
                createEzDataFlow(ezContainer, dft, null, Variables);
            }
            #endregion

            #region 第3.3步:Log_MergeData
            Task          Log_MergeDataTask = tasks.Where(p => p.TaskName.StartsWith("Log_MergeData")).First();
            EzExecSqlTask Log_MergeData     = createEzExecSqlTask(ForeachContainer, Log_MergeDataTask, ezContainer);
            Log_MergeData.ParameterBindings.Add("0", "User::ExecuteId", OleDBDataTypes.NVARCHAR);
            Log_MergeData.ParameterBindings.Add("1", "User::StartTime", OleDBDataTypes.NVARCHAR);
            #endregion

            #region 第3.4步:merge data
            Task          mergeTask    = tasks.Where(p => p.TaskName.StartsWith("merge")).First();
            EzExecSqlTask SQLTaskMerge = createEzExecSqlTask(ForeachContainer, mergeTask, Log_MergeData);
            #endregion

            #region 第4步:Log_PackageEnd
            Task          Log_PackageEndTask = tasks.Where(p => p.TaskName.StartsWith("Log_PackageEnd")).First();
            EzExecSqlTask Log_PackageEnd     = createEzExecSqlTask(ezPackage, Log_PackageEndTask, ForeachContainer);
            Log_PackageEnd.ParameterBindings.Add("0", "User::ExecuteId", OleDBDataTypes.NVARCHAR);
            #endregion

            return(ezPackage);
        }