Österr. Geocaching Forum

Normale Version: Macrofrage GSAK
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Wissende,
bastle noch immer an meinem Macro, das alles können soll.
Ich möchte folgendes machen:
Ich setze mittels folgender Syntax einen macrofilter:

mfilter expression=not($d_found) and not ($d_archived) and not ($d_tempdisabled) and not regex($d_ownerid,$ownerid)

Soweit sogut. Dieser Ausdruck wählt mir alle Caches die nicht archiviert, von mir nicht gefunden, nicht temporär disabled und nicht mir gehören aus. Jetzt habe ich aber in einem Formfield ein paar Checkboxen eingebaut mit denen ich auswählen kann ob ich die Founds oder die temp. disabled mitnehmen will oder nicht.
Wie baue ich den obigen Ausdruck so um, das es zusätzlich zu den Datenbankvariablen auch noch meine Checkboxen berücksichtigt?

Bitte hilfe
Bye Günther
Na serwas, das kann ja was werden, bei der Masseneinschulung...Wink

Kottan vor - noch ein Tor. Der weiß das sicher.....
Versuchs mal so. Mit $Chk1 bis $Chk3 wird hier der Status (True/False) der drei Checkboxes ausgegeben. Den Rest darfst Du Dir selber schreiben. Wink

HTH

Anfang Macro -------------------------------------------------------------------
#*******************************************
# MacVersion = 1.0
# MacDescription = CheckboxValues
# MacAuthor = Administrator
# MacFileName = New macro.gsk
# MacUrl =
#*******************************************
$data = "Test"

If ShowForm($form)
If $ok
cancel msg="Found='$Chk1', Archived='$Chk2', Disabled='$Chk3'"
EndIf
Endif

mfilter expression=not($d_found) and not ($d_archived) and not ($d_tempdisabled) and not regex($d_ownerid,$ownerid)

<Data> Varname=$form
#********************************************************************
# Form generated by GSAK form designer on Mo 01-Okt-2007 20:15:59
#********************************************************************

Name = Form1
type = form
height = 300
width = 500

Name = Chk1
type = CheckBox
left = 94
top = 33
height = 17
width = 15

container = fmMacro_3

Name = Chk2
type = CheckBox
left = 94
top = 51
height = 17
width = 15

container = fmMacro_3

Name = Chk3
type = CheckBox
left = 93
top = 69
height = 17
width = 15

container = fmMacro_3

Name = ok
type = Button
left = 94
top = 107
height = 25
width = 75

container = fmMacro_3

Name = Found
type = Label
left = 111
top = 35
height = 13
width = 80
container = fmMacro_3

Name = Archived
type = Label
left = 111
top = 53
height = 13
width = 80
container = fmMacro_3

Name = Disabled
type = Label
left = 111
top = 71
height = 13
width = 80
container = fmMacro_3

<EndData>
Wow!

Ihr tut Euch wirklich diese Forms an?
Das mit den $chk1.... habe ich eh so gelöst. (@Kottan, ja tu ich mir an.)
mein Problem ist wie ich die verknüpfe die mit den Datenbankvariablen.
In einem ersten Macrofilter entferne ich archivierte und eigene.
Nun soll das Macro in Abhängigkeit der $chk1... auch noch found oder/und Not Founds oder/und Temp.dis. entfernen.
Kottan schrieb:Wow!

Ihr tut Euch wirklich diese Forms an?

Stört ja nicht wirklich. Ist halt ein bisserl mehr Code. Seit Visual Basic gehts ja gar nicht mehr ohne Klicki-Klicki Wink
mit forms hatte bislang auch nix am hut. da könnte ich eine schulung brauchen. Wink
Die Forms sind ned wirklich kompliziert.
Nur wie kann ich ein mit MFILTER gefilterten Ansammlung von Caches noch weiterfiltern ohne den alten Filtervorgang zu löschen. Glaube so habe ich mein Problem besser spezifiziert.
Jeeper.at schrieb:mein Problem ist wie ich die verknüpfe die mit den Datenbankvariablen.
Die Rückgabewerte von dem Fenster als Input für eine If Abfrage verwenden. Und den Filter als Sting zusammenbasteln. Der halt die entsprechenden Teile aus dem If Zweig erhält oder auch nicht.
Jeeper.at schrieb:Die Forms sind ned wirklich kompliziert.
Nur wie kann ich ein mit MFILTER gefilterten Ansammlung von Caches noch weiterfiltern ohne den alten Filtervorgang zu löschen. Glaube so habe ich mein Problem besser spezifiziert.

Ich hoffe jetzt verstehe ich Dich richtig.

Das Form habe ich weggelassen.

Ist zwar nicht elegant, aber es funktioniert. Smile

Wenn es mehr als drei Checkboxen sind sollte man sich etwas anderes einfallen lassen. Das mit dem Join bei mfilter habe ich mir noch nicht angeschaut. Im Prinzip könnte man das bei gsak 7.x auch über SQL-Statements machen. Muß ich mir mal anschauen.

$data = "Test"

If ShowForm($form)
If $ok
#cancel msg="Found='$Chk1', Archived='$Chk2', Disabled='$Chk3'"
$found=$Chk1
$archived=$Chk2
$disabled=$Chk3
GoSub Name=FilterValues
EndIf
Endif
cancel msg="Done!"$found,$archived,$disabled



