30.12.2009, 14:15 | #41 |
Боец
|
А зачем иконку менять? Нужно различать приложения?
Можно не иконку, а caption главного окна поменять \Classes\Info\workspaceWindowCreated: X++: void workspaceWindowCreated(int _hWnd) { ; // Put workspace window specific initialization here. //DSPIC --> WinApi::setWindowText(_hWnd, strFmt("%1 - %2", WinApi::getWindowText(_hWnd), "DEV")); //DSPIC <-- } Последний раз редактировалось DSPIC; 30.12.2009 в 14:22. |
|
|
За это сообщение автора поблагодарили: npokypatop (1). |
29.07.2010, 12:22 | #42 |
Участник
|
Штатно в заголовке окна клиента AX 2009 из информации о сервере показывается лишь название хоста AOS'а. Чтобы не заморачиваться с изменением иконок, отображением названия каталога с приложением и проч., захотелось видеть в заголовке название БД (схемы в случае с Oracle). Для Oracle пришлось делать отдельный метод, потому что если задать в настройках AOS некий "общий" TNS, а схему указать отдельно, то я не нашел, как ее выцепить штатными средствами. В общем, решено это все было следующим образом:
\Classes\Info\DEV_setAxWorkspaceTitle X++: /// <summary> /// выставляет более информативный и в то же время лаконичный заголовок окна рабочей области AX /// </summary> /// <param name="_hWnd"> /// дескриптор окна рабочей области, для которой нужно поменять заголовок /// </param> protected void DEV_setAxWorkspaceTitle( HWND _hWnd = this.hWnd( xInfo::currentWorkspaceNum() ) ) { xSession session; str caption; ; Debug::assert( _hWnd != 0 ); session = new xSession(); caption = strfmt( @"%1 [%2@%3: %4 %5] - [%6 - %7]", "@SYS119901", DEV_getCurrentDatabaseName(), session.AOSName(), "@SYS7115", session.sessionId(), xInfo::currentWorkspaceNum(), curext() ); WinAPI::setWindowText( _hWnd, caption ); } X++: /// <summary> /// возвращает название текущей базы (MsSQL) или схемы (Oracle) /// </summary> /// <returns> /// название базы/схемы, с которой работает AOS /// </returns> /// <exception cref="Exception::Error"> /// выбрасывается, если используемая СУБД - не Ms SQL или Oracle /// </exception> public static client server str DEV_getCurrentDatabaseName() { DatabaseId databaseId; str ret; ; ret = classFactory.globalCache().get( funcname(), '', '' ); if (ret == '') { databaseId = SqlSystem::databaseBackendId(); switch (databaseId) { case DatabaseId::Oracle : ret = DEV_getCurrentOracleSchemaName(); break; case DatabaseId::MS_Sql_Server : ret = new SqlSystem().loginDatabase(); break; default : throw error( Error::wrongUseOfFunction( funcname() ) ); } classFactory.globalCache().set( funcname(), '', ret ); } return ret; } X++: /// <summary> /// возвращает название текущей схемы в Oracle, если текущая используемая СУБД - Oracle /// </summary> /// <returns> /// название текущей схемы в Oracle /// </returns> public static server str DEV_getCurrentOracleSchemaName() { SqlStatementExecutePermission sqlStatmPerm; str sqlStatm; Statement statement; ResultSet resultSet; str ret; ; Debug::assert( SqlSystem::databaseBackendId() == DatabaseId::Oracle ); sqlStatm = @"select sys_context( 'userenv', 'current_schema' ) current_schema from dual"; sqlStatmPerm = new SqlStatementExecutePermission( sqlStatm ); sqlStatmPerm.assert(); statement = new Connection().createStatement(); // BP Deviation Documented resultSet = statement.executeQuery( sqlStatm ); if (resultSet.next()) { ret = resultSet.getString( 1 ); } CodeAccessPermission::revertAssert(); return ret; } |
|
|
За это сообщение автора поблагодарили: mazzy (2), raz (5), lev (2), aidsua (2), npokypatop (1). |
Теги |
ax2009, axapta, download, faq, winapi, база данных, внешний вид, законченный пример, иконка, интерфейс, полезное, фон |
|
|