| Petr Vašinka | Vložit řetězec do podmínky |
| Prosím o radu - potřeboval bych do príkazu "If" v LS vložit jako podmínku přichystaný řetězec - podmínku. Je to možné? Podle různých podmínek si vytvořím různé podmínky - např. podm$ = "dok.položka( 0 ) <> ""1"" and dok.položka_b( 0 ) <> ""2"" " a proměnnou podm$ chci vložit do příkazu if: if <podm$> then ...... |
| jl | Použil bych Evaluate |
IT
12.03.2010 16:10:56
ID: 3137.1
| ... |
| Petr Vašinka | Vložit řetězec do podmínky |
IT
15.03.2010 10:44:48
ID: 3137.2
| nedokáži to napsat tak, aby to fungovalo. Máte na mysli něco jako:
podminka$ = textový řetězec - výraz vysledek = evaluate ( | podminka$ | ) if vysledek(0) = true then ......
??
Když to napíši takhle, ve vysledek(0) mám prázdný řetězec. Pomohl by jste mi s tím konkrétněji? Děkuji
|
| VZ | úprava |
15.03.2010 11:06:31
ID: 3137.3
| podminka$ = textový řetězec - výraz vysledek = evaluate ( | podminka$ | , dok) if vysledek(0) then ......
Např.: Sub Click(Source As Button) Dim ws As New NotesUIWorkspace condition$ = |@ReplaceSubstring(Subject; "\""; "" ) <> "1"| e = Evaluate(condition$, ws.CurrentDocument.Document) If e(0) Then Msgbox condition$ & " Is True" Else Msgbox condition$ & " Is False" End If End Sub
A pozor na případné uvozovky, které by mohly být v textovém poli (viz např.: link1 ) |
| Tomáš Hanus | RE: Vložit řetězec do podmínky |
15.03.2010 11:15:01
ID: 3137.4

| Pomocí funkce evaluate lze NĚKTERÉ příkazy @Formule hostovat v LotusScriptu. Jazyk ovšem je stejný, tedy: podminka$ = |položka != "" & položka_b != ""| Dim vysledek As Variant vysledek = Evaluate(podm$, DOC)
Výsledek pak je ve vysledek(0). |
| Petr Vašinka | nevím... |
IT
15.03.2010 12:54:19
ID: 3137.5
| ... podm$ = "dokumentUI.FieldGetText ( ""typ_vyberu"" ) = ""1""" vysl = Evaluate ( | p_podm$ | , dokumentUI.Document ) ... ve vysl(0) mám prázdný řetězec.
Neznamená to, že tento druh podmínky evaluate nespracuje? Jak mám tedy vykonstruovat příkaz if, který by reagoval na všeobecnou podmínku, která se mění v průběhu chodu programu? V podmínce příkazu if očekávám různé výrazy, které mají málo společného s @-funkcemi. |
| Palo | pre inšpiraciu |
15.03.2010 13:53:10
ID: 3137.6
| Nie je to podmienka ale select. Mam dynamicky pohlad kde vyberam dokumenty podla mesiacov od- do casť skriptu
mes= ws.Prompt(PROMPT_OKCANCELEDIT,"Mesiace","Zadajte mesiac od") If mes ="" Then Exit Sub mes1= Cint(mes) mes= ws.Prompt(PROMPT_OKCANCELEDIT,"Mesiace","Zadajte mesiac do") If mes="" Then Exit Sub mes2= Cint(mes) podm2 = "" If mes1 <= mes2 Then podm1 = {SELECT Form = "Planzakaziek" &((@Month(Datumvyroby) >=} & mes1 &_ { & @Month(Datumvyroby)<= } & mes2 & {)} For i = mes1 To mes2 podm2 = podm2 & {| mesvyr = "} & Cstr(i) & {"} Next Else podm1 = {SELECT Form = "Planzakaziek" &((@Month(Datumvyroby) >=} & mes1 &_ { & @Month(Datumvyroby)<= 12) | (@Month(Datumvyroby) >=1 & @Month(Datumvyroby)<= } & mes2 & {)} For i = mes1 To 12 podm2 = podm2 & {| mesvyr = "} & Cstr(i) & {"} Next For i =1 To mes2 podm2 = podm2 & {| mesvyr = "} & Cstr(i) & {"} Next End If formula = podm1 & podm2 & {)} view.SelectionFormula = formula
a vysledok napriklad pre 3 až 5 mesiac SELECT Form = "Planzakaziek" &((@Month(Datumvyroby) >=3 & @Month(Datumvyroby)<= 5)| mesvyr = "3"| mesvyr = "4"| mesvyr = "5") |
| Petr Vašinka | to je něco jiného |
IT
15.03.2010 14:15:00
ID: 3137.7
| děkuji za inspiraci, ale mám pocit, že to je něco jiného. Vy dynamickým spůsobem naplníte proměnnou textového typu. Ve výsledku je tato proměnná použita ve vlastnosti selectionformula, a to v souladu se syntaxí tohoto příkazu. Já ale potřebuji dynamicky měnit samotný příkaz "if", potažmo jeho část, kde je uvedena podmínka. |
| Tomáš Hanus | RE: to je něco jiného-myslím, že ne :) |
15.03.2010 14:23:28
ID: 3137.8

