カテゴリー内の他の記事

レコード保存後に自動でステータス更新!

フォローする

(著者:サイボウズ 三宅 智子)

はじめに

申請系のアプリでよくステータスの回し忘れに後から気づいて慌てるという経験はありませんか?実はサイボウズ社内でもよくあります(^^;

通知機能を使って「ステータスが未処理だったら、○○日後に通知を飛ばす」など設定することでリマインドさせることもできますが、ここでは別の方法をご紹介します。地味ですが、あるとちょっと嬉しいTipsです。

2016年8月のアップデートでレコード追加/編集画面の保存成功後イベントが追加されたということで、今回はレコード保存後に自動でステータス更新をする方法の説明です。
保存成功後のイベントは以下の3種類ですが、ここではレコード追加画面の保存成功後イベントを利用して実装します。

完成イメージ

レコード追加画面の保存成功後に、休暇申請アプリのアクション「申請する」が自動で実行され、ステータスが「申請中」に進むことを確認できます。
(確認のために本Tipsでは成功後のalertを出しています。)

https://gyazo.com/87bf25341c3c1ec01365c572f810a694

レコード追加画面

アプリの準備

今回は、アプリストアから「休暇申請」アプリを追加し、下記の通りフィールドを設定しました。他のフィールドは今回のカスタマイズには影響しないので、自由に設定していただいて構いません。

フィールド名 フィールドコード フィールドタイプ
承認者 authorizer ユーザー選択

PC用のJavaScriptファイル

詳細設定から「JavaScript / CSSによるカスタマイズ」を開き、以下のソースコードをエディタに貼り付けて、ファイルをアップロードしてください。

ソースコード

以下のソースコードを記述します。

※プロセス管理の作業者は配列ではなく文字列なので、承認者フィールドに複数人入っていたとしても1人目しか実行できない点、ご注意ください。

ソースコードの解説

レコードの更新処理に kintone.Promise を利用しています。詳細はこちら

関連Tips

最後に

今回はレコード追加画面の保存成功後イベントを使ってステータスを自動更新する方法をご紹介しました。
保存後に自動採番をする方法や、プロセス管理実行時にフィールドの値を入力する方法などの関連Tipsなどもありますので、ぜひお試しください。

このTipsは、2016年8月版で確認したものになります。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

Avatar
渡中啓介

レコード追加画面の保存成功後イベントでステータスを自動更新するJSを実行しましたが、2点問題が発生しました。

①レコード内にルックアップフィールドがあるのですが、ルックアップを使用すると画面がグレーになり画面が固まります。ルックアップを飛ばして保存をかけるとステータスの自動更新は実行されます。

②2段階のステータス(貸出中→返却済み)のような場合、動作しませんでした。上記JSを2重に記載しました。

 Javascriptはどのように書けばいいかご教示願えますか?

 

Javascriptは他にルックアップを自動取得するJSも実装しています。

Avatar
渡中啓介

①の問題は解決しました。ルックアップ選択のプラグインの設定が外れてしまっていたためでした。

 

Avatar
cybozu Development team

渡中啓介さん

コメントをありがとうございます。cybozu developer network運営事務局です。
現状わかる範囲で回答させていただきます。


②ステータスの更新の際のリクエストボディ指定には条件がありますが、それは満たしていますでしょうか?アクション名や作業者の指定が必要になります。
 https://developer.cybozu.io/hc/ja/articles/204791550#anchor_changeRecordStatus

具体的にはソースコードがないと原因箇所がわからないので、差し支えなければ貼り付けていただけると嬉しいです。

よろしくお願いします。

Avatar
Yuto Kawai

お世話になります。

 

記事を参考に、レコード保存後にステータスを更新させようとしているのですが、構文エラーになってしまいうまくいきません。

アクション名やリクエストボディを見直してみたのですが原因がわからず、手詰まりの状態です…。

 

原因などもし分かるようでしたら、ご教示いただけますと幸いです…。

 

------------エラー内容-----------

HTTP400: 要求が正しくありません - 構文が無効であるため、サーバーで要求を処理できませんでした。
(XHR)PUT - https://reism.cybozu.com/k/v1/record/status.json

 

---------JavaScriptのコード------------

(function() {
    "use strict";

kintone.events.on([
  'app.record.create.submit.success',
  'app.record.edit.submit.success',
], function(event) {
 
  var record = event.record;
  var appID = event.appId;
  var recordID = event.recordId;
  var user = kintone.getLoginUser();
  var userCode = user['code'];
 
  ~~~中略~~~
 
  var params = {
      "app": appID,
      "id": recordID,
      "action": "資料提出",
      "assignee": userName
  };
 
  return kintone.api(
    kintone.api.url('/k/v1/record/status', true), 'PUT', params
 
    ).then(function(success) {
 
        return event;
 
    }).catch(function(error) {
 
        return event;
 
    });
 
   ~~~中略~~~
 
});
 
 
})();
 
------------プロセス------------
ステータス:未処理
ステータス:資料提出済み  アクション名:資料提出
Yuto Kawaiにより編集されました
Avatar
Yuto Kawai

すみません、上記のコメントの件、解決しました。

 

テスト環境で動作検証をしていたのですが、テスト環境では上記エラーになり、本番環境で試したところ無事に動きました。

テスト環境だとURL違いますから、そりゃエラーになりますよね…。お騒がせいたしました(_ _;

Yuto Kawaiにより編集されました
ログインしてコメントを残してください。