BeginSub name=FilterValues
if $found=true and $archived=true and $disabled=true
mfilter expression=($d_found) and ($d_Archived) and ($d_Tempdisabled)
endif
if $found=false and $archived=true and $disabled=true
mfilter expression=not($d_found) and ($d_Archived) or ($d_Tempdisabled)
endif
if $found=false and $archived=false and $disabled=true
mfilter expression=not($d_found) and not($d_Archived) and ($d_Tempdisabled)
endif
if $found=false and $archived=true and $disabled=false
mfilter expression=not($d_found) and ($d_Archived) and not($d_Tempdisabled)
endif
if $found=true and $archived=false and $disabled=false
mfilter expression=($d_found) and not($d_Archived) and not($d_Tempdisabled)
endif
if $found=false and $archived=false and $disabled=false
mfilter expression=not($d_found) and not($d_Archived) and not($d_Tempdisabled)
endif
if $found=true and $archived=false and $disabled=true
mfilter expression=($d_found) and not($d_Archived) and ($d_Tempdisabled)
endif
if $found=true and $archived=true and $disabled=false
mfilter expression=($d_found) and ($d_Archived) and not($d_Tempdisabled)
endif
if $found=true and $archived=false and $disabled=false
mfilter expression=($d_found) and not($d_Archived) and not($d_Tempdisabled)
endif
EndSub
jössa... gibts auch eine einschulung ... GSAK für dummies????
@Schurli,
ja so sollte es funktionieren. Danke. Werde das heute nachmittag in der Firma (und das mir das keiner dem Chef sagt) mal testen.

@Mausbiber
Na geh, ist doch eh einfach...
So, konnte doch nicht bis in die Firma warten.

Habe nun folgendes gschrieben.

if $chkfound=true and $chknotfound=true and $chktempdis=true
mfilter Expression=not ($d_archived) and not regex($d_ownerid,$ownerid) and ($d_found) and not ($d_found) and ($d_tempdisabled)
endif

Die drei Checkboxen wertet er richtig aus. Ich möchte mit dem Filter also alle Caches anzeigen die nicht archiviert sind, die nicht mir gehören, die ich schon gefunden habe, die ich nicht gefunden habe und alle die momentan disabled sind. Macht er aber nicht.
Was ist an dem mfilter Ausdruck falsch?
Jeeper.at schrieb:if $chkfound=true and $chknotfound=true and $chktempdis=true
mfilter Expression=not ($d_archived) and not regex($d_ownerid,$ownerid) and ($d_found) and not ($d_found) and ($d_tempdisabled)
endif

Was ist an dem mfilter Ausdruck falsch?

Das kann mit AND nicht funktionieren. Das würde meinen: Such mir alle Caches die ich gefunden UND die ich nicht gefunden habe. Der Cache kann nicht gleichzeitig gefunden und ungefunden sein. Mit OR sollte es funken.

Das and ($d_tempdisabled) passt auch nicht, da gehört auch ein OR. Sonst müsste der Cache auch gleichzeitig Disabled und archived sein.

Die Regex hat als erstes den zu suchenden Wert und als zweites die Datenbankvariable also z.B. not(regex("Jeeper.at",$d_ownername))

Edit: Eigentlich kannst Du das ($d_found) or not($d_found) komplett weglassen. Einen der zwei Zustände muß ein Cache sowieso haben.

Also z.B.

$ownername="schurli"
mfilter Expression=not(regex($ownername,$d_ownername)) and not($d_archived) or ($d_tempdisabled)
Aha [Bild: a136.gif]
@Schurli
Eigentlich ganz klar so wie du es erklärt hast. Ist so ein Fall von ich seh den Wald vor lauter Bäumen nicht.
Sei aber nachsichtig, ich beschäftige mich mit den Macros in GSAK erst seit kurzer Zeit.

@tafari
ist das nicht spammen was du da machst?Tongue
Jeeper.at schrieb:Sei aber nachsichtig, ich beschäftige mich mit den Macros in GSAK erst seit kurzer Zeit.
Wird sicher noch, trial-and-error ist noch immer das Beste und ein Forum ist ja ua. auch zum Informationsaustausch da. Smile
Auch ich hab das nicht in der Muttermilch mitbekommen. Erst mit der Schulmilch. Wink
Es immer gut wenn man sich solche Statements in die jeweilige Muttersprache übersetzt. Dann kommt man leichter auf logische Fehler.

Jeeper.at schrieb:@tafari
ist das nicht spammen was du da machst?Tongue

Na endlich spamt mal wer anderer. Wink
Nein ist es nicht. Ich gebe der Comunnity lediglich bekannt, dass ich nicht durchblicke, worüber ihr da redet. ALso das Problem verstehe ich schon, aber die Lösungsansätze sind mir ein Greuel....Wink
Inzwischen läuft das Macro soweit.
Jetzt kommt der nächste Teil.
Da ich da in der Firma aber eine unregistrierte Version von GSAK habe sind die NAG Screens sehr lästig.
Bei jeder wichtigen Aktion sind es inzwischen 81Sekunden. Smile
Zeit um eine Kaffee trinken zu können....Wink
Seiten: 1 2