[AppleScripts]ドロップレットの作法を考える その3 エラーログを作成する
その2でダイアログによるエラー通知を組み込みましたが
必要か?は微妙wですが
ログをファイルにする事を考えてみました。
------------------------------------------------■■■■ ダブルクリック起動の始まり
on run
------------------------------------------------【設定項目】ファイル選択ダイアログのデフォルトのディレクトリ
---set theDefLoc to path to shared documents from user domain
set theDefLoc to POSIX file "/Users/Shared/Downloads"
------------------------------------------------【設定項目】Uniform Type Identifier指定
------------------------------------------------詳しくは http://goo.gl/6jAQa Uniform Type Identifierを見てください
set theFileType to "public.png,public.jpeg" as text
---簡素の記述も出来ますPDFの場合---set theFileType to "PDF" as text
---ムービーファイルの場合---set theFileType to "public.movie,com.adobe.flash-video" as text
------------------------------------------------↑のファイルタイプをリスト形式に整形する
set AppleScript's text item delimiters to {","}
set theFileTypeList to every text item of theFileType
------------------------------------------------【設定項目】プロンプトの文言改行が使えます\nを入れます
------------------------------------------------Uniform Type Identifierとメッセージ
set theWithPrompt to theFileType & "\nファイルをえらんでください\n"
------------------------------------------------残りのメッセージ
set theWithPromptMes to "ファイルをドロップしても\n動作します"
------------------------------------------------ダイアログを出して選択されたファイルは「open」に渡す
open (choose file default location theDefLoc ¬
with prompt theWithPrompt & theWithPromptMes ¬
of type theFileTypeList ¬
invisibles true ¬
with multiple selections allowed without showing package contents)
end run
----------------------------------------------■■■■ openドロップ起動の始まり
on open theDropObj
----------------------------------------------IF文でエラー処理が無かった(正常終了)した場合の終了メッセージ
set theErrorPlaceMes to "処理が終了しました" as text
----------------------------------------------ログファイル名=アプリケーション名にするためにアプリケーション名を取得
set theApplicationName to name of current application as string
----------------------------------------------ログファイルの名前に日付時間を使うために今の時間を整形する
set theDateTime to (do shell script "date +'%Y%m%d_%H_%M_%S'" as string)
set theLogFileName to (theApplicationName & "_" & theDateTime & ".txt") as text
---------------------------------------------ファインダーを呼び出す
tell application "Finder"
----------------------------------------------■■■■ 繰り返しの始まり
repeat with theObjFiles in theDropObj
----------------------------------------------処理1
try
-----------------------◆◆◆ここに処理1
-----------------------↓エラーサンプル用のerror number -10004になる処理(これはOn Errorにならないので処理を中断しない)
do shell script "touch /tmp/test1.txt"
----------------------------------------------最初にメッセージを書き込む
my theLogEvent("\nこのファイルは削除しても大丈夫です\n\n", "処理1は正常終了しました", theLogFileName)
on error theErrorMsg number theErrorNum
----------------------------------------------【設定項目】ここの処理でエラーになった場合のエラーコード
set theErrorPlaceMes to "Er0001"
----------------------------------------------エラーの内容をログにかき出すサブルーチンを呼び出す
my theLogEvent(theErrorPlaceMes & ":" & theErrorMsg & ":" & theErrorNum, theLogFileName)
----------------------------------------------ダイアログを出してユーザーに知らせる
activate
display dialog (theErrorMsg & ":" & theErrorNum & "\n" & "メールで↓のメッセージをお伝え下さい") ¬
default answer (theErrorPlaceMes & ":" & theErrorMsg & ":" & theErrorNum) ¬
with icon 1 default button 2
----------------------------------------------最後のダイアログ用にメッセージを整形
set theErrorPlaceMes to "エラーが発生して処理を中断しました:" & theErrorPlaceMes
end try
----------------------------------------------処理2
try
-----◆◆◆ここに処理2
-----------------------↓エラーサンプル用のerror number 1エラーになる処理
tell current application
do shell script "rm /tmp/test2.txt"
end tell
on error theErrorMsg number theErrorNum
----------------------------------------------【設定項目】ここの処理でエラーになった場合のエラーコード
set theErrorPlaceMes to "Er0002"
----------------------------------------------エラーの内容をログにかき出すサブルーチンを呼び出す
my theLogEvent("", theErrorPlaceMes & ":" & theErrorMsg & ":" & theErrorNum, theLogFileName)
----------------------------------------------ログファイルのあるフォルダを開く
open (folder "AppleScripts" of folder "Logs" of (path to library folder from user domain))
----------------------------------------------ダイアログを出してユーザーに知らせる
activate
display dialog (theErrorMsg & ":" & theErrorNum & "\n" & "メールで↓のメッセージをお伝え下さい") ¬
default answer (theErrorPlaceMes & ":" & theErrorMsg & ":" & theErrorNum) ¬
with icon 1 default button 2
----------------------------------------------最後のダイアログ用にメッセージを整形
set theErrorPlaceMes to "エラーが発生して処理を中断しました:" & theErrorPlaceMes
end try
end repeat
----------------------------------------------処理終了ダイアログ 自動終了する
activate
display alert theErrorPlaceMes message "" as informational giving up after 1
end tell
end open
----------------------------------------------■■■■ログファイル書き込みのサブルーチン
on theLogEvent(theFirstMessage, theLogMessage, theLogFile)
----------------------------------------------ログファイルの格納先ディレクトリを作成
-----------既にフォルダがあるとnumber -48でエラーになる
try
tell application "Finder"
make new folder at folder "Logs" of (path to library folder from user domain) with properties {name:"AppleScripts"}
end tell
end try
-----------↑の処理が好みでは無い場合はdo shell script の方がスマート
------do shell script "mkdir -p ~/Library/Logs/AppleScripts"
----------------------------------------------ログファイルを作る
-----------既にファイルがあるとnumber -48でエラーになる
try
tell application "Finder"
make new file at (folder "AppleScripts" of folder "Logs" of (path to library folder from user domain)) with properties {name:theLogFile}
end tell
end try
-----------↑の処理が好みでは無い場合はdo shell script の方がスマート
------do shell script "touch -f ~/Library/Logs/AppleScripts/" & quoted form of (theLogFile)
----------------------------------------------利用者が削除して良いか?を判断出来るようにファイルを作っておく
------------既にファイルがあるとnumber -48でエラーになる
try
tell application "Finder"
make new file at (folder "AppleScripts" of folder "Logs" of (path to library folder from user domain)) with properties {name:"_このフォルダは削除しても大丈夫です.txt"}
end tell
end try
-----------↑の処理が好みでは無い場合はdo shell script の方がスマート
------do shell script "touch -f ~/Library/Logs/AppleScripts/" & "_このフォルダは削除しても大丈夫です.txt"
----------------------------------------------最初にメッセージを書き込む
do shell script "echo " & quoted form of (theFirstMessage & "\n") & " >> ~/Library/Logs/AppleScripts/" & quoted form of (theLogFile)
----------------------------------------------ログを書き込む
do shell script "echo " & quoted form of (theLogMessage & "\n") & " >> ~/Library/Logs/AppleScripts/" & quoted form of (theLogFile)
end theLogEvent
| 固定リンク
« [AppleScripts]ドロップレットの作法を考える その2 on error | トップページ | [AppleScript]ドロップレットの作法を考える その4 (ドロップされたファイルはエイリアスか?) »
「AppleScriptDroplet」カテゴリの記事
- [AppleScript]ドロップレットの作法を考える その6 (ドロップレットを途中終了させる)(2013.01.14)
- [AppleScript]ドロップレットの作法を考える その5 (エイリアスの処理に悩む)(2013.01.08)
- [AppleScript]ドロップレットの作法を考える その4 (ドロップされたファイルはエイリアスか?)(2013.01.06)
- [AppleScripts]ドロップレットの作法を考える その3 エラーログを作成する(2013.01.06)
- [AppleScripts]ドロップレットの作法を考える その2 on error(2013.01.06)