日時フィールドを入力して保存した時に他のアプリへ新規登録したいです。

Aというアプリの日時フィールドがあって、そこに日時を入力して保存した後にそのレコードの必要な項目、例えば日時フィールド、氏名、連絡先、住所などの項目を別のBというアプリへ新規登録として登録したいです。

下記ページを参考にしましたがうまくいきません。

ご教示いただけましたら幸いです。

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

https://developer.cybozu.io/hc/ja/community/posts/203631753-%E4%BB%96%E3%82%A2%E3%83%97%E3%83%AA%E3%81%B8%E3%81%AE%E6%96%B0%E8%A6%8F%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E3%81%AE%E6%96%B9%E6%B3%95

https://developer.cybozu.io/hc/ja/articles/203655530

https://developer.cybozu.io/hc/ja/articles/202166160

こんにちは。

うまくいかないとの事ですが、もう少し状況を詳しく書いて頂いた方が回答しやすいかなと思います。

こちらに投稿する際の画面に以下の内容が表示されていたと思うのですが、このような情報を頂くと原因を突き止めやすいと思います。

 


エラー情報

ブラウザの開発者ツールのコンソールなどからエラーが出ている場合、下記のようにエラーメッセージを記載してください。ブラウザ開発者ツールの確認方法はこちらを参考してください。

※エラー画面で共有したほうが分かりやすい場合は、スクリーンショットなどをご活用ください。

(例)
ブラウザの開発者ツールのコンソールから下記エラーが出ています。
“Uncaught SyntaxError: Unexpected end of input”

 

利用したソースコード

利用したソースコードがある場合、問題が発生した部分を記載しましょう。
ソースコードを見やすく投稿する方法はこちらをご参照ください。

(例)

(function() {
    kintone.events.on('app.record.index.show', function(event) {
      console.log('hello world');
    })
  })();

 

試したこと

調べた記事や、具体的な実装内容がある場合は記載してください。

(例)
この記事の通り、〇〇を試しました。記事リンク:〇〇〇〇

 

再現条件

動作を確認した環境の情報を記載してください。

(例)

  • 画面・イベント: app.record.detail.show
  • 関連するフィールド (フィールド種類/フィールド名/フィールドコード):
    文字列1行/会社名/company
  • 権限設定: アプリ管理者
  • デバイス(PC or モバイル): PC
  • OS・ブラウザ: macOS、Chrome
  • IP制限などネットワークに特殊なことがあれば: 特になし

あさが様

ご回答ありがとうございます。

下記ソースを参考にして、詳細画面を開いたときにIDとレコード番号はアプリBへ新規登録できることを確認いたしました、

app.record.detail.showの部分を変更してレコードの保存の際もアプリBへ新規登録できることを確認いたしましたが、

レコードの保存ではなく日時フィールドを入力して保存した場合のみアプリBへ新規登録したいです。

初心者のため説明もうまくできませんが、お分かりになりますでしょうか?ご教示よろしくお願いいたします。

画面・イベント:app.record.edit.submit.success
関連するフィールド (フィールド種類/フィールド名/フィールドコード):
日時/日時/日時
権限設定:
デバイス(PC or モバイル):PC
OS・ブラウザ: Windows10 Chrome
IP制限などネットワークに特殊なことがあれば:特になし

(function() {
"use strict";
kintone.events.on('app.record.detail.show', function(event) {
// アプリIDの取得
var appId = event.appId;
// レコード番号の取得
var recordId = event.recordId;
// リクエストプロパティ(JSON)
var params = {
"app": 1, // ← 参照ログを格納するアプリのIDに書き換えてください
"record": {
"閲覧アプリID": { "value": appId },
"閲覧レコード番号": { "value": recordId }
}
};

// kintone REST API リクエスト ~ レコードの登録(POST)
kintone.api(
kintone.api.url('/k/v1/record', true), // - pathOrUrl
'POST', // - method
params, // - params
function(resp) { // - callback
// (特に何もしない)
},
function(resp) { // - errback
// (特に何もしない)
}
);
});
})();

kuさん

追加の情報ありがとうございます!

 

