Roman Beitl | Problem se zpracovanim dokumentu v pohledu |
| Dobry den, mam v DB 2 pohledy. V prvnim pohledu jsou uvedeny dokumenty ke vsem vyrobkum(cca 3000). Druhy pohled zobrazuje pouze dokumenty oznacene k exportu. Tzn. uzivatel v prvnim pohledu oznaci dokument, tlacitkem provede akci, kdy do pole EXPORT daneho doc zapise 1. Exportni pohled pak zobrazuje vsechny dokumenty kde EXPORT = 1. V pohledu EXPORT je pak tlaciko s LS, kdy potrebuji projit vsechny dokumenty a provest export(generuji TXT soubor nejake struktury). Pohled EXPORT projizdim v cyklu: Set db = s.currentdatabase Set view = db.getview("EXPORT") Set doc = view.getfirstdocument While Not (doc Is Nothing) ... export kod... doc.export = "0" Call doc.save(False, True) Set doc = view.getnextdocument(doc) Wend
problem: tento skript ma asi jednu vadu, kdyz takto projizdim vsechny dokumenty, zpracuji je a na konci jim nastavim EXPORT=0, meni se pocet dokumentu v pohledu, nebot dokumenty po zpracovani z pohledu "mizi". Skript pak haze chybu.
Dotaz: lze tento cyklus nejak osetrit? a nebo je nejaka lepsi metoda jak provadet export jen z urciteho vzorku dokumentu, ktere uzivatel k exportu oznaci?
|
PepaK | Možná řešení |
progr
12.01.2011 08:55:29
ID: 3265.1

| Dobrý den. Řešení je několik např: 1. projít pohled a status měnit nakonci všem dokumentům hromadně nebo 2.místo procházení pohledu vytvořit DocumentCollection a procházet v cyklu kolekci nebo ...
|
rb | collection - v helpu pouze na vsechny doc v DB |
12.01.2011 10:38:55
ID: 3265.2
| o.k. diky za hint.
ale na ty collections jsem se dival do helpu a nejak tam nemuzu najit, jak toto naroubovat na dokumenty v pohledu? vsechny priklady pouze delaji collection ze vsech dokumentu v DB viz. Dim dc As NotesDocumentCollection Dim doc As NotesDocument Set dc = db.AllDocuments
Mohl byste poradit jak toto aplikovat na dokumenty ve view? |
rb | view collection - vyreseno |
12.01.2011 12:28:18
ID: 3265.3
| diky za tip, chtelo jen lepe hledat.
dim vc as NotesViewEntryCollection
set db = sess.CurrentDatabase set view = db.GetView("YOURVIEWNAME") set vc = view.AllEntries
|
cifra | Uprava puvodniho kodu |
12.01.2011 23:09:39
ID: 3265.4

| Neni potreba delat dalsi collection staci tohle:
Set db = s.currentdatabase Set view = db.getview("EXPORT") Set doc = view.getfirstdocument While Not (doc Is Nothing) set nextdoc = view.getnextdocument(doc) ... export kod... doc.export = "0" Call doc.save(False, True) Set doc = nextdoc Wend |
JaMi | Ještě jednodušší? |
13.01.2011 00:04:26
ID: 3265.5
| Když už jsme u úpravy původního kódu, možná by stačilo přidat jediný řádek:
Set db = s.currentdatabase Set view = db.getview("EXPORT") view.AutoUpdate = False Set doc = view.getfirstdocument While Not (doc Is Nothing) ... export kod... doc.export = "0" Call doc.save(False, True) Set doc = view.getnextdocument(doc) Wend |
rb | ano, autoupdate = false |
13.01.2011 09:04:15
ID: 3265.6
| ano, ano - presne takto jsem to udelal, na zacatku vypnu aktualizaci pohledu a po zkonceni ho zapnu.
diky. |
VZ | Logika aplikace |
13.01.2011 10:22:17
ID: 3265.7
| Je vůbec nutné kvůli každému exportu modifikovat dokumenty? Když to budou chtít exportovat 2 uživatelé současně , první si vybere nějaké dokumenty a nastaví v nich pole Export na "1". Druhý si vybere jiné dokumenty nastaví v nich stejné pole a v pohledu Export se to krásně pomíchá, eventuálně budou vznikat konflikty. Nebylo by jednodušší: 1. vybrat dokumenty v pohledu, 2. zobrazit si jen ty vybrané (menu View\Show\Selected only nebo akce @Command( [ViewShowOnlySelected] ) ) 3. zpracovat kolekci NotesDatabase.UnprocessedDocuments a na konci zpracování každého dokumentu volat Call notesSession.UpdateProcessedDoc( notesDocument ) |
PepaK | Hint |
prog
13.01.2011 10:43:39
ID: 3265.8

