cybozu developer network

カテゴリー内の他の記事

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

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

はじめに

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

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

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

完成イメージ

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

https://gyazo.com/87bf25341c3c1ec01365c572f810a694

レコード追加画面

アプリの準備

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

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

PC用のJavaScriptファイル

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

ソースコード

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

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

関連Tips

最後に

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

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

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

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

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により編集されました
Avatar
依田美代子

お世話になっております。

スクリプトを実施するとエラーとなります。 

スクリプトはこちらです。

kintone.events.on(['app.record.create.submit', 'app.record.edit.submit','app.record.index.edit.submit'], function(event) {

var record = event.record;
var appId = event.appId;
var recordId = event.recordId;
var user = kintone.getLoginUser();
var authorizer = user['code'];

var sts = record['ステータス']['value'];
var flg = record['判定']['value'];

if (sts=='審議待ち' && (flg != 'undefined' || flg != null)){
console.log(authorizer);
var body = {
"app": appId,
"id": recordId,
"action": flg,
"assignee": authorizer,
};
return kintone.api(kintone.api.url('/k/v1/record/status', true), 'PUT', body).then(function(resp) {
return event;
}, function(error) {
alert(error.message);
return event;
});
}

return event;
});

 

どのように回避すれば良いのでしょうか。

お手数おかけしますが宜しくお願いします。

Avatar
cybozu Development team

依田美代子 様

コメントありがとうございます。cybozu developernetwork 事務局です。

また、コミュニティもご活用いただきありがとうございます。

 

恐れ入りますが、こちらは記事のフィードバック欄となりますので、

個別のご質問に関しては引き続きコミュニティをご活用ください。

今後ともよろしくお願いいたします。

Avatar
ヤマダ

お世話になっております。保存後にこのようなエラーとなります。

指定したユーザー(*******)は作業者に設定できません。アプリの設定が変更されている可能性があります。

スクリプトはこちらです

(function() {

    "use strict";

    //レコード追加画面の保存成功後イベント
    kintone.events.on('app.record.create.submit.success', function(event) {
        var record = event.record;
        var appId = event.appId;
        var recordId = event.recordId;
        var user = kintone.getLoginUser();
        var authorizer = user['code'];

        //レコードのステータス更新API
        var body = {
            "app": appId,
            "id": recordId,
            "action": "申請",
            "assignee": authorizer,
            "revision": 1
        };
        return kintone.api(kintone.api.url('/k/v1/record/status', true), 'PUT', body).then(function(resp) {
            alert("申請するボタンを実行しました");
            return event;
        }, function(error) {
            alert(error.message);
            return event;
        });
    });
})();

 

申し訳ありませんが私は初心者なのでそのあたりを考慮したご返答をよろしくおねがいします。

それとユーザー選択の初期値をログインユーザーにしているので

作業者をログインユーザーにするやり方も教えていただけないでしょうか?

曖昧な説明で申し訳ありませんが宜しくおねがいします

 

 

ヤマダにより編集されました
Avatar
cybozu Development team

ヤマダ様

コメントに記載いただいたコードではなく、記事に記載のソースコードの場合は、

「承認者」欄の初期値を「ログインユーザー」にした場合も、エラーなく動作しました。

再度記事に記載のソースコードでお試しいただけますでしょうか。

Avatar
ヤマダ

記事に記載のソースコードの場合も

同じようなエラーが出てしまいます

Avatar
cybozu Development team

ヤマダ様

その場合は、ソースコードではなくアプリの設定が記事の想定と異なっているためと思われます。

アプリの設定でプロセス管理の該当アクションの作業者が「承認者」となっているかをご確認ください。

または、アプリストアからダウンロードした「休暇申請」アプリをお使いください。

よろしくお願いいたします。

Avatar
マル

いつもTipsを参考にさせていただいております。

プロセス管理で「申請→承認後→完了」のプロセスの流れで、ある特別な条件のレコードの場合のみは承認が必要ないとする運用を考えた時、保存後、直ぐに「完了」のステータスにしたいと思い、このTipsで紹介されたソースにて作成したところ、ステータスの変更に失敗・・・ほかのユザーが・・とエラーになります。

そもそも、プロセス管理をする中で、ある特別な条件のレコードの場合のみは承認が必要ない(承認済みにするという考え方でもないのですが)→承認を飛ばし「完了」とするなどの考え方は可能なのでしょうか。

よろしくお願い致します。

Avatar
cybozu Development team

マル 様

お世話になっております。cybozu developer network 運営です。

恐れ入りますが、こちらのコメント欄は記事内容のフィードバック目的となっているため、
記事から派生した技術的なご質問は cybozu developer コミュニティをご活用ください。

プロセス管理の条件分岐については次のヘルプページも参考にしてください。
kintone ヘルプ |条件によって分かれるプロセス管理を設定する

よろしくお願いいたします。

サインインしてコメントを残してください。