mehrere Rückgabewerte von dialog boxen?

MichaHo

MichaHo

Aktives Mitglied
Thread Starter
Dabei seit
09.11.2010
Beiträge
121
Reaktionspunkte
8
Hallo zusammen,

ich versuche gerade ein kleines Eingabescript für die Mobilfunk Erfassung zu schreiben.

Der Fokus liegt auf "versuche" :D

Ich fang mal vorne an.

Ich möchte gerne unsere Mobilfunkverträge in der Firma in eine Datenbank eintragen.

Über HTML, PHP und MySQL weis ich wie es geht, aber ich würde es gerne über Applescript lösen.

Ich habe daher ein Script erstellt, wo ich eigentlich nacheinander die Daten abfragen wollte, mit mehreren dialog Boxen. Nun bin ich schreib faul und habe die Erstellung der dialogboxen automatisieren wollen. Eigentlich ändert sich nämlich immer nur die einzugebende Info.

Nun scheitert aber bereits der 2. Aufruf der Funktion.

Ich möchte quasi die Werte, die dort in die Boxen eingetragen werden "sammeln" und später über ein sql statement in meine DB rein schieben. (das krieg ich dann wieder hin hoffe ich :eek:)

Wie kann ich denn im Applescript mehrere Rückgabewerte abfragen?

Vielleicht kann mir einer einen Denkanstoß geben, ich steh grad völlig auf dem Schlauch.

hier mein bisheriges Script:

Code:
set mblErfDate to formDat(current date)
set mblUser to msgResult("Teilnehmer", "Weiter")
set mblKST to msgResult("Kostenstelle", "Weiter")
set mblNo to msgResult("Mobilnummer", "Weiter")
set mblCON to msgResult("Vertrag", "Weiter")
set mblCONDate to formDat(msgResult("Vertragsbeginn", "Weiter"))
set mblPhone to msgResult("Handy Modell", "Weiter")
set mblIMEI to msgResult("IMEI Nummer", "Weiter")
set mblPIN1 to msgResult("PIN1", "Weiter")
set mblPIN2 to msgResult("PIN2", "Weiter")
set mblPUK1 to msgResult("PUK1", "Weiter")
set mblPUK2 to msgResult("PUK2", "Speichern")
set sqlValues to {mblErfDate, mblUser, mblKST, mblNo, mblCON, mblCONDate, mblPhone, mblIMEI, mblPIN1, mblPIN2, mblPUK1, mblPUK2}

inDB(sqlValues)
on msgResult(resInf, resBtn)
	set msgTitel to "Daten Erfassung Mobilfunk"
	set msgText to "Bitte tragen Sie folgende Information ein:

"
	set msgRet to ""
	set msgResult to text returned of (display dialog msgText & resInf buttons resBtn with title msgTitel default answer msgRet)
	return msgResult
end msgResult
on inDB(sqlValues)
	set loc to space & "~/Scripting/DB/mhoIT" & space
	set head to "sqlite3" & loc & quote
	set tail to quote
	set sqlString to "insert into mnMobile values('sqlValues') ;"
	return do shell script head & sqlString & tail