| Spíše jde o to, že je nutné přesně vědět, jak funguje funkce Evaluate, viz help. Toto:"dokumentUI.FieldGetText ( ""typ_vyberu"" ) = ""1""" není totiž korektní zápis ve formulích. První parametr funkce Evaluate je korektní příkaz v jazyku formula. Tedy: "dokumentUI.FieldGetText ( ""typ_vyberu"" ) = ""1""" přepište na: |typ_vyberu = "1"|
Celé pak: podm$ = |typ_vyberu = "1"| vysl = Evaluate ( p_podm$ , dokumentUI.Document )
p_podm$ je totiž proměnná, pokud ji vložíte mezi "pajpu", pak je to řetězec. Vypadalo by to takto: vysl = Evaluate ( |typ_vyberu = "1"| , dokumentUI.Document ) |
| Petr Vašinka | asi OK |
IT
15.03.2010 15:07:38
ID: 3137.9
| Děkuji za podrobné vysvětlení. Asi jsem si mohl podrobněji pročíst help. Teď mi to už funguje. |
| mpistora | Evaluate a Execute |
24.03.2010 14:10:15
ID: 3137.10
| Evaluate je funkce lotusscriptu, která vyhodnotí stringový argument, který obsahuje výraz v syntaxi formulového jazyka (navíc může být zadán jako další argument kontext dokumentu).
Kromě toho existuje daleko kurióznější funkce lotusscriptu Execute, který zkompiluje a provede stringový argument, který obsahuje zdrojový kód v lotusscriptu. Tím by teoreticky šlo splnit požadavek z původního dotazu: mezi lotuscriptové if then dynamicky vložit lotusscriptovou podmínku ze stringu "dok.položka( 0 ) <> ""1"" and dok.položka_b( 0 ) <> ""2"" ". Ovšem dokumentUI.FieldGetText ( ""typ_vyberu"" ) bych tam raději ani nezkoušel :-) Na běžné podmínky na dokumenty určitě stačí formule a Evaluate. Execute však může pracovat se složitými objektovými proměnnými lotusscriptu. Komunikace s okolím je ovšem obtížná - přes globální proměnné. |
| Anonym | zaklady programovani |
24.03.2010 17:02:36
ID: 3137.11
| dim podm as variant (nebo klidne int) podm = dok.položka( 0 ) <> "1" and dok.položka_b( 0 ) <> "2"
if podm then
podm v tomto pripade obsahuje 0 nebo 1 podle toho jak se vyraz vyhodnoti... |
| VZ | Omyl |
24.03.2010 17:19:50
ID: 3137.12
| V případě 3137.11 se ovšem nejedná poskládání podmínky z textových řetězců. Je to jen substituce, tzn. pouhé uložení hotové (předpřipravené) podmínky do proměnné. Hlavní rozdíl spočívá v tom, že podmínky skládané ze stringů by vznikaly až za běhu programu (což samozřejmě přináší určité riziko). Při uvedené substituci by vznikly už při kompilaci kódu. |
| Anonym | omyl ^ 2 |
24.03.2010 19:13:03
ID: 3137.13
| Vito, v pripade te substituce je to odvisle od podminky. a v uvedenem priklade nevznika substituce pri kompilaci, ale za behu, protoze je to odvisle na hodnotach v polickach v dokumentu. A obavam se, ze cely tenhle problem je zbytecne skrabani pres hlavu. stejne vzdy dopredu vi jake pripady muzou nastat, takze neni duvod, proc to takhle komplikovat... |
| VZ | Vysvětlení podstaty |
24.03.2010 19:31:22
ID: 3137.14
| Když to bude substituce, tak je ta podmínka natvrdo zadána v kódu. Když to bude jako string tahané až za běhu programu třeba odněkud z datové struktury. Takže se nedá zkontrolovat správná syntax podmínky v if, protože ta podmínka ještě při vytváření či úpravách kódu neexistuje. Ale na druhou stranu si to uživatel může "libovolně" měnit, takže kontrola správné syntaxe podmínky je zcela mimo kód a podmínka se vytváří a syntakticky kontroluje až při běhu.
Představte si třeba, že potřebujete naprogramovat něco jako pravidla v poště. Do kódu všechny ty podmínky, co si uživatel vymyslí, nikdy nemůže programátor zapsat, ale může mu to umožnit zapsáním do nějakého dokumentu a zajistit, aby to bylo syntakticky správě a nedělalo to při běhu problémy. |