Hello Chris,
I don’t know my code didn’t work yesterday. Today, it run correct.
This is my code:
(function (){
'use strict';
let deploy_button = create_element('button', {
class: 'css-button detail'
}, 'デプロイ')
let leave_page = true
kintone.events.on('app.record.detail.show', function (event) {
var record_id = event.record.$id.value
let header_menu = kintone.app.record.getHeaderMenuSpaceElement();
let product_app_id = ''
let print = ''
let revision = 0
let record = {}
header_menu.appendChild(deploy_button)
window.onbeforeunload = function() {if (leave_page) return; else return 'app is deploying'}
deploy_button.onclick = async function(e) {
leave_page = false
page_wait.hidden = false
try {
record = await kintone.api(kintone.api.url('/k/v1/record', true) + `?app=${event.appId}&id=${record_id}`, 'GET', {})
product_app_id = record.record['product_app_id'].value
revision = record.record['revision'].value
let info = new information(record.record)
let create_info = await info.dev_app
if (!product_app_id) {
// use kintone.proxy to add header to api
let sub_headers = Object.assign({}, header_pro)
sub_headers['Accept-Language'] = !create_info[0].properties['Status']? 'ja':'en'
sub_headers['Content-Type'] = 'application/json'
await kintone.proxy(kintone.api.url(`/${add_preview_app}`, true), 'POST', sub_headers, {name:record.record['app_name'].value})
.then(resp => {
if (resp[1] === 200) {
product_app_id = JSON.parse(resp[0])['app']
let record_data = {
app: event.appId,
id: record.record.$id.value,
record: {
product_app_id: {
value: product_app_id
},
}
}
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', record_data)
}
else throw new Error('0, Product environment can\'t create app')
}).then (resp => console.log('update product_app_id success'))
.catch(error => {
throw new Error('0, Can\'t update product_app_id for record')
})
}
let product_info = await info.pro_app
// set appid for field lookup
let table_lookup = record.record['field_lookup'].value
if (!!table_lookup[0].value['field_code'].value) {
for (let row of table_lookup) {
create_info[0].properties[row.value['field_code'].value].lookup.relatedApp.app = row.value['lookup_app_id'].value
}
}
// check built-in icon
if (create_info[4].icon.type === 'FILE') {
delete create_info[4].icon
delete product_info[4].icon
}
remove_properties(create_info[3], 'assignee')
let put_form = {}
let add_form = {}
let delete_form = []
if (revision === '0') {
// check change built-in field
for (let e of Object.keys(create_info[0].properties)) {
if (built_in_type.includes(create_info[0].properties[e].type)) {
put_form[e] = create_info[0].properties[e]
delete create_info[0].properties[e]
}
}
add_form = create_info[0].properties
}
else {
remove_properties(product_info[3], 'assignee')
remove_properties(product_info[2], 'id')
remove_properties(create_info[2], 'id')
let diff_obj = diff(product_info[0].properties, create_info[0].properties)
let diff_app = diff(product_info.slice(0,5), create_info.slice(0,5))
remove_properties(diff_app, '(Assigned to me)')
print = Object.keys(diff_app).map(e => obj_to_textarea(diff_app[e])).join('')
if (Object.keys(diff_obj).length !== 0) {
let gen_add_del = add_delete(diff_obj)
for (let e of gen_add_del) {
if (!e['add']) {
delete_form.push(e['delete'])
}
else {
add_form[e['add']] = create_info[0].properties[e['add']]
delete create_info[0].properties[e['add']]
}
}
put_form = Object.assign({}, put_form, create_info[0].properties)
}
if(print === '') {
alert('app updated newest')
page_wait.hidden = true
return;
}
print = print.slice(1,)
}
let deploy_body = {apps:[{ app: product_app_id,}],}
let create_data = {
create_form : {
app: product_app_id,
properties: add_form
},
put_form: {
app: product_app_id,
properties: put_form
},
delete_form: {
app: product_app_id,
fields: delete_form
},
create_layout : {
app: product_app_id,
layout: create_info[1].layout
},
create_views : {
app: product_app_id,
views: create_info[2].views
},
create_process : {
app: product_app_id,
states: create_info[3].states,
actions: create_info[3].actions,
enable: create_info[3].enable
},
create_general: {
app: product_app_id,
name: create_info[4].name,
description: create_info[4].description,
icon: create_info[4].icon,
theme: create_info[4].theme
},
create_customization: {
app: product_app_id,
scope: create_info[5].scope,
desktop: create_info[5].desktop,
mobile: create_info[5].mobile
}
}
await set_key(create_info[5], info)
if (Object.keys(add_form).length !== 0) {
await info.change_setting(preview_form_field, create_data.create_form, 'POST')
}
if (Object.keys(delete_form).length !== 0) {
await info.change_setting(preview_form_field, create_data.delete_form, 'DELETE')
}
if (Object.keys(put_form).length !== 0) {
await info.change_setting(preview_form_field, create_data.put_form, 'PUT')
}
await info.change_setting(preview_form_layout, create_data.create_layout, 'PUT')
await info.change_setting(preview_process_management, create_data.create_process, 'PUT')
await info.change_setting(preview_views, create_data.create_views, 'PUT')
await info.change_setting(preview_general_setting, create_data.create_general, 'PUT')
await info.change_setting(preview_customization, create_data.create_customization, 'PUT')
await kintone.api(kintone.api.url('/k/v1/preview/app/deploy.json', true), 'POST', deploy_body).then(resp => revision = Number(revision) + 1,
error => {throw new Error(error.message)})
alert('App deployed success')
}
catch (error) {
if (error.message.slice(0,1) === '0') {
alert(error.message.slice(3,))
}
else {
let deploy_body = {apps:[{ app: product_app_id,}], revert: true}
kintone.api(kintone.api.url('/k/v1/preview/app/deploy.json', true), 'POST', deploy_body)
alert(error.message.slice(3,) + 'app deployed failplease try again')
}
page_wait.hidden = true
return;
}
record.record['revision'].value = revision
let new_row = {
value: {
deploy_number: {
value: revision
},
sub_content_deploy: {
value: record.record['content_deploy'].value
},
change_setting: {
value: print || 'first deploy'
},
deploy_user: {
value: kintone.getLoginUser().code
},
sub_backlog_url: {
value: record.record['backlog_url'].value || ''
},
deploy_date: {
value: date_to_string(new Date())
}
}
}
if (revision===1) record.record['history_deploy'].value = [new_row]
else record.record['history_deploy'].value.push(new_row)
let record_data = {
app: event.appId,
id: record.record.$id.value,
record: {
revision: {
value: revision
},
history_deploy: {
value: record.record['history_deploy'].value
}
}
}
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', record_data).then(resp => console.log('update product id success'),
error => console.log('update product id fail'))
page_wait.hidden = true
leave_page = true
}
})
})();
Thank you for your support.