Diskusní skupina: Programování


Petr VašinkaVložit řetězec do podmínky
IT

12.03.2010
15:35:07

ID: 3137.0

Petr Vašinka
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.

Přidejte názor
Autor:
Profese:
E-mail: i
URL:
Phone:
Předmět:
Obsah příspěvku (i):

Kolikátý je den v měsíci ? (číslovkou bez tečky)