| Já jsem svůj příspěvek zamýšlel jako nakopnutí. :-) Proto tam bylo nebo ... protože v dotazu není uvedeno, co se s tím pohledem pro export ještě dělá či děje, co znamená změna pole Export pro další uživatele, ... atd.
Jen malý dotaz >cifra : Set doc = nextdoc tohle jsem nepochopil, nextdoc je co prosím. Dík předem. |
VZ | Další metoda: Použití folderu |
13.01.2011 10:46:42
ID: 3265.9
| Místo nastavování hodnoty pole Export v každém dokumentu by šlo přidávat vybrané dokumenty do Exportní složky. Design exportní složky by byl stejný jako u pohledu, ale uživatel by si to tam přetahoval myší nebo třeba pomocí @AddToFolder(foldernameadd ; foldernameremove). A exportovací skript by ty dokumenty zase odebíral pomocí Call notesDocument.RemoveFromFolder( folderName$ ). Jinak se s tím pracuje z hlediska skriptu úplně stejně jako s pohledem, jen by nebylo nutné modifikovat a ukládat dokumenty. |
Tomáš Hanus | RE: Hint (PepaK) |
13.01.2011 12:57:09
ID: 3265.10

| Pro zpětnou referenci. NextDoc je pomocná proměnná, která ukazuje na další objekt v pohledu dle tomu předešlému, který z pohledu zmizí ve chvíli, kdy nevyhovuje podmínce. Proto viewUpdate=False nebo toto řešení. Je to klasický "návrhový vzor" například pro mazání dokumentů v pohledu. Na další dokument v pohledu se nelze odkázat díky tomu předešlému, protože již neexistuje. |
rb | dalsi moznosti pohledu EXPORT |
13.01.2011 13:38:11
ID: 3265.11
| to jak vybirat dokumenty k exportu uz je vec konkertni potreby. v mem pripade, jsou 2 cesty, jednak je dokument oznacen k exportu automaticky(v jine DB se provede zmena ktera ma vliv na dokument, tento pak spadne do pohledu EXPORT, kde ceka na zpracovani), nebo uzivatel primo oznaci(nastavi tlacitkem export=1) dokument pro EXPORT. |
Tomáš Hanus | RE: dalsi moznosti pohledu EXPORT |
13.01.2011 15:51:11
ID: 3265.12

| To zajisté. To, co měl VZ na mysli je fakt, že je reálná možnost, kdy v jednu chvíli bude dokument editovatelný dvě uživateli (i více), a to "agentem" a běžným uživatelem aplikace (pokud on vidí ty, které jsou označeny k exportu). Z toho pak mohou vzniknout konflikty (záleží na konfiguraci). Pokud taková situace může nastat z hlediska používání aplikace je již na vás. |
PepaK | RE>Tomáš Hanus |
progr
14.01.2011 08:36:20
ID: 3265.13

| Tomáš Hanus: Četl jsem Váš kód moc rychle a nevšiml si definice nextdoc. :-)
Osobně používám raději v těchto případech postup: přesun do folderu - cyklus dle potřeby a pak třeba vytvoření kolekce a pomocí StampAll změna příznaku. Tento postup se mi osvědčil nejvíc. Ale tak jak jsem už napsal, záleží na konkrétním zadání. |