ビジネスルールスクリプトで getRefRecord() を正しく使用するIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } getRefRecord() は、指定された参照フィールドに対応する GlideRecord オブジェクトを返します。このメソッドはビジネスルールスクリプトで広く使用されていますが、誤った使い方をすると重大な問題が発生する可能性があります。 getRefRecord() が正しく使用されない場合、次のような問題が発生することがあります。 getRefRecord() で取得したレコードの値を出力しても何も表示されない。getRefRecord() で取得したレコードを更新すると、孤立レコード (orphan record) が挿入される。getRefRecord() で取得したレコードの値を他のスクリプトで使用すると、「undefined」エラーが発生する。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } サポート対象のすべてのリリース Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 参照フィールドの値が空の場合、getRefRecord() はエラーをスローせず、GlideRecord オブジェクトを返します。 そのため、返されたオブジェクトが有効なレコードを表していない場合があります。 また、期待しているフィールドが子テーブルに存在し、参照フィールドが親テーブルを参照している場合、getRefRecord() は親テーブルの GlideRecord オブジェクトを返します。 親テーブルのレコードには子テーブルで定義されたフィールドが存在しないため、「undefined」エラーが発生します。 Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } それぞれのシナリオに応じて、以下のガイドラインに従ってください。 シナリオ 1:空の参照フィールドにより出力されない、または孤立レコードが作成される場合 参照フィールドが空の場合、getRefRecord() は実際のレコードを表していない GlideRecord オブジェクトを返します。 そのオブジェクトに対してフィールド値の取得や update() の実行などの操作を行うと、空の出力が返されたり、孤立レコードがデータベースに作成されたりする可能性があります。 操作を実行する前に、isValidRecord() を使用して返されたオブジェクトが有効なレコードであることを確認してください。 1 2 3 4 5 6 7 var grUser = current.user.getRefRecord(); if(grUser.isValidRecord()) { // << only perform operations on it if it's a valid record if(grUser.email != current.email_address){ grUser.email = current.email_address; grUser.update(); } } getRefRecord() を使用した後は、必ず isValidRecord() を実行し、返されたオブジェクトが有効なレコードであることを確認してから操作を行ってください。 シナリオ 2:参照フィールドが子テーブルではなく親テーブルを参照している場合 期待するフィールドが子テーブルに存在する場合は、参照フィールドが親テーブルではなく、その子テーブルを参照していることを確認してください。 参照フィールドが親テーブルを参照している場合、getRefRecord() は親テーブルの GlideRecord オブジェクトを返します。 そのレコードには子テーブルでのみ定義されているフィールドが存在しないため、「undefined」エラーが発生します。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } getRecord() documentation: https://developer.servicenow.com/dev.do#!/reference/api/australia/server_legacy/c_GlideElementAPI#r_GlideElement-getRefRecord isValidRecord(): https://developer.servicenow.com/dev.do#!/reference/api/zurich/server_legacy/c_GlideRecordAPI#r_GlideRecord-isValidRecord