ハイパーリンクの自動生成について

図のイメージのとおり、レコードの複数フィールドの値から生成されるハイパーリンク(WEBアドレス)を、各レコードの「報告書」のフィールドに自動で設定しようとしています。

生成したWEBアドレスを、各レコードの「報告書」のフィールドにどう入力するかが分からず、困っています。

アドバイスをいただけないでしょうか。

nagayama さん

報告書の項目を「リッチエディター」にして、リンクを設定すると、一覧表示でリンク表示されます。

record['リッチエディター']['value'] = '<div><a href="http:\/\/abc.com\/test">報告書</a></div>';

rex0220さん

ありがとうございます、助かります。試してみます。

rex0220さん

 

報告書の項目、フィールドコードを「リッチエディター」にして、下記のように書いたのですが、報告書のフィールドに何も入りません。

初歩的なことだと思いますが、どこをどう修正すればよいか、アドバイスをいただけないでしょうか。

 

(function () {
    “use strict”;
   
    kintone.events.on(‘app.record.index.show’, function (event) {
       
        for (var i = 0; i < event.records.length; i++) {
            var record = event.records[i];
            record[‘リッチエディター’][‘value’] = ‘<div><a href=“http://abc.com/test”>報告書</a></div>’;
            }
    });
})();

 

app.record.index.show イベント処理で、record を変更しても、画面には反映されません。

例のコードは、追加・編集イベント処理を前提にしたものです。

1.フィールドコードを「リッチエディター」にするのではなく、項目の形式を「リッチエディター」に変更します。

2.フィールドコードは、「報告書」でもOKです。

3.フィールドコード「報告書」の設定は、追加・編集画面のイベント処理で行います。

4.moment.js ライブラリを使用していますので、追加してください。

参考コードです。切り貼りしただけですので、検証してください。

 

(function() {
"use strict";

var fcodes = ['地域', '店舗名', '日付'];
var events = ['app.record.edit.show', 'app.record.create.show', 'app.record.index.edit.show'];
fcodes.forEach(function(code) {
events.push('app.record.edit.change.' + code);
events.push('app.record.create.change.' + code);
events.push('app.record.index.edit.change.' + code);
});
kintone.events.on(events, function(event) {
var record = event.record;
record['報告書']['disabled'] = true;
if (record['地域']['value'] && record['店舗名']['value'] && record['日付']['value']) {
var link = 'http://abc.com/' + record['地域']['value'] + '/' + record['店舗名']['value'] + '/' + moment(record['日付']['value']).format('M月') + '/';
record['報告書']['value'] = '<div><a href="' + link + '">報告書</a></div>';
}
else {
record['報告書']['value'] = '';
}
return event;
});
})();

rex0220さん

 

ありがとうございます!

希望の機能が実装できました。とても助かりました!

 

追加で恐縮ですが、生成されたハイパーリンクをブラウザの別タブで開けるとなお嬉しいのですが、下記のとおりaタグの箇所に

target="_blank"をつけても、別タブで開きません。(同タブで開きます)

‘<div><a href="’ + link + ‘" target=“_blank”>報告書</a></div>’

たびたびの質問で恐縮ですが、別タブで開く方法がありましたら、アドバイスいただけないでしょうか。

 

リッチエディターで対応している形式しか設定できないのだと思われます。

対応としては、こんな感じで、リンククリック時に別タブで開くようにします。

 

(function() {
"use strict";

kintone.events.on('app.record.index.show', function(event) {
var links = document.querySelectorAll('.recordlist-cell-gaia.recordlist-editor-gaia a');
for (var i = 0; i < links.length; i++) {
links[i].onclick = function() {
window.open(this.href);
return false;
};
}
return event;
});
})();

rex0220さん

ありがとうございます。確認しました。非常に助かりました!

rex0220さん

お世話になります。

以前に本スレッドでご教示いただいた件で、最後に教えていただいたリンク先を別タブで開く件ですが、

レコード詳細画面からも別タブで開きたく、

kintone.events.on(‘app.record.index.show’, function(event) {

の箇所を、

kintone.events.on([‘app.record.index.show’, ‘app.record.detail.show’], function(event) {

このように ‘app.record.detail.show’ を追加したのですが、レコード詳細画面からは別タブで開きません。(同タブで開きます)

度々の質問で恐縮ですが、解決方法をアドバイスいただけると助かります。

詳細画面の場合は、DOMが異なりますので処理を分けて、下記で対象リンクを取得してみてください。

var links2 = document.querySelectorAll(‘span.control-value-richtext-gaia div a’);

rex0220さん

ありがとうございます。

下記でやってみましたが、別タブで開きませんでした。(同タブになります)

申し訳ありませんが、解決策をご教示いただけると幸いです。

 

(function () {
    “use strict”;

    kintone.events.on(‘app.record.detail.show’, function(event) {
        var links2 = document.querySelectorAll(‘span.control-value-richtext-gaia div a’);
            links2.onclick = function() {
                window.open(this.href);
                return false;
                };
        return event;
     });
})();

nagayama さんのコードで試したところ、問題なく別タブで開きました。

もしかするとリッチエディター項目以外の項目ですか?

 

rex0220さん

ご対応ありがとうございます。

リッチエディターの項目です。

以下試してみましたが、やはりだめでした。

・先ほどの記述のJSのみにする。(他に適用していたJSを全て外す)

・新たに別のリッチエディター項目を作成する。

・他のアプリに適用してみる。

・Chorome、Edge両方ダメでした。

不思議ですね?

デベロッパーツールで、エラーを確認およびステップ実行で動作を確認してみてください。

 

rex0220さん

ありがとうございます。デベロッパーツールで確認してみます。