1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【コラボフロー】決裁でスコア登録!? ゲームウォッチ風テトリス申請書にランキング表示してみた

Last updated at Posted at 2025-12-02

コラボスタイル Advent Calendar 2025の2日目の記事です。

テトリス“風”申請書の改修

コラボフローJavaScriptカスタマイズで、テトリス風のゲームをプレイできるようにした申請書を、毎年Advent Calendarに合わせてアップデートしています。

[対応履歴]

今年は、得点ランキング登録&表示の機能を追加します!
そしてテーマは「WATCH」とのコラボです。

【改修1】画面デザインの変更

申請書はExcelフォームのため、先ずはExcelでレイアウトや配色を変更します。

今回はゲームウォッチ風のデザインにしました!
直線的なので、昨年のADVANCEより作成しやすかったです。

右端にはランキング表示欄を追加したので、改修4で説明します。

ちなみに好きなゲームウォッチは、:fire:ファイアです。

【改修2】文書タイトルに得点を自動付加

経路の文書タイトル設定で、得点が自動セットされるようにします。
「文書タイトル降順=ランキング順」で申請書が並ぶようにするためです。

タイトルのフォーマット設定:テトリス風申請 SCORE:[fidScore]

しかし、ここで問題が発生:boom:

数値の得点をそのまま付加すると、並び順が得点の先頭数字順になってしまいます。
例えば、800 → 3000 → 12000と不正な得点順に・・・

解決策として、タイトル用に文字列型得点パーツを追加し、
先頭を0埋めした得点を登録することにしました。

これで期待通り、12000 → 03000 → 00800の順に並べることができます。

if (this.titleScoreParts) {
    // 桁数指定(6桁は超人)
    const displayDigits = 5;
    this.titleScoreParts.value = String(this.score).padStart(displayDigits, '0');
}

【改修3】検索APIで申請書を取得

申請書検索APIを使って、得点の高い順に申請書を取得する処理を追加します。

以下が参考にしたガイドです。

申請書の検索条件

  • title LIKE 'テトリス':文書タイトルに「テトリス」を含む申請書
  • flow_status = 'decision':決裁された申請書
  • ORDER BY title DESC:取得順は文書タイトルの降順

この処理で決裁済みの申請書を高得点順に、最大10件取得できます。

async function fetchRanking(appCd) {
    return collaboflow.api.post('/v1/documents/search', {
        "app_cd": appCd,
        "query": "title LIKE 'テトリス' " +
                 "AND flow_status = 'decision' " +
                 "ORDER BY title DESC",
        "offset": 0,
        "limit": 10
    })
    .then(function(response) {
        if(response.body.error) {
            console.error('Failed to fetch ranking', response);
            return null;
        }

        console.log('Fetched ranking', response.body.records);
        return response.body.records;
    })
    .catch(function(error) {
        console.error('Failed to fetch ranking:', error);
        return null;
    });
}

【改修4】ランキングを表示

申請書検索APIで取得した「得点」と「ユーザー名(申請者名)」を、
ランキング表示用パーツに値としてセットします。

得点は文書タイトルの末尾から、先頭0を除く連続した数字を抜き出します。

showRanking() {
    if (!this._rankingDocuments) {
        return;
    }

    for (let i = 0; i < this._rankingDocuments.length; i++) {
        const document = this._rankingDocuments[i];

        // 文書タイトルから、正規表現で連続した数字を抽出(先頭の0は含めない)
        let score = document.title?.match(/[1-9]\d*$/)?.[0];
        if (!score) {
            break;
        }

        // カンマを付加して、得点をセット
        score = Number(score).toLocaleString();
        if (this._rankingScorePartsId) {
            this.tableParts[i][this._rankingScorePartsId].value = score;
        }

        // 申請者名をユーザー名としてセット
        const userName = document.request_user?.name || 'Unknown';
        if (this._rankingNamePartsId) {
            this.tableParts[i][this._rankingNamePartsId].value = userName;
        }
    }
}

以上で改修完了:tada:

おわりに

これでプレイ後、申請書が決裁されてランキング登録されるか、
ウキウキWATCHINGできるようになりました!

現状、申請書検索APIは監査権限が必要なため、
一般ユーザーではランキング情報を取得できないのが惜しいです:disappointed_relieved:

一般権限でも申請書検索APIが利用できると活用の幅がグッと広がると思いますが、
今のところコラボフローご利用者からの改善要望は少ないようです。。

最後まで読んでいただき、ありがとうございました!
明日以降のAdvent Calendarも見てくれるかな?

以下手順でダウンロードしたファイルをコラボフローでインポートすると、
テトリス"風"申請をお試しいただけます。

  1. Boxからフォームと経路のzipファイルをダウンロードします
    1. https://app.box.com/s/qotsjtopu2emwor0jsod8t7iefghjm3l
  2. フォーム設定画面で、フォームのzipをインポートします
  3. 経路の新規作成画面で、経路のzipをインポートします
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?