別アプリへのPOST

どなたかよろしければお知恵をお貸し頂ければと存じます。

■やりたいこと

アプリA(社員情報アプリ)にデータを登録した時に入る【更新者】情報を

アプリB(変更履歴アプリ)に登録したい

 

■作成したロジック

(function() {
  var events = [‘app.record.create.submit.success’, ‘app.record.index.edit.submit.success’, ‘app.record.edit.submit.success’];
  kintone.events.on(events, function(e) {
    
    let param = {
      app: 111,
      record:{
        “ユーザー選択”: {
            “value”: [{
               code:e.record[‘更新者’].value.code
            }]
        }
      }
    };

   kintone.api(kintone.api.url(‘/k/v1/record.json’,true),‘POST’,param);
   
  });
})();

■わからない事

・上記の値をアプリBで取得したいがその方法が分からない

・そもそも上記の書き方が合っているかも少し不安

 

説明が下手なので、分からない点などご質問頂ければと存じます。

suzuki 様

こんにちは。

普通に動きそうですけど、何かエラーは出ていますでしょうか?

 

>・上記の値をアプリBで取得したいがその方法が分からない

上記の値をアプリBで取得したいとは、やりたいことが解決しているならば特に問題はなさそうですけど別の内容でしょうか?

 

>・そもそも上記の書き方が合っているかも少し不安

やりたいことに対しては、問題はないと思います。

suzuki様

はじめまして。

kintoneの保存成功後イベントは上記のようなスクリプトは、
実行中に画面遷移をしてしまい、プログラムが動いていないように見えます。

対策として、こちらをご一読ください。
その画面で行いたい処理を行って(待機)面遷移を行なうことができるようになります。

新屋 育男様

はじめまして。

このプログラムにエラーは特に出ておりません。

記述したコードはアプリAに読み込ませているのですが、アプリB側でどう記述すれば確認出来るかが分からずご質問させて頂きました。

 

>岡崎 光輝

はじめまして。

対策に関するリンクありがとうございます。こちら一度確認してみます

>岡崎 光輝

度々失礼いたします。

頂いたリンク先を読んで下記の記述がありました。

return kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, {app: 1, id: 1}).then(function(resp) {

この記述の {app: 1, id: 1} の部分は何を入れたら良いか理解できていないのですが、ご教授頂けますでしょうか。

appはアプリIDかなと考えているのですが、idの方が分かりません。

suzuki様

そちらはレコード情報取得のAPIになりますので、必要なパラメーターが
本件と違うので、そのような記載になっております。idは取得したいレコードidです。
詳しくはこちらを。

結論を申し上げますと、
下記で動作するかと思います。

同期処理、非同期処理の理解が必要です。

(function() {
  var events = ['app.record.create.submit.success', 'app.record.index.edit.submit.success', 'app.record.edit.submit.success'];
  kintone.events.on(events, function(e) {
    
    let param = {
      app: 111,
      record:{
        "ユーザー選択": {
            "value": [{
               code:e.record['更新者'].value.code
            }]
        }
      }
    };

//ここが重要
 return kintone.api(kintone.api.url('/k/v1/record.json',true),'POST',param);
   
  });
})();

suzuki 様

こんにちは。

>記述したコードはアプリAに読み込ませているのですが、アプリB側でどう記述すれば確認出来るかが分からずご質問させて頂きました。

通常であれば、param に記述してある、app: 111 の 111 の部分がBアプリのアプリ番号であり、Bアプリに、ユーザー選択フィールドが設置しあり、フィールド名も『ユーザー選択』であれば、Bアプリにレコードが新規追加(POST)されています。

そうすると、アプリBを開けば新規に追加されたデータが確認できると思います。

 

もし、上記の内容で準備されて投稿が確認できないようであれば、console.log でもいいのですがひと手間必要なので、画面遷移を止めるために alert を使ってレスポンスを確認してみましょう。

 

岡崎様が仰られるように、kintone.api は非同期処理といわれる処理が走る API ですので submit や submit.success 時に結果を使って処理をしたいときに、APIを return してあげると処理を待ってから次の処理をすることができます。

ですので, alert でレスポンスの結果を確認するために以下のように変更をしてみてください。

return kintone.api(kintone.api.url("/k/v1/record.json", true), "POST", param)
  .then((res) => alert(JSON.stringify(res)));
 .catch((err) => alert(JSON.stringify(err)));

そこで、alert にどのように表示されたか教えて頂けますでしょうか?

この時に、{“id”:“11”,“revision”:“1”} のように id と revision が表示されているようでしたら POST の処理は成功をしております。

※ id の数値は 必ず11になるわけではございません。

 

岡崎 様へ投稿された内容で気になった部分がありますので、こちらの回答もさせて頂きます。

>この記述の {app: 1, id: 1} の部分は何を入れたら良いか理解できていないのですが、ご教授頂けますでしょうか。

>appはアプリIDかなと考えているのですが、idの方が分かりません。

アプリ管理画面でアプリの一覧を確認する (cybozu.help)

url を見て確認する方法もありますが、状況が変わると間違えることもあるりますので、

このヘルプを確認して頂いて、アプリ管理画面に ID が載っていますので、Bアプリの ID を app: 111 と違うようでしたら変更されると良いかと思います。

岡崎 光輝様

新屋 育男

ご教授頂きありがとうございます。

岡崎様と新屋様に頂いたソースを組み合わせて、無事に{“id”:“111111”,“revision”:“1”}の形でアラートが出ることろまで確認いたしました。

アプリBが通常のアプリであれば、POSTされた値をアプリ画面から確認出来るのですが、今回アプリBは変更履歴アプリとなっており、POSTされた値をjavascriptで確認したいと考えております。

その際にparams変数の展開方法が分からず、ご相談させていただければと存じます。

 

度々お手数をおかけしてしまい申し訳ございません。

suzuki 様

おめでとうございます。

BアプリへPOSTされていることが確認できました。

これで当初の問題は解決されましたね。

 

>アプリBが通常のアプリであれば、POSTされた値をアプリ画面から確認出来るのですが、今回アプリBは変更履歴アプリとなっており、POSTされた値をjavascriptで確認したいと考えております。

>その際にparams変数の展開方法が分からず、ご相談させていただければと存じます。

ご質問内容やおそらく仕様が変わってるかと思います。

どのようにJavaScriptで確認するのかなどの内容を一度まとめられて、新しいスレッドで質問されると良いかと思います。

レコードの取得(GET) – cybozu developer network

必要な知識はこの辺りでしょうか。

 

おまけ程度ですが、.then() の部分をこのように変更すると alert で投稿(POST)した内容を更に確認すことができます。

return kintone.api(kintone.api.url("/k/v1/record.json", true), "POST", param)
  .then(async (res) => {
  const getParam = { app: param.app, id: res.id };
  const record = await kintone.api(kintone.api.url("/k/v1/record.json", true), "GET", getParam);
    alert(JSON.stringify(record));
})
  .catch((err) => alert(JSON.stringify(err)));

あまり参考にはならないのですが、GET を使って POSTされた値を JavaScript で確認する一例ぐらいに認識して頂ければ幸いでございます。

それでは頑張ってみて下さい。

>新屋 育男様

色々とご教授頂きありがとうございました。

頂いたサイトを確認して、分からないようであれば新しいスレッドをたてて質問しようと思います。

お二人のおかげで作業を1歩前進させる事が出来ました。

ありがとうございます。