コード例 #1
0
    public static object CreateInstance(Type type, params object[] args)
    {
        if (args == null)
        {
            return(CreateInstance(type));
        }

        if (args.Length > 3)
        {
            return(Activator.CreateInstance(type, args));
        }

        var arg0 = args.Length > 0 ? args[0] : null;
        var arg1 = args.Length > 1 ? args[1] : null;
        var arg2 = args.Length > 2 ? args[2] : null;

        var argType0 = args.Length <= 0 ? typeof(TypeToIgnore) : (args[0] == null ? typeof(object) : args[0].GetType());
        var argType1 = args.Length <= 1 ? typeof(TypeToIgnore) : (args[1] == null ? typeof(object) : args[1].GetType());
        var argType2 = args.Length <= 2 ? typeof(TypeToIgnore) : (args[2] == null ? typeof(object) : args[2].GetType());

        var key = Tuple.Create(
            type,
            argType0,
            argType1,
            argType2);

        if (cachedFuncs.TryGetValue(key, out CreateDelegate func))
        {
            return(func(type, arg0, arg1, arg2));
        }
        else
        {
            return(CacheFunc(key)(type, arg0, arg1, arg2));
        }
    }
コード例 #2
0
        public static object CreateInstance(Type type, params object[] args)
        {
            if (args == null)
            {
                return(CreateInstance(type));
            }

            if (args.Length > 3 ||
                (args.Length > 0 && args[0] == null) ||
                (args.Length > 1 && args[1] == null) ||
                (args.Length > 2 && args[2] == null))
            {
                return(Activator.CreateInstance(type, args));
            }

            var arg0 = args.Length > 0 ? args[0] : null;
            var arg1 = args.Length > 1 ? args[1] : null;
            var arg2 = args.Length > 2 ? args[2] : null;

            var key = Tuple.Create(
                type,
                arg0?.GetType() ?? typeof(TypeToIgnore),
                arg1?.GetType() ?? typeof(TypeToIgnore),
                arg2?.GetType() ?? typeof(TypeToIgnore));

            if (cachedFuncs.TryGetValue(key, out CreateDelegate func))
            {
                return(func(type, arg0, arg1, arg2));
            }
            else
            {
                return(CacheFunc(key)(type, arg0, arg1, arg2));
            }
        }
コード例 #3
0
 public static object CreateInstance(Type type, TArg1 arg1, TArg2 arg2, TArg3 arg3)
 {
     if (cachedFuncs.TryGetValue(type, out Func <TArg1, TArg2, TArg3, object> func))
     {
         return(func(arg1, arg2, arg3));
     }
     else
     {
         return(CacheFunc(type, arg1, arg2, arg3)(arg1, arg2, arg3));
     }
 }
コード例 #4
0
ファイル: InitDataHelper.cs プロジェクト: Sway0308/Gatchan
        /// <summary>
        /// 建立資料表
        /// </summary>
        public void CreateDbTable()
        {
            var dbDefines = CacheFunc.GetDbTableDefines();
            var dbSetting = CacheFunc.GetDatabaseSettings();
            var helper    = new UpgradeTableHelper(dbSetting);

            foreach (var define in dbDefines)
            {
                helper.UpgradeTable(define);
            }
        }
コード例 #5
0
ファイル: BusinessFunc.cs プロジェクト: Sway0308/Gatchan
        /// <summary>
        /// 建立指定程式代碼的商業邏輯物件。
        /// </summary>
        /// <param name="progID"></param>
        /// <returns></returns>
        public static IBusinessLogic CreateBusinessLogic(Guid sessionGuid, string progID)
        {
            var progItem = CacheFunc.GetProgramItem(progID);

            if (progItem.BusinessInstanceType.IsEmpty)
            {
                return(new GBusinessLogic(sessionGuid, progID));
            }
            else
            {
                return(DefineFunc.CreateBusinessLogic(progItem.BusinessInstanceType, sessionGuid, progID));
            }
        }
コード例 #6
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);
        }
コード例 #7
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);
        }
コード例 #8
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));
            }
        }
コード例 #9
0
 /// <summary>
 /// 建構函式
 /// </summary>
 /// <param name="progID">程式代碼</param>
 public GBaseBusinessLogic(Guid sessionGuid, string progID) : base(sessionGuid)
 {
     this.ProgID        = progID;
     this.ProgramDefine = CacheFunc.GetProgramDefine(this.ProgID);
 }
コード例 #10
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);
                }
            }
        }
コード例 #11
0
ファイル: GDefineFileHelper.cs プロジェクト: Sway0308/Gatchan
 /// <summary>
 /// 建構函式
 /// </summary>
 public GDefineFileHelper()
 {
     this.DatabaseSettings = CacheFunc.GetDatabaseSettings();
     this.CompanySettings  = CacheFunc.GetCompanySettings();
     this.ProgramSettings  = CacheFunc.GetProgramSettings();
 }
コード例 #12
0
ファイル: CachedObj.cs プロジェクト: dcjulian/PythonConsole
 public CachedObj(CacheFunc func)
 {
     _func = func;
 }
コード例 #13
0
        /// <summary>
        /// 建構函式
        /// </summary>
        public GBaseDbAccess(Guid sessionGuid)
        {
            var dbSetting = CacheFunc.GetDatabaseSettings();

            this.DbAccess = new GDbAccess(dbSetting);
        }