背景・実現したいこと
・ 一括発注ボタンを作成。
・処理内容は、queryに’orderAgree in (“未発注”)’を指定後、APIにてrecords取得
発注No、仕入先コードに合わせて発注内容をまとめた後、
メール送信プログラム(弊社サーバー内にあるリンク)に
データをPOST送信、受け取ったデータでメール文面作成後、仕入先に送信する。
その後、「未発注」を「発注済」に変更する。
・上記カスタマイズを作成したアプリをお客様に提供した後、
お問い合わせが入る。
・お問い合わせ内容「
現状、発注時に数十社の発注確定した際に8社分しかメール送信されていません
件数や会社を変えて試したのですが、どの場合も上記状況となっています
何か考えられることはありますでしょうか」
・テスト環境にてテストを行ったが上記現象が確認できず
アプリ内のレコード状態を本番環境に近いものに変更しても
再現がとれず、こちらにお問い合わせする形になりました。
発注メール送信部分 ソースコード
var DataArr = []; //送りつけるデータ用
var DataCnt = 0; //データ用
var BlackList = []; //送信しないデータ
var HaccyuArr = []; //発注をかけるデータ
//var HaccyuArr = [];
for(var i=0; i<sendArr.length; i++){
if(BlackList.indexOf(sendArr[i]['レコード番号']['value'])<0){
//////////////////////////////////////////////////////////////
// / / / / / / 発注するデータをメールで送信 / / / / / / / //
//////////////////////////////////////////////////////////////
//仕入れ先マスターからレコードとメールアドレスをとってくる
var query = 'companyCode = "' + sendArr[i]['companyCode']['value'] + '"';
var appUrl2 = kintone.api.url('/k/v1/records')+'?app='+SIIRE_APP_ID+'&id=companyCode&query='+encodeURIComponent(query);
var xmlHttp2;
xmlHttp2 = new XMLHttpRequest();
xmlHttp2.open("GET",appUrl2,false);
xmlHttp2.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlHttp2.send(null);
var obj2 = JSON.parse(xmlHttp2.responseText);
var getRec = obj2['records'];
if(getRec.length == 0){
window.alert("仕入先マスタに"+sendArr[i]['partner']['value']+"がありません");
for(var j=i; j<sendArr.length; j++){
if(HaccyuNum == sendArr[j]['発注No']['value']){
BlackList.push(sendArr[j]['レコード番号']['value']);
}
}
}else{
var siireCode = getRec['0']['companyCode']['value'];
var siireName = getRec['0']['partner']['value'];
var HaccyuNum = sendArr[i]['発注No']['value'];
//var mailRadioButton = getRec['0']['mailRadioButton']['value'];
var mail = getRec['0']['メールアドレス']['value'];
if(mail == ""){
window.alert("仕入先マスタの"+sendArr[i]['partner']['value']+"にメールアドレスがありません");
for(var j=i; j<sendArr.length; j++){
if(HaccyuNum == sendArr[j]['発注No']['value']){
BlackList.push(sendArr[j]['レコード番号']['value']);
}
}
}else{
if(getRec['0']['mailRadioButton']['value'] === '送信する'){
DataArr[DataCnt] = [];
DataArr[DataCnt]['value'] = DataCnt;
DataArr[DataCnt][HaccyuNum] = [];
DataArr[DataCnt][HaccyuNum]['value'] = HaccyuNum;
DataArr[DataCnt][HaccyuNum]['仕入先名'] = siireName;
DataArr[DataCnt][HaccyuNum]['Mail'] = mail;
//DataArr[DataCnt][HaccyuNum]['発注内容'] = [];
var cnt = 0;
var s_arr = [];
var width = 7;
for(var j=i; j<sendArr.length; j++){
if(HaccyuNum == sendArr[j]['発注No']['value']){
s_arr[cnt*width] = sendArr[j]['JANコード']['value'];
s_arr[cnt*width+1] = sendArr[j]['商品名']['value'];
s_arr[cnt*width+2] = sendArr[j]['商品名2']['value'];
s_arr[cnt*width+3] = sendArr[j]['発注数']['value'];
s_arr[cnt*width+4] = sendArr[j]['単価']['value'];
s_arr[cnt*width+5] = sendArr[j]['発注金額']['value'];
s_arr[cnt*width+6] = sendArr[j]['納入希望日']['value'];
BlackList.push(sendArr[j]['レコード番号']['value']);
HaccyuArr.push(sendArr[j]['レコード番号']['value']);
cnt++;
}
}
var va = "";
va = s_arr.join();
console.log(va);
setData(mail,siireCode,HaccyuNum,va);
DataCnt++;
}else{
for(var j=i; j<sendArr.length; j++){
if(HaccyuNum == sendArr[j]['発注No']['value']){
BlackList.push(sendArr[j]['レコード番号']['value']);
}
}
}
}
}
}
}
//////////////////////////////////////////////////////
// / / / / / / 未発注を発注済に変換 / / / / / / / //
//////////////////////////////////////////////////////
var error_flg = false;
for(var i=0; i<HaccyuArr.length; i++){
var objParam = {
"app": kintone.app.getId(),
"records": [
{
"id": HaccyuArr[i],
"record": {
"orderAgree": {
"value" : '発注済'
}
}
}
]
};
var appUrl = kintone.api.url('/k/v1/records');
var token = kintone.getRequestToken(); //CSRFトークンを取得
objParam[" __REQUEST_TOKEN__"]=token;
var xmlHttp = new XMLHttpRequest(); //同期リクエストを行う
xmlHttp.open("PUT",appUrl,false); //アクセスURLの指定(HTTPメソッド,URL,非同期かどうか)
//PUT:リソースを作成、置換する
xmlHttp.setRequestHeader('Content-Type','application/json');
xmlHttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlHttp.send(JSON.stringify(objParam));
if(xmlHttp.status != 200){
alert('status:'+xmlHttp.status+'登録エラー');
error_flg = true;
}
}
if(!error_flg){
window.alert('全ての処理が完了しました');
}
レコード取得部分 ソースコード
//全レコード取得
var KintoneRecordManager = (function()
{
//変数宣言&初期化
KintoneRecordManager.prototype.records = []; //取得したレコード
KintoneRecordManager.prototype.appId = null; //アプリID
KintoneRecordManager.prototype.query = ''; //検索クエリ
KintoneRecordManager.prototype.limit = 500; //一回あたりの最大取得件数
KintoneRecordManager.prototype.offset = 0; //オフセット
KintoneRecordManager.prototype.currentQuery = kintone.app.getQueryCondition();
function KintoneRecordManager(){
this.appId = kintone.app.getId();
}
//すべてのレコードを取得する
KintoneRecordManager.prototype.getRecords = function(callback)
{
var current_query = this.currentQuery;
if(current_query != ''){
current_query += ' and ';
}
current_query += 'orderAgree in ("未発注") limit ' + this.limit + ' offset ' + this.offset;
kintone.api
(
kintone.api.url('/k/v1/records',true),
'GET',
{
app: this.appId,
query: current_query,
},
(function(_this)
{
return function(res)
{
var len;
Array.prototype.push.apply(_this.records, res.records);
len = res.records.length;
_this.offset += len;
if(len < _this.limit)//まだレコードがあるか?
{
_this.ready = true;
if(callback !== null)
{
callback(_this.records);//レコード取得後のcallback
}
}else{
_this.getRecords(callback);//自分自身をコール
}
}
})(this)
);
};
return KintoneRecordManager;
})();
以上が使用しているソースコードになります。
8件しかメール送信できない原因について
なにかヒントになるものがございましたら
ご教示いただければ幸いです
以上、よろしくお願いいたします