create.submit時に他のアプリへのレコード追加について

アプリAのcreate.submit時に、アプリBに1レコード追加したいため、

https://cybozudev.zendesk.com/hc/ja/community/posts/204347666-%E6%96%B0%E8%A6%8F%E4%BF%9D%E5%AD%98%E6%99%82%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%80%A4 

などを参考に記述してみましたが、登録されません。

記述したコードは下記のとおりです。

 

 kintone.events.on(‘app.record.create.submit’, function (event) {
         var record = event.record;

  moment.locale(‘ja’); // ロケールを設定
  var r_datetime = moment(new Date()).format(‘YYYY-MM-DD HH:mm’);

  var recordId = 55555;

  var parm = { ‘app’:15, ‘record’:{
                     ‘利用者レコードNo’:{‘value’:recordId },
                     ‘利用日時’:{ ‘value’:r_datetime }
                 } } ;

  return new kintone.Promise(function(resolve,reject){
   kintone.api(‘/k/v1/record’,‘POST’, parm,function(resp) {
    resolve(event);
   }, function() {
    resolve(event);
   });
  });

 });

実際、”55555”と記述してある部分は、アプリAのレコード番号をアプリBに書き込みたいと

思っていますが、その記述方法もサイト内いろいろ探しましたが理解できませんでした。

 

1.レコードが登録出来ない件

2.アプリAのレコード番号のアプリBへの渡し方

についご教授頂けませんか?

 

お手数をお掛けしますが、よろしくお願い致します。

 

mitaniさん

おそらく、日時フィールドの値がフィールド形式に沿っていないことが原因かと思います。
こちらのページにあるように日時のフィールドの値を設定する必要があります。
format(“TTTT-MM-DD\THH:MM:SS\Z”) の様にformat関数の引数を変更すればフィールド形式に一致するかと思います。

また、レコード番号の取得に関しても、event.record.$id.valueを参照することによって取得できます。それをrecordId変数に代入すればよいかと。

他のスレッドでも言われていますが、開発者ツールのネットワークタブなどを見ると、REST APIのエラーなどが返却されていたりするのでそちらを追うことでスムーズに解決したり、またエラーの内容を伝えることでこちらでもより正確な回答ができると思いますので、一度利用してみることをお勧めします。

参考になりますでしょうか

遅くなりましたが、回答ありがとうございました。

 

レコードの登録はうまくいくようになりました。

 

ただ、”55555”の部分に レコード番号(record.$id.value)を指定すると、「保存」ボタンを押しても

レコードが保存されません。

保存されないので、「キャンセル」ボタンを押すと、デバッガーには

https://サブドメイン.cybozu.com/k/31/ を開けませんでした ”

というメッセージが一瞬表示されます。 ("31"はアプリAのIDです)

 

登録できない原因として何か考えられることはあるでしょうか?

 

mitani さん

おそらくcreate.submitの段階ではレコード番号が存在していない(その時点ではレコード登録は確定していない)為だと思われます。

そのため、現状では登録前のレコードのIDは取得できないのでアプリBに登録したレコードのIDをレコードに保持しておき(REST APIのレスポンスに入っています)、app.record.detail.showイベントの時に、そのIDを参照しこちらのレコードIDが当該フィールドに存在しない場合、アプリBのレコードをREST APIで更新する。というような対応が必要かと思います。edit.submitの場合は問題ないかと思います。

返信遅くなり申し訳ありません。

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

やはり、create.submitイベントでは無理なのですね。

 

ちなみに、detail.showイベントは、

1.一覧画面から詳細を表示したとき

2.追加画面でレコード登録後

3.編集画面でレコード登録後

のどの時も、発生するのではないかと思いますが、

2.の時のみ処理する、という事は可能でしょうか?

 

度々の質問で申し訳ありませんが、回答宜しくお願い致します。

 

 

mitaniさん

今回の場合は既にあるレコードを表示する場合はアプリBにそのレコードのレコード番号をもったレコードが存在しているはずなので、詳細画面表示時にレコード番号でアプリBのレコードをREST APIで検索し、レコードが存在しない場合にREST APIでレコードを登録すればよいかと思います。