を自社向けに編集して利用させていただこうとしています。恐縮ですが初心者です。
現状、打刻のボタンが押せる状態で表示されません。
89行目、90行目の this に対して「Possible strict violation」のアラートが出ていることが要因と思いまして、質問させてください。
アラートを解消する方法をご教示お願いいたしたく、宜しくお願い申し上げます。
▼利用したソースコード
/*
* 勤怠管理 タイムカード
* Copyright (c) 2014 Cybozu
*
* Licensed under the MIT License
*/
(function() {
// 定数、変数定義、関数定義
‘use strict’;
// サーバーの時間を取得する
function getUTCDateByServer() {
var r;
return (r = new XMLHttpRequest())
? (r.open(‘HEAD’, ‘#’, false), r.send(null), new Date(r.getResponseHeader(‘Date’))) : null;
}
// 指定された文字の指定された長さのゼロサプレスを取得する
function zero_suppress(s, len) {
var str = ‘’;
for (var i = 0; i < len; i += 1) {
str += ‘0’;
}
str += s;
return str.substr(str.length - len, len);
}
// 時計に表示する関数
function set_digitTime() {
var dt = new Date(getUTCDateByServer());
var yyyy, MM, dd, hh, mm, ss;
var DAY = [‘SUN’, ‘MON’, ‘TUE’, ‘WED’, ‘THU’, ‘FRI’, ‘SAT’];
yyyy = dt.getFullYear();
MM = zero_suppress(dt.getMonth() + 1, 2);
dd = zero_suppress(dt.getDate(), 2);
hh = zero_suppress(dt.getHours(), 2);
mm = zero_suppress(dt.getMinutes(), 2);
ss = zero_suppress(dt.getSeconds(), 2);
$(‘#year’)[0].innerHTML = yyyy;
$(‘#date’)[0].innerHTML = MM + ‘/’ + dd + ’ ’ + DAY[dt.getDay()];
$(‘#time’)[0].innerHTML = hh + ‘:’ + mm + ‘:’ + ss;
}
// イベントハンドラ実行
var events = [‘app.record.index.show’];
kintone.events.on(events, function(event) {
if (event.viewId !== 6425114) {
return;
}
// タイムカード
// アカウント=ログインユーザー、日付=今日 のレコードをすべて取得
var appId = kintone.app.getId();
var user = kintone.getLoginUser();
var qryInfo = ‘アカウント名 = "’ + user.code + ‘" and 日付 = TODAY() order by 出勤 desc limit 1’;
var params = {
app: appId,
query: qryInfo,
fields: [
‘社員番号’,
‘アカウント名’,
‘日付’,
‘始業時刻’,
‘終業時刻’,
]
};
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params, function(resp) {
// resp[‘records’] の長さが 0 or 1以上の場合で状態を変える
// 今日の レコード数 = 0
if (resp.records.length === 0) {
$(‘#syukkin’).replaceWith(“<input id=‘syukkin’ type=‘button’ value=‘出勤’>”);
$(‘#syukkin’).on(‘click’, clickFunction);
} else if (resp.records.length === 1) {
// 今日の レコード数 >= 1
if (resp.records[0][‘退勤’].value === null) {
$(‘#taikin’).replaceWith(“<input id=‘taikin’ type=‘button’ value=‘退勤’>”);
$(‘#taikin’).on(‘click’, clickFunction);
} else {
$(‘#syukkin’).replaceWith(“<input id=‘syukkin’ type=‘button’ value=‘出勤’>”);
$(‘#syukkin’).on(‘click’, clickFunction);
}
}
});
// クリック関数
function clickFunction() {
var status = $(this).val(); ←私が懸念点として挙げているthisです
var id = $(this).attr(‘id’); ←私が懸念点として挙げているthisです
switch (id) {
case ‘syukkin’: syukkin_func(); break;
case ‘taikin’: taikin_func(); break;
}
}
// 出勤関数
function syukkin_func() {
// ルックアップ先のID取得、従業員情報の取得
var applookId = kintone.app.getLookupTargetAppId(‘社員番号’);
var qryInfo = ‘アカウント名= "’ + user.code + ‘" order by レコード番号 desc limit 1’;
var params = {
app: applookId,
query: qryInfo,
fields: [
‘社員番号’,
‘氏名’,
‘アカウント名’
]
};
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params, function(resp) {
// 従業員情報の取得
var employeeNo = resp.records[0][‘社員番号’].value;
var employeeName = resp.records[0][‘氏名’].value;
var employeeAccount = resp.records[0][‘アカウント名’].value;
// 日時取得
var dt = new Date(getUTCDateByServer());
var yyyy = dt.getFullYear();
var MM = zero_suppress(dt.getMonth() + 1, 2);
var dd = zero_suppress(dt.getDate(), 2);
var hh = zero_suppress(dt.getHours(), 2);
var mm = zero_suppress(dt.getMinutes(), 2);
var syukkin_date = yyyy + ‘-’ + MM + ‘-’ + dd;
var syukkin_time = hh + ‘:’ + mm;
var body = {
app: appId,
record: {
‘社員番号’: {
value: employeeNo
},
‘氏名’: {
value: employeeName
},
‘アカウント名’: {
value: employeeAccount
},
‘日付’: {
value: syukkin_date
},
‘始業時刻’: {
value: syukkin_time
}
}
};
// 出退勤アプリに record 登録
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘POST’, body).then(location.reload());
});
}
// 退勤関数
function taikin_func() {
// レコード取得
var appId = kintone.app.getId();
var qryInfo = ‘アカウント名 = "’ + user.code + ‘" order by レコード番号 desc limit 1’;
var params = {
app: appId,
query: qryInfo,
fields: [
‘レコード番号’,
‘日付’,
‘始業時刻’,
]
};
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, params, function(resp) {
// 従業員情報の取得
var employeeRecId = resp.records[0][‘レコード番号’].value;
var syukkin_day = resp.records[0][‘日付’].value;
var syukkin_time = resp.records[0][‘始業時刻’].value;
// 日時取得
var dt = new Date(getUTCDateByServer());
var yyyy = dt.getFullYear();
var MM = zero_suppress(dt.getMonth() + 1, 2);
var dd = zero_suppress(dt.getDate(), 2);
var hh = zero_suppress(dt.getHours(), 2);
var mm = zero_suppress(dt.getMinutes(), 2);
var taikin_time = hh + ‘:’ + mm;
var syukkin_daytime = syukkin_day + ‘T’ + syukkin_time + ‘:00+09:00’;
var taikin_daytime = yyyy + ‘-’ + MM + ‘-’ + dd + ‘T’ + taikin_time + ‘:00+09:00’;
var ST = new Date(syukkin_daytime);
var TT = new Date(taikin_daytime);
var body = {
app: appId,
id: employeeRecId,
record: {
‘終業時刻’: {
value: taikin_time
}
}
};
// レコード更新へ
console.log(‘始業時刻’ + syukkin_time);
console.log(‘終業時刻’ + taikin_time);
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body).then(location.reload());
});
}
// 1000ミリ秒ごとにset_digitTime()を繰り返す
set_digitTime();
setInterval(set_digitTime, 1000);
});
})();