문서 분류 사용 사례 익스포트
다른 인스턴스에서 사용할 ServiceNow® 수 있도록 문서 분류 사용 사례를 업데이트 세트에 추가하여 익스포트합니다.
시작하기 전에
- 사용 사례를 익스포트하고 임포트할 때 두 인스턴스가 동일한 제품군 릴리스와 동일한 설치 버전을 문서 인텔리전스 갖도록 합니다.
- 필요한 역할: sn_docintel.manager
이 태스크 정보
다음 단계에 따라 문서 분류 사용 사례를 필드, 필드 그룹, 통합, 플로우 및 모든 관련 ML(머신 러닝) 모델과 함께 업데이트 세트로 익스포트합니다. 그런 다음 다른 인스턴스에서 사용하기 위해 업데이트 세트를 익스포트할 수 있습니다.
업데이트 세트가 백그라운드 프로세스로 자동 생성되고 "완료됨"으로 설정됩니다. 이 프로세스는 몇 분 정도 걸립니다. 백그라운드 작업이 완료되기 전에 결과 업데이트 세트를 수동으로 "완료됨"으로 설정하거나 익스포트해서는 안 됩니다.
자세한 내용은 System update sets 문서를 참조하십시오.
프로시저
- 다음으로 이동 모두 > 시스템 정의 > 스크립트 – 백그라운드.
-
아래에 제공된 스크립트를 복사하여 스크립트 실행 상자에 붙여넣습니다.
var TASK_DEFINITION_TO_EXPORT_SYS_ID = ""; var TASK_BATCH_SIZE = 50; var scopeToUpdateSet = {}; var taskDefinitionName = ""; function getTaskSuffix(taskBatchNum) { if (taskBatchNum != null) { return ( " task " + ((taskBatchNum - 1) * TASK_BATCH_SIZE + 1) + "-" + taskBatchNum * TASK_BATCH_SIZE ); } else { return ""; } } function createUpdateSet(taskBatchNum) { var taskSuffix = getTaskSuffix(taskBatchNum); var globalNameSuffix = " global update set" + taskSuffix; var docintelNameSuffix = " docintel update set" + taskSuffix; var globalKey = "global" + taskSuffix; var docintelKey = "19b40605edae411005e8007f82757635" + taskSuffix; // Create a new global update set var globalUpdateSetGR = new GlideRecord("sys_update_set"); globalUpdateSetGR.initialize(); globalUpdateSetGR.name = taskDefinitionName + globalNameSuffix; globalUpdateSetGR.application = "global"; var globalUpdateSetID = globalUpdateSetGR.insert(); scopeToUpdateSet[globalKey] = globalUpdateSetID; // Create a new DocIntel scope update set var updateSetGR = new GlideRecord("sys_update_set"); updateSetGR.initialize(); updateSetGR.name = taskDefinitionName + docintelNameSuffix; updateSetGR.application = "19b40605edae411005e8007f82757635"; updateSetGR.parent = globalUpdateSetGR.sys_id; var updateSetID = updateSetGR.insert(); scopeToUpdateSet[docintelKey] = updateSetID; } function saveToUpdateSet(glideRecord, taskCount) { var gum; var scope = String(glideRecord.sys_scope || "global"); if (scope !== "global" && scope !== "19b40605edae411005e8007f82757635") { gs.info("unknown scope: " + scope + "|" + glideRecord.getDisplayValue()); return; } var taskBatchNum = taskCount ? Math.ceil(taskCount / TASK_BATCH_SIZE) : null; var updateSetSysId = scopeToUpdateSet[scope + getTaskSuffix(taskBatchNum)]; if (!updateSetSysId) { createUpdateSet(taskBatchNum); updateSetSysId = scopeToUpdateSet[scope + getTaskSuffix(taskBatchNum)]; } try { gum = new GlideUpdateManager2(updateSetSysId); } catch (e) { var gus = new GlideUpdateSet(); gus.set(updateSetSysId); gum = new GlideUpdateManager2(); } gum.saveRecord(glideRecord); } function exportTaskDefinition(taskDefinitionId) { var currentUpdateSetSysId = gs.getPreference("sys_update_set"); // Get task definition var taskDefinitionGR = new GlideRecord("di_task_definition"); if (!taskDefinitionGR.get(taskDefinitionId)) { gs.info("task definition not found."); return; } taskDefinitionName = taskDefinitionGR.getValue("display_name"); createUpdateSet(null); //Push records into the current update set // Task Definition saveToUpdateSet(taskDefinitionGR); saveToUpdateSet(taskDefinitionGR.ml_definition_ocr.getRefRecord()); saveToUpdateSet(taskDefinitionGR.ml_definition_training.getRefRecord()); saveToUpdateSet(taskDefinitionGR.ml_definition_prediction.getRefRecord()); saveToUpdateSet( taskDefinitionGR.ml_definition_pdf_preprocessing.getRefRecord() ); // KeyGroups var keyGroupGR = new GlideRecord("di_key_group"); keyGroupGR.addQuery("task_definition", taskDefinitionId); keyGroupGR.query(); while (keyGroupGR.next()) { saveToUpdateSet(keyGroupGR); } // Keys var keyGR = new GlideRecord("di_key"); keyGR.addQuery("task_definition", taskDefinitionId); keyGR.query(); while (keyGR.next()) { saveToUpdateSet(keyGR); } // ML Solutions var mlSolutionGR = new GlideRecord("ml_solution"); mlSolutionGR.addQuery("solution_name", "CONTAINS", taskDefinitionId); mlSolutionGR.addQuery("active", true); mlSolutionGR.query(); while (mlSolutionGR.next()) { saveToUpdateSet(mlSolutionGR); // ML Model Artifacts var mlModelArtifactGR = new GlideRecord("ml_model_artifact"); mlModelArtifactGR.addQuery("solution", mlSolutionGR.sys_id); mlModelArtifactGR.query(); while (mlModelArtifactGR.next()) { saveToUpdateSet(mlModelArtifactGR); } // ML progress tracker saveToUpdateSet(mlSolutionGR.progress_tracker.getRefRecord()); } // Tasks var taskCount = 0; var taskGR = new GlideRecord("di_task"); taskGR.addQuery("task_definition", taskDefinitionId); taskGR.query(); while (taskGR.next()) { taskCount += 1; saveToUpdateSet(taskGR, taskCount); // PDFs var pdfGR = new GlideRecord("di_pdf"); pdfGR.addQuery("task", taskGR.sys_id); pdfGR.query(); while (pdfGR.next()) { saveToUpdateSet(pdfGR, taskCount); } // Images var imageGR = new GlideRecord("di_image"); imageGR.addQuery("task", taskGR.sys_id); imageGR.query(); while (imageGR.next()) { saveToUpdateSet(imageGR, taskCount); // Candidate Scores var candidateScoreGR = new GlideRecord("di_candidate_score"); candidateScoreGR.addQuery("image", imageGR.sys_id); candidateScoreGR.query(); while (candidateScoreGR.next()) { saveToUpdateSet(candidateScoreGR, taskCount); } } // Extracted Values var extractedValueGR = new GlideRecord("di_extracted_value"); extractedValueGR.addQuery("task", taskGR.sys_id); extractedValueGR.query(); while (extractedValueGR.next()) { saveToUpdateSet(extractedValueGR, taskCount); } // Prediction Inputs var predictionInputGR = new GlideRecord("di_prediction_input"); predictionInputGR.addQuery("task", taskGR.sys_id); predictionInputGR.query(); while (predictionInputGR.next()) { saveToUpdateSet(predictionInputGR, taskCount); } // Training Inputs var trainingInputGR = new GlideRecord("di_training_input"); trainingInputGR.addQuery("task", taskGR.sys_id); trainingInputGR.query(); while (trainingInputGR.next()) { saveToUpdateSet(trainingInputGR, taskCount); } } // Reset current update set new GlideUpdateSet().set(currentUpdateSetSysId); // Mark as completed for (var updateSetKey in scopeToUpdateSet) { var globalUpdateSetGR = new GlideRecord("sys_update_set"); globalUpdateSetGR.get(scopeToUpdateSet[updateSetKey]); globalUpdateSetGR.setValue("state", "complete"); globalUpdateSetGR.update(); } } exportTaskDefinition(TASK_DEFINITION_TO_EXPORT_SYS_ID); - 새 브라우저 탭에서 인스턴스를 열고 모두 > 문서 인텔리전스 > 문서 분류 > 사용 케이스.
- 익스포트할 사용 사례를 엽니다.
-
URL에서 sys_id 복사합니다.
예를 들어 다음 URL에서
fda6a8b36b700210f465ee188e44afe8%26을 복사합니다.https://instancename.service-now.com/nav_to.do?uri=sys_di_task_definition.do?sys_id=fda6a8b36b700210f465ee188e44afe8%26sysparm_view=edit_sys_di_task_definition_doc_classifier
팁:URL을 가져오려면 추가 작업 아이콘(. )을 선택하고 URL 복사를 선택합니다.
-
스크립트 - 백그라운드 탭에서 TASK_DEFINITION_TO_EXPORT_SYS_ID 변수의 첫 번째 줄에
sys_id붙여 넣습니다.예를 들어, 스크립트의 행은 다음 행과 같아야 합니다.
var TASK_DEFINITION_TO_EXPORT_SYS_ID = "9f426b878749e110ba3540809bbb35a6"; -
전역 범위에서 백그라운드 스크립트를 실행하려면 스크립트 실행을 선택합니다.
이 스크립트를 실행하는 데 몇 분 정도 걸릴 수 있습니다.
-
다음으로 이동 시스템 업데이트 세트 > 로컬 업데이트 세트.
사용 사례 이름으로 시작하는 이름의 여러 업데이트 세트를 볼 수 있습니다.
-
이름에 "전역 업데이트 세트" 및 "전역 업데이트 세트 작업 x-y"가 포함된 각 업데이트 세트를 선택하고 관련 링크에서 업데이트 세트 배치를 XML로 익스포트를 선택하여 XML 파일을 다운로드합니다.
주:"전역 업데이트 세트 작업 x-y"라는 이름에서 x-y는 업데이트 세트의 일부인 작업 범위를 나타냅니다. 예를 들어 문서 작업이 100개인 경우 배치 업데이트 세트 2개를 찾을 수 있는데, 하나는 이름에 "전역 업데이트 세트 작업 1-50"이 있고 다른 하나는 "전역 업데이트 세트 작업 51-100"입니다.
결과
사용 사례가 XML 파일로 컴퓨터에 익스포트됩니다.
다음에 수행할 작업
사용 사례를 익스포트한 후 인스턴스에서 사용할 수 있도록 임포트합니다 ServiceNow® . 자세한 내용은 문서 분류 사용 사례 임포트 문서를 참조하십시오.