private static void ReSaveProgramDefine() { var helper = new InitDataHelper(); var pd = CacheFunc.GetProgramDefine("SalaryAccount"); helper.ProgDefineToJson(pd); pd = CacheFunc.GetProgramDefine("SalaryAccountCategory"); helper.ProgDefineToJson(pd); pd = CacheFunc.GetProgramDefine("SalaryAccountForSalaryRange"); helper.ProgDefineToJson(pd); pd = CacheFunc.GetProgramDefine("SalaryRange"); helper.ProgDefineToJson(pd); }
/// <summary> /// 使用SqlBulkCopy大量新增資料 /// </summary> /// <param name="databaseID">資料庫編號</param> /// <param name="progID">程式定義代碼</param> /// <param name="tableName">資料定義代碼</param> /// <param name="table">資料表</param> public void SqlBulkCopy(string databaseID, string progID, string tableName, DataTable table) { var progDefine = CacheFunc.GetProgramDefine(progID); var tableDefine = progDefine.Tables[tableName]; if (tableDefine == null || !tableDefine.IsCreateDbTable || DataFunc.IsEmpty(table)) { return; } var sqlBulkCopy = CreateSqlBulkCopy(databaseID, tableDefine, table); SqlBulkCopy(sqlBulkCopy, table); }
/// <summary> /// 建立指定代碼 > 指定資料表的Entity資料列 /// </summary> /// <param name="progID"></param> /// <param name="tableName"></param> /// <returns></returns> public static GEntityRow CreateEntityRow(string progID, string tableName) { var progDefine = CacheFunc.GetProgramDefine(progID); var tableDefine = progDefine.Tables[tableName]; if (tableDefine.EntityInstanceType.IsEmpty) { return(new GEntityRow()); } else { return(DefineFunc.CreateEntityRow(tableDefine.EntityInstanceType)); } }
/// <summary> /// 建構函式 /// </summary> /// <param name="progID">程式代碼</param> public GBaseBusinessLogic(Guid sessionGuid, string progID) : base(sessionGuid) { this.ProgID = progID; this.ProgramDefine = CacheFunc.GetProgramDefine(this.ProgID); }
/// <summary> /// 建立資料表關連。 /// </summary> /// <param name="key">關連鍵值。</param> /// <param name="provider">資料表關連資訊提供者。</param> /// <param name="fieldDefine">關連欄位定義。</param> /// <param name="returnFields">關連取回欄位集合。</param> /// <param name="leftTableAlias">左側資料表別名。</param> /// <param name="detailTableName">明細資料表名稱。</param> /// <param name="destFieldName">目的欄位名稱。</param> private void BuildTableJoin(string key, GTableJoinProvider provider, GFieldDefine fieldDefine, GStringHashSet returnFields, string leftTableAlias, string detailTableName, string destFieldName = "") { // 取得關連程式定義 var programDefine = CacheFunc.GetProgramDefine(fieldDefine.LinkProgID); if (BaseFunc.IsNull(programDefine)) { throw new GException("'{0}' ProgramDefine not found", fieldDefine.LinkProgID); } // 取得關連資料表定義 var tableDefine = programDefine.MasterTable; foreach (string fieldName in returnFields) { var linkReturnField = fieldDefine.LinkReturnFields.FindByDestField(fieldName); if (BaseFunc.IsNull(linkReturnField)) { throw new GException("'{0}' FieldDefine's LinkReturnFields not find DestField '{1}'", fieldDefine.FieldName, fieldName); } var sourceFieldDefine = tableDefine.Fields[linkReturnField.SourceField]; if (BaseFunc.IsNull(sourceFieldDefine)) { throw new GException("'{0}' TableDefine not find '{1}' FieldDefine", tableDefine.TableName, linkReturnField.SourceField); } if (sourceFieldDefine.FieldType == EFieldType.VirtualField) { throw new GException("'{0}' TableDefine's '{1}' FieldDefine not allow VirtualField", tableDefine.TableName, sourceFieldDefine.FieldName); } var tableJoin = provider.TableJoins[key]; if (BaseFunc.IsNull(tableJoin)) { // 建立資料表關連 tableJoin = new GTableJoin { Key = key, LeftTableAlias = leftTableAlias, LeftFieldName = tableDefine.GetLinkReturnActiveField(fieldDefine).DbFieldName, RightTableName = tableDefine.DbTableName, RightTableAlias = GetActiveTableAlias() }; var sKeyField = tableDefine.Fields.Contains(SysFields.ID) ? SysFields.ID : SysFields.RowID; tableJoin.RightFieldName = tableDefine.Fields[sKeyField].DbFieldName; if (tableDefine.Fields.Contains(SysFields.CompanyID)) { tableJoin.RightCompanyID = tableDefine.Fields[SysFields.CompanyID].DbFieldName; } else if (tableDefine.Fields.Contains(SysFields.CommonCompanyID)) { tableJoin.RightCompanyID = tableDefine.Fields[SysFields.CommonCompanyID].DbFieldName; } provider.TableJoins.Add(tableJoin); } // 若來源欄位的欄位類型是 LinkField,則需往上階找關連來源 if (sourceFieldDefine.FieldType == EFieldType.LinkField) { var linkFieldDefine = tableDefine.GetLinkReturnActiveField(sourceFieldDefine); var sKey = key + "." + linkFieldDefine.LinkProgID; var returnFieldSet = new GStringHashSet { sourceFieldDefine.DbFieldName }; BuildTableJoin(sKey, provider, linkFieldDefine, returnFieldSet, tableJoin.RightTableAlias, detailTableName, fieldName); } else { // 記錄關連欄位對應 var linkFieldMapping = new GLinkFieldMapping(); linkFieldMapping.FieldName = (StrFunc.StrIsNotEmpty(destFieldName)) ? destFieldName : fieldName; if (StrFunc.StrIsNotEmpty(detailTableName)) { linkFieldMapping.FieldName = StrFunc.StrFormat("{0}.{1}", detailTableName, linkFieldMapping.FieldName); } linkFieldMapping.TableAlias = tableJoin.RightTableAlias; linkFieldMapping.SourceFieldName = sourceFieldDefine.DbFieldName; provider.Mappings.Add(linkFieldMapping); } } }