Страница 11 из 12

Добавлено: 30 апр 2008, 18:15
Старик Крупский
Насчет второго вопроса - сам вопрос не понятен.
Первый вопрос - думаю, что это какой-то полутранзакционный механизм. Есть событие - и процесс пошел. И идет до отмены. Конечно, это неверно. Так что у тебя есть повод написать в теххелп.

Добавлено: 04 май 2008, 09:04
Александр
Вопрос - как реализовать функцию Дочитать в WorkFlow
проблема в том что в начале работы мне нужно прочитать достаточно большой объем информации в массив
- виды ускорили выборку - но все равно медленно

как реализовать следующую весчь
сначала запросом вывести первые 50 значений в массив, а потом если юзер будет крутить полосу прокрутки - дочитывать инфу в массив, причем дочитывать не всю а еще порцию еще допустим 50 значений???

или если спросить другими словами - как ускорить выборку значений из базы помимо использования видов?

у меня работа 1й раз на клиенте открывается 20 секунд (на 10й раз конечно всего пару секунд) как скрыть это обстоятельство не нервируя юзера как размазать эту задержку - чтобы время пролетело незаметно

Добавлено: 04 май 2008, 16:03
Старик Крупский
А напрямую запрос тоже долго выполняется? Может, там сортировка какая-нить в запросе тормозит?

Добавлено: 04 май 2008, 16:05
Александр
напрямую запрос тормозной, на видах чуть быстрее, но все равно занимает несколько секунд, пока запрос пока результаты в массив и т.д...

сортировка наполовину вынесена в сам запрос - половина в WorkFlow

Добавлено: 04 май 2008, 18:53
Старик Крупский
Я имел в виду - не проверял ли ты на чем именно тормозит: На раскладке в массивы или на выполнении запроса? Если убрать сортировку в запросе будет быстрее?

Добавлено: 15 май 2008, 07:43
Александр
Вопрос Как запретить неоднократный запуск работы по одному объекту

Есть объект, Есть Работа, Есть кнопка запускающая работу по объекту
Как сделать так чтобы работа могла быть запущена в одно время только с одного рабочего места?

или более гибко
как сделать так чтобы первый запущенный сеанс был доступен на редактирование а все остальные только на просмотр?

Добавлено: 15 май 2008, 08:16
Disillusioned
При старте работы можно установить значение служебного атрибута, при завершении (закрытии окна) удалить его. В действии, запускающем работу установить соответствующие условия отбора для a_Object или же поставить свойства контролов формы в зависимость от наличия значения атрибута.

Добавлено: 15 май 2008, 08:28
Александр
с запуском и флагом занят свободен понятно
а вот как всетаки сделать - первый на редактирование - остальные на чтение
т.е.

- первый стартует и ставит - допустим 10 - работа запущена
- работа сразу переводит атрибут в 11 - работа для всех кроме первого на чтение

пойдет?
или между первым стартом и установкой на чтение - может влезть еще кто-то?

Добавлено: 15 май 2008, 09:52
Disillusioned
Вот, например:

В шаблоне заводим дополнительный документ-объект. Если он существует, считаем, что режим только для чтения, если нет, то можно редактировать.

В действии по запуску работы:
1. Значение атрибута уже установлено.
Запускаем работу с двумя параметрами (можно продублировать один и тот же объект)
2. Значение атрибута не установлено
Устанавливаем значение атрибута и запускаем работу с одним параметром.

При завершении работы, запущенной с одним параметром, удаляем значение атрибута.

P.S. Документы в шаблоне сортируются по описанию и чтобы достичь однозначности в присвоении значений разным документам работы лучше к описанию добавить порядковый номер.

Добавлено: 15 май 2008, 10:03
Александр
вместо числа буду хранить ID или ФИО юзера первым захватившего работу - остальным буду писать - сори - но работа уже в обработке у такого-то вы можете только посмотреть и выйти :wink:

Спасибо

Добавлено: 15 май 2008, 11:45
Александр
>Disillusioned

слушай я вот тут все сижу и думаю над этим вопросом :wink:
ведь было бы вполне логично в какихто глобальных системных переменных хранить информацию о том кто в настоящее время использует то или иное действие ту или иную работу

мне даже кажется что должна быть какя-то системная таблица типа
id юзера-id работы/действия

ничего не знаешь по этому поводу?

Добавлено: 15 май 2008, 12:44
Disillusioned
Не приходилось сталкиваться.

Добавлено: 15 май 2008, 15:06
Anderyt
по поводу системных переменных..
есть возможность увидеть в БД, есть ли какие либо работы (с какими либо признаками) по текущему объекту.
такая информация пригодилась бы при попытке запуска работы?
то есть хранить атрибут даже не надо, можно на лету обращаться в БД и смотреть..
запрос непростой, но работает быстро, так как смотрит на небольшие таблицы. мы это оформили в виде ХП, поэтому вам, Александр, как любителю ХП, должно понравиться ;-)

Код: Выделить всё

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

CREATE PROCEDURE lsdbo.custom_proc_get_active_maps_desc
@@obj_id numeric
as
select maps.description 
from 
lsdbo.wf_maps_view maps 
where id in 
( 
SELECT DISTINCT lsdbo.wf_mail_v.map_id   
FROM  lsdbo.wf_attachments_view
,lsdbo.wf_mail_docs_v
,lsdbo.wf_mail_v   
WHERE  
lsdbo.wf_attachments_view.id = lsdbo.wf_mail_docs_v.attachment_id 
and   
lsdbo.wf_mail_docs_v.mail_id = lsdbo.wf_mail_v.id  
and 
lsdbo.wf_mail_v.map_id is not NULL  
and   
lsdbo.wf_attachments_view.app_id = 'P'
and   
lsdbo.wf_attachments_view.object_id = 'OBJ'
and 
lsdbo.wf_attachments_view.doc_id = @@obj_id
and 
maps.state = 'B' 
And 
maps.id not in 
(
select pos.map_id from 
lsdbo.wf_map_cur_pos_v pos
,lsdbo.wf_map_nodes_view nodes 
where pos.map_object_id = nodes.map_object_id 
and 
nodes.text = 'Окончание работы'
)
)
order by maps.cd
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
на вход подается ИД объекта, например вот так:

Код: Выделить всё

lsdbo.custom_proc_get_active_maps_desc 100000944800071
причем процедура берет только те карты, которые НЕ завершены, в том числе и те, которые находятся на завершающем этапе, который у нас почти всегда называется "Окончание работы". то есть если даже этот этап еще не выполнен, и карта является НЕ завершенной, то запрос ее не выдает.
может быть, пригодится?..

Добавлено: 15 май 2008, 15:11
Александр
постойте постойте - не вешайте трубку :wink: :wink:
это же именно то что я и хочу :wink:
вот еще-бы вытащить id пользователя запустившего работу - это можно здесь же?

Добавлено: 15 май 2008, 15:15
Александр
кстати техподдержка мне тоже выложила запросец на эту тему

Код: Выделить всё

Этот запрос выводит список работ, в которых используется объект с Id = <ID>:
--------
select *
  from lsdbo.wf_Maps
  where id in (select m.map_id
      from lsdbo.wf_Attachments a, lsdbo.wf_Mail_Docs md, lsdbo.wf_Mail m
      where a.doc_id = <ID> and a.object_id = 'OBJ' and
        md.attachment_id = a.id and m.id = md.mail_id)
щас буду разбираться