//导出
        protected void btn_Export_Click(object sender, EventArgs e)
        {
            var req = Request;

            if (req.IsAuthenticated)
            {
                //var entityIDs = hd_entityID.Value.Split(',').Where(p => p.IsNotEmpty()).ToList();
                var entityIDs = ProcessDescInfoDeluxeGrid.SelectedKeys;

                if (!entityIDs.Any())
                {
                    return;
                }

                ETLEntityCollection collection = new ETLEntityCollection();
                try
                {
                    entityIDs.ForEach(id => collection.Add(DESchemaObjectAdapter.Instance.Load(id, DateTime.Now.SimulateTime()) as ETLEntity));
                    //验证导出数据的完整性
                    string validResult = CheckEntityChildren.CheckSelectEntities(collection.Select(p => p.ID).ToArray());
                    validResult.IsNotEmpty().TrueThrow(validResult);

                    string fileName = "ETLEntity" + "_" + DateTime.Now.SimulateTime().ToString("yyyyMMdd_HHmmss") + ".xml";
                    Response.AddHeader("Content-Disposition", "attachment; filename=\"" + ResponseExtensions.EncodeFileNameInContentDisposition(Response, fileName) + "\"");

                    var aaa = collection.ToXElement();
                    Response.Write(aaa.ToString());
                    Response.Flush();
                    Response.End();
                }
                catch (Exception ex)
                {
                    var exception = ex.GetRealException();
                    throw new HttpException("导出实体出错!\r\n" + exception.Message, ex.InnerException);
                }
            }
            else
            {
                throw new HttpException("请求的方式错误");
            }
        }
        /// <summary>
        /// 根据ID获取实体
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        protected ETLEntityCollection GetETLEntities(string ids)
        {
            ETLEntityCollection etls = new ETLEntityCollection();

            if (!string.IsNullOrEmpty(ids))
            {
                string[] propertities = ids.TrimEnd(',').Split(',');
                for (int i = 0; i < propertities.Length; i++)
                {
                    string id = propertities[i];
                    if (!string.IsNullOrEmpty(id))
                    {
                        //根据ID获取ETL实体
                        ETLEntity entity = DESchemaObjectAdapter.Instance.Load(id) as ETLEntity;
                        if (entity != null)
                        {
                            etls.Add(entity);
                        }
                    }
                }
            }
            return(etls);
        }
        //保存
        protected void btn_Save_Click(object sender, EventArgs e)
        {
            //错误信息
            StringBuilder error = new StringBuilder();

            if (this.Data == null && Request["id"] != null)
            {
                //根据ID获取任务对象
                //this.Data = (ETLJob)ETLJobAdapter.Instance.Load(Convert.ToString(Request["id"]));
                this.Data = JobBaseAdapter.Instance.Load(c => c.AppendItem("job_id", Convert.ToString(Request["id"]))).FirstOrDefault();
            }

            if (!Util.CheckOperationSafe())
            {
                return;
            }
            //ETL任务
            if (ddl_JobType.SelectedValue == "ETLService")
            {
                #region

                JobScheduleCollection pvc = new JobScheduleCollection();
                //计划列表
                if (ch_IsAuto.Checked)
                {
                    //pvc = JSONSerializerExecute.Deserialize<JobScheduleCollection>(schedules.Value);
                    pvc = GetSchedules(schedules.Value);
                }

                ETLEntityCollection etls = GetETLEntities(etlEntities.Value);

                ETLWhereConditionCollection wheres = JSONSerializerExecute.Deserialize <ETLWhereConditionCollection>(conditions.Value);
                if (this.Data != null)
                {
                    ETLJob job = ETLJobAdapter.Instance.Load(this.Data.JobID) as ETLJob;
                    this.Data       = job;
                    job.Category    = txt_jobCategory.Text;
                    job.Enabled     = ddl_Enabled.SelectedValue == "1" ? true : false;
                    job.JobType     = JobType.ETLService;
                    job.Description = txt_JobDescription.Text;
                    job.Name        = txt_JobName.Text;
                    job.Schedules   = pvc;
                    job.ETLEntities = etls;
                    job.IsAuto      = ch_IsAuto.Checked;
                    job.IsIncrement = ch_IsIncrement.Checked;
                    wheres.ForEach(w => { w.JOB_ID = this.Data.JobID; w.ID = Guid.NewGuid().ToString(); });

                    job.ETLWhereConditions = wheres;

                    if (CheckEtlEntities())
                    {
                        ETLJobOperations.Instance.DoOperation(EntityJobOperationMode.Update, job);
                    }
                }
                else
                {
                    ETLJob job = new ETLJob()
                    {
                        JobID       = Guid.NewGuid().ToString(),
                        Category    = txt_jobCategory.Text,
                        Enabled     = ddl_Enabled.SelectedValue == "1" ? true : false,
                        JobType     = JobType.ETLService,
                        Description = txt_JobDescription.Text,
                        Name        = txt_JobName.Text,
                        Schedules   = pvc,
                        ETLEntities = etls,
                        IsAuto      = ch_IsAuto.Checked,
                        IsIncrement = ch_IsIncrement.Checked
                    };
                    wheres.ForEach(w => { w.JOB_ID = job.JobID; w.ID = Guid.NewGuid().ToString(); });

                    job.ETLWhereConditions = wheres;

                    this.Data = job;
                    if (CheckEtlEntities())
                    {
                        ETLJobOperations.Instance.DoOperation(EntityJobOperationMode.Add, job);
                    }
                }
                if (string.IsNullOrEmpty(ErrorMsg))
                {
                    HttpContext.Current.Response.Write("<script>window.returnValue=true;window.close();</script>");
                    //this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", "window.returnValue=true;window.close()", true);
                }
                else
                {
                    //ViewState["conditions"] = conditions.Value;
                    ViewState["schedules"] = schedules.Value;
                    conditions.Value       = JSONSerializerExecute.Serialize((this.Data as ETLJob).ETLWhereConditions);

                    ViewState["etlEntities"] = etlEntities.Value;


                    //计划列表
                    List <ScheduleGridObj> scheduleList = new List <ScheduleGridObj>();
                    foreach (JobSchedule item in this.Data.Schedules)
                    {
                        scheduleList.Add(new ScheduleGridObj()
                        {
                            ID          = item.ID,
                            Name        = item.Name,
                            Description = item.Description
                        });
                    }
                    ViewState["schedulesGrid"] = JSONSerializerExecute.Serialize(scheduleList);;
                    grid.InitialData           = scheduleList;

                    //etl实体列表
                    List <EtlGridObj> etlJobs = new List <EtlGridObj>();
                    foreach (ETLEntity item in (this.Data as ETLJob).ETLEntities)
                    {
                        etlJobs.Add(new EtlGridObj()
                        {
                            ID          = item.ID,
                            CodeName    = item.Name,
                            Description = item.Description
                        });
                    }

                    ViewState["etlsGrid"] = JSONSerializerExecute.Serialize(etlJobs);
                    gridEtl.InitialData   = etlJobs;

                    string msg       = ErrorMsg.Replace("\r\n", string.Empty);
                    string scriptStr = string.Format("alert('{0}');", msg);
                    this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", scriptStr, true);
                    //HttpContext.Current.Response.Write(scriptStr);
                }
                #endregion
            }
            //WebService任务
            else
            {
                #region

                JobScheduleCollection pvc = new JobScheduleCollection();
                //计划列表
                if (ch_IsAuto.Checked)
                {
                    //pvc = JSONSerializerExecute.Deserialize<JobScheduleCollection>(schedules.Value);
                    pvc = GetSchedules(schedules.Value);
                }

                if (this.Data != null)
                {
                    InvokeWebServiceJob job = InvokeWebServiceJobAdapter.Instance.Load(w => w.AppendItem("Job_id", this.Data.JobID)).FirstOrDefault();// this.Data as InvokeWebServiceJob;
                    job.Category         = txt_jobCategory.Text;
                    job.Enabled          = ddl_Enabled.SelectedValue == "1" ? true : false;
                    job.JobType          = JobType.InvokeService;
                    job.Description      = txt_JobDescription.Text;
                    job.Name             = txt_JobName.Text;
                    job.Schedules        = pvc;
                    job.ISManual         = !ch_IsAuto.Checked;
                    job.SvcOperationDefs = JSONSerializerExecute.Deserialize <WfServiceOperationDefinitionCollection>(this.services.Value);
                    //入库
                    DoUpdate(job);
                }
                else
                {
                    InvokeWebServiceJob job = new InvokeWebServiceJob()
                    {
                        JobID            = Guid.NewGuid().ToString(),
                        Category         = txt_jobCategory.Text,
                        Enabled          = ddl_Enabled.SelectedValue == "1" ? true : false,
                        JobType          = JobType.InvokeService,
                        Description      = txt_JobDescription.Text,
                        Name             = txt_JobName.Text,
                        Schedules        = pvc,
                        ISManual         = !ch_IsAuto.Checked,
                        SvcOperationDefs = JSONSerializerExecute.Deserialize <WfServiceOperationDefinitionCollection>(this.services.Value)
                    };

                    this.Data = job;

                    //入库
                    DoUpdate(job);
                }
                if (string.IsNullOrEmpty(ErrorMsg))
                {
                    HttpContext.Current.Response.Write("<script>window.returnValue=true;window.close();</script>");
                    //this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", "window.returnValue=true;window.close()", true);
                }
                else
                {
                    //ViewState["conditions"] = conditions.Value;
                    ViewState["schedules"] = schedules.Value;
                    conditions.Value       = JSONSerializerExecute.Serialize((this.Data as ETLJob).ETLWhereConditions);

                    ViewState["etlEntities"] = etlEntities.Value;


                    //计划列表
                    List <ScheduleGridObj> scheduleList = new List <ScheduleGridObj>();
                    foreach (JobSchedule item in this.Data.Schedules)
                    {
                        scheduleList.Add(new ScheduleGridObj()
                        {
                            ID          = item.ID,
                            Name        = item.Name,
                            Description = item.Description
                        });
                    }
                    ViewState["schedulesGrid"] = JSONSerializerExecute.Serialize(scheduleList);;
                    grid.InitialData           = scheduleList;

                    //etl实体列表
                    List <EtlGridObj> etlJobs = new List <EtlGridObj>();
                    foreach (ETLEntity item in (this.Data as ETLJob).ETLEntities)
                    {
                        etlJobs.Add(new EtlGridObj()
                        {
                            ID          = item.ID,
                            CodeName    = item.Name,
                            Description = item.Description
                        });
                    }

                    ViewState["etlsGrid"] = JSONSerializerExecute.Serialize(etlJobs);
                    gridEtl.InitialData   = etlJobs;

                    string msg       = ErrorMsg.Replace("\r\n", string.Empty);
                    string scriptStr = string.Format("alert('{0}');", msg);
                    this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "closeWindow", scriptStr, true);
                }
                #endregion
            }
        }