private void UpdateInfo(string materialId, string url, string connectionName, string rootPath)
		{
			materialId.CheckStringIsNullOrEmpty("materialId");
			url.CheckStringIsNullOrEmpty("url");
			connectionName.CheckStringIsNullOrEmpty("connectionName");

			var material = MaterialHelper.LoadMaterial(materialId, connectionName);
			var extraData = material.ExtraDataDictionary;

			if (extraData.ContainsKey(SyncMaterialFileToDocCenterOperation.ShowFileUrlKey))
			{
				extraData[SyncMaterialFileToDocCenterOperation.ShowFileUrlKey] = url;
			}
			else
			{
				extraData.Add(SyncMaterialFileToDocCenterOperation.ShowFileUrlKey, url);
			}

			var deltaMaterialList = new DeltaMaterialList();
			deltaMaterialList.RootPathName = rootPath;
			deltaMaterialList.Updated.Add(material);

			DbConnectionMappingContext.DoMappingAction(
				MaterialAdapter.Instance.GetConnectionName(),
				connectionName,
				() =>
				{
					MaterialAdapter.Instance.SaveDeltaMaterials(deltaMaterialList, false);
				});
		}
        private void UpdateInfo(string materialId, string url, string connectionName, string rootPath)
        {
            materialId.CheckStringIsNullOrEmpty("materialId");
            url.CheckStringIsNullOrEmpty("url");
            connectionName.CheckStringIsNullOrEmpty("connectionName");

            var material  = MaterialHelper.LoadMaterial(materialId, connectionName);
            var extraData = material.ExtraDataDictionary;

            if (extraData.ContainsKey(SyncMaterialFileToDocCenterOperation.ShowFileUrlKey))
            {
                extraData[SyncMaterialFileToDocCenterOperation.ShowFileUrlKey] = url;
            }
            else
            {
                extraData.Add(SyncMaterialFileToDocCenterOperation.ShowFileUrlKey, url);
            }

            var deltaMaterialList = new DeltaMaterialList();

            deltaMaterialList.RootPathName = rootPath;
            deltaMaterialList.Updated.Add(material);

            DbConnectionMappingContext.DoMappingAction(
                MaterialAdapter.Instance.GetConnectionName(),
                connectionName,
                () =>
            {
                MaterialAdapter.Instance.SaveDeltaMaterials(deltaMaterialList, false);
            });
        }
Example #3
0
        /// <summary>
        ///反序列化DeltaMaterial
        /// </summary>
        /// <param name="dictionary">对象类型</param>
        /// <param name="type">对象类型</param>
        /// <param name="serializer">JS序列化器</param>
        /// <returns>反序列化出的对象</returns>
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            DeltaMaterialList deltaMaterialList = new DeltaMaterialList();

            object insertedMaterials;

            if (dictionary.TryGetValue("insertedMaterials", out insertedMaterials))
            {
                ArrayList materials = (ArrayList)insertedMaterials;
                for (int i = 0; i < materials.Count; i++)
                {
                    deltaMaterialList.Inserted.Add(JSONSerializerExecute.Deserialize <Material>(materials[i]));
                }
            }

            object updatedMaterials;

            if (dictionary.TryGetValue("updatedMaterials", out updatedMaterials))
            {
                ArrayList materials = (ArrayList)updatedMaterials;
                for (int i = 0; i < materials.Count; i++)
                {
                    deltaMaterialList.Updated.Add(JSONSerializerExecute.Deserialize <Material>(materials[i]));
                }
            }

            object deletedMaterials;

            if (dictionary.TryGetValue("deletedMaterials", out deletedMaterials))
            {
                ArrayList materials = (ArrayList)deletedMaterials;
                for (int i = 0; i < materials.Count; i++)
                {
                    deltaMaterialList.Deleted.Add(JSONSerializerExecute.Deserialize <Material>(materials[i]));
                }
            }

            deltaMaterialList.RootPathName = (string)dictionary["rootPathName"];

            return(deltaMaterialList);
        }
        public void SaveArchiveData(ArchiveBasicInfo info)
        {
            ArchiveSettings settings = ArchiveSettings.GetConfig();

            ORMappingItemCollection mappings = ORMapping.GetMappingInfo <Material>().Clone();

            mappings["CREATE_DATETIME"].BindingFlags        |= (ClauseBindingFlags.Update | ClauseBindingFlags.Insert);
            ORMappingContextCache.Instance[typeof(Material)] = mappings;

            try
            {
                MaterialAdapter.Instance.DeleteMaterialsByResourceID(info.ResourceID);
                MaterialContentAdapter.Instance.Delete(b => b.AppendItem("RELATIVE_ID", info.ResourceID));

                info.Context.DoAction <MaterialList>("Materials", materials =>
                {
                    DeltaMaterialList dml = new DeltaMaterialList();

                    materials.ForEach(m =>
                    {
                        dml.Inserted.Add(m);
                    });

                    MaterialAdapter.Instance.SaveDeltaMaterials(dml, false);

                    dml.Inserted.ForEach(m =>
                    {
                        if (m.Content != null)
                        {
                            MaterialContentAdapter.Instance.Update(m.Content);
                        }
                    });
                });
            }
            finally
            {
                ORMappingContextCache.Instance.Remove(typeof(Material));
            }
        }
