LDAP インポートを使用して Active Directory (AD) から ServiceNow に写真をインポートする方法Issue この記事では、LDAP インポートを使用して Active Directory サーバーから ServiceNow にサムネイル写真をインポートする方法について説明します。 手順 ステップ 1:インポートセットテーブル (u_thumbnail) インポートセットテーブル (ldap_import) を使用してユーザーをインポートする場合は、文字列 (13,500) を含む u_thumbnail (または同様の) 列があることを確認します。この列は通常、LDAP ユーザーインポートによって作成されます。 次の URL を使用します:/sys_dictionary_list.do?sysparm_query=name%3Dldap_import%5Eelement%3Du_thumbnailphoto13,500 は推定値です。サムネイルにはより大きなサイズが必要な場合があります。 ステップ 2:LDAP および MID サーバーのバイナリ属性 値 thumbnailphoto をシステムプロパティ glide.ldap.binary_attributes に追加します。 次の URL を使用します:/sys_properties_list.do?sysparm_query=name%3Dglide.ldap.binary_attributes システムプロパティの値は、objectsid、thumbnailphoto のようになります。 MID サーバープロパティで次の URL を使用します:/ecc_agent_property_list.do?sysparm_query=name%3Dglide.ldap.binary_attributes値 thumbnailphoto をシステムプロパティ glide.ldap.binary_attributes に追加します。MID サーバーを再起動します。MID プロパティは起動時に読み取られます。 ステップ 3:変換スクリプトを追加する LDAP ユーザーインポート変換マップに変換スクリプトを追加します。 注意:これはサンプルの OnAfter スクリプトであり、サムネイル写真をインポートするために ServiceNow ではサポートされていません。 変換マップスクリプト:OnAfter スクリプト: //gs.log('User Photo Script: Check for Existing Attachment'); var grPhotoAttachmentExists = new GlideRecord('sys_attachment'); grPhotoAttachmentExists.addQuery('table_name', 'ZZ_YYsys_user'); grPhotoAttachmentExists.addQuery('table_sys_id', target.sys_id); grPhotoAttachmentExists.addQuery('file_name', 'photo'); grPhotoAttachmentExists.query(); if (source.u_thumbnailphoto != '') { //gs.log('User Photo Script: LDAP Source Photo Exists'); if (!grPhotoAttachmentExists.next()) { //gs.log('User Photo Script: No existing photo attachment, attach new photo'); attachPhoto(); } else { //gs.log('User Photo Script: Photo Attachment Exists, Compare Attachments'); var sysEncodedAttachment = new GlideSysAttachment(); var binData = sysEncodedAttachment.getBytes(grPhotoAttachmentExists); var EncodedBytes = GlideStringUtil.base64Encode(binData); if (EncodedBytes != source.u_thumbnailphoto) { //gs.log('User Photo Script: Photo attachment exists, bytes don't match, delete existing attachment and attach new photo'); grPhotoAttachmentExists.deleteRecord(); attachPhoto(); } } } else { //gs.log('User Photo Script: LDAP Source Photo Does Not Exist'); if (grPhotoAttachmentExists.next()) { //gs.log('User Photo Script: Delete existing photo attachment'); grPhotoAttachmentExists.deleteRecord(); } } function attachPhoto() { //gs.log('User Photo Script: Attach Photo'); var sysDecodedAttachment = new GlideSysAttachment(); var DecodedBytes = GlideStringUtil.base64DecodeAsBytes(source.u_thumbnailphoto); var attID = sysDecodedAttachment.write(target, 'photo', 'image/jpeg' , DecodedBytes); var newAttachment = new GlideRecord("sys_attachment"); newAttachment.addQuery("sys_id", attID); newAttachment.query(); if (newAttachment.next()) { newAttachment.table_name = "ZZ_YYsys_user"; newAttachment.table_sys_id = target.sys_id; newAttachment.content_type = 'image/jpeg'; newAttachment.update(); } } ステップ 4:インポートを制限する LDAP ユーザーのインポートを少数のユーザーのみに制限して、テストできるようにします。10,000 人ではなく 1 人のユーザーをテストする方が安全で迅速です。 LDAP ユーザーの LDAP OU 定義で、フィルターを追加します。 例:(sAMAccountName=joe.employee)LDAP ユーザーの [LDAP OU 定義] で、[参照] をクリックします。1 人のユーザーのみが返されることを確認するには、LDAP ノードのプラス記号をクリックします。 ステップ 5:[写真] フィールドを追加する ユーザーフォームでヘッダーバーを右クリックし、[構成] > [フォームレイアウト] の順に選択します。フォームに [写真] フィールドを追加します。 [保存] をクリックします。 ステップ 6:テスト [システムインポートセット] > [管理] > [スケジュール済みインポート] に移動します。LDAP ユーザーインポートを開きます。[今すぐ実行] をクリックします。インポートが完了するまで待ちます。 アクティブなトランザクションをチェックして、プロセスが実行されているかどうかを確認できます。[インポートされたユーザー] を確認します。すべてのユーザーをインポートするには、LDAP OU 定義を変更して元に戻すことを忘れないでください。すべてのユーザーに対してスケジュール済みインポートを再度実行します。 ステップ 7:トラブルシューティング システムプロパティ「glide.attachment.extensions」を確認し、値フィールドのデータを削除します。ファイル拡張子のリスト (カンマ区切り形式) は、添付ダイアログからドキュメントに添付できます。拡張子にはドット (.) を含めないでください (xls、xlsx、doc、docx など)。すべての拡張子を許可するには、空白のままにします。 u_thumbnail 列を 13500 より大きいサイズに増やす必要がある場合があります (たとえば、一部の画像がインポートされない場合) インポート中に警告ログとエラーログを監視します変換スクリプトには、デバッグのためにコメントアウトを解除できる gs.log ステートメントがいくつか含まれています 一部のフォーラム投稿では、システムプロパティ com.glide.loader.verify_target_field_size を true に設定することに言及しています。このプロパティは、インポートセットフィールドによるインポート中の自動的なサイズ拡大を可能にするか (true)、しないか (false) をコントロールします。デフォルトでは、[インポート] フィールドのサイズを超えるデータは切り捨てられます。[インポートセット] フィールドでデータの長さに合わせて列サイズを増やすには、このプロパティを true に設定します。これはベストプラクティスではありません。代わりに、上記のステップ 1 (インポートセットテーブル (u_thumbnail)) のように、u_thumbnail 列のサイズを手動で設定します。 認証情報を格納する LDAP の一部の列は非常に大きくなります。このプロパティを使用すると、次のエラーが発生し、LDAP レコードをインポートできなくなる可能性があります。 java.sql.SQLException: java.sql.BatchUpdateException: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs com.glide.loader.verify_target_field_size プロパティを使用してエラーが発生した場合は、次の手順で問題を解決できます。 システムプロパティ com.glide.loader.verify_target_field_size を false に設定します。必要に応じて、LDAP 属性を設定してインポートするフィールドを制限します。大きすぎる [ldap_import] テーブルの列を削除します。2 つまたは 3 つの大きなフィールドがある場合があります。LDAP ユーザーを再インポートします。列は小さいサイズで再作成されます。 Related Linkshttp://www.servicenowelite.com/blog/2014/2/18/import-user-photo-from-ldap