コードが機能しない原因となる問題がいくつかあるようです。まず、Quickbase の「計算フィールド」と「数式フィールド」を区別してみましょう。計算フィールドはレポート ビューで定義され (つまり、そのレポートでのみ表示され、他のレポートでは表示されません)、HTML は使用できません。一方、数式フィールドは従来のフィールドと同様に作成され、一部の HTML を許可するチェックボックスを選択できます。フォームまたはレポートで実行するコードを取得するには、数式フィールドを使用する必要があります。また、フィールドがレポートに表示されるようにする必要があります。そうしないと、コードが実行されません。
それが解決されると、Quickbase が許可される HTML タグを制限するため、おそらくスクリプトは実行されません。画像を変更する代わりに、スクリプトのテキストがフィールドに表示されるだけです。これは、スクリプトを要素のonload
タグに入れることで回避できます。これにより、適切に実行するIMG
必要がなくなるという追加の効果が得られます。document.ready(function(){});
最後に、最後の問題はセレクターです。特定のレコードに関連付けられた数式フィールドを使用している場合でも、スクリプト自体はページ全体に対して実行されます。タスク名が「休暇」であるレコードの要素のみを選択するにはimg
、行を区別する方法が必要です。幸いなことに、タイムライン レポートでは、各行div
が "rid" + レコード ID の ID でラップされます。
したがって、これらをすべてまとめると、「フィールドに一部の HTML タグを挿入できるようにする」がチェックされた数式テキスト フィールドが作成され、数式は次のようになります。
If([Task Name]="Vacation", "<img qbu=\"module\" src=\"/i/clear2x2.gif\" onload=\"javascript:$('#rid" & [Record ID#] & " > td:has(div.timeline) > div.timeline > img').attr('src',('https://images.quickbase.com/si/16/821-check_purple.png'));\">", "")
上記の式を自分のタイムライン レポートでテストしたところ、期待どおりに機能しました。
編集:
ソースを編集するときに、Quickbase が間隔のために自動的に配置する clear2x2.gif 画像を除外するには:
If([Task Name]="Vacation", "<img qbu=\"module\" src=\"/i/clear2x2.gif\" onload=\"javascript:$('#rid" & [Record ID#] & " > td:has(div.timeline) > div.timeline > img:not([src^="/i/clear2x2.gif"])').attr('src',('https://images.quickbase.com/si/16/821-check_purple.png'));\">", "")