Example #5
0
        /// <summary>
        /// 序列化DeltaMaterial
        /// </summary>
        /// <param name="obj">DeltaMaterial对象</param>
        /// <param name="serializer">序列化器</param>
        /// <returns>属性集合</returns>
        public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer)
        {
            Dictionary <string, object> dictionary = new Dictionary <string, object>();

            DeltaMaterialList deltaMaterialList = (DeltaMaterialList)obj;

            Material[] insertedMaterials = new Material[deltaMaterialList.Inserted.Count];

            for (int i = 0; i < insertedMaterials.Length; i++)
            {
                insertedMaterials[i] = deltaMaterialList.Inserted[i];
            }

            dictionary.Add("insertedMaterials", insertedMaterials);

            Material[] updatedMaterials = new Material[deltaMaterialList.Updated.Count];

            for (int i = 0; i < updatedMaterials.Length; i++)
            {
                updatedMaterials[i] = deltaMaterialList.Updated[i];
            }

            dictionary.Add("updatedMaterials", updatedMaterials);

            Material[] deletedMaterials = new Material[deltaMaterialList.Deleted.Count];

            for (int i = 0; i < deletedMaterials.Length; i++)
            {
                deletedMaterials[i] = deltaMaterialList.Deleted[i];
            }

            dictionary.Add("deletedMaterials", deletedMaterials);

            dictionary.Add("rootPathName", deltaMaterialList.RootPathName);

            return(dictionary);
        }
		public void SaveArchiveData(ArchiveBasicInfo info)
		{
			ArchiveSettings settings = ArchiveSettings.GetConfig();

			ORMappingItemCollection mappings = ORMapping.GetMappingInfo<Material>().Clone();

			mappings["CREATE_DATETIME"].BindingFlags |= (ClauseBindingFlags.Update | ClauseBindingFlags.Insert);
			ORMappingContextCache.Instance[typeof(Material)] = mappings;

			try
			{
				MaterialAdapter.Instance.DeleteMaterialsByResourceID(info.ResourceID);
				MaterialContentAdapter.Instance.Delete(b => b.AppendItem("RELATIVE_ID", info.ResourceID));

				info.Context.DoAction<MaterialList>("Materials", materials =>
				{
					DeltaMaterialList dml = new DeltaMaterialList();

					materials.ForEach(m =>
					{
						dml.Inserted.Add(m);
					});

					MaterialAdapter.Instance.SaveDeltaMaterials(dml, false);

					dml.Inserted.ForEach(m =>
					{
						if (m.Content != null)
							MaterialContentAdapter.Instance.Update(m.Content);
					});
				});
			}
			finally
			{
				ORMappingContextCache.Instance.Remove(typeof(Material));
			}
		}