> レコードの保存ではなく日時フィールドを入力して保存した場合のみアプリBへ新規登録したいです。

この部分ですが、「日時フィールドが入力された状態で保存された」場合に、アプリBに新規登録されたいという事でしょうか?

(日時フィールドが空だったら、アプリBには登録しない)

 

↑ が正しい場合ですが、既にアプリBにレコードが登録済みだった場合はどうする想定でしょうか?(上書きする?)

あさが様

早速のご回答ありがとうございます。

> レコードの保存ではなく日時フィールドを入力して保存した場合のみアプリBへ新規登録したいです。

この部分ですが、「日時フィールドが入力された状態で保存された」場合に、アプリBに新規登録されたいという事でしょうか?

(日時フィールドが空だったら、アプリBには登録しない)

>>>説明不足申し訳ございません。日時フィールド関係なく保存時にアプリBへIDとレコード番号が登録されたという意味でした。

(日時フィールドが空だったら、アプリBには登録しない)こちらはご認識の通りで日時フィールドに何も入力されなければアプリBへ登録はしないようにしたいです。日時が入った時だけアプリBへ新規登録したいと考えています。

 

↑ が正しい場合ですが、既にアプリBにレコードが登録済みだった場合はどうする想定でしょうか?(上書きする?)

>>>一度入力された日時フィールドが変更されることはほぼないのですが、日時フィールドが空の状態で日時が入力されて保存した場合アプリBへ新規登録、その後アプリAの同じレコードの日時フィールドが編集されて保存された場合は上書きされる設定がいいと考えています。

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

kuさん

情報ありがとうございます。

 

> こちらはご認識の通りで日時フィールドに何も入力されなければアプリBへ登録はしないようにしたいです。日時が入った時だけアプリBへ新規登録したいと考えています。

これに関しては、app.record.edit.submit.success で日時フィールドの有無をチェックしてはどうでしょうか?

 

>一度入力された日時フィールドが変更されることはほぼないのですが、日時フィールドが空の状態で日時が入力されて保存した場合アプリBへ新規登録、その後アプリAの同じレコードの日時フィールドが編集されて保存された場合は上書きされる設定がいいと考えています。

こちらはやり方はいくつかありそうですね。

日時フィールドが入力された場合に新規登録、編集された場合に更新としたい場合は、変更前の情報を保持しておく必要がありますね。(処理が複雑になりそう)

もしくは、app.record.edit.submit.success でアプリBにレコードが存在するかを調べて、無ければ追加・あれば更新とした方が処理はシンプルになりそうです。

あさが様

ご回答ありがとうございます。

> こちらはご認識の通りで日時フィールドに何も入力されなければアプリBへ登録はしないようにしたいです。日時が入った時だけアプリBへ新規登録したいと考えています。

これに関しては、app.record.edit.submit.success で日時フィールドの有無をチェックしてはどうでしょうか?

>>>すみません、この辺の処理が分からずに困っています。時間はないのですが再度色々試してみたいと思います。ありがとうございます。

 

>一度入力された日時フィールドが変更されることはほぼないのですが、日時フィールドが空の状態で日時が入力されて保存した場合アプリBへ新規登録、その後アプリAの同じレコードの日時フィールドが編集されて保存された場合は上書きされる設定がいいと考えています。

こちらはやり方はいくつかありそうですね。

日時フィールドが入力された場合に新規登録、編集された場合に更新としたい場合は、変更前の情報を保持しておく必要がありますね。(処理が複雑になりそう)

もしくは、app.record.edit.submit.success でアプリBにレコードが存在するかを調べて、無ければ追加・あれば更新とした方が処理はシンプルになりそうです。

>>>複雑な処理は無理だと思いますので、再考いたします。ありがとうございます。

kuさん

>すみません、この辺の処理が分からずに困っています。時間はないのですが再度色々試してみたいと思います。ありがとうございます。

この部分はこんなイメージになるかと思います。

const ev = ["app.record.create.submit.success","app.record.edit.submit.success"]
kintone.events.on(ev, function(e) {
const dt = e.record.日時.value;
if(dt){
 // 日時が入ってる場合に処理が行われる
}
});

あさが様

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

