InfoPath2007で自動採番を実装!

要望が多いのに実装されていない機能ですよね。
これをSQLのストアドプロシージャを使って簡単に実装させます。
たぶん、2003でも同様の実装は可能だと思います。
実際の環境で使うには、排他制御等して確実に採番できるように変更が必要だと思われます。

1.SQL Serverに最新の番号を管理するテーブルを作成する。

CREATE TABLE [採番](
    [SEQ] [numeric](18, 0) NULL,
    [KBN] [int] NOT NULL

2.ストアドプロシージャを設定する

CREATE PROCEDURE [採番ストアド]
@KBNCODE INT
AS
DECLARE @MyKbn [numeric]
SET @MyKbn = @KBNCODE
SET NOCOUNT ON
BEGIN TRAN TR1
SELECT (select SEQ From 採番 WHERE KBN = @MyKbn) AS SEQ
UPDATE 採番
SET SEQ = SEQ + 1 WHERE KBN = @MyKbn
COMMIT TRAN TR1

3.InfoPathで「データ接続」設定をする
・接続先の追加でSQL Serverへの接続の作成
・「SQLの編集」でSQLを「Execute  採番ストアド  1」の様に変更する
・確認メッセージが出てくるが「はい」で保存
4.InfoPathのボタンクリック時の動作規則で番号を取得する時に作成した接続でデータを取得する
・自動接続は設定しない、開く度に採番されてしまう為、、

自動採番できれば、ファイル名に使ってもよし、申請番号に使ってもよし、、と色々出来ますね。
この実装は、Formsサービスでも実装可能です。
フォームの入力を保存するときに、ファイル名を聞かれるのが残念な感じがしましたが、この実装で解決できます。