create.submitで他アプリから値を取得する

こんにちは!

背景:アプリAでのcreate.submitで、アプリBから値を取得したいです。
悩み:
非同期処理でgetでアプリBから値を取得し、putでアプリAに値を入れ更新したいのですが、なぜか404エラーがでてしまい、取得ができません。
同じアプリ内でdetail.showなどのイベントハンドラーで同じ処理を実行すると値の取得ができるのですが、create.submitの場合だけできないです。

コード:

var comp_no = rec['comp_no']['value'],
        app_num = 30,
        appUrl = kintone.api.url('/k/v1/records') + '?app='+ app_num + '&query=' + encodeURI('record_no=' + comp_no),
        order_format,
        params;

        //非同期通信
        $.ajax({
            url: appUrl,
            type:'GET',
            dataType: 'json',
            success: function(data) {

                order_memo = data.records[0].order.value;

                params = {
                    "app": kintone.app.getId(), //アプリ番号
                    "id": kintone.app.record.getId(), //レコード番号
                    "record": {
                        "order_format": {
                            "value": order_memo
                        }
                    }
                }


                kintone.api(kintone.api.url('/k/v1/record',true), 'PUT', params, function(resp) {
                    console.log(resp);
                }, function(error) {
                    // エラーの場合
                    var errmsg = '更新時にエラーが発生しました。';      
                    // レスポンスにエラーメッセージが含まれる場合はメッセージを表示する
                    if (error.message !== undefined){
                        errmsg += '' + error.message;
                    }
                    alert(errmsg);
                    console.log(error);
                });

            },
            error: function(data) {
                    console.log(data);
            }
        });

よろしくお願いします><

Marfaさん
cstapの瀧ヶ平です

kintone.apiの実行時にparams変数がundefinedであることが原因で404が出ているようです。
非同期通信は文字通り非同期で行い、通信が終了するまでの間他の処理を妨げないため、params変数の定義前にkintone.apiが実行されてしまいます。
そのため、非同期通信のコールバック内部にkintone.apiの一連の処理を記述すれば問題ないと思います。
またeventをreturnしない場合レコードが登録されないのでjQueryで書いている非同期通信をkintone.apiによって書き換え、kintone Promiseオブジェクトをreturnして非同期処理の実行を待ってレコードを更新する必要があります(こちら参照)
create/edit.submitなのでreturnするjQueryから書き換えたreturnするkintone.apiの.then()のコールバック内でevent.recordを変更し、そのeventオブジェクトをreturnすることで解決できるかと思います。

こんにちは、瀧ヶ平さん!ご回答ありがとうございます。
昨日1日やってみて、原因が判明したのですが、
create.submit時にレコード番号を取得できないことが原因でした。
create.submit時にレコード番号を取得するには、どうしたらよいかと色々考えましたが、kintoneのレコード番号の生成ロジックがわからなかったため、諦めました。
自動採番のように、アプリの最終レコード番号に+1をしようかなーとも思ったのですが、削除されてしまったレコードや同時に新規作成しようとしている人がいた場合などを考えると、困難かなーというふうに思い、諦めました ><
何かcreate.submit時にレコード番号を取得できるようなロジックがあればいいのですが ><

Marfa さん

繰り返しになりますが、前の回答にあるリンク先にあるように、create.submitイベントではkintone Promiseオブジェクトを返すことで非同期処理の実行を待ってレコードを登録することができるので、そもそもレコード番号を取得してREST API経由でレコードを更新する必要はありません。
したがって

var comp_no = rec['comp_no']['value'],
        app_num = 30,
        appUrl = kintone.api.url('/k/v1/records') + '?app='+ app_num + '&query=' + encodeURI('record_no=' + comp_no),
        order_format,
        params;

    return kintone.api(kintone.api.url('/k/v1/records'),
          {
            app: app_num,
            query: 'record_no=' + comp_no
          }
        ).then(function(data){
          order_memo = data.records[0].order.value;
          rec["order_format"].value = order_memo;
          return event
        }, function(error){
          console.log(error);
        });

とすれば解決できると思います。

瀧ヶ平さん
ありがとうございます!瀧ヶ平から先ほどいただいたコードをちょっと修正したらアプリBへの値の挿入に成功しました(^ ^)
コードは以下になります!

<アプリA内での処理 create.submit>
   var record_num = rec['record_no']['value’], //アプリBのレコード番号
        app_num = 100, //アプリBのアプリ番号
        query = encodeURI('record_no=' + record_num),
        params = {app: app_num, query: query},
    taeget_value;

    return kintone.api('/k/v1/records', 'GET', params).then(function(data){
        target_value = data.records[0][‘アプリBから取得する値']value; 
        rec[‘アプリAの対象の値'].value = taeget_value; //アプリBの値をアプリAに挿入
        return event
    },
    function(error){
        console.log(error);
    });

このpromiceという最近のアップデートの仕様が未だに「???」なところが多いので、どうして以下のコードでこの問題が解決したのかということは実はまだあいまいです(^^;)Promiceの参考URLも確認しましたが、いまいち「何をしている処理なんだろう・・」とちょっと混乱しています。

ともかく、問題が解決したのでよかったです!!
本当にありがとうございました!!