Цитата:
Сообщение от
Veter
Попробую изменить вводную :
Как можно из клиента первого АОСа - подключится на второй ? (оба АОСа работают в кластере).
Повесили на форму активных пользователей кнопку по нажатию на которую отрабатывает такой код:
(т.е. на закладке с аосами становишься на нужный аос и жмешь кнопку - открывается клиент аксапты подключенный к выбранному аосу)
X++:
// pkoz 08.07.2011
// содрано тут : \Classes\GRD_ProjectCompile\projectCompileOnAOSs
#macrolib.File
#localmacro.AOSIdPortSeparator '@' #endmacro
#localmacro.CmdLinePortSeparator ':' #endmacro
void GRD_connectParticularAOS()
{
System.Diagnostics.ProcessStartInfo processStartInfoLoc;
System.Diagnostics.Process processLoc;
Integer curServerId;
SysServerSessions sysServerSessionsLoc = sysServerSessions.data();
str cmdLineArgs;
;
curServerId = (select firstonly ServerId
from SysClientSessions
where SysClientSessions.SessionId == sessionid()
).ServerId;
if (!( sysServerSessionsLoc.Status == SysServerStatus::Alive
&& sysServerSessionsLoc.LoadBalance == NoYes::No // вообще балансировщики всегда имеют статус SysServerStatus::Offline, так что условие избыточно
// && sysServerSessionsLoc.ServerId != curServerId
))
{
throw error("Нельзя поключиться к выбранному AOS'у");
}
cmdLineArgs = strfmt( @'-loadbalance=0 -aos2=%1', strreplace( sysServerSessionsLoc.AOSId, #AOSIdPortSeparator, #CmdLinePortSeparator ) );
processLoc = new System.Diagnostics.Process();
processStartInfoLoc = processLoc.get_StartInfo();
processStartInfoLoc.set_FileName( WinAPI::getCurrentProcessExecutablePath() );
processStartInfoLoc.set_Arguments( cmdLineArgs );
processStartInfoLoc.set_UseShellExecute( false );
if (!processLoc.Start())
{
error("@SYS83461");
}
}