Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Witam,

potrzebuję zrobić żeby w aplikacji Lotus Domino były automatycznie nadawane numery dla dokumentów np. 2/2011. Numery rosnące i unikatowe. Grzebałem trochę w Lotus Designer ale nic wielkiego nie wymyśliłem. Jak zapisywać dane do bazy, jak odczytywać ...

Dziękuję i pozdrawiam,
Bartek
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Tak, numerowanie dokumentów, to dość ciekawy temat. Jak pogrzebiesz głębiej pewnie trafisz na kawałek skryptu który to robi. Większość tego typu rozwiązań bazuje na jednym dokumencie rejestru w bazie ln, w którym zapisany jest aktualny numer, z każdym nowo wygenerowanym numerem aktualizowany jest ten dokument, a wartość podbijana. Jeśli do tego dodasz możliwości funkcji format LS, to możesz stworzyć w łatwy sposób jaki będziesz chciał numer, wykorzystując numer, datę, i co tam jeszcze będzie Ci potrzebne.
Jednak do końca nie należy ufać tym rozwiązaniom, z prostego powodu, kod wykonywany jest na kliencie synchronizacja odbywa się przy zapisie dokumentu. Zapis dokumentu odbywa się z flagami: save(false,false) w pętli sprawdzane jest czy zapis się powiódł. Przy dużej ilości użytkowników może to okazać się wąskim gardłem i czasami prowadzić do zawieszenia klienta LN.
Rafał M.

Rafał M. Starszy Specjalista
ds. Budowy i Obsługi
Aplikacji, PwC S...

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

RunOnServer twoim przyjacielem plus synchronizacja sekcji krytycznej przy pomocy CodeLock (lockID) i CodeUnlock (lockID)

Tak napisany numerator będzie działał na 1 serwerze, synchronicznie, jeden dokument będzie numerowany naraz.

Dawno dawno temu brałem udział w projekcie gdzie zamiast semafora zrobionego z dokumentu był otwierany jeden plik z udziału na serwerze. Plik otwarty przez jednego użytkownika nie mógł być otwarty przez następnego.
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Ten numer z plikiem to taki trochę przekombinowany.
Co do codeLock - nie używałem, ale widzę że można w ten sposób łatwo synchronizować dostęp do pamięci, fajnie wiedzieć.
Z ciekawości zapytam w swoim rozwiązaniu jak chcesz przekazać wygenerowany numer do aktualnie otwartego dokumentu LN w UI, bo o ile dobrze pamiętam runOnServer zwraca jedynie status. Owszem możesz agentowi podać NOTEID tego dokumentu, ale wtedy przy próbie zapisu user chyba dostanie info o konflikcie(mogę się mylić prawie 1,5 roku nie widziałem LS).
Tomasz Frydryk

Tomasz Frydryk Właściciel, Domino
Solutions

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Ten akurat problem rozwiązuje się prosto:
Dokument tymczasowy z jakimiś parametrami, które chcesz przekazać agentowi na serwerz, zapisany w bazie na serwerze. Następnie agent.RunOnServer z ID dokumentu, agent zmienia zawartość tegoż dokumentu i go zapisuje. Po zakończeniu agenta w bieżącym skrypcie ponownie pobierasz dokument po zapamiętanym wcześniej ID i odczytujesz co Ci tam agent zwrócił.
Adrian C.

Adrian C.
projektant/programis
ta

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Tomek, a to nie doprowadzi do sytuacji w której przy równoległej pracy n użytkowników, musisz posiadać n dokumentów tymczasowych ? Pojawia się też potrzeba pilnowania, które dokumenty tymczasowe są w użyciu, a które wolne. Komplikuje to rozwiązanie, poza tym znowu zachodzi potrzeba synchronizacji kawałka kodu, który poda Ci dokument tymczasowy, to chyba nie zawsze się uda.
Rafał M.

Rafał M. Starszy Specjalista
ds. Budowy i Obsługi
Aplikacji, PwC S...

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Można numerować w PostSave.

Dokument już jest zapisany wiec jeden save więcej czy mniej to żaden kłopot.

Dla użytkownika chyba nie będzie kłopotem, że numer pojawi się w chwilę później?

Jako argument do RunOnServer podać świeżo zapisany dokument.

Sub Postsave(Source As Notesuidocument)

dim session as new NotesSession
dim numeratorAgent as NotesAgent

set numeratorAgent = session.CurrentDatabase.GetAgent("numerator")

call numeratorAgent.RunOnServer( source.document )

End Sub

Mniej więcej tak.

W agencie zrobić synchronizację w celu dostępu do licznika. Licznik oprzeć o zwykły dokument. Dokumenty profilu są w cache i nie sprawdza się. Czyli jeden widok + jeden dokument na tym widoku + GetFirstEntry
Tomasz Frydryk

Tomasz Frydryk Właściciel, Domino
Solutions

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Adrian, nie ma to znaczenia. Numer w rzeczywistości przechowywany jest w jednym dokumencie. Dokument tymczasowy wykorzystywany jest jedynie do przekazania parametrów do agenta i zwrócenia wyniku. Wewnątrz agenta trzeba zadbać o lockowanie dokumentu z numerem ,jego późniejsze zwolnienie, itp itd.
Właściwie to nie ma większego sensu wykonywanie w ten sposób akurat numeracji, jeśli pracujemy na serwerze albo mamy do niego dostęp on-line, to prościej zrobić wszysko na kliencie z wykorzystaniem lokowania. I rzeczywiście można to zrobić w postsave, nie ma to żadnego znaczenia kiedy uruchomimy numerację, tylko jak.
Jerzy Mańka

Jerzy Mańka Product Owner

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Dobrze jest również korzystać z profili. W dokumencie profilu można przechowywać pola z numerami aby zachować unikalność. Inaczej np po usunięciu dokumentu może się zdarzyć że wygeneruje się numer który już został użyty.
Numeracje najlepiej robić za pomocą obiektów Back-End'u a nie Front-End'u.
No i oczywiście ważna jest obsługa błędów, ale to dotyczy całości kodu.
Tomasz Frydryk

Tomasz Frydryk Właściciel, Domino
Solutions

Temat: Automatyczne nadawanie numeru dla dokumentu - Aplikacje...

Jerzy Mańka:
Dobrze jest również korzystać z profili. W dokumencie profilu można przechowywać pola z numerami aby zachować unikalność. Inaczej np po usunięciu dokumentu może się zdarzyć że wygeneruje się numer który już został użyty.
Przepraszam za opóźnienie w odpowiedzi, ale takie dyskusje są ponadczasowe.
Akurat profili nie można użyć do przechowywania numeracji, dokumenty profilu są cache-owane na kliencie w momencie otwarcia bazy danych i nie są odświeżane. Na serwerze jest jeszcze lepiej, przy dostępie przez www są odświeżane przy starcie serwera. Nadają się więc do udostępniania danych rzadko się zmieniających.

Następna dyskusja:

Antuvirus dla Lotus Domino




Wyślij zaproszenie do