Notesってノーツと読むんだよ。

基本4

最終更新:

bottle

- view
メンバー限定 登録/ログイン
(この文書は現在編集中)

フロントエンドとバックエンドって?


フロントエンドは、現在ユーザが作業をしているウィンドウ:一番上のウィンドウ
(「アクティブ・ウィンドウ」と呼ぶらしい。。)を指します。
@コマンド関数は全部フロントエンド処理です。
(もしかすると例外あり?@関数は詳しくないので抜けがあるかも。)
あとスクリプトでもUIという言葉がつくクラスは全部フロントエンド処理です。
(UIってUser Interfaceの略なのか??)
スクリプトの関数でもダイアログ表示用の関数はフロントエンド処理です。

バックエンドは、フロントエンドの反対で、表示している状態以外の処理を指します。
つまりバックエンドを簡単にいうと、表示してないメモリ上の処理。(って余計わかりづらいか?)
フロントエンド以外の処理っと覚えてください。(めちゃアバウトな説明zzz)
@コマンド以外の@関数は基本的にバックエンド処理です。
スクリプトならUIという言葉がつかないクラスは全部バックエンド処理です。

簡単に踏まえると以上な感じ。

@関数だけの処理なら、あまりフロントエンドとバックエンドを意識する必要はありませんが、
Lotus Scriptを使用するとなると、ここを踏まえないととんでもないエラー連発。
というか、思ってない動作をすること間違いなし。

特にサーバ・エージェント(スケジュール型の自動エージェント)をLotusScriptで組むときの注意として、
フロントエンドを一切使用できません。フロントエンドを使うとエラーします。

たとえば、フロントエンド側で処理したデータとバックエンド側で処理したデータを
1つに合体(???ここの言い回し、微妙だ。。。)させたい場合には、
処理の順番を間違うと、バックエンド側しか文書に反映してないとか、
バックエンド側の処理を反映できなかったとか、色々不具合がでます。
(自分もここの理解ができるまでかなり時間かかりましたしzzz)

複雑ですが、ノーツアプリケーションとして作る
ワークフロー作成の一例を以下に示します。
(あくまでも一例なので、ちょっと複雑なのを例にもってきましたが、
ワークフロー自体はもっと簡単に作成できるはずです。)

①誰かが文書を必要事項を入力
②ワークフロー申請を開始(アクション・ボタン押下)
③入力チェック判定
④入力チェックがエラーしたら再入力してもらって再度②にもどる
⑤入力チェックが問題なければ、ワークフロー設定用画面表示
⑥ワークフローの承認者(あて先)設定
⑦メール送信
⑧フラグ制御
を行う場合、

①はフロントエンド処理。
②はフロントエンド⇒バックエンドへ
③はバックエンド
④と⑤はバックエンド⇒フロントエンドへ
⑥はフロントエンド
⑦はバックエンド
⑧はバックエンドとフロントエンドの両方
という感じになります。
うん、ちょっとややこしいですね。

特に⑤から⑥なんかは、バックエンド処理の最中に承認者設定用のフォームを呼び出し
フロンドエンドで承認者という値を設定(入力選択)するようにしています。
バックエンド側で値を変更しているのに、
フロントエンド側でも値を設定できるのかと心配になるところですが、
バックエンドとフロントエンドは平行的
(というか、パラレルって言うのか?実際の並行処理とは違うけどzz)に
処理が可能のため、問題なく処理ができます。

他にも、④のところで、入力チェックで入力がたりない項目があった場合、
バックエンド側からエラー表示を行い、
再度編集してもらうという行為も
スクリプト初心者には悩むところだと思います。
簡単にやっちゃう場合には、エラーしたら現在の状態で一度セーブをかけ
文書を強制的に閉じてしまえばいいんですが
入力エラーの場合はすぐ編集したいのがユーザ側の要望でしてzz


さんぷる1。
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
目安箱バナー