private string ConnectString() { /*путь к файловой базе данных*/ MParameters.TryGetValue("File", out string lo_file); /*данные к серверной базе данных*/ MParameters.TryGetValue("Srvr", out string lo_srvr); MParameters.TryGetValue("Ref", out string lo_ref); /*если задана доменная авторизация, то поля логин и пароль пустые, в строку подключения не передаем*/ MParameters.TryGetValue("UserDB", out string lo_usr); MParameters.TryGetValue("PasswordDB", out string lo_pwd); if (!string.IsNullOrEmpty(lo_usr) && lo_usr.Equals("undefined")) { lo_usr = string.Empty; lo_pwd = string.Empty; } /*файловая база данных*/ if (!string.IsNullOrEmpty(lo_file)) { if (string.IsNullOrEmpty(lo_usr)) { return(string.Format("File='{0}';", lo_file)); } else { return(string.Format("File='{0}';Usr='******';Pwd='{2}';", lo_file, lo_usr, lo_pwd)); } } /*серверная база данных*/ if (string.IsNullOrEmpty(lo_usr)) { return(string.Format("Srvr='{0}';Ref='{1}';", lo_srvr, lo_ref)); } else { return(string.Format("Srvr='{0}';Ref='{1}';Usr='******';Pwd='{3}';", lo_srvr, lo_ref, lo_usr, lo_pwd)); } }
public override void Init() { QvxLog.SetLogLevels(true, true); QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "QvxConnection.Init() avg"); if (MParameters == null) { return; } MParameters.TryGetValue("QV_Table", out go_qvTableName); MParameters.TryGetValue("Query", out go_query); MParameters.TryGetValue("name_connect", out string lo_connectionName); if (string.IsNullOrEmpty(go_qvTableName)) { return; } if (string.IsNullOrEmpty(go_query)) { return; } go_connString = ConnectString(); List <string> lo_fieldsName = new List <string>(); QvxField[] v8Fileds = null; /*смотрим, если есть сохраненные данные о подключении - грузим*/ if (string.IsNullOrEmpty(lo_connectionName)) { lo_connectionName = "QlikView"; } ConnectData lo_connectData = null; if (ConnectData.IsExistJson(Properties.Settings.Default.QlikConnectJsonFolder + lo_connectionName)) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Notice, "Load Json file"); lo_connectData = ConnectData.LoadFromJson(Properties.Settings.Default.QlikConnectJsonFolder + lo_connectionName); /**/ if (lo_connectData.ConnectionString.Equals(go_connString)) { go_query = lo_connectData.Query; go_qvTableName = lo_connectData.go_tablesFields.Keys.ElementAt(0); lo_fieldsName = lo_connectData.go_tablesFields[go_qvTableName]; } } /*если сохраненных данных нет - подключаемся и тащим*/ if (lo_fieldsName.Count == 0) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Debug, "Connect 1c COM"); Type oType = Type.GetTypeFromProgID("V83.COMConnector"); using (Object1C lo_v8 = (oType == null) ? null : new Object1C(Activator.CreateInstance(oType))) { if (lo_v8 == null) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, "Невозможно создать объект типа V83.COMConnector"); Debug.WriteLine("Невозможно создать объект типа V83.COMConnector"); return; } /*соединяемся с базой данных*/ using (Object1C lo_connection = lo_v8.ExecuteFunction("Connect", new object[] { go_connString })) { if (lo_connection == null) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, "Невозможно подключиться к системе: " + go_connString); Debug.WriteLine("Невозможно подключиться к системе: " + go_connString); return; } QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Debug, "Подключение к 1с выполнено успешно: "); try { using (Object1C lo_query = lo_connection.ExecuteFunctionEx("NewObject", new object[] { "ПостроительЗапроса" })) { lo_query.SetProperty("Текст", new object[] { go_query }); using (Object1C lo_queryRes = lo_query.GetPropertyEx("Результат")) { using (Object1C lo_queryResColumn = lo_queryRes.GetPropertyEx("Колонки")) { /*количество колонок в таблице, которую вернет запрос*/ int lv_countColumn = 0; using (Object1C lo_cntColumn = lo_queryResColumn.ExecuteFunctionEx("Количество")) { lv_countColumn = Convert.ToInt32(lo_cntColumn.ToString()); } /*названия колонок*/ for (int lv_i = 0; lv_i < lv_countColumn; ++lv_i) { string lo_columnName = string.Empty; using (Object1C lo_arrayField = lo_queryResColumn.ExecuteFunction("Получить", new object[] { lv_i })) { using (Object1C lo_fieldName = lo_arrayField.GetProperty("Имя")) { lo_columnName = lo_fieldName.ToString(); } } lo_fieldsName.Add(lo_columnName); } } } } } catch (Exception lo_ex) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, lo_ex.ToString()); Debug.WriteLine(lo_ex.ToString()); } finally { if (lo_connection != null) { lo_connection.Dispose(); } } } } try { lo_connectData = new ConnectData { ConnectionString = go_connString, Query = go_query, go_tablesFields = new Dictionary <string, List <string> > { [go_qvTableName] = lo_fieldsName } }; lo_connectData.SaveToJson(Properties.Settings.Default.QlikConnectJsonFolder + lo_connectionName); } catch (Exception lo_ex) { QvxLog.Log(QvxLogFacility.Application, QvxLogSeverity.Error, lo_ex.ToString()); Debug.WriteLine(lo_ex.ToString()); } } /*добавляем поля в таблицу Qlik View*/ v8Fileds = new QvxField[lo_fieldsName.Count]; for (int lv_i = 0; lv_i < lo_fieldsName.Count; ++lv_i) { v8Fileds.SetValue( new QvxField( lo_fieldsName[lv_i], QvxFieldType.QVX_TEXT, QvxNullRepresentation.QVX_NULL_FLAG_SUPPRESS_DATA, FieldAttrType.ASCII ), lv_i ); } MTables = new List <QvxTable> { new QvxTable { TableName = go_qvTableName, GetRows = GetData, Fields = v8Fileds } }; }