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); }); }
/// <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)); } }
/// <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)); } }
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"]; }