end inDB
on formDat(theDate)
	set tmpDay to text -2 thru -1 of ("0" & theDate's day)
	set tmpMon to word 3 of ((theDate) as text)
	set tmpYear to ((year of theDate) as text)
	set tmpMonList to {January, February, March, April, May, June, July, August, September, October, November, December}
	repeat with i from 1 to 12
		if theDate's month = item i of tmpMonList then
			set MM to text -2 thru -1 of ("0" & i)
			exit repeat
		end if
	end repeat
	set tmpDate to tmpDay & "." & MM & "." & tmpYear
	return tmpDate
end formDat

Hinweis: die Funktion formDat habe ich mal irgendwo im Netz gefunden

Vielen Dank

Grüße

Michael
 
Mehrere Rückgabewerte könnte man auch so abfragen:

Code:
[FONT="Verdana"][size=2][b]set[/b] [color=#3F7F00]mblErfDate[/color] [b]to[/b] ([color=#0016B0][b]do shell script[/b][/color] "date \"+%d.%m.%Y\"")
[b]set[/b] [color=#3F7F00]sqlValues[/color] [b]to[/b] {}
[b]set[/b] [color=#3F7F00]msgTitel[/color] [b]to[/b] "Daten Erfassung Mobilfunk"
[b]set[/b] [color=#3F7F00]msgText[/color] [b]to[/b] "Bitte tragen Sie folgende Information ein:

"
[b]set[/b] [color=#3F7F00]defAnswer[/color] [b]to[/b] "Teilnehmer: 
Kostenstelle: 
Mobilnummer: 
Vertrag: 
Vertragsbeginn: 
Handy Modell: 
IMEI Nummer: 
PIN1: 
PIN2: 
PUK1: 
PUK2: "

[color=#0016B0][b]display dialog[/b][/color] [color=#3F7F00]msgText[/color] [color=#0016B0]with title[/color] [color=#3F7F00]msgTitel[/color] [color=#0016B0]default answer[/color] [color=#3F7F00]defAnswer[/color]
[b]set[/b] [color=#3F7F00]msgResult[/color] [b]to[/b] [b]every[/b] [color=#0000FF][i]paragraph[/i][/color] [b]of[/b] [color=#4315B1]text returned[/color] [b]of[/b] [color=#6C04D4]result[/color]

[b]set[/b] [color=#6C04D4]AppleScript[/color]'s [color=#6C04D4]text item delimiters[/color] [b]to[/b] ":"
[b]repeat[/b] [b]with[/b] [color=#3F7F00]para[/color] [b]in[/b] [color=#3F7F00]msgResult[/color]
	[b]set[/b] [b]end[/b] [b]of[/b] [color=#3F7F00]sqlValues[/color] [b]to[/b] [b]last[/b] [color=#0000FF][i]text item[/i][/color] [b]of[/b] [color=#3F7F00]para[/color]
[b]end[/b] [b]repeat[/b]
[b]set[/b] [color=#6C04D4]AppleScript[/color]'s [color=#6C04D4]text item delimiters[/color] [b]to[/b] ""

[b]get[/b] [color=#3F7F00]sqlValues[/color]

[/size][/FONT]

Wie du siehst, spare ich mir auch die formDat Routine, mit dem Shellskript geht das schneller und einfacher.

Dein Skript funktioniert nicht, weil du die Routine "msgResult" und ihr Ergebnis gleich nennst. Wenn du das änderst, sollte das gehen.
 
Da war ich wohl zu langsam...irgendwann komm ich gegen Pill noch an. Muuuaaahhh. Top Job aber ich finde es etwas gewagt, da man den Text frei gearbeiten kann und somit am Ende Murks rauskommen kann wenn es weiter verarbeitet werden soll. Dann wird aus "Teilnehmer: Icke" was zu "Icke" werden sollte schnell mal "TeilnehmerIcke".
 
Hallo,

Danke für die Antworten.

Das Script ist Top, allerdings ist es so, das man die default answers ja anpassen könnte und wenn dann der Doppelpunkt fehlt, laufe ich auf einen Fehler....

Was meinst Du mit
Dein Skript funktioniert nicht, weil du die Routine "msgResult" und ihr Ergebnis gleich nennst. Wenn du das änderst, sollte das gehen.
? kannst Du mir auf die Sprünge helfden wier ich das abändern muss?

Dein Tip mit dem Datum habe ich so übernommen, vielen Dank.

Grüße

Michael
 
Hallo,

so, habe es nun so geschafft, das jede Box einzeln kommt und die Werte abfragt.

nur hier
set sqlValues to {mblErfDate, mblUser, mblKST, mblNo, mblCON, mblCONDate, mblPhone, mblIMEI, mblPIN1, mblPIN2, mblPUK1, mblPUK2}
habe ich noch ein Problem.

Müsste ich hier die Kommas, die Fehlen mit dazu schreiben oder gibt es eine elegantere Lösung?

hier nochmal das komplette Script:

set mblErfDate to (do shell script "date \"+%d.%m.%Y\"")
set mblUser to text returned of msgResult("Teilnehmer", "Weiter")
set mblKST to text returned of msgResult("Kostenstelle", "Weiter")
set mblNo to text returned of msgResult("Mobilnummer", "Weiter")
set mblCON to text returned of msgResult("Vertrag", "Weiter")
set mblCONDate to text returned of msgResult("Vertragsbeginn", "Weiter")
set mblPhone to text returned of msgResult("Handy Modell", "Weiter")
set mblIMEI to text returned of msgResult("IMEI Nummer", "Weiter")
set mblPIN1 to text returned of msgResult("PIN1", "Weiter")
set mblPIN2 to text returned of msgResult("PIN2", "Weiter")
set mblPUK1 to text returned of msgResult("PUK1", "Weiter")
set mblPUK2 to text returned of msgResult("PUK2", "Speichern")

set sqlValues to {mblErfDate, mblUser, mblKST, mblNo, mblCON, mblCONDate, mblPhone, mblIMEI, mblPIN1, mblPIN2, mblPUK1, mblPUK2}

inDB(sqlValues)
on msgResult(resInf, resBtn)
set msgTitel to "Daten Erfassung Mobilfunk"
set msgText to "Bitte tragen Sie folgende Information ein:

"
set msgRet to ""
display dialog msgText & resInf buttons resBtn with title msgTitel default answer msgRet
end msgResult
on inDB(sqlValues)
set loc to space & "~/Scripting/DB/mhoIT" & space
set head to "sqlite3" & loc & quote
set tail to quote
set sqlString to "insert into mnMobile values('sqlValues') ;"
return do shell script head & sqlString & tail
end inDB
on formDat(theDate)
set tmpDay to text -2 thru -1 of ("0" & theDate's day)
set tmpMon to word 3 of ((theDate) as text)
set tmpYear to ((year of theDate) as text)
set tmpMonList to {January, February, March, April, May, June, July, August, September, October, November, December}
repeat with i from 1 to 12
if theDate's month = item i of tmpMonList then
set MM to text -2 thru -1 of ("0" & i)
exit repeat
end if
end repeat
set tmpDate to tmpDay & "." & MM & "." & tmpYear
return tmpDate
end formDat

Vielen Dank

Grüße

Michael
 
Wenn sqlValues am Ende ein String sein muss als "01.01.1970,Heinz Meier, ...." dann schreib gleich

Code:
set sqlValue to ""
set sqlValue to sqlValue & msgResult("Teilnehmer","Weiter")
set sqlValue to sqlValue & msgResult("Kostenstelle","Weiter")

usw.
 
Hi,

ich benötige den String so:

'01.01.1970','03','....' usw.

aber Dein Denkanstoss war supi, hat mir noch einmal 2 Zeilen gespart.

mein fertiger und funktionierender Code sieht nun so aus:

set mblID to inDB("select id from mnMobile order by id desc limit 1") + 1
set sqlValue to "'"
set sqlValue to sqlValue & mblID & "','"
set sqlValue to sqlValue & (do shell script "date \"+%d.%m.%Y\"") & "','"
set sqlValue to sqlValue & text returned of msgResult("Teilnehmer", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("Kostenstelle", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("Mobilnummer", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("Vertrag", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("Vertragsbeginn", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("Handy Modell", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("IMEI Nummer", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("PIN1", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("PIN2", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("PUK1", "Weiter") & "','"
set sqlValue to sqlValue & text returned of msgResult("PUK2", "Speichern") & "'"

inDB(sqlValue)

on msgResult(resInf, resBtn)
set msgTitel to "Daten Erfassung Mobilfunk"
set msgText to "Bitte tragen Sie folgende Information ein:

"
set msgRet to ""
display dialog msgText & resInf buttons resBtn with title msgTitel default answer msgRet
end msgResult


on inDB(sqlString)
set loc to space & "~/Scripting/DB/mhoIT" & space
set head to "sqlite3" & loc & quote
set tail to quote
return do shell script head & sqlString & tail
end inDB

Vielen Dank an Alle.

Grüße

Michael
 
Zurück
Oben Unten