お手数おかけして申し訳ございません。ご丁寧にありがとうございます。

早速試してみます。

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

あさが様

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

私の知識不足で思った動きになりませんでした。

日時が入っていない場合の保存処理が完了しませんでした。

もう少し試行錯誤してみます。

よろしくお願いします。

下記コードで日時を入力しない場合、アプリ上で保存ボタンを押しても保存はされているようですが通常のように完了せず、

保存ボタンが表示されたままになってしまいます。

日時を入力した場合保存されて別のアプリに新規登録されますが、アプリIDとレコード番号のデータは反映されません。

知識不足で申し訳ございませんがご教示いただけましたら幸いです。

(function() {
"use strict";

const ev = ["app.record.create.submit.success","app.record.edit.submit.success"]
kintone.events.on(ev, function(e) {
const dt = e.record.日時.value;
if(dt){
// 日時が入ってる場合に処理が行われる

// アプリIDの取得
var appId = event.appId;
// レコード番号の取得
var recordId = event.recordId;
// リクエストプロパティ(JSON)
var params = {
"app": 1, // ← 参照ログを格納するアプリのIDに書き換えてください
"record": {
"閲覧アプリID": { "value": appId },
"閲覧レコード番号": { "value": recordId },
}}
};

// kintone REST API リクエスト ~ レコードの登録(POST)
kintone.api(
kintone.api.url('/k/v1/record', true), // - pathOrUrl
'POST', // - method
params, // - params
function(resp) { // - callback
// (特に何もしない)
},
function(resp) { // - errback
// (特に何もしない)
}
);
});
})();

こんにちは。

日付が入っていない場合、パラメーター(params)を作らずに、APIの実行が行われているようです。

(パラメーター(params)を作る処理はif文の中にありますが、REST APIの実行がif文の外側にあるようです)

 

開発者ツールのコンソールを確認頂くと、エラーが出ている事が分かるかと思います。

https://developer.cybozu.io/hc/ja/articles/207613916

あさが様

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

開発者ツールのコンソールを確認頂くと、エラーが出ている事が分かるかと思います。

https://developer.cybozu.io/hc/ja/articles/207613916

>>>こちら調べて確認していたのですが、下記の表示の部分でしょうか?

Uncaught Error: USAGE: kintone.api(pathOrUrl, method, params, opt_callback, opt_errback)

 

日付が入っていない場合、パラメーター(params)を作らずに、APIの実行が行われているようです。

(パラメーター(params)を作る処理はif文の中にありますが、REST APIの実行がif文の外側にあるようです)

>>>こちらの件調べてみます。ありがとうございます。

> Uncaught Error: USAGE: kintone.api(pathOrUrl, method, params, opt_callback, opt_errback)

はい、こちらの部分です。

 

調べてみて分からなかったら、またご質問ください!

ありがとうございます。

日時を入力しなくても保存出来るようになりました。

日時を入力して保存するとアプリBに新規登録されますが、アプリIDとレコード番号のデータは反映されません。

日時などのデータも反映させたいのですが原因が分かりません。

ご教示いただけますでしょうか?

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

 

KKKさん

> 日時を入力して保存するとアプリBに新規登録されますが、アプリIDとレコード番号のデータは反映されません。

kintone.events.on(ev, function(e) {

↑ こちらの引数では e となっているのですが、

var appId = **event**.appId;

↑ 値を取得するところが、event になっている事が原因かと思います。

どちらかに統一頂ければと思います。

 

私が最初に書いたコードで e としてたのが、マズかったですね^^;

あさが様

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

ありがとうございます。

 

私が最初に書いたコードで e としてたのが、マズかったですね^^;

>>>とんでもございません、私の勉強不足で申し訳ございません。

 

それからなぜかまた新規登録が出来なくなってしまったので原因を探しています。

解決次第またご連絡いたします。

 

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

あさが様

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

なんとか思っていた動きになってきました。

あさが様のおかげで大変助かりました、ありがとうございました。

また別件で試行錯誤しているのですが、まだ誰からもご助言が頂けていませんので

何とか解決できるように頑張って学習していきます。

本当にありがとうございました。