Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Хранение неопределенного числа записей для создания отчета  [new]
Мальчишка
Member

Откуда:
Сообщений: 328
Есть некая HTML страничка, куда забиваются данные о человеке. По нажатию кнопки "Submit" данные отправляются формой (тег Form) процедуре Оркала, которая генерирует скрипт ВБ, который, в свою очередь, запускает Эксель и выводит данные в виде отчета.

Проблема в том, что этот вариант подходит только если человек один (я же не могу передать в полях тега Form параметров больше, чем количество тэгов Input?)...

Есть мысль переданные в виде параметров данные "собирать" в таблицу, а потом при сформировавшейся заявке, генерировать ВБ-скрипт. Но этот вариант кажется каким-то замороченным в плане обращения множества пользователей к одной таблице, генерации уникальных "ключей" (чтобы данные не пропали) и пр...

Вот основная часть генерации html страницы:
      HTP.br;
      --HTP.p (HTF.center (HTF.bold ('Критерии поиска пользователя')));
      HTP.formOpen (curl             => 'personal.UB_ZAYAVKA.zayavka_excel',
                    cattributes      => 'name="F_USL"',
                    cmethod          => 'post'
                   );
         HTP.paragraph (calign => 'CENTER');
         HTP.p
            (   '   Подразделение: <input name="v_podr" value="'
             || v_podr
             || '">  Местонахождение: <input name="v_location" value="'
             || v_location
             || '">'
            );
         HTP.br;
         HTP.p ('   ');
         HTP.tableOpen (cborder => 'BORDER=1', calign => 'CENTER',cattributes => 'id = "Table1"');
            HTP.p
               ('<tr><th>Фамилия:</th> <td><input name="v_surname" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Имя:</th> <td><input name="v_first_name" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Отчество:</th> <td><input name="v_second_name" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Дата рождения:</th> <td><input name="v_birthday" id="id_db" maxlength="10" value="" onclick="showCalendar(event)"></td> </tr>'
               );
            HTP.p
               ('<tr><th>Должность:</th> <td><input name="v_dolgnost" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>№ кабинета:</th> <td><input name="v_kabinet" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Телефон:</th> <td><input name="v_phone" value=""> </td> </tr>'
               );
            HTP.p
               ('<tr><th>Сервер:</th> <td><input name="v_server" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Наименование программного комплекса:</th> <td><input name="v_kompleks" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Роль пользователя:</th> <td><input name="v_role" value=""></td> </tr>'
               );
            HTP.p
               ('<tr><th>Список доступных подразделений:</th> <td><input name="v_dost_podrs" value=""></td> </tr>'
               );
         HTP.tableClose;
         HTP.br;
         HTP.center
            (   HTF.formsubmit (cvalue           => 'Добавить',
                                cattributes      => 'class="BUTTON"'
                               )
             || ' <input type="BUTTON" value="Очистить" onclick="onclick_reset()"  class="BUTTON">'
             || ' <input type="BUTTON" value="Сформировать заявку" onclick="to_xls(Table1)"  class="BUTTON">'
            );
Сам ВБ скрипт еще не написал, но думаю что проблем с ним не должно возникнуть

Каким образом и где хранить вводимые пользователем данные? В таблице Оракла? А может в XML?
4 июн 07, 12:46    [4225584]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
если данные будут использоваться в дальнейшей обработке (например, расчет по ним итогов заявок за месяц), то таблица

если данные как условия отбора - см context?
4 июн 07, 14:13    [4226180]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
Мальчишка
Member

Откуда:
Сообщений: 328
Alexus12
если данные как условия отбора - см context?

Данные использоваться будут только единожды, при создании скрипта процедурой Оракла...

Почитал о context - штука хорошая, мне подходит по всем параметрам, кроме того, что, насколько я понял, там нельзя передавать массивы... А у меня получается довольно сложная структура... Чтобы ее передать с помощью context'а прийдется извращаться...

Структура такая:
ФИО1 -> различная инфа -> сервер1 -> имя комплекса11 -> роль комплекса11 -> ...
                                                   -> имя комплекса12 -> роль комплекса12 -> ...
                                  -> сервер2 -> имя комплекса21 -> роль комплекса21 -> ...
                                                   -> имя комплекса22 -> роль комплекса22 -> ...
и т.д. Тоесть неизвестно изначально количество людей, серверов, комплексов...
Как быть в такой ситуации не подскажете?
5 июн 07, 12:28    [4231110]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
как вариант для размышлений (эмуляция FGAC народными средствами):

1.создаете таблицу со всеми нужными полями + user_id (оракловый если на каждого юзера заведен или опер. системы = sys_context ('USERENV','OS_USER')

2. пользователям даете данные на правку через вьюху
с WHERE user_id=sys_context ('USERENV','OS_USER') WITH CHECK OPTION

3. как юзер свою заявку составил и кнопку "дать мне отчет" нажал - берете введенное и оперируете как надо
5 июн 07, 14:32    [4231947]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
как вариант - если пользователю не надо сохранять последние условия отбора - можно использовать временную таблицу
5 июн 07, 14:33    [4231956]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Alexus12
как вариант - если пользователю не надо сохранять последние условия отбора - можно использовать временную таблицу


С Web интерфейсом это может быть проблематично, поскольку на каждый http запрос клиента Web сервер обычно выделяет из пула произвольное подключение к СУБД. Можно сессию и статически выделять, но тогда масштабируемость решения ухудшится.

ИМХО, параметры запроса нужно надёжно сохранять сколь угодно долго до тех пор, пока пользователь сам не удалит их. Иначе сбой в системе может привести к потере введённых данных (а их может быть не мало) и нареканиям пользователей. Поскольку пользователей не один, параметры не скалярные и будут использоваться для создания отчёта (читай в SQL запросе), то самое дело сохранять их в регулярной таблице как минимум в 1 Нормальной Форме (поверх таблиц можно создать XML схему, так что преобразование XML->таблицы и наоборот будет делать СУБД). Как их передавать в http запросе дело 10е. XML - хороший вариант.
5 июн 07, 15:16    [4232263]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
Мальчишка
Member

Откуда:
Сообщений: 328
Alexus12, mcureenab: спасибо огромное! Я даже и не надеялся на такие четкие и конкретные ответы!

Создам таблицы для хранения (в 3 н.ф.), в качестве user_id буду использовать, скорее всего, ip (т.к. имена юзеров в ОС могут быть одинаковыми в разных доменах), передавать в Оракл значения буду либо через form, либо через обычные ссылки... Прийдется делать отдельные кнопки на добавление/изменения/удаления ФИО/серверов/комплексов и прочего, причем каждый раз страничка будет перерисовываться :( Что поделать, если Ajax и XML так руки и не дошли изучить, а времени уже в обрез :(

Если появятся еще какие-нибудь идеи/предложения, буду рад их услышать!
5 июн 07, 17:03    [4233025]     Ответить | Цитировать Сообщить модератору
 Re: Хранение неопределенного числа записей для создания отчета  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Использовать IP для идентификации не есть хорошо. IP может назначаться динамически и будет меняться при каждом http запросе. ИМХО, тут лучше использовать "Личный кабинет". Всё что пользователь создал в своём личном кабинете, должно храниться в течении установленного времени независимо от разрывов связи, повторных логинов и т.д.
5 июн 07, 17:19    [4233134]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить