mh | Skrytí přes vypočítané pole |
| Ve formuli si zjistím název požadovaného pole a mám ho v pomocné proměnné. Nedaří se mi ale najít způsob, jak na základě hodnoty pole provést skrytí. Třeba @GetField(pom) funguje jen, pokud zadám přímo název pole v uvozovkách. Dá se to nějak? Díky |
VZ | Podrobnosti? |
01.07.2017 08:25:44
ID: 3678.1
| Asi by to chtělo kousek kódu, kterým zjišťujete název pole a jak se ten název uloží do pomocné proměnné. Tzn. jestli je v té pomocné proměnné "pom" uložen opravdu název pole nebo jeho obsah, tedy hodnotu či hodnoty. Pokud to pole obsahuje více hodnot, tak @GetField vrátí jen první z nich - viz poznámka v designer helpu R8: If the field specified in fieldName is marked to Allow multiple values, this function returns the first value only.
|
mpistora | @GetField(pom) funguje |
03.07.2017 14:17:19
ID: 3678.2
| A kde je ta skrývací formule? Záležet může na pořadí vyčíslení a na tom, zda se vůbec po nastavení proměnné provedl refresh, či alespoň refresh skrývačích formulí. @GetField(pom) obecně normálně funguje. I když textové proměnně se ve formulích přenášejí nějakou referencí, takže pokud byla pom naplněna v nějakém divném kontextu, problém by nastat mohl. |
mh | pom obsahuje |
04.07.2017 06:25:51
ID: 3678.3
| textový řetězec, kterým je název pole ve formuláři. Skrytí pak proběhne podle toho, jestli je prázdné. Pokud zadám název pole natvrdo, tak to funguje. |
mh | Zjednodušeně: |
04.07.2017 10:01:41
ID: 3678.4
| pom:="pole"; Skrýt pokud: @GetField(pom)="" |
VZ | Verze LN? |
04.07.2017 16:35:07
ID: 3678.5
| Zkusil jsem to v R9.0.1 v lokální aplikaci notebook.nsf - nový dokument, nadpis, a 3 řádky textu, uložit. Pak na 2. řádku byla přidána skrývací formule: pom := "Categories"; @GetField(pom) = "";
Když napíšu něco do pole Category a dám F5 (refresh), tak se 2. řádek skryje. Po vymazání textu z pole Category a refresh se ten 2. řádek zase objeví.
Tzn. takový skrývací formule takhle zjednodušeně v R9 funguje, zkuste to samé pod svou verzí LN. Když to pojede, tak bude chyba někde v tom složitějím kódu, tzn. bez něj nelze lépe poradit. |
mh | Výše popsané funguje, |
11.07.2017 06:32:52
ID: 3678.6
| ale tato konstrukce ne: pom:=@Right(@ThisName;"_"); pom2:="pole_"+pom; @GetField(pom2)="" |
mh | V helpu píšou, |
11.07.2017 07:34:39
ID: 3678.7
| že se @ThisName ke skrývání nedá použít, což je vysvětlením. Takže zřejmě neřešitelný problém. |
VZ | To je celkem logické |
11.07.2017 10:16:39
ID: 3678.8
| Skrývání platí pro celý odstavec (paragraph), což může být jeden nebo více zalamovaných řádků, případně buňka v tabulce. Ale v jednom řádku může být víc polí nebo také žádné pole, ale jen prostý text. A v tom případě @ThisName by pro každý znak v odstavci nemohla nic vrátit a pro každé pole v daném odstavci by vracela jiné jméno. Zkrátka pro skrývání odstavce nelze použít funkci @ThisName, ale vždy jen jméno konkrétního pole. Nic menšího než celý odstavec nejde samostatně skrýt - ani jednotlivá pole, znaky, embedded prvky, hotspoty, objekty, sekce, Computed Text, atp.. |
mpistora | Co je neřešitelný problém? |
12.07.2017 16:39:11
ID: 3678.9
| To že se skrývací formule zobrazuje i ve vlastnostech pole, ještě neznamená, že patří k tomu poli. Je to tatáž, co se zobrazuje ve vlastnostech textu. @ThisName (a @ThisValue) funguje jen ve formulích polí jako je Input Validation a vždy je lze nahradit konkrétním názvem pole. Je to jen pomůcka usnadňující kopírování polí i s formulemi. Stále nebylo přesně popsáno, co je cílem a co je tedy neřešitelný problém. |
mh | Podrobněji |
14.07.2017 08:55:31
ID: 3678.10
| Ve formuláři mám řádky s několika poli. Každá další obsahuje pole se stejnými jmény a koncovkou o jednu vyšší: _1, _2 atd. Řádka se mý skrýt, pokud je hodnota prvního pole prázdná. Skrývání explicitně podle jména pole je pracné. Problém je, jak zjistit, na které jsem řádce, a provést skrytí dle "pole_řádka". |
mpistora | Různé formule |
14.07.2017 14:09:28
ID: 3678.11
| Tak to problém není, jen ty formule musí být staticky různé. Na to musí být LN programátor zvyklý. Možná by formule šlo donastavit v DXL formátu.
Máme takový formulář, kde je tabulka s 6 sloupci a 80 řádky. V každém řádku je 6 x formule např. RowCount<9 dle počtu řádků, které mají být vidět a funguje to dobře.
Existuje sice funkce @GetFocusTable, která vrací řádek nebo sloupec buňky s fokusem, ale bohužel jen pro OnHelp event.
|
mh | Nerozumím |
15.07.2017 09:32:51
ID: 3678.12
| Co je staticky různé? Různé formule dle řádku jsou právě pracné. A jak použiju RowCount ke skrývání? To jde snad jen formulí?
|
VZ | pracný, ale ne neřešitelný problém |
15.07.2017 22:06:46
ID: 3678.13
| Jesli to chápu správně, tak na každém řádku ve skrývací formuli je opravdu jiná formule, tzn. na prvním řádku žádná, na druhém RowCount < 2, na třetím RowCount < 3, atd. Někde na tom formuláři je zřejmě vypočítávané pole RowCount, které obsahuje číslo s počtem vyplněných řádků a při změně v každém poli na libovolném řádku je to nutné přepočítat? Tzn. zjednodušeně asi něco jako RowCount := @Elements(@Trim(Pole : Pole_1 : Pole_2 : Pole_3 ...));
To by ovšem mělo to omezení, že když je na formu třeba 20 řádků a vyplněná pole jen na prvních 15 řádcích (tj. posledních 5 řádků skrytých), a uživatel by vymazal hodnotu z Pole_1 na řádku 2, tak to schová 15. řádek, na kterém je ovšem Pole_14 vyplněno?
Pokud to tak bylo myšleno, tak je spolehlivější skrývání pomocí formulí Pole_1 = "", Pole_2 = "", Pole_3 = "" ... A pokud je na řádku víc editovatelných polí, tak by ta skrývací formule měla hlídat z výše uvedených důvodů všechna pole na daném řádku. Jakmile bude totiž v nějakém poli na řádku hodnota a řádek se skryje jen proto, že hodnota v jiném poli na stejném řádku byla smazána uživatelem, tak je to špatně. Když se pak z těch hodnot třeba něco počítá, tak to započítá i ty skryté hodnoty a člověk pak netuší, proč to vychází zdánlivě špatně.
Zkrátka stačí do clipboardu nakopírovat Pole_ = "", nechat otevřené Properties a pak už jen klikat na jednotlivé řádky a dopisovat do Hide when čísla 1, 2, 3 ... Zdá se to sice ze začátku pracné, ale většinou to zabere maximálně pár minut a vydrží to pak léta beze změn. Pokud takhle zvládnete nastavit skrývací formule u 10 řádků za minutu (1 řádek za 6 s), tak u 80 řádků to zabere jen 8 minut "manuální" práce. |
mpistora | Ano, je to tak, jak píše VZ |
21.07.2017 11:19:24
ID: 3678.14
| Je to trochu pracné, ale funguje to. S RowCount to byl jen příklad. Je to tam zajištěno tak, že manipulace s řádky se provádí tlačítky, a při smazání řádku se zbytek posune k začátku. |