Я уже как-то хвастался, но вот ей-Богу не грех повторить, тем более что ситуация ещё усложнилась. Что я имею ввиду: с точки зрения программиста, разобраться в кодах без стакана уже нельзя. А вот с точки зрения компьютера, это оптимальный по трудоёмкости путь: строк кода мало и их отработка оптимизирована. Парадокс состоит в том, что если попытаться облегчить жизнь чужому программисту, пытающемуся вникнуть в коды, и изменить коды, то получится ещё хуже - во-первых сильно возрастёт число строк кода, и во-вторых вэб-страница будет грузиться ощутимо дольше. Это уникальный в своём роде случай, объединяющий в себе несколько языков и технологий воедино.
*******
1. Функция sSqlIn(). Выдаёт некий фрагмент t/sql.
Для этого выполняется хранимая процедура и анализируются полученные данные. Затем в зависимости от того, что было в рекордсете, выполняется вэб-запрос:
oWebClient.DownloadData(URI)
Причём не один вэб-запрос, а несколько, заранее не известно, всё зависит от результатов хранимой процедуры.
Далее, в зависимости того, что выдал выб-запрос, формируется искомый фрагмент t/sql.
2. Динамически формируется t/sql с учётом фрагментика функции sSqlIn(). Нединамически, а с помощью хранимой процедуры никак нельзя, так как t/sql заранее не известен и зависит кроме вставляемого фрагментика ещё много от чего.
Но самое интересное это то, каким формируется t/sql. Его строка написана с тегами и с функциями яваскрипта. Вот один из многочисленных фрагментов:
String sSqlIn1 = sSqlIn();
oSqlStr[0, 12] = " CASE WHEN s1.n_pp IN " + sSqlIn1 + " THEN '<DIV onclick=\"fShowWindow(''../ReglamSchemesDoc.aspx?code='+Cast(s1.n_pp AS VarChar(50))+''')\" align=\"center\"><img border=\"0\" src=\"../Image/sxemaRed.gif\"></DIV>'+CASE WHEN s1.s_reglament>'' THEN '<DIV onclick=\"fShowFile('''+Replace(Replace(s1.s_reglament,' ',''),';',''')\" align=\"center\"><img border=\"0\" src=\"../Image/sxema.gif\"></DIV><DIV onclick=\"fShowFile(''')+''')\" align=\"center\"><img border=\"0\" src=\"../Image/sxema.gif\"></DIV>' ELSE '' END ELSE CASE WHEN s1.s_reglament>'' THEN '<DIV onclick=\"fShowFile('''+Replace(Replace(s1.s_reglament,' ',''),';',''')\" align=\"center\"><img border=\"0\" src=\"../Image/sxema.gif\"></DIV><DIV onclick=\"fShowFile(''')+''')\" align=\"center\"><img border=\"0\" src=\"../Image/sxema.gif\"></DIV>' ELSE '' END END ";
Стоит ли говорить, что всё работает, грузится быстро и без разницы для какого обозревателя. Работай так, чтобы Великий Учитель Dimon aka одобрил, и AL похвалил!
|