他のアプリのデータ取得と表示について その2

アプリA、アプリB、アプリCが有り、

アプリBのcreate.showイベントで、アプリAのデータは取得できるのですが、

アプリCからは、同じようにしているのに取得できません。

(アプリCの項目に表示されません。取得できていないのか表示されないだけなのかの判別も

出来ていないのですが・・・)

下記が実際のコードです。

  var appId = 31;
    var recordId= record[‘利用者レコード番号’][‘value’]
  kintone.api(‘/k/v1/records’, ‘GET’, {
   app: appId,
   query: ‘$id = "’ + recordId + ‘"’,
              fields: [‘氏名漢字’,‘利用者区分’]
  },
  function(resp){
   var T01 = resp[‘records’][0][‘氏名漢字’][‘value’];
   var R01 = resp[‘records’][0][‘利用者区分’][‘value’];
   var record = kintone.app.record.get();
   record[‘record’]['項目A][‘value’] = T01;
   record[‘record’][‘項目B’][‘value’] = R01;
   kintone.app.record.set(record);
  });

アプリBとアプリCでは、「項目A」「項目B」のところの名前が違うのみです。

何か原因として考えられることがあればご教授頂けないでしょうか?

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

 

mitaniさん

 

kintone.api()単体の記述は良さそうですので、2つのアプリからレコード取得しようとしているのであれば、アプリAとCから取得しているところからBにセットしている部分まで全体を貼ってもらえると、わかるかもしれません。現状ですと、アプリID31がAなのかCなのかもわかりませんのし。

 

また、こちらにあるようなリクエスト状況の確認やこちらのように開発ツールで状況は追えてますか?もしくは、アプリAの手順とCの手順を入れ替える等試されたことがあれば一緒に記載いただければ。

説明不足で申し訳ありません。

アプリID:31は、アプリAです。

アプリBでアプリAのデータは取得できるのですが、アプリCでアプリAのデータが取得できません。

(アプリBとアプリCに同じようにアプリAのデータを取得するための記述をしています。)

 

アプリBのcreate.showイベントでアプリAのデータは取得でき、アプリB内に表示されるのですが、

アプリCのcreate.showイベントで、項目A・Bのところ以外は全く同じ記述をしているはずなのに、

アプリCに表示されない、という状態です。

 

 

開発ツールは使ったことが無いので、一度試してみます。

(IEのインターネットオプションの詳細設定で、デバック表示しないのチェックは外していましたが

Chrome等は今まで使用していませんでした)

 

> 全体を貼ってもらえると

これをお願いしたのは、A、Cそれぞれの取得リクエストが並行(非同期)になっているか、コールバックのネスト(もしくはPromise)で順次になっているかを確認させてもらいたかったからです。恐らく非同期になっているのではないかと予想していました。そうであれば、kintone.app.record.set() を並行処理で同時に使うと上手くいきにくいため、その辺が原因ではないかと思いますが、最初の記載だと切り分けづらかったため、お聞きしました。

 

開発ツールは(最近のバージョンであれば)どのブラウザでもついてますので、慣れておかれると良いと思います。

最初に記載させて頂いたのがデータ取得部分の全てです。

アプリBのcreate.showイベントにも、アプリCのcreate.showイベントにも記述してあります。

1つのアプリの中で、2種類のデータを取りに行っているわけではなく、全く別のBとC2つの

単独のアプリの中で、BのアプリでAのデータを、CアプリでもAのデータを取りにいっている

だけなですが、Bは正常に動作し、Cはうまくいきません。

 

ちなみに、アプリAのアプリアクションでアプリBやアプリCを開くような動きになっいます。

この時に、アプリアクションではコピーできないドロップダウン等をコピーしたいのです。

 

特に複雑なことは無いはずなのですが、何かチェックしないといけない点等あれば

ご教授頂けると幸いです。

 

宜しくお願いします。

 

> アプリBのcreate.showイベントで、アプリAのデータは取得できるのですが、

> アプリCからは、同じようにしているのに取得できません。

 

これを読み違えていたようで、失礼しました。

 

Aに対する同じ処理をBとCからそれぞれ行っているということですね。

となると、respが正常に取得できているかと、kintone.app.record.set(record)におけるセット値であるrecordが意図したものになっているかをやはり開発ツールでブレイクポイントを張ってそれぞれの中身を確認してみるのが良さそうですね。片方が意図通り動いているということであれば、上手くいっていない方は何かが意図通りではないか記述ミスのはずですので。

kintone.app.record.set(record);

の後ろに、わざと record[‘record’][‘アプリに無い項目’][‘value’] = R01; を入れ、

エラーにさせ、デバッグツールのウォッチ式を見ると、「項目A」や「項目B」に

データがセットされているのですが、エラーになる行を取るとセットされません。

 

初心者でよくわかっていないのですが、非同期処理とか同期処理問題でしょうか?

 

同期処理で動作させるようにすることは可能でしょうか?

 

 

> 初心者でよくわかっていないのですが、非同期処理とか同期処理問題でしょうか?

 

その辺が原因の可能性はありますが、何ともいえないところです。

 

> 同期処理で動作させるようにすることは可能でしょうか?

 

過去の投稿等見て頂くとわかりますが、方法はありますが、XMLHttpRequestによる非推奨な方法になります。

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

 

試しに、

 kintone.api(
 kintone.api.url(‘/k/v1/records’,true) ,‘GET’, {
  app: appId,
  query: ‘利用者レコード番号 = "’ + recordId + ‘"’,
             fields: [‘氏名漢字’,‘利用者区分’]
 },
 function(resp){
  var R01 = resp[‘records’][0][‘氏名漢字’][‘value’];
  var R02 = resp[‘records’][0][‘利用者区分号’][‘value’];
  var record = kintone.app.record.get();
  record[‘record’][‘項目A’][‘value’] = R01;
  record[‘record’][‘項目B’][‘value’] = R02;
  kintone.app.record.set(record);
 });

と記述したところ、正常に動作し、その後、改めて

  kintone.api(‘/k/v1/records’, ‘GET’, {
   app: appId,
   query: ‘$id = "’ + recordId + ‘"’,
              fields: [‘氏名漢字’,‘利用者区分’]
  }, ・・・・・・・・

 

に戻しても正常に動作しています。

ちなみに

 kintone.api(
 kintone.api.url(‘/k/v1/records’,true) ,‘GET’, {

kintone.api(‘/k/v1/records’, ‘GET’, {

は、どういう違いがあるのでしょうか?

 

よろしければ参考までに教えていただけると幸いです。

よろしくお願いします。

 

 

> どういう違いがあるのでしょうか?

 

まずドキュメントをご確認ください。

遅くなりましたが、回答ございます。

コミュニティに頼らず、もう少しREST APIについて、基本から勉強してみます。

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