Example #7
0
        internal DeltaMaterialList ToDeltaMaterials()
        {
            DeltaMaterialList delta = new DeltaMaterialList();

            foreach (MaterialModel materialModel in this)
            {
                switch (materialModel.Status)
                {
                case MaterualModelStatus.Inserted:
                    delta.Inserted.Append(materialModel);
                    break;

                case MaterualModelStatus.Updated:
                    delta.Updated.Append(materialModel);
                    break;

                case MaterualModelStatus.Deleted:
                    delta.Deleted.Append(materialModel);
                    break;
                }
            }

            return(delta);
        }
		/// <summary>
		///反序列化DeltaMaterial
		/// </summary>
		/// <param name="dictionary">对象类型</param>
		/// <param name="type">对象类型</param>
		/// <param name="serializer">JS序列化器</param>
		/// <returns>反序列化出的对象</returns>
		public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
		{
			DeltaMaterialList deltaMaterialList = new DeltaMaterialList();

			object insertedMaterials;

			if (dictionary.TryGetValue("insertedMaterials", out insertedMaterials))
			{
				ArrayList materials = (ArrayList)insertedMaterials;
				for (int i = 0; i < materials.Count; i++)
					deltaMaterialList.Inserted.Add(JSONSerializerExecute.Deserialize<Material>(materials[i]));
			}

			object updatedMaterials;

			if (dictionary.TryGetValue("updatedMaterials", out updatedMaterials))
			{
				ArrayList materials = (ArrayList)updatedMaterials;
				for (int i = 0; i < materials.Count; i++)
					deltaMaterialList.Updated.Add(JSONSerializerExecute.Deserialize<Material>(materials[i]));
			}

			object deletedMaterials;

			if (dictionary.TryGetValue("deletedMaterials", out deletedMaterials))
			{
				ArrayList materials = (ArrayList)deletedMaterials;
				for (int i = 0; i < materials.Count; i++)
					deltaMaterialList.Deleted.Add(JSONSerializerExecute.Deserialize<Material>(materials[i]));
			}

			deltaMaterialList.RootPathName = (string)dictionary["rootPathName"];

			return deltaMaterialList;
		}
        /// <summary>
        /// 形成更新副本的SQL
        /// </summary>
        /// <param name="deltaMaterials">要更新的DeltaMaterialList对象</param>
        /// <returns>形成的SQL语句</returns>
        private string GetCopyFilesSql(DeltaMaterialList deltaMaterials)
        {
            ExceptionHelper.TrueThrow<ArgumentNullException>(deltaMaterials == null, "deltaMaterials");

            StringBuilder strB = new StringBuilder(256);

            //新增
            foreach (Material material in deltaMaterials.Inserted)
            {
                if (strB.Length > 0)
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                strB.Append(ORMapping.GetInsertSql<Material>(material, TSqlBuilder.Instance));
            }

            //更新
            foreach (Material material in deltaMaterials.Updated)
            {
                if (strB.Length > 0)
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                WhereSqlClauseBuilder wBuilder = new WhereSqlClauseBuilder();

                wBuilder.AppendItem("PARENT_ID", material.ParentID);
                wBuilder.AppendItem("WF_ACTIVITY_ID", material.WfActivityID);
                wBuilder.AppendItem("VERSION_TYPE", (int)MaterialVersionType.CopyVersion);

                strB.Append(string.Format(
                        @"IF EXISTS(SELECT * FROM WF.MATERIAL WHERE {0})
							{1}
						  ELSE
							{2}",
                        wBuilder.ToSqlString(TSqlBuilder.Instance),
                        ORMapping.GetUpdateSql<Material>(material, TSqlBuilder.Instance),
                        ORMapping.GetInsertSql<Material>(material, TSqlBuilder.Instance)));
            }

            return strB.ToString();
        }
        /// <summary>
        /// 保存副本
        /// </summary>
        /// <param name="deltaMaterials">已经复制完成的副本的delta对象</param>
        /// <param name="sourceRootPathName">源文件的主路径的配置节点名称</param>
        /// <param name="destRootPathName">目标文件的主路径的配置节点名称</param>
        public void SaveCopyVersion(DeltaMaterialList deltaMaterials, string destRootPathName)
        {
            ExceptionHelper.TrueThrow<ArgumentNullException>(deltaMaterials == null, "deltaMaterials");

            if (string.IsNullOrEmpty(deltaMaterials.RootPathName))
                deltaMaterials.RootPathName = MaterialAdapter.DefaultUploadPathName;

            ExceptionHelper.CheckStringIsNullOrEmpty(destRootPathName, "destRootPathName");

            string sql = this.GetCopyFilesSql(deltaMaterials);

            if (string.IsNullOrEmpty(sql) == false)
            {
                using (TransactionScope scope = TransactionScopeFactory.Create(TransactionScopeOption.Required))
                {
                    DbHelper.RunSql(sql, GetConnectionName());

                    DoFilesCopy(deltaMaterials.Inserted, deltaMaterials.RootPathName, destRootPathName, true);
                    DoFilesCopy(deltaMaterials.Updated, deltaMaterials.RootPathName, destRootPathName, true);
                    DoFilesCopy(deltaMaterials.Deleted, deltaMaterials.RootPathName, destRootPathName, false);

                    scope.Complete();
                }
            }
        }
        /// <summary>
        /// 删除指定ResourceID的附件
        /// </summary>
        /// <param name="rootPathName">根目录配置名称</param>
        /// <param name="resourceID">资源ID</param>
        private void InnerDeleteMaterialsByResourceID(string rootPathName, string resourceID)
        {
            ExceptionHelper.CheckStringIsNullOrEmpty(resourceID, "resourceID");

            MaterialList materialList = this.LoadMaterialsByResourceID(resourceID);

            DeltaMaterialList deltaMaterialList = new DeltaMaterialList();

            deltaMaterialList.RootPathName = rootPathName;

            foreach (Material material in materialList)
            {
                deltaMaterialList.Deleted.Add(material);
            }

            this.SaveDeltaMaterials(deltaMaterialList, string.IsNullOrEmpty(rootPathName) == false);
        }
        /// <summary>
        /// 生成SQL,形成文件操作集合
        /// </summary>
        /// <param name="deltaMaterials">Material操作集合</param>
        /// <param name="fileOPList">文件操作集合</param>
        /// <returns>形成的SQL语句</returns>
        private string FillMaterialSqlAndFileOpList(DeltaMaterialList deltaMaterials, List<MaterialFileOeprationInfo> fileOPList)
        {
            StringBuilder strB = new StringBuilder(1024);

            string sql = GetMaterialsOperationSql(deltaMaterials.Inserted, fileOPList, GetInsertMaterialSql);

            if (string.IsNullOrEmpty(sql) == false)
                strB.Append(sql);

            sql = GetMaterialsOperationSql(deltaMaterials.Updated, fileOPList, GetUpdateMaterialSql);

            if (string.IsNullOrEmpty(sql) == false)
            {
                if (strB.Length > 0)
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                strB.Append(sql);
            }

            sql = GetMaterialsOperationSql(deltaMaterials.Deleted, fileOPList, GetDeleteMaterialSql);

            if (string.IsNullOrEmpty(sql) == false)
            {
                if (strB.Length > 0)
                    strB.Append(TSqlBuilder.Instance.DBStatementSeperator);

                strB.Append(sql);
            }

            return strB.ToString();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="deltaMaterials"></param>
        /// <param name="doFileOperations"></param>
        public void SaveDeltaMaterials(DeltaMaterialList deltaMaterials, bool doFileOperations)
        {
            ExceptionHelper.TrueThrow<ArgumentNullException>(deltaMaterials == null, "deltaMaterials");

            string rootPathName = deltaMaterials.RootPathName;

            if (string.IsNullOrEmpty(rootPathName))
                rootPathName = MaterialAdapter.DefaultUploadPathName;

            StringBuilder strB = new StringBuilder(1024);

            List<MaterialFileOeprationInfo> fileOPList = new List<MaterialFileOeprationInfo>();

            string sql = FillMaterialSqlAndFileOpList(deltaMaterials, fileOPList);

            if (string.IsNullOrEmpty(sql) == false)
            {
                using (TransactionScope scope = TransactionScopeFactory.Create(TransactionScopeOption.Required))
                {
                    DbHelper.RunSql(sql, GetConnectionName());

                    if (doFileOperations)
                        DoFileOperations(rootPathName, fileOPList);

                    scope.Complete();
                }
            }
        }
        /// <summary>
        /// 保存deltaMaterials
        /// </summary>
        /// <param name="deltaMaterials">DeltaMaterialList</param>
        public void SaveDeltaMaterials(DeltaMaterialList deltaMaterials)
        {
            SaveDeltaMaterials(deltaMaterials, true);

            deltaMaterials.Clear();
        }
        protected override void LoadClientState(string clientState)
        {
            MultiMaterialList multiMaterialList = JSONSerializerExecute.Deserialize<MultiMaterialList>(clientState);
            if (multiMaterialList != null && multiMaterialList.DeltaMaterials != null && multiMaterialList.DeltaMaterials.Inserted != null)
            {
                for (int i = 0; i < multiMaterialList.DeltaMaterials.Inserted.Count; i++)
                {
                    multiMaterialList.DeltaMaterials.Inserted[i].Creator = this.User;
                    multiMaterialList.DeltaMaterials.Inserted[i].Department = this.Department;
                }
            }

            multiMaterialList.DeltaMaterials.GenerateTempPhysicalFilePath();
            multiMaterialList.Materials.GenerateTempPhysicalFilePath(this.RootPathName);

            this.materials = multiMaterialList.Materials;
            this.deltaMaterials = multiMaterialList.DeltaMaterials;
        }
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);

            this.materials = (MaterialList)ViewState["Materials"];
            this.deltaMaterials = (DeltaMaterialList)ViewState["DeltaMaterials"];
        }