コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: BusinessFunc.cs プロジェクト: Sway0308/Gatchan
        /// <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));
            }
        }
コード例 #4
0
 /// <summary>
 /// 建構函式
 /// </summary>
 /// <param name="progID">程式代碼</param>
 public GBaseBusinessLogic(Guid sessionGuid, string progID) : base(sessionGuid)
 {
     this.ProgID        = progID;
     this.ProgramDefine = CacheFunc.GetProgramDefine(this.ProgID);
 }
コード例 #5
0
        /// <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);
                }
            }
        }