Использование библиотеки из другой БД

  • Автор темы SkinGreek
  • Дата начала
S

SkinGreek

Гость
#1
Всем привет.

Попытался найти способ в поиске, но как то не очень получилось. В общем хотелось бы вызывать код библиотеки из другой БД.
Вообще основная задача состоит в уже не раз поднятой темой нумерации документов 1,2,3... Начитавшись топиков по данной теме решил сделать отдельную БД, в которой была библиотека для генерации ID. В этом функционале собираюсь создавать документы по форме имеющую поля "имя счетсчика" "значение". Для каждого счетчика свой документ.
Все вроде ясно и просто, только замялся на том чтобы вызывать функции библиотеки из другой БД:(

Или этот подход не верен и библиотека с функционалом должна лежать в БД из которой она вызывается?

Заранее спасибо за помощь.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#2
библиотека с функционалом должна лежать в БД из которой она вызывается?
Именно!

Но можно шмальнуть агента из нужной базы, который заюзает библиотеку.
Или настроить наследование библиотек что бы меньше гемора было...
 
S

SkinGreek

Гость
#3
ех как же все сложно;)

Но можно шмальнуть агента из нужной базы, который заюзает библиотеку.
Агента "шмальнуть" не могу, ибо надо передавать параметр "имя каунтера" - он динамический.
Я конечно делал передачу параметров в агент через документ, и даже библиотечка завалялась, но это слишком много телодвижений будет для обычного инкремента с локированием счетчика:(

Или настроить наследование библиотек что бы меньше гемора было...
Это имеется ввиду сделать рутовский шаблон, от которого будут наследовать другие БД. Как я понимаю иерархию наследования можно делать.
Ладно вопрос про наследование в принципе просто для расширения кругозора. Хотелось просто сделать по-модульней. Если советуют создать для каунтера отдельную БД, то и было бы логичней туда скинуть функционал. Иначе я не мог объяснить необходимость создания отдельной БД для этого функционала. Доков там не так уж много получается. На каждый каунтер - док. От силы было бы 100 доков.

Ну раз нельзя, так нельзя. Обидно конечно.

Пасиб за помощь.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#4
Дэк это...
Можешь проверять, есть ли док для данного каунтера, если нет, то создать и шмальнуть агента с NoteID именно этого дока.
А если такой док уже есть, то опять-таки запустить агента с NoteID найденого дока.
Не будет лишних промежуточных документов.
Типа того...
 
S

SkinGreek

Гость
#5
просто не ясно тогда для чего это, все равно пользующая БД будет очень много знать о каунтере.
а именно
что каунтер ведется в документах типа Counter и у него есть поле с которого надо брать значения.
Вся суть инкапсуляции метода нумерации и способа хранения таким образом теряется. Если б я мог просто вызывать библиотеку базы каунтера, то пользовательская БД толком ничегоб и не знала что там да как, просто тупо вызывала бы методы и получала бы значения.
А так получится и кода дофигища писать в клиентской БД который будет много знать о реализации каунтера. в общем и целом просто смысла тогда не вижу. может я просто прищюрин?:))
 
S

SkinGreek

Гость
#7
да я уже это понял, поэтому плюнул и решил что для данной задачи достаточно сделать библиотеку в клиентской БД.
Обыдно конечно, но стерпеть можно)
Пасиб огромное за помощь и быстрый ответ.

Немного офтопну...
Сейчас немного приболдел от кода в хелпе.
Код:
	Do While True
If Codelock(LockID) Then
Exit Do		' We finally have a lock, exiting Loop
End If
Loop
это типа "ожидание" когда конкурирующий процесс раслочит док.
Сорри, но не удержался... "И эти люди нам запрещают ковыряться в носу?!"(с)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#8
ничего супер плохого не вижу :) для каждой задачи есть своя реализация, не будут же они приводить супер пример, который будет ждать какое-то время, потом спрашивать у юзера что делать, ну и т.п. :)
 
S

SkinGreek

Гость
#9
Akupaka
ИМХО какая бы задача не была, насиловать проц + рисковать зацикливания, если по каким бы то нибыло причинам лотус не снял лок с ресурса, нельзя
Сделать слип на 1,3,5 или 10 секунд не затруднит. Для процессора это уйма времени, а для человека мнгновение, да и нечто подобное таймауту. тоже не проблема сделать. А уж клиенский код путь как хочет так и обрабатывает неудачу.
Например можно простейшую защиту сделать.
Код:
Do While Not Codelock(lockId) And attemptsCount < MAX_ATTEMPS_COUNT
Sleep(SLEEP_TIME)
attemptsCount = attemptsCount + 1
Loop
If attemptsCount => MAX_ATTEMPS_COUNT Then
LockCounter = False
Exit Function
End If
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#10
Вы меня не поняли :)
я с Вами абсолютно согласен на счет проверок, циклов и т.п.
но, суть кода в том, чтобы показать как пользоваться методом, а не в том, что нужно использовать именно указанный пример для реализации своих потребностей :)
 
S

SkinGreek

Гость
#11
Спасиб за обсуждение этого вопроса. Не бум спорить, главное чтоб не сильно ошибиться при использовании подобных опасных методов)
 

PaKo

Well-Known Member
29.04.2005
59
0
38
Минск
#12
Если не ошибаюсь, то на курсах "повышения" квалификации в IBA нам говорили что можно в качестве библиотеки использовать txt файл залитый на сервер и приинклюденный к БД. теоритически если несколько БД юзают одну библиотеку то просто надо указать в Option - Use "путь\имя к файлу"