(この文書は現在編集中)
フロントエンドとバックエンドって?
フロントエンドは、現在ユーザが作業をしているウィンドウ:一番上のウィンドウ
(「アクティブ・ウィンドウ」と呼ぶらしい。。)を指します。
@コマンド関数は全部フロントエンド処理です。
(もしかすると例外あり?@関数は詳しくないので抜けがあるかも。)
あとスクリプトでもUIという言葉がつくクラスは全部フロントエンド処理です。
(UIってUser Interfaceの略なのか??)
スクリプトの関数でもダイアログ表示用の関数はフロントエンド処理です。
(「アクティブ・ウィンドウ」と呼ぶらしい。。)を指します。
@コマンド関数は全部フロントエンド処理です。
(もしかすると例外あり?@関数は詳しくないので抜けがあるかも。)
あとスクリプトでもUIという言葉がつくクラスは全部フロントエンド処理です。
(UIってUser Interfaceの略なのか??)
スクリプトの関数でもダイアログ表示用の関数はフロントエンド処理です。
バックエンドは、フロントエンドの反対で、表示している状態以外の処理を指します。
つまりバックエンドを簡単にいうと、表示してないメモリ上の処理。(って余計わかりづらいか?)
フロントエンド以外の処理っと覚えてください。(めちゃアバウトな説明zzz)
@コマンド以外の@関数は基本的にバックエンド処理です。
スクリプトならUIという言葉がつかないクラスは全部バックエンド処理です。
つまりバックエンドを簡単にいうと、表示してないメモリ上の処理。(って余計わかりづらいか?)
フロントエンド以外の処理っと覚えてください。(めちゃアバウトな説明zzz)
@コマンド以外の@関数は基本的にバックエンド処理です。
スクリプトならUIという言葉がつかないクラスは全部バックエンド処理です。
簡単に踏まえると以上な感じ。
@関数だけの処理なら、あまりフロントエンドとバックエンドを意識する必要はありませんが、
Lotus Scriptを使用するとなると、ここを踏まえないととんでもないエラー連発。
というか、思ってない動作をすること間違いなし。
Lotus Scriptを使用するとなると、ここを踏まえないととんでもないエラー連発。
というか、思ってない動作をすること間違いなし。
特にサーバ・エージェント(スケジュール型の自動エージェント)をLotusScriptで組むときの注意として、
フロントエンドを一切使用できません。フロントエンドを使うとエラーします。
フロントエンドを一切使用できません。フロントエンドを使うとエラーします。
たとえば、フロントエンド側で処理したデータとバックエンド側で処理したデータを
1つに合体(???ここの言い回し、微妙だ。。。)させたい場合には、
処理の順番を間違うと、バックエンド側しか文書に反映してないとか、
バックエンド側の処理を反映できなかったとか、色々不具合がでます。
(自分もここの理解ができるまでかなり時間かかりましたしzzz)
1つに合体(???ここの言い回し、微妙だ。。。)させたい場合には、
処理の順番を間違うと、バックエンド側しか文書に反映してないとか、
バックエンド側の処理を反映できなかったとか、色々不具合がでます。
(自分もここの理解ができるまでかなり時間かかりましたしzzz)
複雑ですが、ノーツアプリケーションとして作る
ワークフロー作成の一例を以下に示します。
(あくまでも一例なので、ちょっと複雑なのを例にもってきましたが、
ワークフロー自体はもっと簡単に作成できるはずです。)
ワークフロー作成の一例を以下に示します。
(あくまでも一例なので、ちょっと複雑なのを例にもってきましたが、
ワークフロー自体はもっと簡単に作成できるはずです。)
①誰かが文書を必要事項を入力
②ワークフロー申請を開始(アクション・ボタン押下)
③入力チェック判定
④入力チェックがエラーしたら再入力してもらって再度②にもどる
⑤入力チェックが問題なければ、ワークフロー設定用画面表示
⑥ワークフローの承認者(あて先)設定
⑦メール送信
⑧フラグ制御
を行う場合、
②ワークフロー申請を開始(アクション・ボタン押下)
③入力チェック判定
④入力チェックがエラーしたら再入力してもらって再度②にもどる
⑤入力チェックが問題なければ、ワークフロー設定用画面表示
⑥ワークフローの承認者(あて先)設定
⑦メール送信
⑧フラグ制御
を行う場合、
①はフロントエンド処理。
②はフロントエンド⇒バックエンドへ
③はバックエンド
④と⑤はバックエンド⇒フロントエンドへ
⑥はフロントエンド
⑦はバックエンド
⑧はバックエンドとフロントエンドの両方
という感じになります。
うん、ちょっとややこしいですね。
②はフロントエンド⇒バックエンドへ
③はバックエンド
④と⑤はバックエンド⇒フロントエンドへ
⑥はフロントエンド
⑦はバックエンド
⑧はバックエンドとフロントエンドの両方
という感じになります。
うん、ちょっとややこしいですね。
特に⑤から⑥なんかは、バックエンド処理の最中に承認者設定用のフォームを呼び出し
フロンドエンドで承認者という値を設定(入力選択)するようにしています。
バックエンド側で値を変更しているのに、
フロントエンド側でも値を設定できるのかと心配になるところですが、
バックエンドとフロントエンドは平行的
(というか、パラレルって言うのか?実際の並行処理とは違うけどzz)に
処理が可能のため、問題なく処理ができます。
フロンドエンドで承認者という値を設定(入力選択)するようにしています。
バックエンド側で値を変更しているのに、
フロントエンド側でも値を設定できるのかと心配になるところですが、
バックエンドとフロントエンドは平行的
(というか、パラレルって言うのか?実際の並行処理とは違うけどzz)に
処理が可能のため、問題なく処理ができます。
他にも、④のところで、入力チェックで入力がたりない項目があった場合、
バックエンド側からエラー表示を行い、
再度編集してもらうという行為も
スクリプト初心者には悩むところだと思います。
簡単にやっちゃう場合には、エラーしたら現在の状態で一度セーブをかけ
文書を強制的に閉じてしまえばいいんですが
入力エラーの場合はすぐ編集したいのがユーザ側の要望でしてzz
バックエンド側からエラー表示を行い、
再度編集してもらうという行為も
スクリプト初心者には悩むところだと思います。
簡単にやっちゃう場合には、エラーしたら現在の状態で一度セーブをかけ
文書を強制的に閉じてしまえばいいんですが
入力エラーの場合はすぐ編集したいのがユーザ側の要望でしてzz
さんぷる1。
Sub Click(Source As Button)
Sub Click(Source As Button)
Dim wksp As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim doc As NotesDocument Dim session As New NotesSession Dim newdoc As NotesDocument Dim intType As Integer, yesno As Integer, nextStatus As Integer Set uidoc = wksp.CurrentDocument Call uidoc.save Set doc = uidoc.Document '入力チェック処理 If Input_Chk(doc) = False Then Exit Sub End If 'ここで「いいえ」が選択された場合はPG停止 If Messagebox("承認を開始します。承認ルーチンの確認を行ってください。", 68, "確認") = 7 Then Exit Sub End If '承認ルーチン設定用表示フラグ設定 If doc.FormTitle(0) = "企画書" And doc.ProductType(0) = "一般" Then intType = 1 '承認ルーチンパターン1 Else If doc.RDRank(0) = "S" Then intType = 3 '承認ルーチンパターン3 Else intType = 2 '承認ルーチンパターン2 End If End If '以前に却下された場合は、承認情報を消す Dim n As Integer If doc.Status(0) = "90" Then For n = 2 To 8 Set item = doc.ReplaceItemValue( "approval_" + Cstr(n) , "" ) Set item = doc.ReplaceItemValue( "rej_" + Cstr(n) , "" ) Set item = doc.ReplaceItemValue( "shouninDate_" + Cstr(n) , "" ) Next End If 'ここで承認ルーチン設定ダイアログ表示 yesno = WKFLSetUp(doc, intType) If yesno = False Then Exit Sub End If 'メール送信処理 nextStatus = MailSendSetup(doc ,intType) '承認・却下ボタン制御用、次の承認者をセット If doc.Roma_syounin_2(0) = "" Then doc.Roma_syounin = doc.Roma_syounin_3 doc.Roma_dairi = doc.Roma_dairi_3 Else doc.Roma_syounin = doc.Roma_syounin_2 doc.Roma_dairi = doc.Roma_dairi_2 End If doc.shouninDate_1 = Today '承認日セット doc.Status = Cstr(nextStatus) Call doc.save(True,True) '一度保存を掛ける Call uidoc.save Call uidoc.close
End Sub