import { Connection, ConnectionJDBC } from '../../../crud/crud.typings'; import { connectionType, errorCode } from '@constants/env'; import { DATA_BASE_DRIVER_LINK, JDBC_ODBC_DRIVER, JDBC_ODBC_DRIVER_HELP_LINK, DEFAULT_HELP_LINK } from '@constants/constant'; import { TestStatus } from '../../../components/test_status/test_status'; import { getJdbcDatabaseType } from '../../../app.service'; import { ApiFactory } from '../../../crud/apiFactory'; const api = new ApiFactory().create(); export function testConnection(value: Connection): Promise { return new Promise(resolve => { let testStatus = null; if (!value.connectionName) { BI.Msg.toast(BI.i18nText('Dec-Dcm_Connection_ConnectionName_Cannt_Null'), { level: 'error', }); return false; } const id = BI.UUID(); const testConnection = () => { const formValue = value; api.testConnection(formValue).then(re => { if (re && re.errorCode) { if(re.errorCode === DecCst.ErrorCode.NO_IP_AUTHORIZED){ testStatus.setFail(); return; } // 判断是否是缺少驱动,如果缺少驱动则显示下载驱动的连接 if (api.isDriverError(re.errorCode)) { if (formValue.connectionType === connectionType.JDBC) { const driver = (formValue.connectionData as ConnectionJDBC).driver; // DEC-14009 1.8以上版本JDK支持ODBC连接 if (driver === JDBC_ODBC_DRIVER) { testStatus.setFail(re.errorMsg, driver, Dec.system[DecCst.Hyperlink.DECISION_HYPERLINK_CONFIG][JDBC_ODBC_DRIVER_HELP_LINK]); return; } const databaseType = (formValue.connectionData as ConnectionJDBC).database; const databaseLink = BI.get(DATA_BASE_DRIVER_LINK.find(item => item.databaseType === databaseType), 'link', DEFAULT_HELP_LINK); const link = BI.get(getJdbcDatabaseType(databaseType, driver), 'link') || Dec.system[DecCst.Hyperlink.DECISION_HYPERLINK_CONFIG][databaseLink]; testStatus.setFail(re.errorMsg, driver, link); } else { testStatus.setFail(re.errorMsg); } } else if (re.errorCode === errorCode.DUPLICATE_NAMES) { testStatus.setFail(BI.i18nText(re.errorMsg)); } else { testStatus.setFail(re.errorMsg); } } else if (re.data) { testStatus.setSuccess(); resolve(re.data); setTimeout(() => { BI.Maskers.remove(id); }, 1000 * 2); } else { BI.Msg.toast(BI.i18nText('Dec-Dcm_Connection_Error'), { level: 'error', }); BI.Maskers.remove(id); } }); }; BI.Maskers.create(id, null, { render: { type: TestStatus.xtype, loadingText: BI.i18nText('Dec-Dcm_Connection_Testing'), loadingCls: 'upload-loading-icon', successText: BI.i18nText('Dec-Dcm_Connection_Test_Success'), successCls: 'upload-success-icon', failText: BI.i18nText('Dec-Dcm_Connection_Test_Fail', ''), failCls: 'upload-fail-icon', retryText: BI.i18nText('Dec-Dcm_Connection_ReConnect'), ref: (_ref: any) => { testStatus = _ref; }, listeners: [ { eventName: TestStatus.EVENT_RELOAD, action: () => { testStatus.setLoading(); testConnection(); }, }, { eventName: TestStatus.EVENT_CLOSE, action: () => { BI.Maskers.remove(id); }, }, ], }, }); BI.Maskers.show(id); testConnection(); }); }