[{"data":1,"prerenderedAt":5694},["ShallowReactive",2],{"page-\u002Fblog\u002Fservicenow-xanadu-release-developer-features":3},{"id":4,"title":5,"author":6,"authorUrl":7,"body":8,"date":5655,"dateUpdated":230,"description":5656,"dqid":5657,"excerpt":5658,"extension":5659,"faq":5660,"headline":5673,"meta":5674,"navigation":269,"path":5675,"seo":5676,"socialImage":5677,"stem":5683,"tags":5684,"__hash__":5693},"content\u002Fblog\u002Fservicenow-xanadu-release-developer-features.md","ServiceNow Xanadu Release: Game-Changing Features for Developers | SN-Tricks","Gabriel Fordan","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fgabrielfordan",{"type":9,"value":10,"toc":5600},"minimark",[11,15,18,23,31,36,39,44,47,66,71,74,91,94,99,102,116,121,124,138,142,145,184,191,195,202,206,209,212,216,221,224,507,510,515,518,532,537,540,706,711,714,728,732,735,779,783,786,1126,1130,1137,1141,1187,1191,1196,1199,1241,1246,1249,1304,1309,1312,1329,1333,1481,1485,1492,1496,1499,1504,1709,1714,1868,1873,2051,2056,2190,2195,2428,2431,2559,2564,2653,2658,2850,2854,2857,2874,2877,2881,2888,2892,2895,3696,4177,4180,4206,4210,4217,4221,4224,4238,4242,4245,4603,4607,4639,4643,4646,4650,4655,4669,4674,4688,4693,4707,4712,4723,4727,4731,4734,4739,4750,4850,4855,4866,4989,4994,5005,5058,5062,5069,5113,5117,5120,5134,5138,5142,5147,5158,5163,5174,5179,5190,5194,5199,5210,5215,5226,5231,5242,5246,5251,5259,5264,5278,5283,5389,5393,5397,5400,5416,5419,5427,5431,5445,5449,5453,5462,5473,5477,5484,5495,5499,5506,5517,5521,5528,5542,5546,5549,5553,5558,5564,5569,5575,5580,5584,5587,5590,5593,5596],[12,13,14],"p",{},"The ServiceNow Xanadu release, unveiled at World Forum 2024 and released on September 10, 2024, represents a quantum leap forward for ServiceNow developers. This isn't just another incremental update—it's a fundamental transformation of how we build applications on the Now Platform. With the introduction of ServiceNow IDE, Fluent DSL, comprehensive ECMAScript 2021 support, and powerful AI capabilities, Xanadu ushers in a new era of developer productivity and innovation.",[12,16,17],{},"In this comprehensive guide, I'll walk you through the most impactful developer features in the Xanadu release and show you how to leverage them to build better applications faster.",[19,20,22],"h2",{"id":21},"servicenow-ide-your-new-development-home","ServiceNow IDE: Your New Development Home",[12,24,25,26,30],{},"The crown jewel of the Xanadu release is undoubtedly the ",[27,28,29],"strong",{},"ServiceNow IDE","—a complete application development environment built directly into the Now Platform. If you've ever wished you could bring the power and familiarity of Visual Studio Code to ServiceNow development, your wish has been granted.",[32,33,35],"h3",{"id":34},"what-makes-servicenow-ide-revolutionary","What Makes ServiceNow IDE Revolutionary?",[12,37,38],{},"ServiceNow IDE is built on the principles that made VS Code the most popular code editor in the world. It provides:",[12,40,41],{},[27,42,43],{},"1. Familiar, Intuitive Interface",[12,45,46],{},"The IDE features a clean, modern interface that closely resembles Creator Studio and VS Code. You get:",[48,49,50,54,57,60,63],"ul",{},[51,52,53],"li",{},"A file explorer with hierarchical views of your application components",[51,55,56],{},"Tabbed editing with syntax highlighting",[51,58,59],{},"Integrated search and replace",[51,61,62],{},"Command palette for quick actions",[51,64,65],{},"Split-pane editing for working on multiple files",[12,67,68],{},[27,69,70],{},"2. Native Git Integration",[12,72,73],{},"One of the most requested features for years has finally arrived—native source control integration. ServiceNow IDE allows you to:",[48,75,76,79,82,85,88],{},[51,77,78],{},"Connect to common Git providers (GitHub, GitLab, Bitbucket, Azure DevOps)",[51,80,81],{},"Commit changes directly from the IDE",[51,83,84],{},"View diff comparisons",[51,86,87],{},"Manage branches within the platform",[51,89,90],{},"Pull and push changes seamlessly",[12,92,93],{},"This means you can finally implement true version control for your ServiceNow applications without complex middleware or manual exports.",[12,95,96],{},[27,97,98],{},"3. Embedded UI Previews",[12,100,101],{},"No more switching between Studio and a preview tab. ServiceNow IDE includes embedded UI previews that update in real-time as you code. You can:",[48,103,104,107,110,113],{},[51,105,106],{},"See your UI changes instantly",[51,108,109],{},"Test interactions without leaving the IDE",[51,111,112],{},"Preview forms, lists, and UI pages side-by-side with code",[51,114,115],{},"Work with different screen sizes and breakpoints",[12,117,118],{},[27,119,120],{},"4. Enhanced Collaboration",[12,122,123],{},"The IDE is designed for teams. Multiple developers can work in the same instance with better visibility:",[48,125,126,129,132,135],{},[51,127,128],{},"See who's editing what in real-time",[51,130,131],{},"View change history with detailed audit trails",[51,133,134],{},"Comment on code and collaborate on solutions",[51,136,137],{},"Manage merge conflicts with visual diff tools",[32,139,141],{"id":140},"getting-started-with-servicenow-ide","Getting Started with ServiceNow IDE",[12,143,144],{},"To install ServiceNow IDE in your Xanadu instance:",[146,147,148,161,168,171,177],"ol",{},[51,149,150,151,154,155,154,158],{},"Navigate to ",[27,152,153],{},"All"," > ",[27,156,157],{},"System Applications",[27,159,160],{},"Application Manager",[51,162,163,164,167],{},"Click the ",[27,165,166],{},"Sync"," button to sync with the ServiceNow Store",[51,169,170],{},"Search for \"ServiceNow IDE\" (it's a free Store application)",[51,172,173,174],{},"Click ",[27,175,176],{},"Install",[51,178,179,180,154,182],{},"Once installed, access it from ",[27,181,153],{},[27,183,29],{},[12,185,186,187,190],{},"The IDE is specifically designed for building ",[27,188,189],{},"scoped applications",", making it perfect for app development teams working on custom solutions or integrations.",[19,192,194],{"id":193},"fluent-dsl-type-safe-metadata-development","Fluent DSL: Type-Safe Metadata Development",[12,196,197,198,201],{},"Alongside ServiceNow IDE comes ",[27,199,200],{},"Fluent",", a revolutionary domain-specific language that changes how we define ServiceNow applications.",[32,203,205],{"id":204},"what-is-fluent","What is Fluent?",[12,207,208],{},"Fluent is a TypeScript-based DSL that allows you to define ServiceNow metadata using code instead of clicking through forms. Here's the crucial distinction: while Fluent is based on TypeScript syntax, it doesn't compile to JavaScript. Instead, it compiles to the XML metadata files that ServiceNow uses internally.",[12,210,211],{},"Think of it as \"Infrastructure as Code\" for ServiceNow applications.",[32,213,215],{"id":214},"why-fluent-matters","Why Fluent Matters",[12,217,218],{},[27,219,220],{},"1. Type Safety",[12,222,223],{},"TypeScript's type system catches errors at development time, not runtime:",[225,226,231],"pre",{"className":227,"code":228,"language":229,"meta":230,"style":230},"language-typescript shiki shiki-themes github-light github-light","\u002F\u002F Fluent code with type safety\nimport { Table, Field } from '@servicenow\u002Fsdk\u002Fcore';\n\n@Table({\n  name: 'x_custom_incident_tracker',\n  label: 'Incident Tracker',\n  extends: 'task'\n})\nclass IncidentTracker {\n  @Field.String({\n    label: 'Tracking Number',\n    mandatory: true,\n    maxLength: 40\n  })\n  tracking_number!: string;\n\n  @Field.Reference({\n    label: 'Related Incident',\n    reference: 'incident'\n  })\n  related_incident!: string;\n\n  @Field.Integer({\n    label: 'Priority Score',\n    defaultValue: 5\n  })\n  priority_score!: number;\n}\n","typescript","",[232,233,234,243,264,271,284,296,307,316,322,334,345,356,368,377,383,398,403,413,423,432,437,449,454,464,474,483,488,501],"code",{"__ignoreMap":230},[235,236,239],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"sJ8bj","\u002F\u002F Fluent code with type safety\n",[235,244,246,250,254,257,261],{"class":237,"line":245},2,[235,247,249],{"class":248},"sCydW","import",[235,251,253],{"class":252},"sKWpL"," { Table, Field } ",[235,255,256],{"class":248},"from",[235,258,260],{"class":259},"sOTlB"," '@servicenow\u002Fsdk\u002Fcore'",[235,262,263],{"class":252},";\n",[235,265,267],{"class":237,"line":266},3,[235,268,270],{"emptyLinePlaceholder":269},true,"\n",[235,272,274,277,281],{"class":237,"line":273},4,[235,275,276],{"class":252},"@",[235,278,280],{"class":279},"se37E","Table",[235,282,283],{"class":252},"({\n",[235,285,287,290,293],{"class":237,"line":286},5,[235,288,289],{"class":252},"  name: ",[235,291,292],{"class":259},"'x_custom_incident_tracker'",[235,294,295],{"class":252},",\n",[235,297,299,302,305],{"class":237,"line":298},6,[235,300,301],{"class":252},"  label: ",[235,303,304],{"class":259},"'Incident Tracker'",[235,306,295],{"class":252},[235,308,310,313],{"class":237,"line":309},7,[235,311,312],{"class":252},"  extends: ",[235,314,315],{"class":259},"'task'\n",[235,317,319],{"class":237,"line":318},8,[235,320,321],{"class":252},"})\n",[235,323,325,328,331],{"class":237,"line":324},9,[235,326,327],{"class":248},"class",[235,329,330],{"class":279}," IncidentTracker",[235,332,333],{"class":252}," {\n",[235,335,337,340,343],{"class":237,"line":336},10,[235,338,339],{"class":252},"  @Field.",[235,341,342],{"class":279},"String",[235,344,283],{"class":252},[235,346,348,351,354],{"class":237,"line":347},11,[235,349,350],{"class":252},"    label: ",[235,352,353],{"class":259},"'Tracking Number'",[235,355,295],{"class":252},[235,357,359,362,366],{"class":237,"line":358},12,[235,360,361],{"class":252},"    mandatory: ",[235,363,365],{"class":364},"sMN4m","true",[235,367,295],{"class":252},[235,369,371,374],{"class":237,"line":370},13,[235,372,373],{"class":252},"    maxLength: ",[235,375,376],{"class":364},"40\n",[235,378,380],{"class":237,"line":379},14,[235,381,382],{"class":252},"  })\n",[235,384,386,390,393,396],{"class":237,"line":385},15,[235,387,389],{"class":388},"sj_tP","  tracking_number",[235,391,392],{"class":248},"!:",[235,394,395],{"class":364}," string",[235,397,263],{"class":252},[235,399,401],{"class":237,"line":400},16,[235,402,270],{"emptyLinePlaceholder":269},[235,404,406,408,411],{"class":237,"line":405},17,[235,407,339],{"class":252},[235,409,410],{"class":279},"Reference",[235,412,283],{"class":252},[235,414,416,418,421],{"class":237,"line":415},18,[235,417,350],{"class":252},[235,419,420],{"class":259},"'Related Incident'",[235,422,295],{"class":252},[235,424,426,429],{"class":237,"line":425},19,[235,427,428],{"class":252},"    reference: ",[235,430,431],{"class":259},"'incident'\n",[235,433,435],{"class":237,"line":434},20,[235,436,382],{"class":252},[235,438,440,443,445,447],{"class":237,"line":439},21,[235,441,442],{"class":388},"  related_incident",[235,444,392],{"class":248},[235,446,395],{"class":364},[235,448,263],{"class":252},[235,450,452],{"class":237,"line":451},22,[235,453,270],{"emptyLinePlaceholder":269},[235,455,457,459,462],{"class":237,"line":456},23,[235,458,339],{"class":252},[235,460,461],{"class":279},"Integer",[235,463,283],{"class":252},[235,465,467,469,472],{"class":237,"line":466},24,[235,468,350],{"class":252},[235,470,471],{"class":259},"'Priority Score'",[235,473,295],{"class":252},[235,475,477,480],{"class":237,"line":476},25,[235,478,479],{"class":252},"    defaultValue: ",[235,481,482],{"class":364},"5\n",[235,484,486],{"class":237,"line":485},26,[235,487,382],{"class":252},[235,489,491,494,496,499],{"class":237,"line":490},27,[235,492,493],{"class":388},"  priority_score",[235,495,392],{"class":248},[235,497,498],{"class":364}," number",[235,500,263],{"class":252},[235,502,504],{"class":237,"line":503},28,[235,505,506],{"class":252},"}\n",[12,508,509],{},"If you misspell a property name or use the wrong type, you'll know immediately—no need to test in the instance.",[12,511,512],{},[27,513,514],{},"2. Better Developer Experience",[12,516,517],{},"Fluent provides IntelliSense, autocomplete, and inline documentation:",[48,519,520,523,526,529],{},[51,521,522],{},"See available properties as you type",[51,524,525],{},"Get parameter hints for functions",[51,527,528],{},"Access documentation without leaving your editor",[51,530,531],{},"Refactor with confidence using Find All References",[12,533,534],{},[27,535,536],{},"3. Code Reusability",[12,538,539],{},"With Fluent, you can create reusable patterns and abstractions:",[225,541,543],{"className":227,"code":542,"language":229,"meta":230,"style":230},"\u002F\u002F Reusable field configuration\nconst standardAuditFields = {\n  @Field.DateTime({ label: 'Created', readonly: true })\n  sys_created_on!: Date;\n\n  @Field.Reference({ label: 'Created by', reference: 'sys_user', readonly: true })\n  sys_created_by!: string;\n\n  @Field.DateTime({ label: 'Updated', readonly: true })\n  sys_updated_on!: Date;\n\n  @Field.Reference({ label: 'Updated by', reference: 'sys_user', readonly: true })\n  sys_updated_by!: string;\n};\n",[232,544,545,550,563,590,595,599,624,635,639,657,667,671,692,701],{"__ignoreMap":230},[235,546,547],{"class":237,"line":238},[235,548,549],{"class":241},"\u002F\u002F Reusable field configuration\n",[235,551,552,555,558,561],{"class":237,"line":245},[235,553,554],{"class":248},"const",[235,556,557],{"class":364}," standardAuditFields",[235,559,560],{"class":248}," =",[235,562,333],{"class":252},[235,564,565,568,571,574,577,580,583,585,587],{"class":237,"line":266},[235,566,567],{"class":252},"  @Field.DateTime({ ",[235,569,570],{"class":279},"label",[235,572,573],{"class":252},": ",[235,575,576],{"class":259},"'Created'",[235,578,579],{"class":252},", ",[235,581,582],{"class":279},"readonly",[235,584,573],{"class":252},[235,586,365],{"class":364},[235,588,589],{"class":252}," })\n",[235,591,592],{"class":237,"line":273},[235,593,594],{"class":252},"  sys_created_on!: Date;\n",[235,596,597],{"class":237,"line":286},[235,598,270],{"emptyLinePlaceholder":269},[235,600,601,603,605,608,611,614,617,620,622],{"class":237,"line":298},[235,602,339],{"class":252},[235,604,410],{"class":279},[235,606,607],{"class":252},"({ label: ",[235,609,610],{"class":259},"'Created by'",[235,612,613],{"class":252},", reference: ",[235,615,616],{"class":259},"'sys_user'",[235,618,619],{"class":252},", readonly: ",[235,621,365],{"class":364},[235,623,589],{"class":252},[235,625,626,629,632],{"class":237,"line":309},[235,627,628],{"class":252},"  sys_created_by",[235,630,631],{"class":248},"!",[235,633,634],{"class":252},": string;\n",[235,636,637],{"class":237,"line":318},[235,638,270],{"emptyLinePlaceholder":269},[235,640,641,643,646,648,651,653,655],{"class":237,"line":324},[235,642,339],{"class":252},[235,644,645],{"class":279},"DateTime",[235,647,607],{"class":252},[235,649,650],{"class":259},"'Updated'",[235,652,619],{"class":252},[235,654,365],{"class":364},[235,656,589],{"class":252},[235,658,659,662,664],{"class":237,"line":336},[235,660,661],{"class":252},"  sys_updated_on",[235,663,631],{"class":248},[235,665,666],{"class":252},": Date;\n",[235,668,669],{"class":237,"line":347},[235,670,270],{"emptyLinePlaceholder":269},[235,672,673,675,677,679,682,684,686,688,690],{"class":237,"line":358},[235,674,339],{"class":252},[235,676,410],{"class":279},[235,678,607],{"class":252},[235,680,681],{"class":259},"'Updated by'",[235,683,613],{"class":252},[235,685,616],{"class":259},[235,687,619],{"class":252},[235,689,365],{"class":364},[235,691,589],{"class":252},[235,693,694,697,699],{"class":237,"line":370},[235,695,696],{"class":252},"  sys_updated_by",[235,698,631],{"class":248},[235,700,634],{"class":252},[235,702,703],{"class":237,"line":379},[235,704,705],{"class":252},"};\n",[12,707,708],{},[27,709,710],{},"4. Version Control Friendly",[12,712,713],{},"Fluent code is much easier to version control than XML:",[48,715,716,719,722,725],{},[51,717,718],{},"Clear, readable diffs",[51,720,721],{},"Meaningful commit messages",[51,723,724],{},"Easy to review changes in pull requests",[51,726,727],{},"Better merge conflict resolution",[32,729,731],{"id":730},"fluent-apis-available-in-xanadu","Fluent APIs Available in Xanadu",[12,733,734],{},"The Xanadu release includes Fluent APIs for:",[48,736,737,743,749,755,761,767,773],{},[51,738,739,742],{},[27,740,741],{},"Tables",": Define table schemas, extensions, and relationships",[51,744,745,748],{},[27,746,747],{},"Fields",": Create fields with full type definitions",[51,750,751,754],{},[27,752,753],{},"Roles",": Define roles and role hierarchies",[51,756,757,760],{},[27,758,759],{},"ACLs",": Create access control rules",[51,762,763,766],{},[27,764,765],{},"Business Rules",": Write business logic with type safety",[51,768,769,772],{},[27,770,771],{},"Automated Test Framework",": Define tests using fluent syntax",[51,774,775,778],{},[27,776,777],{},"UI Policies and UI Actions",": Create UI logic declaratively",[32,780,782],{"id":781},"example-creating-a-business-rule-with-fluent","Example: Creating a Business Rule with Fluent",[12,784,785],{},"Here's how you'd create a business rule using Fluent:",[225,787,789],{"className":227,"code":788,"language":229,"meta":230,"style":230},"import { BusinessRule } from '@servicenow\u002Fsdk\u002Fcore';\n\n@BusinessRule({\n  table: 'incident',\n  when: 'before',\n  insert: true,\n  update: true,\n  active: true,\n  name: 'Calculate Priority Score'\n})\nclass CalculatePriorityScore {\n  execute(current: GlideRecord, previous: GlideRecord | null): void {\n    \u002F\u002F Type-safe access to fields\n    const urgency = parseInt(current.getValue('urgency') || '3');\n    const impact = parseInt(current.getValue('impact') || '3');\n\n    \u002F\u002F Calculate priority score\n    const priorityScore = urgency * impact;\n    current.setValue('u_priority_score', priorityScore.toString());\n\n    \u002F\u002F Use modern JavaScript features (with ES12 enabled)\n    const riskLevel = priorityScore > 6 ? 'High' :\n                      priorityScore > 3 ? 'Medium' : 'Low';\n    current.setValue('u_risk_level', riskLevel);\n  }\n}\n",[232,790,791,804,808,817,827,837,846,855,864,871,875,884,926,931,967,995,999,1004,1022,1044,1048,1053,1080,1103,1117,1122],{"__ignoreMap":230},[235,792,793,795,798,800,802],{"class":237,"line":238},[235,794,249],{"class":248},[235,796,797],{"class":252}," { BusinessRule } ",[235,799,256],{"class":248},[235,801,260],{"class":259},[235,803,263],{"class":252},[235,805,806],{"class":237,"line":245},[235,807,270],{"emptyLinePlaceholder":269},[235,809,810,812,815],{"class":237,"line":266},[235,811,276],{"class":252},[235,813,814],{"class":279},"BusinessRule",[235,816,283],{"class":252},[235,818,819,822,825],{"class":237,"line":273},[235,820,821],{"class":252},"  table: ",[235,823,824],{"class":259},"'incident'",[235,826,295],{"class":252},[235,828,829,832,835],{"class":237,"line":286},[235,830,831],{"class":252},"  when: ",[235,833,834],{"class":259},"'before'",[235,836,295],{"class":252},[235,838,839,842,844],{"class":237,"line":298},[235,840,841],{"class":252},"  insert: ",[235,843,365],{"class":364},[235,845,295],{"class":252},[235,847,848,851,853],{"class":237,"line":309},[235,849,850],{"class":252},"  update: ",[235,852,365],{"class":364},[235,854,295],{"class":252},[235,856,857,860,862],{"class":237,"line":318},[235,858,859],{"class":252},"  active: ",[235,861,365],{"class":364},[235,863,295],{"class":252},[235,865,866,868],{"class":237,"line":324},[235,867,289],{"class":252},[235,869,870],{"class":259},"'Calculate Priority Score'\n",[235,872,873],{"class":237,"line":336},[235,874,321],{"class":252},[235,876,877,879,882],{"class":237,"line":347},[235,878,327],{"class":248},[235,880,881],{"class":279}," CalculatePriorityScore",[235,883,333],{"class":252},[235,885,886,889,892,895,898,901,903,906,908,910,913,916,919,921,924],{"class":237,"line":358},[235,887,888],{"class":279},"  execute",[235,890,891],{"class":252},"(",[235,893,894],{"class":388},"current",[235,896,897],{"class":248},":",[235,899,900],{"class":279}," GlideRecord",[235,902,579],{"class":252},[235,904,905],{"class":388},"previous",[235,907,897],{"class":248},[235,909,900],{"class":279},[235,911,912],{"class":248}," |",[235,914,915],{"class":364}," null",[235,917,918],{"class":252},")",[235,920,897],{"class":248},[235,922,923],{"class":364}," void",[235,925,333],{"class":252},[235,927,928],{"class":237,"line":370},[235,929,930],{"class":241},"    \u002F\u002F Type-safe access to fields\n",[235,932,933,936,939,941,944,947,950,952,955,958,961,964],{"class":237,"line":379},[235,934,935],{"class":248},"    const",[235,937,938],{"class":364}," urgency",[235,940,560],{"class":248},[235,942,943],{"class":279}," parseInt",[235,945,946],{"class":252},"(current.",[235,948,949],{"class":279},"getValue",[235,951,891],{"class":252},[235,953,954],{"class":259},"'urgency'",[235,956,957],{"class":252},") ",[235,959,960],{"class":248},"||",[235,962,963],{"class":259}," '3'",[235,965,966],{"class":252},");\n",[235,968,969,971,974,976,978,980,982,984,987,989,991,993],{"class":237,"line":385},[235,970,935],{"class":248},[235,972,973],{"class":364}," impact",[235,975,560],{"class":248},[235,977,943],{"class":279},[235,979,946],{"class":252},[235,981,949],{"class":279},[235,983,891],{"class":252},[235,985,986],{"class":259},"'impact'",[235,988,957],{"class":252},[235,990,960],{"class":248},[235,992,963],{"class":259},[235,994,966],{"class":252},[235,996,997],{"class":237,"line":400},[235,998,270],{"emptyLinePlaceholder":269},[235,1000,1001],{"class":237,"line":405},[235,1002,1003],{"class":241},"    \u002F\u002F Calculate priority score\n",[235,1005,1006,1008,1011,1013,1016,1019],{"class":237,"line":415},[235,1007,935],{"class":248},[235,1009,1010],{"class":364}," priorityScore",[235,1012,560],{"class":248},[235,1014,1015],{"class":252}," urgency ",[235,1017,1018],{"class":248},"*",[235,1020,1021],{"class":252}," impact;\n",[235,1023,1024,1027,1030,1032,1035,1038,1041],{"class":237,"line":425},[235,1025,1026],{"class":252},"    current.",[235,1028,1029],{"class":279},"setValue",[235,1031,891],{"class":252},[235,1033,1034],{"class":259},"'u_priority_score'",[235,1036,1037],{"class":252},", priorityScore.",[235,1039,1040],{"class":279},"toString",[235,1042,1043],{"class":252},"());\n",[235,1045,1046],{"class":237,"line":434},[235,1047,270],{"emptyLinePlaceholder":269},[235,1049,1050],{"class":237,"line":439},[235,1051,1052],{"class":241},"    \u002F\u002F Use modern JavaScript features (with ES12 enabled)\n",[235,1054,1055,1057,1060,1062,1065,1068,1071,1074,1077],{"class":237,"line":451},[235,1056,935],{"class":248},[235,1058,1059],{"class":364}," riskLevel",[235,1061,560],{"class":248},[235,1063,1064],{"class":252}," priorityScore ",[235,1066,1067],{"class":248},">",[235,1069,1070],{"class":364}," 6",[235,1072,1073],{"class":248}," ?",[235,1075,1076],{"class":259}," 'High'",[235,1078,1079],{"class":248}," :\n",[235,1081,1082,1085,1087,1090,1092,1095,1098,1101],{"class":237,"line":456},[235,1083,1084],{"class":252},"                      priorityScore ",[235,1086,1067],{"class":248},[235,1088,1089],{"class":364}," 3",[235,1091,1073],{"class":248},[235,1093,1094],{"class":259}," 'Medium'",[235,1096,1097],{"class":248}," :",[235,1099,1100],{"class":259}," 'Low'",[235,1102,263],{"class":252},[235,1104,1105,1107,1109,1111,1114],{"class":237,"line":466},[235,1106,1026],{"class":252},[235,1108,1029],{"class":279},[235,1110,891],{"class":252},[235,1112,1113],{"class":259},"'u_risk_level'",[235,1115,1116],{"class":252},", riskLevel);\n",[235,1118,1119],{"class":237,"line":476},[235,1120,1121],{"class":252},"  }\n",[235,1123,1124],{"class":237,"line":485},[235,1125,506],{"class":252},[19,1127,1129],{"id":1128},"servicenow-sdk-local-development-power","ServiceNow SDK: Local Development Power",[12,1131,1132,1133,1136],{},"The ",[27,1134,1135],{},"ServiceNow SDK"," (Now-SDK) is the command-line companion to Fluent and ServiceNow IDE. It's an NPM package that enables true local development workflows.",[32,1138,1140],{"id":1139},"installing-the-sdk","Installing the SDK",[225,1142,1146],{"className":1143,"code":1144,"language":1145,"meta":230,"style":230},"language-bash shiki shiki-themes github-light github-light","# Install the ServiceNow SDK globally\nnpm install -g @servicenow\u002Fsdk\n\n# Or add it to your project\nnpm install --save-dev @servicenow\u002Fsdk\n","bash",[232,1147,1148,1153,1167,1171,1176],{"__ignoreMap":230},[235,1149,1150],{"class":237,"line":238},[235,1151,1152],{"class":241},"# Install the ServiceNow SDK globally\n",[235,1154,1155,1158,1161,1164],{"class":237,"line":245},[235,1156,1157],{"class":279},"npm",[235,1159,1160],{"class":259}," install",[235,1162,1163],{"class":364}," -g",[235,1165,1166],{"class":259}," @servicenow\u002Fsdk\n",[235,1168,1169],{"class":237,"line":266},[235,1170,270],{"emptyLinePlaceholder":269},[235,1172,1173],{"class":237,"line":273},[235,1174,1175],{"class":241},"# Or add it to your project\n",[235,1177,1178,1180,1182,1185],{"class":237,"line":286},[235,1179,1157],{"class":279},[235,1181,1160],{"class":259},[235,1183,1184],{"class":364}," --save-dev",[235,1186,1166],{"class":259},[32,1188,1190],{"id":1189},"what-the-sdk-does","What the SDK Does",[12,1192,1193],{},[27,1194,1195],{},"1. Compiles Fluent to Metadata",[12,1197,1198],{},"The SDK takes your Fluent TypeScript code and compiles it to ServiceNow's XML metadata format:",[225,1200,1202],{"className":1143,"code":1201,"language":1145,"meta":230,"style":230},"# Compile Fluent code\nsn-sdk compile\n\n# Output: XML files in the metadata directory\n# ✓ Compiled x_custom_incident_tracker.xml\n# ✓ Compiled business_rules.xml\n# ✓ Compiled acls.xml\n",[232,1203,1204,1209,1217,1221,1226,1231,1236],{"__ignoreMap":230},[235,1205,1206],{"class":237,"line":238},[235,1207,1208],{"class":241},"# Compile Fluent code\n",[235,1210,1211,1214],{"class":237,"line":245},[235,1212,1213],{"class":279},"sn-sdk",[235,1215,1216],{"class":259}," compile\n",[235,1218,1219],{"class":237,"line":266},[235,1220,270],{"emptyLinePlaceholder":269},[235,1222,1223],{"class":237,"line":273},[235,1224,1225],{"class":241},"# Output: XML files in the metadata directory\n",[235,1227,1228],{"class":237,"line":286},[235,1229,1230],{"class":241},"# ✓ Compiled x_custom_incident_tracker.xml\n",[235,1232,1233],{"class":237,"line":298},[235,1234,1235],{"class":241},"# ✓ Compiled business_rules.xml\n",[235,1237,1238],{"class":237,"line":309},[235,1239,1240],{"class":241},"# ✓ Compiled acls.xml\n",[12,1242,1243],{},[27,1244,1245],{},"2. Syncs with ServiceNow Instances",[12,1247,1248],{},"Deploy your code directly to instances:",[225,1250,1252],{"className":1143,"code":1251,"language":1145,"meta":230,"style":230},"# Connect to your instance\nsn-sdk configure --instance dev12345.service-now.com\n\n# Deploy your application\nsn-sdk deploy\n\n# Pull changes from the instance\nsn-sdk pull\n",[232,1253,1254,1259,1272,1276,1281,1288,1292,1297],{"__ignoreMap":230},[235,1255,1256],{"class":237,"line":238},[235,1257,1258],{"class":241},"# Connect to your instance\n",[235,1260,1261,1263,1266,1269],{"class":237,"line":245},[235,1262,1213],{"class":279},[235,1264,1265],{"class":259}," configure",[235,1267,1268],{"class":364}," --instance",[235,1270,1271],{"class":259}," dev12345.service-now.com\n",[235,1273,1274],{"class":237,"line":266},[235,1275,270],{"emptyLinePlaceholder":269},[235,1277,1278],{"class":237,"line":273},[235,1279,1280],{"class":241},"# Deploy your application\n",[235,1282,1283,1285],{"class":237,"line":286},[235,1284,1213],{"class":279},[235,1286,1287],{"class":259}," deploy\n",[235,1289,1290],{"class":237,"line":298},[235,1291,270],{"emptyLinePlaceholder":269},[235,1293,1294],{"class":237,"line":309},[235,1295,1296],{"class":241},"# Pull changes from the instance\n",[235,1298,1299,1301],{"class":237,"line":318},[235,1300,1213],{"class":279},[235,1302,1303],{"class":259}," pull\n",[12,1305,1306],{},[27,1307,1308],{},"3. Enables Modern Development Workflows",[12,1310,1311],{},"With the SDK, you can:",[48,1313,1314,1317,1320,1323,1326],{},[51,1315,1316],{},"Use your favorite code editor (VS Code, IntelliJ, Sublime, etc.)",[51,1318,1319],{},"Implement continuous integration\u002Fcontinuous deployment (CI\u002FCD)",[51,1321,1322],{},"Run automated tests before deployment",[51,1324,1325],{},"Work offline and sync when ready",[51,1327,1328],{},"Use NPM for dependency management",[32,1330,1332],{"id":1331},"example-development-workflow","Example Development Workflow",[225,1334,1336],{"className":1143,"code":1335,"language":1145,"meta":230,"style":230},"# 1. Create a new application\nsn-sdk create-app my-custom-app\n\n# 2. Navigate to the app directory\ncd my-custom-app\n\n# 3. Install dependencies\nnpm install\n\n# 4. Write your Fluent code\n# (Edit files in src\u002F directory)\n\n# 5. Compile Fluent to metadata\nnpm run build\n\n# 6. Deploy to your dev instance\nnpm run deploy\n\n# 7. Commit to Git\ngit add .\ngit commit -m \"Add incident tracker table\"\ngit push origin feature\u002Fincident-tracker\n",[232,1337,1338,1343,1353,1357,1362,1369,1373,1378,1385,1389,1394,1399,1403,1408,1418,1422,1427,1435,1439,1444,1455,1468],{"__ignoreMap":230},[235,1339,1340],{"class":237,"line":238},[235,1341,1342],{"class":241},"# 1. Create a new application\n",[235,1344,1345,1347,1350],{"class":237,"line":245},[235,1346,1213],{"class":279},[235,1348,1349],{"class":259}," create-app",[235,1351,1352],{"class":259}," my-custom-app\n",[235,1354,1355],{"class":237,"line":266},[235,1356,270],{"emptyLinePlaceholder":269},[235,1358,1359],{"class":237,"line":273},[235,1360,1361],{"class":241},"# 2. Navigate to the app directory\n",[235,1363,1364,1367],{"class":237,"line":286},[235,1365,1366],{"class":364},"cd",[235,1368,1352],{"class":259},[235,1370,1371],{"class":237,"line":298},[235,1372,270],{"emptyLinePlaceholder":269},[235,1374,1375],{"class":237,"line":309},[235,1376,1377],{"class":241},"# 3. Install dependencies\n",[235,1379,1380,1382],{"class":237,"line":318},[235,1381,1157],{"class":279},[235,1383,1384],{"class":259}," install\n",[235,1386,1387],{"class":237,"line":324},[235,1388,270],{"emptyLinePlaceholder":269},[235,1390,1391],{"class":237,"line":336},[235,1392,1393],{"class":241},"# 4. Write your Fluent code\n",[235,1395,1396],{"class":237,"line":347},[235,1397,1398],{"class":241},"# (Edit files in src\u002F directory)\n",[235,1400,1401],{"class":237,"line":358},[235,1402,270],{"emptyLinePlaceholder":269},[235,1404,1405],{"class":237,"line":370},[235,1406,1407],{"class":241},"# 5. Compile Fluent to metadata\n",[235,1409,1410,1412,1415],{"class":237,"line":379},[235,1411,1157],{"class":279},[235,1413,1414],{"class":259}," run",[235,1416,1417],{"class":259}," build\n",[235,1419,1420],{"class":237,"line":385},[235,1421,270],{"emptyLinePlaceholder":269},[235,1423,1424],{"class":237,"line":400},[235,1425,1426],{"class":241},"# 6. Deploy to your dev instance\n",[235,1428,1429,1431,1433],{"class":237,"line":405},[235,1430,1157],{"class":279},[235,1432,1414],{"class":259},[235,1434,1287],{"class":259},[235,1436,1437],{"class":237,"line":415},[235,1438,270],{"emptyLinePlaceholder":269},[235,1440,1441],{"class":237,"line":425},[235,1442,1443],{"class":241},"# 7. Commit to Git\n",[235,1445,1446,1449,1452],{"class":237,"line":434},[235,1447,1448],{"class":279},"git",[235,1450,1451],{"class":259}," add",[235,1453,1454],{"class":259}," .\n",[235,1456,1457,1459,1462,1465],{"class":237,"line":439},[235,1458,1448],{"class":279},[235,1460,1461],{"class":259}," commit",[235,1463,1464],{"class":364}," -m",[235,1466,1467],{"class":259}," \"Add incident tracker table\"\n",[235,1469,1470,1472,1475,1478],{"class":237,"line":451},[235,1471,1448],{"class":279},[235,1473,1474],{"class":259}," push",[235,1476,1477],{"class":259}," origin",[235,1479,1480],{"class":259}," feature\u002Fincident-tracker\n",[19,1482,1484],{"id":1483},"ecmascript-2021-es12-support-modern-javascript-unleashed","ECMAScript 2021 (ES12) Support: Modern JavaScript Unleashed",[12,1486,1487,1488,1491],{},"Perhaps the most immediately impactful feature for day-to-day development is the comprehensive ",[27,1489,1490],{},"ECMAScript 2021 (ES12) support"," now available in both scoped and global scripts.",[32,1493,1495],{"id":1494},"whats-new","What's New?",[12,1497,1498],{},"Prior to Xanadu, ServiceNow was limited to ES5 syntax (from 2009!) or a restricted version of ES6 in scoped apps. Xanadu brings us to 2021 with support for:",[12,1500,1501],{},[27,1502,1503],{},"1. Arrow Functions",[225,1505,1509],{"className":1506,"code":1507,"language":1508,"meta":230,"style":230},"language-javascript shiki shiki-themes github-light github-light","\u002F\u002F Before: ES5\nvar calculateTotal = function(items) {\n    return items.reduce(function(sum, item) {\n        return sum + item.price;\n    }, 0);\n};\n\n\u002F\u002F After: ES12\nconst calculateTotal = (items) => {\n    return items.reduce((sum, item) => sum + item.price, 0);\n};\n\n\u002F\u002F Even shorter\nconst calculateTotal = (items) => items.reduce((sum, item) => sum + item.price, 0);\n","javascript",[232,1510,1511,1516,1537,1565,1579,1589,1593,1597,1602,1622,1654,1658,1662,1667],{"__ignoreMap":230},[235,1512,1513],{"class":237,"line":238},[235,1514,1515],{"class":241},"\u002F\u002F Before: ES5\n",[235,1517,1518,1521,1524,1526,1529,1531,1534],{"class":237,"line":245},[235,1519,1520],{"class":248},"var",[235,1522,1523],{"class":279}," calculateTotal",[235,1525,560],{"class":248},[235,1527,1528],{"class":248}," function",[235,1530,891],{"class":252},[235,1532,1533],{"class":388},"items",[235,1535,1536],{"class":252},") {\n",[235,1538,1539,1542,1545,1548,1550,1553,1555,1558,1560,1563],{"class":237,"line":266},[235,1540,1541],{"class":248},"    return",[235,1543,1544],{"class":252}," items.",[235,1546,1547],{"class":279},"reduce",[235,1549,891],{"class":252},[235,1551,1552],{"class":248},"function",[235,1554,891],{"class":252},[235,1556,1557],{"class":388},"sum",[235,1559,579],{"class":252},[235,1561,1562],{"class":388},"item",[235,1564,1536],{"class":252},[235,1566,1567,1570,1573,1576],{"class":237,"line":273},[235,1568,1569],{"class":248},"        return",[235,1571,1572],{"class":252}," sum ",[235,1574,1575],{"class":248},"+",[235,1577,1578],{"class":252}," item.price;\n",[235,1580,1581,1584,1587],{"class":237,"line":286},[235,1582,1583],{"class":252},"    }, ",[235,1585,1586],{"class":364},"0",[235,1588,966],{"class":252},[235,1590,1591],{"class":237,"line":298},[235,1592,705],{"class":252},[235,1594,1595],{"class":237,"line":309},[235,1596,270],{"emptyLinePlaceholder":269},[235,1598,1599],{"class":237,"line":318},[235,1600,1601],{"class":241},"\u002F\u002F After: ES12\n",[235,1603,1604,1606,1608,1610,1613,1615,1617,1620],{"class":237,"line":324},[235,1605,554],{"class":248},[235,1607,1523],{"class":279},[235,1609,560],{"class":248},[235,1611,1612],{"class":252}," (",[235,1614,1533],{"class":388},[235,1616,957],{"class":252},[235,1618,1619],{"class":248},"=>",[235,1621,333],{"class":252},[235,1623,1624,1626,1628,1630,1633,1635,1637,1639,1641,1643,1645,1647,1650,1652],{"class":237,"line":336},[235,1625,1541],{"class":248},[235,1627,1544],{"class":252},[235,1629,1547],{"class":279},[235,1631,1632],{"class":252},"((",[235,1634,1557],{"class":388},[235,1636,579],{"class":252},[235,1638,1562],{"class":388},[235,1640,957],{"class":252},[235,1642,1619],{"class":248},[235,1644,1572],{"class":252},[235,1646,1575],{"class":248},[235,1648,1649],{"class":252}," item.price, ",[235,1651,1586],{"class":364},[235,1653,966],{"class":252},[235,1655,1656],{"class":237,"line":347},[235,1657,705],{"class":252},[235,1659,1660],{"class":237,"line":358},[235,1661,270],{"emptyLinePlaceholder":269},[235,1663,1664],{"class":237,"line":370},[235,1665,1666],{"class":241},"\u002F\u002F Even shorter\n",[235,1668,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707],{"class":237,"line":379},[235,1670,554],{"class":248},[235,1672,1523],{"class":279},[235,1674,560],{"class":248},[235,1676,1612],{"class":252},[235,1678,1533],{"class":388},[235,1680,957],{"class":252},[235,1682,1619],{"class":248},[235,1684,1544],{"class":252},[235,1686,1547],{"class":279},[235,1688,1632],{"class":252},[235,1690,1557],{"class":388},[235,1692,579],{"class":252},[235,1694,1562],{"class":388},[235,1696,957],{"class":252},[235,1698,1619],{"class":248},[235,1700,1572],{"class":252},[235,1702,1575],{"class":248},[235,1704,1649],{"class":252},[235,1706,1586],{"class":364},[235,1708,966],{"class":252},[12,1710,1711],{},[27,1712,1713],{},"2. Template Literals",[225,1715,1717],{"className":1506,"code":1716,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: ES5\nvar message = 'Incident ' + incidentNumber + ' assigned to ' + assigneeName;\n\n\u002F\u002F After: ES12\nconst message = `Incident ${incidentNumber} assigned to ${assigneeName}`;\n\n\u002F\u002F Multi-line strings\nconst emailBody = `\n    Hello ${userName},\n\n    Your incident ${incidentNumber} has been assigned to ${assigneeName}.\n    Expected resolution: ${resolutionDate}\n\n    Thank you,\n    IT Support Team\n`;\n",[232,1718,1719,1723,1752,1756,1760,1786,1790,1795,1807,1818,1822,1837,1847,1851,1856,1861],{"__ignoreMap":230},[235,1720,1721],{"class":237,"line":238},[235,1722,1515],{"class":241},[235,1724,1725,1727,1730,1733,1736,1739,1742,1744,1747,1749],{"class":237,"line":245},[235,1726,1520],{"class":248},[235,1728,1729],{"class":252}," message ",[235,1731,1732],{"class":248},"=",[235,1734,1735],{"class":259}," 'Incident '",[235,1737,1738],{"class":248}," +",[235,1740,1741],{"class":252}," incidentNumber ",[235,1743,1575],{"class":248},[235,1745,1746],{"class":259}," ' assigned to '",[235,1748,1738],{"class":248},[235,1750,1751],{"class":252}," assigneeName;\n",[235,1753,1754],{"class":237,"line":266},[235,1755,270],{"emptyLinePlaceholder":269},[235,1757,1758],{"class":237,"line":273},[235,1759,1601],{"class":241},[235,1761,1762,1764,1767,1769,1772,1775,1778,1781,1784],{"class":237,"line":286},[235,1763,554],{"class":248},[235,1765,1766],{"class":364}," message",[235,1768,560],{"class":248},[235,1770,1771],{"class":259}," `Incident ${",[235,1773,1774],{"class":252},"incidentNumber",[235,1776,1777],{"class":259},"} assigned to ${",[235,1779,1780],{"class":252},"assigneeName",[235,1782,1783],{"class":259},"}`",[235,1785,263],{"class":252},[235,1787,1788],{"class":237,"line":298},[235,1789,270],{"emptyLinePlaceholder":269},[235,1791,1792],{"class":237,"line":309},[235,1793,1794],{"class":241},"\u002F\u002F Multi-line strings\n",[235,1796,1797,1799,1802,1804],{"class":237,"line":318},[235,1798,554],{"class":248},[235,1800,1801],{"class":364}," emailBody",[235,1803,560],{"class":248},[235,1805,1806],{"class":259}," `\n",[235,1808,1809,1812,1815],{"class":237,"line":324},[235,1810,1811],{"class":259},"    Hello ${",[235,1813,1814],{"class":252},"userName",[235,1816,1817],{"class":259},"},\n",[235,1819,1820],{"class":237,"line":336},[235,1821,270],{"emptyLinePlaceholder":269},[235,1823,1824,1827,1829,1832,1834],{"class":237,"line":347},[235,1825,1826],{"class":259},"    Your incident ${",[235,1828,1774],{"class":252},[235,1830,1831],{"class":259},"} has been assigned to ${",[235,1833,1780],{"class":252},[235,1835,1836],{"class":259},"}.\n",[235,1838,1839,1842,1845],{"class":237,"line":358},[235,1840,1841],{"class":259},"    Expected resolution: ${",[235,1843,1844],{"class":252},"resolutionDate",[235,1846,506],{"class":259},[235,1848,1849],{"class":237,"line":370},[235,1850,270],{"emptyLinePlaceholder":269},[235,1852,1853],{"class":237,"line":379},[235,1854,1855],{"class":259},"    Thank you,\n",[235,1857,1858],{"class":237,"line":385},[235,1859,1860],{"class":259},"    IT Support Team\n",[235,1862,1863,1866],{"class":237,"line":400},[235,1864,1865],{"class":259},"`",[235,1867,263],{"class":252},[12,1869,1870],{},[27,1871,1872],{},"3. Destructuring Assignment",[225,1874,1876],{"className":1506,"code":1875,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: ES5\nvar user = getUserData();\nvar name = user.name;\nvar email = user.email;\nvar department = user.department;\n\n\u002F\u002F After: ES12\nconst { name, email, department } = getUserData();\n\n\u002F\u002F Array destructuring\nconst [firstName, lastName] = fullName.split(' ');\n\n\u002F\u002F With defaults\nconst { priority = 3, urgency = 2 } = incident;\n",[232,1877,1878,1882,1897,1909,1921,1933,1937,1941,1970,1974,1979,2012,2016,2021],{"__ignoreMap":230},[235,1879,1880],{"class":237,"line":238},[235,1881,1515],{"class":241},[235,1883,1884,1886,1889,1891,1894],{"class":237,"line":245},[235,1885,1520],{"class":248},[235,1887,1888],{"class":252}," user ",[235,1890,1732],{"class":248},[235,1892,1893],{"class":279}," getUserData",[235,1895,1896],{"class":252},"();\n",[235,1898,1899,1901,1904,1906],{"class":237,"line":266},[235,1900,1520],{"class":248},[235,1902,1903],{"class":252}," name ",[235,1905,1732],{"class":248},[235,1907,1908],{"class":252}," user.name;\n",[235,1910,1911,1913,1916,1918],{"class":237,"line":273},[235,1912,1520],{"class":248},[235,1914,1915],{"class":252}," email ",[235,1917,1732],{"class":248},[235,1919,1920],{"class":252}," user.email;\n",[235,1922,1923,1925,1928,1930],{"class":237,"line":286},[235,1924,1520],{"class":248},[235,1926,1927],{"class":252}," department ",[235,1929,1732],{"class":248},[235,1931,1932],{"class":252}," user.department;\n",[235,1934,1935],{"class":237,"line":298},[235,1936,270],{"emptyLinePlaceholder":269},[235,1938,1939],{"class":237,"line":309},[235,1940,1601],{"class":241},[235,1942,1943,1945,1948,1951,1953,1956,1958,1961,1964,1966,1968],{"class":237,"line":318},[235,1944,554],{"class":248},[235,1946,1947],{"class":252}," { ",[235,1949,1950],{"class":364},"name",[235,1952,579],{"class":252},[235,1954,1955],{"class":364},"email",[235,1957,579],{"class":252},[235,1959,1960],{"class":364},"department",[235,1962,1963],{"class":252}," } ",[235,1965,1732],{"class":248},[235,1967,1893],{"class":279},[235,1969,1896],{"class":252},[235,1971,1972],{"class":237,"line":324},[235,1973,270],{"emptyLinePlaceholder":269},[235,1975,1976],{"class":237,"line":336},[235,1977,1978],{"class":241},"\u002F\u002F Array destructuring\n",[235,1980,1981,1983,1986,1989,1991,1994,1997,1999,2002,2005,2007,2010],{"class":237,"line":347},[235,1982,554],{"class":248},[235,1984,1985],{"class":252}," [",[235,1987,1988],{"class":364},"firstName",[235,1990,579],{"class":252},[235,1992,1993],{"class":364},"lastName",[235,1995,1996],{"class":252},"] ",[235,1998,1732],{"class":248},[235,2000,2001],{"class":252}," fullName.",[235,2003,2004],{"class":279},"split",[235,2006,891],{"class":252},[235,2008,2009],{"class":259},"' '",[235,2011,966],{"class":252},[235,2013,2014],{"class":237,"line":358},[235,2015,270],{"emptyLinePlaceholder":269},[235,2017,2018],{"class":237,"line":370},[235,2019,2020],{"class":241},"\u002F\u002F With defaults\n",[235,2022,2023,2025,2027,2030,2032,2034,2036,2039,2041,2044,2046,2048],{"class":237,"line":379},[235,2024,554],{"class":248},[235,2026,1947],{"class":252},[235,2028,2029],{"class":364},"priority",[235,2031,560],{"class":248},[235,2033,1089],{"class":364},[235,2035,579],{"class":252},[235,2037,2038],{"class":364},"urgency",[235,2040,560],{"class":248},[235,2042,2043],{"class":364}," 2",[235,2045,1963],{"class":252},[235,2047,1732],{"class":248},[235,2049,2050],{"class":252}," incident;\n",[12,2052,2053],{},[27,2054,2055],{},"4. Default Parameters",[225,2057,2059],{"className":1506,"code":2058,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: ES5\nfunction createIncident(title, priority) {\n    priority = priority || 3;\n    \u002F\u002F ... create incident\n}\n\n\u002F\u002F After: ES12\nfunction createIncident(title, priority = 3) {\n    \u002F\u002F ... create incident\n}\n\n\u002F\u002F With object destructuring\nfunction updateRecord({ table, sysId, fields = {} }) {\n    \u002F\u002F ... update logic\n}\n",[232,2060,2061,2065,2083,2099,2104,2108,2112,2116,2136,2140,2144,2148,2153,2181,2186],{"__ignoreMap":230},[235,2062,2063],{"class":237,"line":238},[235,2064,1515],{"class":241},[235,2066,2067,2069,2072,2074,2077,2079,2081],{"class":237,"line":245},[235,2068,1552],{"class":248},[235,2070,2071],{"class":279}," createIncident",[235,2073,891],{"class":252},[235,2075,2076],{"class":388},"title",[235,2078,579],{"class":252},[235,2080,2029],{"class":388},[235,2082,1536],{"class":252},[235,2084,2085,2088,2090,2093,2095,2097],{"class":237,"line":266},[235,2086,2087],{"class":252},"    priority ",[235,2089,1732],{"class":248},[235,2091,2092],{"class":252}," priority ",[235,2094,960],{"class":248},[235,2096,1089],{"class":364},[235,2098,263],{"class":252},[235,2100,2101],{"class":237,"line":273},[235,2102,2103],{"class":241},"    \u002F\u002F ... create incident\n",[235,2105,2106],{"class":237,"line":286},[235,2107,506],{"class":252},[235,2109,2110],{"class":237,"line":298},[235,2111,270],{"emptyLinePlaceholder":269},[235,2113,2114],{"class":237,"line":309},[235,2115,1601],{"class":241},[235,2117,2118,2120,2122,2124,2126,2128,2130,2132,2134],{"class":237,"line":318},[235,2119,1552],{"class":248},[235,2121,2071],{"class":279},[235,2123,891],{"class":252},[235,2125,2076],{"class":388},[235,2127,579],{"class":252},[235,2129,2029],{"class":388},[235,2131,560],{"class":248},[235,2133,1089],{"class":364},[235,2135,1536],{"class":252},[235,2137,2138],{"class":237,"line":324},[235,2139,2103],{"class":241},[235,2141,2142],{"class":237,"line":336},[235,2143,506],{"class":252},[235,2145,2146],{"class":237,"line":347},[235,2147,270],{"emptyLinePlaceholder":269},[235,2149,2150],{"class":237,"line":358},[235,2151,2152],{"class":241},"\u002F\u002F With object destructuring\n",[235,2154,2155,2157,2160,2163,2166,2168,2171,2173,2176,2178],{"class":237,"line":370},[235,2156,1552],{"class":248},[235,2158,2159],{"class":279}," updateRecord",[235,2161,2162],{"class":252},"({ ",[235,2164,2165],{"class":388},"table",[235,2167,579],{"class":252},[235,2169,2170],{"class":388},"sysId",[235,2172,579],{"class":252},[235,2174,2175],{"class":388},"fields",[235,2177,560],{"class":248},[235,2179,2180],{"class":252}," {} }) {\n",[235,2182,2183],{"class":237,"line":379},[235,2184,2185],{"class":241},"    \u002F\u002F ... update logic\n",[235,2187,2188],{"class":237,"line":385},[235,2189,506],{"class":252},[12,2191,2192],{},[27,2193,2194],{},"5. Spread Operator",[225,2196,2198],{"className":1506,"code":2197,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: ES5 (complex array merging)\nvar array1 = [1, 2, 3];\nvar array2 = [4, 5, 6];\nvar combined = array1.concat(array2);\n\n\u002F\u002F After: ES12\nconst array1 = [1, 2, 3];\nconst array2 = [4, 5, 6];\nconst combined = [...array1, ...array2];\n\n\u002F\u002F Object spreading\nconst defaults = { priority: 3, state: 1 };\nconst userInput = { priority: 2, caller: 'user123' };\nconst incident = { ...defaults, ...userInput }; \u002F\u002F userInput overrides defaults\n",[232,2199,2200,2205,2232,2258,2276,2280,2284,2307,2330,2352,2356,2361,2383,2404],{"__ignoreMap":230},[235,2201,2202],{"class":237,"line":238},[235,2203,2204],{"class":241},"\u002F\u002F Before: ES5 (complex array merging)\n",[235,2206,2207,2209,2212,2214,2216,2219,2221,2224,2226,2229],{"class":237,"line":245},[235,2208,1520],{"class":248},[235,2210,2211],{"class":252}," array1 ",[235,2213,1732],{"class":248},[235,2215,1985],{"class":252},[235,2217,2218],{"class":364},"1",[235,2220,579],{"class":252},[235,2222,2223],{"class":364},"2",[235,2225,579],{"class":252},[235,2227,2228],{"class":364},"3",[235,2230,2231],{"class":252},"];\n",[235,2233,2234,2236,2239,2241,2243,2246,2248,2251,2253,2256],{"class":237,"line":266},[235,2235,1520],{"class":248},[235,2237,2238],{"class":252}," array2 ",[235,2240,1732],{"class":248},[235,2242,1985],{"class":252},[235,2244,2245],{"class":364},"4",[235,2247,579],{"class":252},[235,2249,2250],{"class":364},"5",[235,2252,579],{"class":252},[235,2254,2255],{"class":364},"6",[235,2257,2231],{"class":252},[235,2259,2260,2262,2265,2267,2270,2273],{"class":237,"line":273},[235,2261,1520],{"class":248},[235,2263,2264],{"class":252}," combined ",[235,2266,1732],{"class":248},[235,2268,2269],{"class":252}," array1.",[235,2271,2272],{"class":279},"concat",[235,2274,2275],{"class":252},"(array2);\n",[235,2277,2278],{"class":237,"line":286},[235,2279,270],{"emptyLinePlaceholder":269},[235,2281,2282],{"class":237,"line":298},[235,2283,1601],{"class":241},[235,2285,2286,2288,2291,2293,2295,2297,2299,2301,2303,2305],{"class":237,"line":309},[235,2287,554],{"class":248},[235,2289,2290],{"class":364}," array1",[235,2292,560],{"class":248},[235,2294,1985],{"class":252},[235,2296,2218],{"class":364},[235,2298,579],{"class":252},[235,2300,2223],{"class":364},[235,2302,579],{"class":252},[235,2304,2228],{"class":364},[235,2306,2231],{"class":252},[235,2308,2309,2311,2314,2316,2318,2320,2322,2324,2326,2328],{"class":237,"line":318},[235,2310,554],{"class":248},[235,2312,2313],{"class":364}," array2",[235,2315,560],{"class":248},[235,2317,1985],{"class":252},[235,2319,2245],{"class":364},[235,2321,579],{"class":252},[235,2323,2250],{"class":364},[235,2325,579],{"class":252},[235,2327,2255],{"class":364},[235,2329,2231],{"class":252},[235,2331,2332,2334,2337,2339,2341,2344,2347,2349],{"class":237,"line":324},[235,2333,554],{"class":248},[235,2335,2336],{"class":364}," combined",[235,2338,560],{"class":248},[235,2340,1985],{"class":252},[235,2342,2343],{"class":248},"...",[235,2345,2346],{"class":252},"array1, ",[235,2348,2343],{"class":248},[235,2350,2351],{"class":252},"array2];\n",[235,2353,2354],{"class":237,"line":336},[235,2355,270],{"emptyLinePlaceholder":269},[235,2357,2358],{"class":237,"line":347},[235,2359,2360],{"class":241},"\u002F\u002F Object spreading\n",[235,2362,2363,2365,2368,2370,2373,2375,2378,2380],{"class":237,"line":358},[235,2364,554],{"class":248},[235,2366,2367],{"class":364}," defaults",[235,2369,560],{"class":248},[235,2371,2372],{"class":252}," { priority: ",[235,2374,2228],{"class":364},[235,2376,2377],{"class":252},", state: ",[235,2379,2218],{"class":364},[235,2381,2382],{"class":252}," };\n",[235,2384,2385,2387,2390,2392,2394,2396,2399,2402],{"class":237,"line":370},[235,2386,554],{"class":248},[235,2388,2389],{"class":364}," userInput",[235,2391,560],{"class":248},[235,2393,2372],{"class":252},[235,2395,2223],{"class":364},[235,2397,2398],{"class":252},", caller: ",[235,2400,2401],{"class":259},"'user123'",[235,2403,2382],{"class":252},[235,2405,2406,2408,2411,2413,2415,2417,2420,2422,2425],{"class":237,"line":379},[235,2407,554],{"class":248},[235,2409,2410],{"class":364}," incident",[235,2412,560],{"class":248},[235,2414,1947],{"class":252},[235,2416,2343],{"class":248},[235,2418,2419],{"class":252},"defaults, ",[235,2421,2343],{"class":248},[235,2423,2424],{"class":252},"userInput }; ",[235,2426,2427],{"class":241},"\u002F\u002F userInput overrides defaults\n",[12,2429,2430],{},"**6. Optional Chaining (?.) **",[225,2432,2434],{"className":1506,"code":2433,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: ES5 (verbose null checking)\nvar manager = null;\nif (user && user.manager && user.manager.name) {\n    manager = user.manager.name;\n}\n\n\u002F\u002F After: ES12\nconst manager = user?.manager?.name;\n\n\u002F\u002F With function calls\nconst result = obj.method?.();\n\n\u002F\u002F With arrays\nconst firstItem = array?.[0];\n",[232,2435,2436,2441,2454,2473,2483,2487,2491,2495,2507,2511,2516,2534,2538,2543],{"__ignoreMap":230},[235,2437,2438],{"class":237,"line":238},[235,2439,2440],{"class":241},"\u002F\u002F Before: ES5 (verbose null checking)\n",[235,2442,2443,2445,2448,2450,2452],{"class":237,"line":245},[235,2444,1520],{"class":248},[235,2446,2447],{"class":252}," manager ",[235,2449,1732],{"class":248},[235,2451,915],{"class":364},[235,2453,263],{"class":252},[235,2455,2456,2459,2462,2465,2468,2470],{"class":237,"line":266},[235,2457,2458],{"class":248},"if",[235,2460,2461],{"class":252}," (user ",[235,2463,2464],{"class":248},"&&",[235,2466,2467],{"class":252}," user.manager ",[235,2469,2464],{"class":248},[235,2471,2472],{"class":252}," user.manager.name) {\n",[235,2474,2475,2478,2480],{"class":237,"line":273},[235,2476,2477],{"class":252},"    manager ",[235,2479,1732],{"class":248},[235,2481,2482],{"class":252}," user.manager.name;\n",[235,2484,2485],{"class":237,"line":286},[235,2486,506],{"class":252},[235,2488,2489],{"class":237,"line":298},[235,2490,270],{"emptyLinePlaceholder":269},[235,2492,2493],{"class":237,"line":309},[235,2494,1601],{"class":241},[235,2496,2497,2499,2502,2504],{"class":237,"line":318},[235,2498,554],{"class":248},[235,2500,2501],{"class":364}," manager",[235,2503,560],{"class":248},[235,2505,2506],{"class":252}," user?.manager?.name;\n",[235,2508,2509],{"class":237,"line":324},[235,2510,270],{"emptyLinePlaceholder":269},[235,2512,2513],{"class":237,"line":336},[235,2514,2515],{"class":241},"\u002F\u002F With function calls\n",[235,2517,2518,2520,2523,2525,2528,2531],{"class":237,"line":347},[235,2519,554],{"class":248},[235,2521,2522],{"class":364}," result",[235,2524,560],{"class":248},[235,2526,2527],{"class":252}," obj.",[235,2529,2530],{"class":279},"method",[235,2532,2533],{"class":252},"?.();\n",[235,2535,2536],{"class":237,"line":358},[235,2537,270],{"emptyLinePlaceholder":269},[235,2539,2540],{"class":237,"line":370},[235,2541,2542],{"class":241},"\u002F\u002F With arrays\n",[235,2544,2545,2547,2550,2552,2555,2557],{"class":237,"line":379},[235,2546,554],{"class":248},[235,2548,2549],{"class":364}," firstItem",[235,2551,560],{"class":248},[235,2553,2554],{"class":252}," array?.[",[235,2556,1586],{"class":364},[235,2558,2231],{"class":252},[12,2560,2561],{},[27,2562,2563],{},"7. Nullish Coalescing (??)",[225,2565,2567],{"className":1506,"code":2566,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: Using || (problematic with falsy values)\nvar priority = incident.priority || 3; \u002F\u002F Problem: priority of 0 becomes 3!\n\n\u002F\u002F After: ES12 with ??\nconst priority = incident.priority ?? 3; \u002F\u002F Only uses default if null\u002Fundefined\n\n\u002F\u002F Combining with optional chaining\nconst departmentName = user?.department?.name ?? 'Unknown Department';\n",[232,2568,2569,2574,2595,2599,2604,2625,2629,2634],{"__ignoreMap":230},[235,2570,2571],{"class":237,"line":238},[235,2572,2573],{"class":241},"\u002F\u002F Before: Using || (problematic with falsy values)\n",[235,2575,2576,2578,2580,2582,2585,2587,2589,2592],{"class":237,"line":245},[235,2577,1520],{"class":248},[235,2579,2092],{"class":252},[235,2581,1732],{"class":248},[235,2583,2584],{"class":252}," incident.priority ",[235,2586,960],{"class":248},[235,2588,1089],{"class":364},[235,2590,2591],{"class":252},"; ",[235,2593,2594],{"class":241},"\u002F\u002F Problem: priority of 0 becomes 3!\n",[235,2596,2597],{"class":237,"line":266},[235,2598,270],{"emptyLinePlaceholder":269},[235,2600,2601],{"class":237,"line":273},[235,2602,2603],{"class":241},"\u002F\u002F After: ES12 with ??\n",[235,2605,2606,2608,2611,2613,2615,2618,2620,2622],{"class":237,"line":286},[235,2607,554],{"class":248},[235,2609,2610],{"class":364}," priority",[235,2612,560],{"class":248},[235,2614,2584],{"class":252},[235,2616,2617],{"class":248},"??",[235,2619,1089],{"class":364},[235,2621,2591],{"class":252},[235,2623,2624],{"class":241},"\u002F\u002F Only uses default if null\u002Fundefined\n",[235,2626,2627],{"class":237,"line":298},[235,2628,270],{"emptyLinePlaceholder":269},[235,2630,2631],{"class":237,"line":309},[235,2632,2633],{"class":241},"\u002F\u002F Combining with optional chaining\n",[235,2635,2636,2638,2641,2643,2646,2648,2651],{"class":237,"line":318},[235,2637,554],{"class":248},[235,2639,2640],{"class":364}," departmentName",[235,2642,560],{"class":248},[235,2644,2645],{"class":252}," user?.department?.name ",[235,2647,2617],{"class":248},[235,2649,2650],{"class":259}," 'Unknown Department'",[235,2652,263],{"class":252},[12,2654,2655],{},[27,2656,2657],{},"8. Let and Const",[225,2659,2661],{"className":1506,"code":2660,"language":1508,"meta":230,"style":230},"\u002F\u002F Before: ES5 (function-scoped var)\nfor (var i = 0; i \u003C 10; i++) {\n    setTimeout(function() {\n        console.log(i); \u002F\u002F Always prints 10!\n    }, 100);\n}\n\n\u002F\u002F After: ES12 (block-scoped let)\nfor (let i = 0; i \u003C 10; i++) {\n    setTimeout(() => {\n        console.log(i); \u002F\u002F Prints 0, 1, 2, ... 9\n    }, 100);\n}\n\n\u002F\u002F Const for immutable references\nconst MAX_RETRIES = 3;\nconst config = { timeout: 5000 };\n",[232,2662,2663,2668,2702,2714,2728,2737,2741,2745,2750,2777,2788,2799,2807,2811,2815,2820,2833],{"__ignoreMap":230},[235,2664,2665],{"class":237,"line":238},[235,2666,2667],{"class":241},"\u002F\u002F Before: ES5 (function-scoped var)\n",[235,2669,2670,2673,2675,2677,2680,2682,2685,2688,2691,2694,2697,2700],{"class":237,"line":245},[235,2671,2672],{"class":248},"for",[235,2674,1612],{"class":252},[235,2676,1520],{"class":248},[235,2678,2679],{"class":252}," i ",[235,2681,1732],{"class":248},[235,2683,2684],{"class":364}," 0",[235,2686,2687],{"class":252},"; i ",[235,2689,2690],{"class":248},"\u003C",[235,2692,2693],{"class":364}," 10",[235,2695,2696],{"class":252},"; i",[235,2698,2699],{"class":248},"++",[235,2701,1536],{"class":252},[235,2703,2704,2707,2709,2711],{"class":237,"line":266},[235,2705,2706],{"class":279},"    setTimeout",[235,2708,891],{"class":252},[235,2710,1552],{"class":248},[235,2712,2713],{"class":252},"() {\n",[235,2715,2716,2719,2722,2725],{"class":237,"line":273},[235,2717,2718],{"class":252},"        console.",[235,2720,2721],{"class":279},"log",[235,2723,2724],{"class":252},"(i); ",[235,2726,2727],{"class":241},"\u002F\u002F Always prints 10!\n",[235,2729,2730,2732,2735],{"class":237,"line":286},[235,2731,1583],{"class":252},[235,2733,2734],{"class":364},"100",[235,2736,966],{"class":252},[235,2738,2739],{"class":237,"line":298},[235,2740,506],{"class":252},[235,2742,2743],{"class":237,"line":309},[235,2744,270],{"emptyLinePlaceholder":269},[235,2746,2747],{"class":237,"line":318},[235,2748,2749],{"class":241},"\u002F\u002F After: ES12 (block-scoped let)\n",[235,2751,2752,2754,2756,2759,2761,2763,2765,2767,2769,2771,2773,2775],{"class":237,"line":324},[235,2753,2672],{"class":248},[235,2755,1612],{"class":252},[235,2757,2758],{"class":248},"let",[235,2760,2679],{"class":252},[235,2762,1732],{"class":248},[235,2764,2684],{"class":364},[235,2766,2687],{"class":252},[235,2768,2690],{"class":248},[235,2770,2693],{"class":364},[235,2772,2696],{"class":252},[235,2774,2699],{"class":248},[235,2776,1536],{"class":252},[235,2778,2779,2781,2784,2786],{"class":237,"line":336},[235,2780,2706],{"class":279},[235,2782,2783],{"class":252},"(() ",[235,2785,1619],{"class":248},[235,2787,333],{"class":252},[235,2789,2790,2792,2794,2796],{"class":237,"line":347},[235,2791,2718],{"class":252},[235,2793,2721],{"class":279},[235,2795,2724],{"class":252},[235,2797,2798],{"class":241},"\u002F\u002F Prints 0, 1, 2, ... 9\n",[235,2800,2801,2803,2805],{"class":237,"line":358},[235,2802,1583],{"class":252},[235,2804,2734],{"class":364},[235,2806,966],{"class":252},[235,2808,2809],{"class":237,"line":370},[235,2810,506],{"class":252},[235,2812,2813],{"class":237,"line":379},[235,2814,270],{"emptyLinePlaceholder":269},[235,2816,2817],{"class":237,"line":385},[235,2818,2819],{"class":241},"\u002F\u002F Const for immutable references\n",[235,2821,2822,2824,2827,2829,2831],{"class":237,"line":400},[235,2823,554],{"class":248},[235,2825,2826],{"class":364}," MAX_RETRIES",[235,2828,560],{"class":248},[235,2830,1089],{"class":364},[235,2832,263],{"class":252},[235,2834,2835,2837,2840,2842,2845,2848],{"class":237,"line":405},[235,2836,554],{"class":248},[235,2838,2839],{"class":364}," config",[235,2841,560],{"class":248},[235,2843,2844],{"class":252}," { timeout: ",[235,2846,2847],{"class":364},"5000",[235,2849,2382],{"class":252},[32,2851,2853],{"id":2852},"enabling-es12-in-your-scripts","Enabling ES12 in Your Scripts",[12,2855,2856],{},"To enable ECMAScript 2021 mode for a script:",[146,2858,2859,2862,2865,2871],{},[51,2860,2861],{},"Open the script record (Business Rule, Script Include, etc.)",[51,2863,2864],{},"Right-click the header bar",[51,2866,2867,2868],{},"Select ",[27,2869,2870],{},"Turn on ECMAScript 2021 (ES12) mode",[51,2872,2873],{},"Save the record",[12,2875,2876],{},"You can now use all modern JavaScript features in that script!",[32,2878,2880],{"id":2879},"important-note-about-global-scope","Important Note About Global Scope",[12,2882,2883,2884,2887],{},"One of the most significant changes in Xanadu is that ",[27,2885,2886],{},"ES12 mode is now available in Global scope",", not just scoped applications. This was a major limitation in previous releases that has finally been addressed.",[32,2889,2891],{"id":2890},"real-world-example-modernizing-a-script-include","Real-World Example: Modernizing a Script Include",[12,2893,2894],{},"Here's a before-and-after example showing the power of ES12:",[225,2896,2898],{"className":1506,"code":2897,"language":1508,"meta":230,"style":230},"\u002F\u002F BEFORE: ES5 Style\nvar IncidentHelper = Class.create();\nIncidentHelper.prototype = {\n    initialize: function(incidentId) {\n        this.incidentId = incidentId;\n        this.incident = null;\n        this.loadIncident();\n    },\n\n    loadIncident: function() {\n        var gr = new GlideRecord('incident');\n        if (gr.get(this.incidentId)) {\n            this.incident = gr;\n        }\n    },\n\n    getAssignmentDetails: function() {\n        if (!this.incident) {\n            return null;\n        }\n\n        var details = {};\n\n        \u002F\u002F Verbose null checking\n        if (this.incident.assigned_to && this.incident.assigned_to != '') {\n            var userGR = this.incident.assigned_to.getRefRecord();\n            if (userGR && userGR.isValidRecord()) {\n                details.assignee = userGR.getValue('name');\n                details.email = userGR.getValue('email');\n                if (userGR.manager && userGR.manager != '') {\n                    var managerGR = userGR.manager.getRefRecord();\n                    if (managerGR && managerGR.isValidRecord()) {\n                        details.manager = managerGR.getValue('name');\n                    }\n                }\n            }\n        }\n\n        if (this.incident.assignment_group && this.incident.assignment_group != '') {\n            var groupGR = this.incident.assignment_group.getRefRecord();\n            if (groupGR && groupGR.isValidRecord()) {\n                details.group = groupGR.getValue('name');\n            }\n        }\n\n        return details;\n    },\n\n    formatSummary: function() {\n        if (!this.incident) {\n            return 'Incident not found';\n        }\n\n        var number = this.incident.getValue('number');\n        var shortDesc = this.incident.getValue('short_description');\n        var state = this.incident.getDisplayValue('state');\n        var priority = this.incident.getDisplayValue('priority');\n\n        return 'Incident: ' + number + '\\n' +\n               'Description: ' + shortDesc + '\\n' +\n               'State: ' + state + '\\n' +\n               'Priority: ' + priority;\n    },\n\n    type: 'IncidentHelper'\n};\n",[232,2899,2900,2905,2922,2937,2953,2966,2979,2990,2995,2999,3010,3031,3050,3062,3067,3071,3075,3086,3099,3108,3112,3116,3128,3132,3137,3163,3183,3202,3220,3239,3259,3277,3295,3313,3319,3325,3331,3336,3341,3365,3384,3401,3419,3424,3429,3434,3442,3447,3452,3464,3477,3487,3492,3497,3521,3544,3568,3590,3595,3621,3641,3661,3672,3677,3682,3691],{"__ignoreMap":230},[235,2901,2902],{"class":237,"line":238},[235,2903,2904],{"class":241},"\u002F\u002F BEFORE: ES5 Style\n",[235,2906,2907,2909,2912,2914,2917,2920],{"class":237,"line":245},[235,2908,1520],{"class":248},[235,2910,2911],{"class":252}," IncidentHelper ",[235,2913,1732],{"class":248},[235,2915,2916],{"class":252}," Class.",[235,2918,2919],{"class":279},"create",[235,2921,1896],{"class":252},[235,2923,2924,2927,2930,2933,2935],{"class":237,"line":266},[235,2925,2926],{"class":364},"IncidentHelper",[235,2928,2929],{"class":252},".",[235,2931,2932],{"class":364},"prototype",[235,2934,560],{"class":248},[235,2936,333],{"class":252},[235,2938,2939,2942,2944,2946,2948,2951],{"class":237,"line":273},[235,2940,2941],{"class":279},"    initialize",[235,2943,573],{"class":252},[235,2945,1552],{"class":248},[235,2947,891],{"class":252},[235,2949,2950],{"class":388},"incidentId",[235,2952,1536],{"class":252},[235,2954,2955,2958,2961,2963],{"class":237,"line":286},[235,2956,2957],{"class":364},"        this",[235,2959,2960],{"class":252},".incidentId ",[235,2962,1732],{"class":248},[235,2964,2965],{"class":252}," incidentId;\n",[235,2967,2968,2970,2973,2975,2977],{"class":237,"line":298},[235,2969,2957],{"class":364},[235,2971,2972],{"class":252},".incident ",[235,2974,1732],{"class":248},[235,2976,915],{"class":364},[235,2978,263],{"class":252},[235,2980,2981,2983,2985,2988],{"class":237,"line":309},[235,2982,2957],{"class":364},[235,2984,2929],{"class":252},[235,2986,2987],{"class":279},"loadIncident",[235,2989,1896],{"class":252},[235,2991,2992],{"class":237,"line":318},[235,2993,2994],{"class":252},"    },\n",[235,2996,2997],{"class":237,"line":324},[235,2998,270],{"emptyLinePlaceholder":269},[235,3000,3001,3004,3006,3008],{"class":237,"line":336},[235,3002,3003],{"class":279},"    loadIncident",[235,3005,573],{"class":252},[235,3007,1552],{"class":248},[235,3009,2713],{"class":252},[235,3011,3012,3015,3018,3020,3023,3025,3027,3029],{"class":237,"line":347},[235,3013,3014],{"class":248},"        var",[235,3016,3017],{"class":252}," gr ",[235,3019,1732],{"class":248},[235,3021,3022],{"class":248}," new",[235,3024,900],{"class":279},[235,3026,891],{"class":252},[235,3028,824],{"class":259},[235,3030,966],{"class":252},[235,3032,3033,3036,3039,3042,3044,3047],{"class":237,"line":358},[235,3034,3035],{"class":248},"        if",[235,3037,3038],{"class":252}," (gr.",[235,3040,3041],{"class":279},"get",[235,3043,891],{"class":252},[235,3045,3046],{"class":364},"this",[235,3048,3049],{"class":252},".incidentId)) {\n",[235,3051,3052,3055,3057,3059],{"class":237,"line":370},[235,3053,3054],{"class":364},"            this",[235,3056,2972],{"class":252},[235,3058,1732],{"class":248},[235,3060,3061],{"class":252}," gr;\n",[235,3063,3064],{"class":237,"line":379},[235,3065,3066],{"class":252},"        }\n",[235,3068,3069],{"class":237,"line":385},[235,3070,2994],{"class":252},[235,3072,3073],{"class":237,"line":400},[235,3074,270],{"emptyLinePlaceholder":269},[235,3076,3077,3080,3082,3084],{"class":237,"line":405},[235,3078,3079],{"class":279},"    getAssignmentDetails",[235,3081,573],{"class":252},[235,3083,1552],{"class":248},[235,3085,2713],{"class":252},[235,3087,3088,3090,3092,3094,3096],{"class":237,"line":415},[235,3089,3035],{"class":248},[235,3091,1612],{"class":252},[235,3093,631],{"class":248},[235,3095,3046],{"class":364},[235,3097,3098],{"class":252},".incident) {\n",[235,3100,3101,3104,3106],{"class":237,"line":425},[235,3102,3103],{"class":248},"            return",[235,3105,915],{"class":364},[235,3107,263],{"class":252},[235,3109,3110],{"class":237,"line":434},[235,3111,3066],{"class":252},[235,3113,3114],{"class":237,"line":439},[235,3115,270],{"emptyLinePlaceholder":269},[235,3117,3118,3120,3123,3125],{"class":237,"line":451},[235,3119,3014],{"class":248},[235,3121,3122],{"class":252}," details ",[235,3124,1732],{"class":248},[235,3126,3127],{"class":252}," {};\n",[235,3129,3130],{"class":237,"line":456},[235,3131,270],{"emptyLinePlaceholder":269},[235,3133,3134],{"class":237,"line":466},[235,3135,3136],{"class":241},"        \u002F\u002F Verbose null checking\n",[235,3138,3139,3141,3143,3145,3148,3150,3153,3155,3158,3161],{"class":237,"line":476},[235,3140,3035],{"class":248},[235,3142,1612],{"class":252},[235,3144,3046],{"class":364},[235,3146,3147],{"class":252},".incident.assigned_to ",[235,3149,2464],{"class":248},[235,3151,3152],{"class":364}," this",[235,3154,3147],{"class":252},[235,3156,3157],{"class":248},"!=",[235,3159,3160],{"class":259}," ''",[235,3162,1536],{"class":252},[235,3164,3165,3168,3171,3173,3175,3178,3181],{"class":237,"line":485},[235,3166,3167],{"class":248},"            var",[235,3169,3170],{"class":252}," userGR ",[235,3172,1732],{"class":248},[235,3174,3152],{"class":364},[235,3176,3177],{"class":252},".incident.assigned_to.",[235,3179,3180],{"class":279},"getRefRecord",[235,3182,1896],{"class":252},[235,3184,3185,3188,3191,3193,3196,3199],{"class":237,"line":490},[235,3186,3187],{"class":248},"            if",[235,3189,3190],{"class":252}," (userGR ",[235,3192,2464],{"class":248},[235,3194,3195],{"class":252}," userGR.",[235,3197,3198],{"class":279},"isValidRecord",[235,3200,3201],{"class":252},"()) {\n",[235,3203,3204,3207,3209,3211,3213,3215,3218],{"class":237,"line":503},[235,3205,3206],{"class":252},"                details.assignee ",[235,3208,1732],{"class":248},[235,3210,3195],{"class":252},[235,3212,949],{"class":279},[235,3214,891],{"class":252},[235,3216,3217],{"class":259},"'name'",[235,3219,966],{"class":252},[235,3221,3223,3226,3228,3230,3232,3234,3237],{"class":237,"line":3222},29,[235,3224,3225],{"class":252},"                details.email ",[235,3227,1732],{"class":248},[235,3229,3195],{"class":252},[235,3231,949],{"class":279},[235,3233,891],{"class":252},[235,3235,3236],{"class":259},"'email'",[235,3238,966],{"class":252},[235,3240,3242,3245,3248,3250,3253,3255,3257],{"class":237,"line":3241},30,[235,3243,3244],{"class":248},"                if",[235,3246,3247],{"class":252}," (userGR.manager ",[235,3249,2464],{"class":248},[235,3251,3252],{"class":252}," userGR.manager ",[235,3254,3157],{"class":248},[235,3256,3160],{"class":259},[235,3258,1536],{"class":252},[235,3260,3262,3265,3268,3270,3273,3275],{"class":237,"line":3261},31,[235,3263,3264],{"class":248},"                    var",[235,3266,3267],{"class":252}," managerGR ",[235,3269,1732],{"class":248},[235,3271,3272],{"class":252}," userGR.manager.",[235,3274,3180],{"class":279},[235,3276,1896],{"class":252},[235,3278,3280,3283,3286,3288,3291,3293],{"class":237,"line":3279},32,[235,3281,3282],{"class":248},"                    if",[235,3284,3285],{"class":252}," (managerGR ",[235,3287,2464],{"class":248},[235,3289,3290],{"class":252}," managerGR.",[235,3292,3198],{"class":279},[235,3294,3201],{"class":252},[235,3296,3298,3301,3303,3305,3307,3309,3311],{"class":237,"line":3297},33,[235,3299,3300],{"class":252},"                        details.manager ",[235,3302,1732],{"class":248},[235,3304,3290],{"class":252},[235,3306,949],{"class":279},[235,3308,891],{"class":252},[235,3310,3217],{"class":259},[235,3312,966],{"class":252},[235,3314,3316],{"class":237,"line":3315},34,[235,3317,3318],{"class":252},"                    }\n",[235,3320,3322],{"class":237,"line":3321},35,[235,3323,3324],{"class":252},"                }\n",[235,3326,3328],{"class":237,"line":3327},36,[235,3329,3330],{"class":252},"            }\n",[235,3332,3334],{"class":237,"line":3333},37,[235,3335,3066],{"class":252},[235,3337,3339],{"class":237,"line":3338},38,[235,3340,270],{"emptyLinePlaceholder":269},[235,3342,3344,3346,3348,3350,3353,3355,3357,3359,3361,3363],{"class":237,"line":3343},39,[235,3345,3035],{"class":248},[235,3347,1612],{"class":252},[235,3349,3046],{"class":364},[235,3351,3352],{"class":252},".incident.assignment_group ",[235,3354,2464],{"class":248},[235,3356,3152],{"class":364},[235,3358,3352],{"class":252},[235,3360,3157],{"class":248},[235,3362,3160],{"class":259},[235,3364,1536],{"class":252},[235,3366,3368,3370,3373,3375,3377,3380,3382],{"class":237,"line":3367},40,[235,3369,3167],{"class":248},[235,3371,3372],{"class":252}," groupGR ",[235,3374,1732],{"class":248},[235,3376,3152],{"class":364},[235,3378,3379],{"class":252},".incident.assignment_group.",[235,3381,3180],{"class":279},[235,3383,1896],{"class":252},[235,3385,3387,3389,3392,3394,3397,3399],{"class":237,"line":3386},41,[235,3388,3187],{"class":248},[235,3390,3391],{"class":252}," (groupGR ",[235,3393,2464],{"class":248},[235,3395,3396],{"class":252}," groupGR.",[235,3398,3198],{"class":279},[235,3400,3201],{"class":252},[235,3402,3404,3407,3409,3411,3413,3415,3417],{"class":237,"line":3403},42,[235,3405,3406],{"class":252},"                details.group ",[235,3408,1732],{"class":248},[235,3410,3396],{"class":252},[235,3412,949],{"class":279},[235,3414,891],{"class":252},[235,3416,3217],{"class":259},[235,3418,966],{"class":252},[235,3420,3422],{"class":237,"line":3421},43,[235,3423,3330],{"class":252},[235,3425,3427],{"class":237,"line":3426},44,[235,3428,3066],{"class":252},[235,3430,3432],{"class":237,"line":3431},45,[235,3433,270],{"emptyLinePlaceholder":269},[235,3435,3437,3439],{"class":237,"line":3436},46,[235,3438,1569],{"class":248},[235,3440,3441],{"class":252}," details;\n",[235,3443,3445],{"class":237,"line":3444},47,[235,3446,2994],{"class":252},[235,3448,3450],{"class":237,"line":3449},48,[235,3451,270],{"emptyLinePlaceholder":269},[235,3453,3455,3458,3460,3462],{"class":237,"line":3454},49,[235,3456,3457],{"class":279},"    formatSummary",[235,3459,573],{"class":252},[235,3461,1552],{"class":248},[235,3463,2713],{"class":252},[235,3465,3467,3469,3471,3473,3475],{"class":237,"line":3466},50,[235,3468,3035],{"class":248},[235,3470,1612],{"class":252},[235,3472,631],{"class":248},[235,3474,3046],{"class":364},[235,3476,3098],{"class":252},[235,3478,3480,3482,3485],{"class":237,"line":3479},51,[235,3481,3103],{"class":248},[235,3483,3484],{"class":259}," 'Incident not found'",[235,3486,263],{"class":252},[235,3488,3490],{"class":237,"line":3489},52,[235,3491,3066],{"class":252},[235,3493,3495],{"class":237,"line":3494},53,[235,3496,270],{"emptyLinePlaceholder":269},[235,3498,3500,3502,3505,3507,3509,3512,3514,3516,3519],{"class":237,"line":3499},54,[235,3501,3014],{"class":248},[235,3503,3504],{"class":252}," number ",[235,3506,1732],{"class":248},[235,3508,3152],{"class":364},[235,3510,3511],{"class":252},".incident.",[235,3513,949],{"class":279},[235,3515,891],{"class":252},[235,3517,3518],{"class":259},"'number'",[235,3520,966],{"class":252},[235,3522,3524,3526,3529,3531,3533,3535,3537,3539,3542],{"class":237,"line":3523},55,[235,3525,3014],{"class":248},[235,3527,3528],{"class":252}," shortDesc ",[235,3530,1732],{"class":248},[235,3532,3152],{"class":364},[235,3534,3511],{"class":252},[235,3536,949],{"class":279},[235,3538,891],{"class":252},[235,3540,3541],{"class":259},"'short_description'",[235,3543,966],{"class":252},[235,3545,3547,3549,3552,3554,3556,3558,3561,3563,3566],{"class":237,"line":3546},56,[235,3548,3014],{"class":248},[235,3550,3551],{"class":252}," state ",[235,3553,1732],{"class":248},[235,3555,3152],{"class":364},[235,3557,3511],{"class":252},[235,3559,3560],{"class":279},"getDisplayValue",[235,3562,891],{"class":252},[235,3564,3565],{"class":259},"'state'",[235,3567,966],{"class":252},[235,3569,3571,3573,3575,3577,3579,3581,3583,3585,3588],{"class":237,"line":3570},57,[235,3572,3014],{"class":248},[235,3574,2092],{"class":252},[235,3576,1732],{"class":248},[235,3578,3152],{"class":364},[235,3580,3511],{"class":252},[235,3582,3560],{"class":279},[235,3584,891],{"class":252},[235,3586,3587],{"class":259},"'priority'",[235,3589,966],{"class":252},[235,3591,3593],{"class":237,"line":3592},58,[235,3594,270],{"emptyLinePlaceholder":269},[235,3596,3598,3600,3603,3605,3607,3609,3612,3615,3618],{"class":237,"line":3597},59,[235,3599,1569],{"class":248},[235,3601,3602],{"class":259}," 'Incident: '",[235,3604,1738],{"class":248},[235,3606,3504],{"class":252},[235,3608,1575],{"class":248},[235,3610,3611],{"class":259}," '",[235,3613,3614],{"class":364},"\\n",[235,3616,3617],{"class":259},"'",[235,3619,3620],{"class":248}," +\n",[235,3622,3624,3627,3629,3631,3633,3635,3637,3639],{"class":237,"line":3623},60,[235,3625,3626],{"class":259},"               'Description: '",[235,3628,1738],{"class":248},[235,3630,3528],{"class":252},[235,3632,1575],{"class":248},[235,3634,3611],{"class":259},[235,3636,3614],{"class":364},[235,3638,3617],{"class":259},[235,3640,3620],{"class":248},[235,3642,3644,3647,3649,3651,3653,3655,3657,3659],{"class":237,"line":3643},61,[235,3645,3646],{"class":259},"               'State: '",[235,3648,1738],{"class":248},[235,3650,3551],{"class":252},[235,3652,1575],{"class":248},[235,3654,3611],{"class":259},[235,3656,3614],{"class":364},[235,3658,3617],{"class":259},[235,3660,3620],{"class":248},[235,3662,3664,3667,3669],{"class":237,"line":3663},62,[235,3665,3666],{"class":259},"               'Priority: '",[235,3668,1738],{"class":248},[235,3670,3671],{"class":252}," priority;\n",[235,3673,3675],{"class":237,"line":3674},63,[235,3676,2994],{"class":252},[235,3678,3680],{"class":237,"line":3679},64,[235,3681,270],{"emptyLinePlaceholder":269},[235,3683,3685,3688],{"class":237,"line":3684},65,[235,3686,3687],{"class":252},"    type: ",[235,3689,3690],{"class":259},"'IncidentHelper'\n",[235,3692,3694],{"class":237,"line":3693},66,[235,3695,705],{"class":252},[225,3697,3699],{"className":1506,"code":3698,"language":1508,"meta":230,"style":230},"\u002F\u002F AFTER: ES12 Style\nclass IncidentHelper {\n    constructor(incidentId) {\n        this.incidentId = incidentId;\n        this.incident = null;\n        this.loadIncident();\n    }\n\n    loadIncident() {\n        const gr = new GlideRecord('incident');\n        if (gr.get(this.incidentId)) {\n            this.incident = gr;\n        }\n    }\n\n    getAssignmentDetails() {\n        if (!this.incident) {\n            return null;\n        }\n\n        \u002F\u002F Clean optional chaining\n        const assignee = this.incident.assigned_to?.getRefRecord();\n        const manager = assignee?.manager?.getRefRecord();\n        const group = this.incident.assignment_group?.getRefRecord();\n\n        return {\n            assignee: assignee?.getValue('name'),\n            email: assignee?.getValue('email'),\n            manager: manager?.getValue('name'),\n            group: group?.getValue('name')\n        };\n    }\n\n    formatSummary() {\n        if (!this.incident) {\n            return 'Incident not found';\n        }\n\n        \u002F\u002F Destructuring for cleaner code\n        const number = this.incident.getValue('number');\n        const shortDesc = this.incident.getValue('short_description');\n        const state = this.incident.getDisplayValue('state');\n        const priority = this.incident.getDisplayValue('priority');\n\n        \u002F\u002F Template literals for readable formatting\n        return `Incident: ${number}\nDescription: ${shortDesc}\nState: ${state}\nPriority: ${priority}`;\n    }\n}\n",[232,3700,3701,3706,3715,3726,3736,3748,3758,3763,3767,3773,3793,3807,3817,3821,3825,3829,3835,3847,3855,3859,3863,3868,3886,3901,3919,3923,3929,3943,3956,3969,3983,3988,3992,3996,4002,4014,4022,4026,4030,4035,4055,4076,4097,4117,4121,4126,4138,4148,4158,4169,4173],{"__ignoreMap":230},[235,3702,3703],{"class":237,"line":238},[235,3704,3705],{"class":241},"\u002F\u002F AFTER: ES12 Style\n",[235,3707,3708,3710,3713],{"class":237,"line":245},[235,3709,327],{"class":248},[235,3711,3712],{"class":279}," IncidentHelper",[235,3714,333],{"class":252},[235,3716,3717,3720,3722,3724],{"class":237,"line":266},[235,3718,3719],{"class":248},"    constructor",[235,3721,891],{"class":252},[235,3723,2950],{"class":388},[235,3725,1536],{"class":252},[235,3727,3728,3730,3732,3734],{"class":237,"line":273},[235,3729,2957],{"class":364},[235,3731,2960],{"class":252},[235,3733,1732],{"class":248},[235,3735,2965],{"class":252},[235,3737,3738,3740,3742,3744,3746],{"class":237,"line":286},[235,3739,2957],{"class":364},[235,3741,2972],{"class":252},[235,3743,1732],{"class":248},[235,3745,915],{"class":364},[235,3747,263],{"class":252},[235,3749,3750,3752,3754,3756],{"class":237,"line":298},[235,3751,2957],{"class":364},[235,3753,2929],{"class":252},[235,3755,2987],{"class":279},[235,3757,1896],{"class":252},[235,3759,3760],{"class":237,"line":309},[235,3761,3762],{"class":252},"    }\n",[235,3764,3765],{"class":237,"line":318},[235,3766,270],{"emptyLinePlaceholder":269},[235,3768,3769,3771],{"class":237,"line":324},[235,3770,3003],{"class":279},[235,3772,2713],{"class":252},[235,3774,3775,3778,3781,3783,3785,3787,3789,3791],{"class":237,"line":336},[235,3776,3777],{"class":248},"        const",[235,3779,3780],{"class":364}," gr",[235,3782,560],{"class":248},[235,3784,3022],{"class":248},[235,3786,900],{"class":279},[235,3788,891],{"class":252},[235,3790,824],{"class":259},[235,3792,966],{"class":252},[235,3794,3795,3797,3799,3801,3803,3805],{"class":237,"line":347},[235,3796,3035],{"class":248},[235,3798,3038],{"class":252},[235,3800,3041],{"class":279},[235,3802,891],{"class":252},[235,3804,3046],{"class":364},[235,3806,3049],{"class":252},[235,3808,3809,3811,3813,3815],{"class":237,"line":358},[235,3810,3054],{"class":364},[235,3812,2972],{"class":252},[235,3814,1732],{"class":248},[235,3816,3061],{"class":252},[235,3818,3819],{"class":237,"line":370},[235,3820,3066],{"class":252},[235,3822,3823],{"class":237,"line":379},[235,3824,3762],{"class":252},[235,3826,3827],{"class":237,"line":385},[235,3828,270],{"emptyLinePlaceholder":269},[235,3830,3831,3833],{"class":237,"line":400},[235,3832,3079],{"class":279},[235,3834,2713],{"class":252},[235,3836,3837,3839,3841,3843,3845],{"class":237,"line":405},[235,3838,3035],{"class":248},[235,3840,1612],{"class":252},[235,3842,631],{"class":248},[235,3844,3046],{"class":364},[235,3846,3098],{"class":252},[235,3848,3849,3851,3853],{"class":237,"line":415},[235,3850,3103],{"class":248},[235,3852,915],{"class":364},[235,3854,263],{"class":252},[235,3856,3857],{"class":237,"line":425},[235,3858,3066],{"class":252},[235,3860,3861],{"class":237,"line":434},[235,3862,270],{"emptyLinePlaceholder":269},[235,3864,3865],{"class":237,"line":439},[235,3866,3867],{"class":241},"        \u002F\u002F Clean optional chaining\n",[235,3869,3870,3872,3875,3877,3879,3882,3884],{"class":237,"line":451},[235,3871,3777],{"class":248},[235,3873,3874],{"class":364}," assignee",[235,3876,560],{"class":248},[235,3878,3152],{"class":364},[235,3880,3881],{"class":252},".incident.assigned_to?.",[235,3883,3180],{"class":279},[235,3885,1896],{"class":252},[235,3887,3888,3890,3892,3894,3897,3899],{"class":237,"line":456},[235,3889,3777],{"class":248},[235,3891,2501],{"class":364},[235,3893,560],{"class":248},[235,3895,3896],{"class":252}," assignee?.manager?.",[235,3898,3180],{"class":279},[235,3900,1896],{"class":252},[235,3902,3903,3905,3908,3910,3912,3915,3917],{"class":237,"line":466},[235,3904,3777],{"class":248},[235,3906,3907],{"class":364}," group",[235,3909,560],{"class":248},[235,3911,3152],{"class":364},[235,3913,3914],{"class":252},".incident.assignment_group?.",[235,3916,3180],{"class":279},[235,3918,1896],{"class":252},[235,3920,3921],{"class":237,"line":476},[235,3922,270],{"emptyLinePlaceholder":269},[235,3924,3925,3927],{"class":237,"line":485},[235,3926,1569],{"class":248},[235,3928,333],{"class":252},[235,3930,3931,3934,3936,3938,3940],{"class":237,"line":490},[235,3932,3933],{"class":252},"            assignee: assignee?.",[235,3935,949],{"class":279},[235,3937,891],{"class":252},[235,3939,3217],{"class":259},[235,3941,3942],{"class":252},"),\n",[235,3944,3945,3948,3950,3952,3954],{"class":237,"line":503},[235,3946,3947],{"class":252},"            email: assignee?.",[235,3949,949],{"class":279},[235,3951,891],{"class":252},[235,3953,3236],{"class":259},[235,3955,3942],{"class":252},[235,3957,3958,3961,3963,3965,3967],{"class":237,"line":3222},[235,3959,3960],{"class":252},"            manager: manager?.",[235,3962,949],{"class":279},[235,3964,891],{"class":252},[235,3966,3217],{"class":259},[235,3968,3942],{"class":252},[235,3970,3971,3974,3976,3978,3980],{"class":237,"line":3241},[235,3972,3973],{"class":252},"            group: group?.",[235,3975,949],{"class":279},[235,3977,891],{"class":252},[235,3979,3217],{"class":259},[235,3981,3982],{"class":252},")\n",[235,3984,3985],{"class":237,"line":3261},[235,3986,3987],{"class":252},"        };\n",[235,3989,3990],{"class":237,"line":3279},[235,3991,3762],{"class":252},[235,3993,3994],{"class":237,"line":3297},[235,3995,270],{"emptyLinePlaceholder":269},[235,3997,3998,4000],{"class":237,"line":3315},[235,3999,3457],{"class":279},[235,4001,2713],{"class":252},[235,4003,4004,4006,4008,4010,4012],{"class":237,"line":3321},[235,4005,3035],{"class":248},[235,4007,1612],{"class":252},[235,4009,631],{"class":248},[235,4011,3046],{"class":364},[235,4013,3098],{"class":252},[235,4015,4016,4018,4020],{"class":237,"line":3327},[235,4017,3103],{"class":248},[235,4019,3484],{"class":259},[235,4021,263],{"class":252},[235,4023,4024],{"class":237,"line":3333},[235,4025,3066],{"class":252},[235,4027,4028],{"class":237,"line":3338},[235,4029,270],{"emptyLinePlaceholder":269},[235,4031,4032],{"class":237,"line":3343},[235,4033,4034],{"class":241},"        \u002F\u002F Destructuring for cleaner code\n",[235,4036,4037,4039,4041,4043,4045,4047,4049,4051,4053],{"class":237,"line":3367},[235,4038,3777],{"class":248},[235,4040,498],{"class":364},[235,4042,560],{"class":248},[235,4044,3152],{"class":364},[235,4046,3511],{"class":252},[235,4048,949],{"class":279},[235,4050,891],{"class":252},[235,4052,3518],{"class":259},[235,4054,966],{"class":252},[235,4056,4057,4059,4062,4064,4066,4068,4070,4072,4074],{"class":237,"line":3386},[235,4058,3777],{"class":248},[235,4060,4061],{"class":364}," shortDesc",[235,4063,560],{"class":248},[235,4065,3152],{"class":364},[235,4067,3511],{"class":252},[235,4069,949],{"class":279},[235,4071,891],{"class":252},[235,4073,3541],{"class":259},[235,4075,966],{"class":252},[235,4077,4078,4080,4083,4085,4087,4089,4091,4093,4095],{"class":237,"line":3403},[235,4079,3777],{"class":248},[235,4081,4082],{"class":364}," state",[235,4084,560],{"class":248},[235,4086,3152],{"class":364},[235,4088,3511],{"class":252},[235,4090,3560],{"class":279},[235,4092,891],{"class":252},[235,4094,3565],{"class":259},[235,4096,966],{"class":252},[235,4098,4099,4101,4103,4105,4107,4109,4111,4113,4115],{"class":237,"line":3421},[235,4100,3777],{"class":248},[235,4102,2610],{"class":364},[235,4104,560],{"class":248},[235,4106,3152],{"class":364},[235,4108,3511],{"class":252},[235,4110,3560],{"class":279},[235,4112,891],{"class":252},[235,4114,3587],{"class":259},[235,4116,966],{"class":252},[235,4118,4119],{"class":237,"line":3426},[235,4120,270],{"emptyLinePlaceholder":269},[235,4122,4123],{"class":237,"line":3431},[235,4124,4125],{"class":241},"        \u002F\u002F Template literals for readable formatting\n",[235,4127,4128,4130,4133,4136],{"class":237,"line":3436},[235,4129,1569],{"class":248},[235,4131,4132],{"class":259}," `Incident: ${",[235,4134,4135],{"class":252},"number",[235,4137,506],{"class":259},[235,4139,4140,4143,4146],{"class":237,"line":3444},[235,4141,4142],{"class":259},"Description: ${",[235,4144,4145],{"class":252},"shortDesc",[235,4147,506],{"class":259},[235,4149,4150,4153,4156],{"class":237,"line":3449},[235,4151,4152],{"class":259},"State: ${",[235,4154,4155],{"class":252},"state",[235,4157,506],{"class":259},[235,4159,4160,4163,4165,4167],{"class":237,"line":3454},[235,4161,4162],{"class":259},"Priority: ${",[235,4164,2029],{"class":252},[235,4166,1783],{"class":259},[235,4168,263],{"class":252},[235,4170,4171],{"class":237,"line":3466},[235,4172,3762],{"class":252},[235,4174,4175],{"class":237,"line":3479},[235,4176,506],{"class":252},[12,4178,4179],{},"The ES12 version is:",[48,4181,4182,4188,4194,4200],{},[51,4183,4184,4187],{},[27,4185,4186],{},"50% fewer lines"," of code",[51,4189,4190,4193],{},[27,4191,4192],{},"Much more readable"," with optional chaining",[51,4195,4196,4199],{},[27,4197,4198],{},"Easier to maintain"," with destructuring and template literals",[51,4201,4202,4205],{},[27,4203,4204],{},"More robust"," with proper null handling using ??",[19,4207,4209],{"id":4208},"now-assist-skill-kit-custom-ai-skills-for-developers","Now Assist Skill Kit: Custom AI Skills for Developers",[12,4211,4212,4213,4216],{},"The Xanadu release includes the ",[27,4214,4215],{},"Now Assist Skill Kit",", which enables developers to create custom GenAI skills tailored to specific business requirements.",[32,4218,4220],{"id":4219},"what-is-now-assist-skill-kit","What is Now Assist Skill Kit?",[12,4222,4223],{},"Now Assist Skill Kit is a pro-code framework for building AI-powered features that integrate seamlessly with the Now Platform. Instead of generic AI responses, you can create skills that:",[48,4225,4226,4229,4232,4235],{},[51,4227,4228],{},"Access your specific ServiceNow data",[51,4230,4231],{},"Understand your business context",[51,4233,4234],{},"Follow your organization's policies and procedures",[51,4236,4237],{},"Integrate with custom applications and workflows",[32,4239,4241],{"id":4240},"building-custom-skills","Building Custom Skills",[12,4243,4244],{},"Here's a conceptual example of creating a custom Now Assist skill:",[225,4246,4248],{"className":1506,"code":4247,"language":1508,"meta":230,"style":230},"\u002F\u002F Custom Skill: Incident Analysis Assistant\nclass IncidentAnalysisSkill {\n    constructor() {\n        this.name = 'Incident Analysis';\n        this.description = 'Analyzes incident patterns and provides recommendations';\n    }\n\n    async analyze(incidentNumber) {\n        \u002F\u002F Gather context from ServiceNow\n        const incident = await this.getIncident(incidentNumber);\n        const similarIncidents = await this.findSimilarIncidents(incident);\n        const resolutionPatterns = await this.analyzeResolutions(similarIncidents);\n\n        \u002F\u002F Generate AI-powered insights\n        return {\n            incident: incident.number,\n            similarCount: similarIncidents.length,\n            recommendations: resolutionPatterns.map(pattern => ({\n                action: pattern.action,\n                confidence: pattern.confidence,\n                historicalSuccessRate: pattern.successRate\n            })),\n            suggestedAssignmentGroup: this.predictBestGroup(incident, similarIncidents)\n        };\n    }\n\n    async getIncident(number) {\n        \u002F\u002F Implementation to fetch incident\n    }\n\n    async findSimilarIncidents(incident) {\n        \u002F\u002F Use AI to find similar historical incidents\n        \u002F\u002F Consider: category, symptoms, configuration items, etc.\n    }\n\n    async analyzeResolutions(incidents) {\n        \u002F\u002F Analyze resolution notes and work logs\n        \u002F\u002F Extract common patterns and successful approaches\n    }\n\n    predictBestGroup(incident, similarIncidents) {\n        \u002F\u002F ML-based prediction of optimal assignment group\n    }\n}\n",[232,4249,4250,4255,4264,4270,4284,4298,4302,4306,4320,4325,4346,4367,4388,4392,4397,4403,4408,4418,4437,4442,4447,4452,4457,4472,4476,4480,4484,4497,4502,4506,4510,4524,4529,4534,4538,4542,4556,4561,4566,4570,4574,4590,4595,4599],{"__ignoreMap":230},[235,4251,4252],{"class":237,"line":238},[235,4253,4254],{"class":241},"\u002F\u002F Custom Skill: Incident Analysis Assistant\n",[235,4256,4257,4259,4262],{"class":237,"line":245},[235,4258,327],{"class":248},[235,4260,4261],{"class":279}," IncidentAnalysisSkill",[235,4263,333],{"class":252},[235,4265,4266,4268],{"class":237,"line":266},[235,4267,3719],{"class":248},[235,4269,2713],{"class":252},[235,4271,4272,4274,4277,4279,4282],{"class":237,"line":273},[235,4273,2957],{"class":364},[235,4275,4276],{"class":252},".name ",[235,4278,1732],{"class":248},[235,4280,4281],{"class":259}," 'Incident Analysis'",[235,4283,263],{"class":252},[235,4285,4286,4288,4291,4293,4296],{"class":237,"line":286},[235,4287,2957],{"class":364},[235,4289,4290],{"class":252},".description ",[235,4292,1732],{"class":248},[235,4294,4295],{"class":259}," 'Analyzes incident patterns and provides recommendations'",[235,4297,263],{"class":252},[235,4299,4300],{"class":237,"line":298},[235,4301,3762],{"class":252},[235,4303,4304],{"class":237,"line":309},[235,4305,270],{"emptyLinePlaceholder":269},[235,4307,4308,4311,4314,4316,4318],{"class":237,"line":318},[235,4309,4310],{"class":248},"    async",[235,4312,4313],{"class":279}," analyze",[235,4315,891],{"class":252},[235,4317,1774],{"class":388},[235,4319,1536],{"class":252},[235,4321,4322],{"class":237,"line":324},[235,4323,4324],{"class":241},"        \u002F\u002F Gather context from ServiceNow\n",[235,4326,4327,4329,4331,4333,4336,4338,4340,4343],{"class":237,"line":336},[235,4328,3777],{"class":248},[235,4330,2410],{"class":364},[235,4332,560],{"class":248},[235,4334,4335],{"class":248}," await",[235,4337,3152],{"class":364},[235,4339,2929],{"class":252},[235,4341,4342],{"class":279},"getIncident",[235,4344,4345],{"class":252},"(incidentNumber);\n",[235,4347,4348,4350,4353,4355,4357,4359,4361,4364],{"class":237,"line":347},[235,4349,3777],{"class":248},[235,4351,4352],{"class":364}," similarIncidents",[235,4354,560],{"class":248},[235,4356,4335],{"class":248},[235,4358,3152],{"class":364},[235,4360,2929],{"class":252},[235,4362,4363],{"class":279},"findSimilarIncidents",[235,4365,4366],{"class":252},"(incident);\n",[235,4368,4369,4371,4374,4376,4378,4380,4382,4385],{"class":237,"line":358},[235,4370,3777],{"class":248},[235,4372,4373],{"class":364}," resolutionPatterns",[235,4375,560],{"class":248},[235,4377,4335],{"class":248},[235,4379,3152],{"class":364},[235,4381,2929],{"class":252},[235,4383,4384],{"class":279},"analyzeResolutions",[235,4386,4387],{"class":252},"(similarIncidents);\n",[235,4389,4390],{"class":237,"line":370},[235,4391,270],{"emptyLinePlaceholder":269},[235,4393,4394],{"class":237,"line":379},[235,4395,4396],{"class":241},"        \u002F\u002F Generate AI-powered insights\n",[235,4398,4399,4401],{"class":237,"line":385},[235,4400,1569],{"class":248},[235,4402,333],{"class":252},[235,4404,4405],{"class":237,"line":400},[235,4406,4407],{"class":252},"            incident: incident.number,\n",[235,4409,4410,4413,4416],{"class":237,"line":405},[235,4411,4412],{"class":252},"            similarCount: similarIncidents.",[235,4414,4415],{"class":364},"length",[235,4417,295],{"class":252},[235,4419,4420,4423,4426,4428,4431,4434],{"class":237,"line":415},[235,4421,4422],{"class":252},"            recommendations: resolutionPatterns.",[235,4424,4425],{"class":279},"map",[235,4427,891],{"class":252},[235,4429,4430],{"class":388},"pattern",[235,4432,4433],{"class":248}," =>",[235,4435,4436],{"class":252}," ({\n",[235,4438,4439],{"class":237,"line":425},[235,4440,4441],{"class":252},"                action: pattern.action,\n",[235,4443,4444],{"class":237,"line":434},[235,4445,4446],{"class":252},"                confidence: pattern.confidence,\n",[235,4448,4449],{"class":237,"line":439},[235,4450,4451],{"class":252},"                historicalSuccessRate: pattern.successRate\n",[235,4453,4454],{"class":237,"line":451},[235,4455,4456],{"class":252},"            })),\n",[235,4458,4459,4462,4464,4466,4469],{"class":237,"line":456},[235,4460,4461],{"class":252},"            suggestedAssignmentGroup: ",[235,4463,3046],{"class":364},[235,4465,2929],{"class":252},[235,4467,4468],{"class":279},"predictBestGroup",[235,4470,4471],{"class":252},"(incident, similarIncidents)\n",[235,4473,4474],{"class":237,"line":466},[235,4475,3987],{"class":252},[235,4477,4478],{"class":237,"line":476},[235,4479,3762],{"class":252},[235,4481,4482],{"class":237,"line":485},[235,4483,270],{"emptyLinePlaceholder":269},[235,4485,4486,4488,4491,4493,4495],{"class":237,"line":490},[235,4487,4310],{"class":248},[235,4489,4490],{"class":279}," getIncident",[235,4492,891],{"class":252},[235,4494,4135],{"class":388},[235,4496,1536],{"class":252},[235,4498,4499],{"class":237,"line":503},[235,4500,4501],{"class":241},"        \u002F\u002F Implementation to fetch incident\n",[235,4503,4504],{"class":237,"line":3222},[235,4505,3762],{"class":252},[235,4507,4508],{"class":237,"line":3241},[235,4509,270],{"emptyLinePlaceholder":269},[235,4511,4512,4514,4517,4519,4522],{"class":237,"line":3261},[235,4513,4310],{"class":248},[235,4515,4516],{"class":279}," findSimilarIncidents",[235,4518,891],{"class":252},[235,4520,4521],{"class":388},"incident",[235,4523,1536],{"class":252},[235,4525,4526],{"class":237,"line":3279},[235,4527,4528],{"class":241},"        \u002F\u002F Use AI to find similar historical incidents\n",[235,4530,4531],{"class":237,"line":3297},[235,4532,4533],{"class":241},"        \u002F\u002F Consider: category, symptoms, configuration items, etc.\n",[235,4535,4536],{"class":237,"line":3315},[235,4537,3762],{"class":252},[235,4539,4540],{"class":237,"line":3321},[235,4541,270],{"emptyLinePlaceholder":269},[235,4543,4544,4546,4549,4551,4554],{"class":237,"line":3327},[235,4545,4310],{"class":248},[235,4547,4548],{"class":279}," analyzeResolutions",[235,4550,891],{"class":252},[235,4552,4553],{"class":388},"incidents",[235,4555,1536],{"class":252},[235,4557,4558],{"class":237,"line":3333},[235,4559,4560],{"class":241},"        \u002F\u002F Analyze resolution notes and work logs\n",[235,4562,4563],{"class":237,"line":3338},[235,4564,4565],{"class":241},"        \u002F\u002F Extract common patterns and successful approaches\n",[235,4567,4568],{"class":237,"line":3343},[235,4569,3762],{"class":252},[235,4571,4572],{"class":237,"line":3367},[235,4573,270],{"emptyLinePlaceholder":269},[235,4575,4576,4579,4581,4583,4585,4588],{"class":237,"line":3386},[235,4577,4578],{"class":279},"    predictBestGroup",[235,4580,891],{"class":252},[235,4582,4521],{"class":388},[235,4584,579],{"class":252},[235,4586,4587],{"class":388},"similarIncidents",[235,4589,1536],{"class":252},[235,4591,4592],{"class":237,"line":3403},[235,4593,4594],{"class":241},"        \u002F\u002F ML-based prediction of optimal assignment group\n",[235,4596,4597],{"class":237,"line":3421},[235,4598,3762],{"class":252},[235,4600,4601],{"class":237,"line":3426},[235,4602,506],{"class":252},[32,4604,4606],{"id":4605},"benefits-of-custom-skills","Benefits of Custom Skills",[146,4608,4609,4615,4621,4627,4633],{},[51,4610,4611,4614],{},[27,4612,4613],{},"Context-Aware AI",": Skills can access your complete ServiceNow data model",[51,4616,4617,4620],{},[27,4618,4619],{},"Domain Expertise",": Encode your organization's knowledge and best practices",[51,4622,4623,4626],{},[27,4624,4625],{},"Seamless Integration",": Skills work within existing Now Platform workflows",[51,4628,4629,4632],{},[27,4630,4631],{},"Enhanced Accuracy",": AI responses based on your actual data, not generic training",[51,4634,4635,4638],{},[27,4636,4637],{},"Rapid Development",": Pro-code approach means faster iteration and deployment",[19,4640,4642],{"id":4641},"enhanced-studio-interface","Enhanced Studio Interface",[12,4644,4645],{},"The classic Studio interface has received a significant overhaul in Xanadu, borrowing design elements from Creator Studio for a more modern, intuitive experience.",[32,4647,4649],{"id":4648},"key-improvements","Key Improvements",[12,4651,4652],{},[27,4653,4654],{},"1. Cleaner Navigation",[48,4656,4657,4660,4663,4666],{},[51,4658,4659],{},"Streamlined left navigation with collapsible sections",[51,4661,4662],{},"Quick access to frequently used components",[51,4664,4665],{},"Improved search functionality",[51,4667,4668],{},"Recent items and favorites",[12,4670,4671],{},[27,4672,4673],{},"2. Better Visual Hierarchy",[48,4675,4676,4679,4682,4685],{},[51,4677,4678],{},"Clear distinction between different component types",[51,4680,4681],{},"Color-coded categories",[51,4683,4684],{},"Icon improvements for better recognition",[51,4686,4687],{},"Reduced visual clutter",[12,4689,4690],{},[27,4691,4692],{},"3. Enhanced Editor Experience",[48,4694,4695,4698,4701,4704],{},[51,4696,4697],{},"Larger editor panes",[51,4699,4700],{},"Better syntax highlighting",[51,4702,4703],{},"Improved autocomplete",[51,4705,4706],{},"Inline error detection",[12,4708,4709],{},[27,4710,4711],{},"4. Responsive Design",[48,4713,4714,4717,4720],{},[51,4715,4716],{},"Works better on different screen sizes",[51,4718,4719],{},"Optimized layouts for various resolutions",[51,4721,4722],{},"Improved mobile\u002Ftablet experience",[19,4724,4726],{"id":4725},"additional-developer-features-in-xanadu","Additional Developer Features in Xanadu",[32,4728,4730],{"id":4729},"new-scoped-apis","New Scoped APIs",[12,4732,4733],{},"Xanadu introduces several new scoped APIs that expand what you can do programmatically:",[12,4735,4736],{},[27,4737,4738],{},"1. CMDBQBScopedScriptableAPI",[48,4740,4741,4744,4747],{},[51,4742,4743],{},"Enhanced CMDB query builder capabilities",[51,4745,4746],{},"Available in both scoped and global contexts",[51,4748,4749],{},"Improved performance for complex CI queries",[225,4751,4753],{"className":1506,"code":4752,"language":1508,"meta":230,"style":230},"const qb = new sn_cmdb.CMDBQueryBuilder();\nqb.addQuery('sys_class_name', 'cmdb_ci_server')\n  .addQuery('operational_status', '1')\n  .addQuery('install_status', '1');\n\nconst result = qb.execute();\n",[232,4754,4755,4774,4794,4813,4830,4834],{"__ignoreMap":230},[235,4756,4757,4759,4762,4764,4766,4769,4772],{"class":237,"line":238},[235,4758,554],{"class":248},[235,4760,4761],{"class":364}," qb",[235,4763,560],{"class":248},[235,4765,3022],{"class":248},[235,4767,4768],{"class":252}," sn_cmdb.",[235,4770,4771],{"class":279},"CMDBQueryBuilder",[235,4773,1896],{"class":252},[235,4775,4776,4779,4782,4784,4787,4789,4792],{"class":237,"line":245},[235,4777,4778],{"class":252},"qb.",[235,4780,4781],{"class":279},"addQuery",[235,4783,891],{"class":252},[235,4785,4786],{"class":259},"'sys_class_name'",[235,4788,579],{"class":252},[235,4790,4791],{"class":259},"'cmdb_ci_server'",[235,4793,3982],{"class":252},[235,4795,4796,4799,4801,4803,4806,4808,4811],{"class":237,"line":266},[235,4797,4798],{"class":252},"  .",[235,4800,4781],{"class":279},[235,4802,891],{"class":252},[235,4804,4805],{"class":259},"'operational_status'",[235,4807,579],{"class":252},[235,4809,4810],{"class":259},"'1'",[235,4812,3982],{"class":252},[235,4814,4815,4817,4819,4821,4824,4826,4828],{"class":237,"line":273},[235,4816,4798],{"class":252},[235,4818,4781],{"class":279},[235,4820,891],{"class":252},[235,4822,4823],{"class":259},"'install_status'",[235,4825,579],{"class":252},[235,4827,4810],{"class":259},[235,4829,966],{"class":252},[235,4831,4832],{"class":237,"line":286},[235,4833,270],{"emptyLinePlaceholder":269},[235,4835,4836,4838,4840,4842,4845,4848],{"class":237,"line":298},[235,4837,554],{"class":248},[235,4839,2522],{"class":364},[235,4841,560],{"class":248},[235,4843,4844],{"class":252}," qb.",[235,4846,4847],{"class":279},"execute",[235,4849,1896],{"class":252},[12,4851,4852],{},[27,4853,4854],{},"2. HistoryWalker API (Now Available as Scoped API)",[48,4856,4857,4860,4863],{},[51,4858,4859],{},"Programmatic access to audit history (previously only available in global scope)",[51,4861,4862],{},"Track field changes over time",[51,4864,4865],{},"Now available in both scoped and global contexts",[225,4867,4869],{"className":1506,"code":4868,"language":1508,"meta":230,"style":230},"const hw = new GlideHistoryWalker('incident', incidentSysId);\nhw.setField('state');\n\nwhile (hw.hasNext()) {\n    const change = hw.next();\n    gs.info(`State changed from ${change.oldValue} to ${change.newValue} on ${change.timestamp}`);\n}\n",[232,4870,4871,4892,4906,4910,4923,4940,4985],{"__ignoreMap":230},[235,4872,4873,4875,4878,4880,4882,4885,4887,4889],{"class":237,"line":238},[235,4874,554],{"class":248},[235,4876,4877],{"class":364}," hw",[235,4879,560],{"class":248},[235,4881,3022],{"class":248},[235,4883,4884],{"class":279}," GlideHistoryWalker",[235,4886,891],{"class":252},[235,4888,824],{"class":259},[235,4890,4891],{"class":252},", incidentSysId);\n",[235,4893,4894,4897,4900,4902,4904],{"class":237,"line":245},[235,4895,4896],{"class":252},"hw.",[235,4898,4899],{"class":279},"setField",[235,4901,891],{"class":252},[235,4903,3565],{"class":259},[235,4905,966],{"class":252},[235,4907,4908],{"class":237,"line":266},[235,4909,270],{"emptyLinePlaceholder":269},[235,4911,4912,4915,4918,4921],{"class":237,"line":273},[235,4913,4914],{"class":248},"while",[235,4916,4917],{"class":252}," (hw.",[235,4919,4920],{"class":279},"hasNext",[235,4922,3201],{"class":252},[235,4924,4925,4927,4930,4932,4935,4938],{"class":237,"line":286},[235,4926,935],{"class":248},[235,4928,4929],{"class":364}," change",[235,4931,560],{"class":248},[235,4933,4934],{"class":252}," hw.",[235,4936,4937],{"class":279},"next",[235,4939,1896],{"class":252},[235,4941,4942,4945,4948,4950,4953,4956,4958,4961,4964,4966,4968,4971,4974,4976,4978,4981,4983],{"class":237,"line":298},[235,4943,4944],{"class":252},"    gs.",[235,4946,4947],{"class":279},"info",[235,4949,891],{"class":252},[235,4951,4952],{"class":259},"`State changed from ${",[235,4954,4955],{"class":252},"change",[235,4957,2929],{"class":259},[235,4959,4960],{"class":252},"oldValue",[235,4962,4963],{"class":259},"} to ${",[235,4965,4955],{"class":252},[235,4967,2929],{"class":259},[235,4969,4970],{"class":252},"newValue",[235,4972,4973],{"class":259},"} on ${",[235,4975,4955],{"class":252},[235,4977,2929],{"class":259},[235,4979,4980],{"class":252},"timestamp",[235,4982,1783],{"class":259},[235,4984,966],{"class":252},[235,4986,4987],{"class":237,"line":309},[235,4988,506],{"class":252},[12,4990,4991],{},[27,4992,4993],{},"3. NumberFormatter API",[48,4995,4996,4999,5002],{},[51,4997,4998],{},"Locale-aware number formatting",[51,5000,5001],{},"Currency and percentage formatting",[51,5003,5004],{},"Custom number patterns",[225,5006,5008],{"className":1506,"code":5007,"language":1508,"meta":230,"style":230},"const formatter = new GlideNumberFormatter();\nconst formatted = formatter.format(1234567.89, '#,##0.00');\n\u002F\u002F Output: \"1,234,567.89\"\n",[232,5009,5010,5026,5053],{"__ignoreMap":230},[235,5011,5012,5014,5017,5019,5021,5024],{"class":237,"line":238},[235,5013,554],{"class":248},[235,5015,5016],{"class":364}," formatter",[235,5018,560],{"class":248},[235,5020,3022],{"class":248},[235,5022,5023],{"class":279}," GlideNumberFormatter",[235,5025,1896],{"class":252},[235,5027,5028,5030,5033,5035,5038,5041,5043,5046,5048,5051],{"class":237,"line":245},[235,5029,554],{"class":248},[235,5031,5032],{"class":364}," formatted",[235,5034,560],{"class":248},[235,5036,5037],{"class":252}," formatter.",[235,5039,5040],{"class":279},"format",[235,5042,891],{"class":252},[235,5044,5045],{"class":364},"1234567.89",[235,5047,579],{"class":252},[235,5049,5050],{"class":259},"'#,##0.00'",[235,5052,966],{"class":252},[235,5054,5055],{"class":237,"line":266},[235,5056,5057],{"class":241},"\u002F\u002F Output: \"1,234,567.89\"\n",[32,5059,5061],{"id":5060},"enhanced-tinymce-editor","Enhanced TinyMCE Editor",[12,5063,5064,5065,5068],{},"The rich text editor has been upgraded from ",[27,5066,5067],{},"version 4 to version 6.8.3",", bringing significant improvements:",[48,5070,5071,5077,5083,5089,5095,5101,5107],{},[51,5072,5073,5076],{},[27,5074,5075],{},"Power Paste",": Enhanced paste functionality from Word\u002FExcel with better formatting preservation",[51,5078,5079,5082],{},[27,5080,5081],{},"Accordion formatting",": Create collapsible content sections",[51,5084,5085,5088],{},[27,5086,5087],{},"Enhanced table functions",": More advanced table editing and formatting options",[51,5090,5091,5094],{},[27,5092,5093],{},"Anchor support",": Insert and manage anchors for internal linking",[51,5096,5097,5100],{},[27,5098,5099],{},"Custom styles",": Add custom styles through dictionary attributes",[51,5102,5103,5106],{},[27,5104,5105],{},"Improved accessibility features",": Better keyboard navigation and screen reader support",[51,5108,5109,5112],{},[27,5110,5111],{},"Custom toolbar configurations",": Flexible toolbar setup via system properties",[32,5114,5116],{"id":5115},"automatic-jobs-scheduling","Automatic Jobs Scheduling",[12,5118,5119],{},"New capabilities for Flow Designer and scheduled jobs:",[48,5121,5122,5125,5128,5131],{},[51,5123,5124],{},"Configuration retrieval for event processing",[51,5126,5127],{},"Automatic rollback on failures",[51,5129,5130],{},"Better error handling and logging",[51,5132,5133],{},"Retry mechanisms with exponential backoff",[19,5135,5137],{"id":5136},"migration-strategies-and-best-practices","Migration Strategies and Best Practices",[32,5139,5141],{"id":5140},"adopting-servicenow-ide-and-fluent","Adopting ServiceNow IDE and Fluent",[12,5143,5144],{},[27,5145,5146],{},"Start Small",[48,5148,5149,5152,5155],{},[51,5150,5151],{},"Begin with a new scoped application",[51,5153,5154],{},"Don't try to convert existing apps immediately",[51,5156,5157],{},"Build team familiarity with the tools",[12,5159,5160],{},[27,5161,5162],{},"Team Training",[48,5164,5165,5168,5171],{},[51,5166,5167],{},"Invest in TypeScript training if your team is unfamiliar",[51,5169,5170],{},"Learn Git workflows and best practices",[51,5172,5173],{},"Understand the Fluent compilation process",[12,5175,5176],{},[27,5177,5178],{},"Gradual Migration",[48,5180,5181,5184,5187],{},[51,5182,5183],{},"Convert one application at a time",[51,5185,5186],{},"Start with tables and simple metadata",[51,5188,5189],{},"Move to complex business logic later",[32,5191,5193],{"id":5192},"enabling-es12-across-your-instance","Enabling ES12 Across Your Instance",[12,5195,5196],{},[27,5197,5198],{},"Test Thoroughly",[48,5200,5201,5204,5207],{},[51,5202,5203],{},"Enable ES12 on test instances first",[51,5205,5206],{},"Test all custom scripts extensively",[51,5208,5209],{},"Watch for unexpected behavior changes",[12,5211,5212],{},[27,5213,5214],{},"Selective Adoption",[48,5216,5217,5220,5223],{},[51,5218,5219],{},"Don't enable ES12 everywhere at once",[51,5221,5222],{},"Start with new scripts",[51,5224,5225],{},"Modernize existing scripts opportunistically",[12,5227,5228],{},[27,5229,5230],{},"Code Review Standards",[48,5232,5233,5236,5239],{},[51,5234,5235],{},"Update coding standards to include ES12 features",[51,5237,5238],{},"Provide examples of good ES12 usage",[51,5240,5241],{},"Train team on modern JavaScript patterns",[32,5243,5245],{"id":5244},"git-integration-best-practices","Git Integration Best Practices",[12,5247,5248],{},[27,5249,5250],{},"Repository Structure",[225,5252,5257],{"className":5253,"code":5255,"language":5256},[5254],"language-text","my-servicenow-apps\u002F\n├── app-incident-management\u002F\n│   ├── src\u002F\n│   │   ├── tables\u002F\n│   │   ├── business-rules\u002F\n│   │   └── scripts\u002F\n│   ├── metadata\u002F\n│   └── package.json\n├── app-asset-tracking\u002F\n└── .gitignore\n","text",[232,5258,5255],{"__ignoreMap":230},[12,5260,5261],{},[27,5262,5263],{},"Branching Strategy",[48,5265,5266,5269,5272,5275],{},[51,5267,5268],{},"Use feature branches for development",[51,5270,5271],{},"Implement pull request reviews",[51,5273,5274],{},"Protect main\u002Fproduction branches",[51,5276,5277],{},"Tag releases for deployment tracking",[12,5279,5280],{},[27,5281,5282],{},"CI\u002FCD Integration",[225,5284,5288],{"className":5285,"code":5286,"language":5287,"meta":230,"style":230},"language-yaml shiki shiki-themes github-light github-light","# Example GitHub Actions workflow\nname: Deploy to Dev\non:\n  push:\n    branches: [develop]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v2\n      - name: Install SDK\n        run: npm install -g @servicenow\u002Fsdk\n      - name: Compile Fluent\n        run: sn-sdk compile\n      - name: Deploy to Dev Instance\n        run: sn-sdk deploy --instance ${{ secrets.DEV_INSTANCE }}\n        env:\n          SN_USERNAME: ${{ secrets.SN_USERNAME }}\n          SN_PASSWORD: ${{ secrets.SN_PASSWORD }}\n","yaml",[232,5289,5290,5295,5300,5305,5310,5315,5319,5324,5329,5334,5339,5344,5349,5354,5359,5364,5369,5374,5379,5384],{"__ignoreMap":230},[235,5291,5292],{"class":237,"line":238},[235,5293,5294],{},"# Example GitHub Actions workflow\n",[235,5296,5297],{"class":237,"line":245},[235,5298,5299],{},"name: Deploy to Dev\n",[235,5301,5302],{"class":237,"line":266},[235,5303,5304],{},"on:\n",[235,5306,5307],{"class":237,"line":273},[235,5308,5309],{},"  push:\n",[235,5311,5312],{"class":237,"line":286},[235,5313,5314],{},"    branches: [develop]\n",[235,5316,5317],{"class":237,"line":298},[235,5318,270],{"emptyLinePlaceholder":269},[235,5320,5321],{"class":237,"line":309},[235,5322,5323],{},"jobs:\n",[235,5325,5326],{"class":237,"line":318},[235,5327,5328],{},"  deploy:\n",[235,5330,5331],{"class":237,"line":324},[235,5332,5333],{},"    runs-on: ubuntu-latest\n",[235,5335,5336],{"class":237,"line":336},[235,5337,5338],{},"    steps:\n",[235,5340,5341],{"class":237,"line":347},[235,5342,5343],{},"      - uses: actions\u002Fcheckout@v2\n",[235,5345,5346],{"class":237,"line":358},[235,5347,5348],{},"      - name: Install SDK\n",[235,5350,5351],{"class":237,"line":370},[235,5352,5353],{},"        run: npm install -g @servicenow\u002Fsdk\n",[235,5355,5356],{"class":237,"line":379},[235,5357,5358],{},"      - name: Compile Fluent\n",[235,5360,5361],{"class":237,"line":385},[235,5362,5363],{},"        run: sn-sdk compile\n",[235,5365,5366],{"class":237,"line":400},[235,5367,5368],{},"      - name: Deploy to Dev Instance\n",[235,5370,5371],{"class":237,"line":405},[235,5372,5373],{},"        run: sn-sdk deploy --instance ${{ secrets.DEV_INSTANCE }}\n",[235,5375,5376],{"class":237,"line":415},[235,5377,5378],{},"        env:\n",[235,5380,5381],{"class":237,"line":425},[235,5382,5383],{},"          SN_USERNAME: ${{ secrets.SN_USERNAME }}\n",[235,5385,5386],{"class":237,"line":434},[235,5387,5388],{},"          SN_PASSWORD: ${{ secrets.SN_PASSWORD }}\n",[19,5390,5392],{"id":5391},"performance-considerations","Performance Considerations",[32,5394,5396],{"id":5395},"es12-performance","ES12 Performance",[12,5398,5399],{},"Modern JavaScript features generally improve performance:",[48,5401,5402,5405,5413],{},[51,5403,5404],{},"Arrow functions have less overhead than traditional functions",[51,5406,5407,5409,5410,5412],{},[232,5408,554],{}," and ",[232,5411,2758],{}," enable better optimization by the JavaScript engine",[51,5414,5415],{},"Template literals are optimized by modern engines",[12,5417,5418],{},"However, be mindful:",[48,5420,5421,5424],{},[51,5422,5423],{},"Excessive use of spread operators on large arrays can impact performance",[51,5425,5426],{},"Optional chaining still evaluates each step, so cache results if used frequently",[32,5428,5430],{"id":5429},"fluent-compilation-time","Fluent Compilation Time",[48,5432,5433,5436,5439,5442],{},[51,5434,5435],{},"Fluent compilation adds a build step to your workflow",[51,5437,5438],{},"Large applications may take longer to compile",[51,5440,5441],{},"Use incremental builds during development",[51,5443,5444],{},"Implement caching strategies in CI\u002FCD pipelines",[19,5446,5448],{"id":5447},"troubleshooting-common-issues","Troubleshooting Common Issues",[32,5450,5452],{"id":5451},"servicenow-ide-activation-issues","ServiceNow IDE Activation Issues",[12,5454,5455,5458,5459,897],{},[27,5456,5457],{},"Problem",": IDE doesn't appear after activation\n",[27,5460,5461],{},"Solution",[48,5463,5464,5467,5470],{},[51,5465,5466],{},"Clear browser cache",[51,5468,5469],{},"Impersonate a user with admin role",[51,5471,5472],{},"Check system requirements (Xanadu or later)",[32,5474,5476],{"id":5475},"es12-syntax-errors","ES12 Syntax Errors",[12,5478,5479,5481,5482,897],{},[27,5480,5457],{},": \"Unexpected token\" errors after enabling ES12\n",[27,5483,5461],{},[48,5485,5486,5489,5492],{},[51,5487,5488],{},"Ensure ES12 mode is actually enabled (check script record)",[51,5490,5491],{},"Verify instance is on Xanadu release",[51,5493,5494],{},"Some features might not be available in all contexts",[32,5496,5498],{"id":5497},"fluent-compilation-errors","Fluent Compilation Errors",[12,5500,5501,5503,5504,897],{},[27,5502,5457],{},": TypeScript errors during compilation\n",[27,5505,5461],{},[48,5507,5508,5511,5514],{},[51,5509,5510],{},"Check TypeScript version compatibility",[51,5512,5513],{},"Verify SDK version matches instance version",[51,5515,5516],{},"Review error messages carefully—they're usually descriptive",[32,5518,5520],{"id":5519},"git-sync-issues","Git Sync Issues",[12,5522,5523,5525,5526,897],{},[27,5524,5457],{},": Changes not syncing between IDE and Git\n",[27,5527,5461],{},[48,5529,5530,5533,5536,5539],{},[51,5531,5532],{},"Verify Git credentials are correct",[51,5534,5535],{},"Check repository permissions",[51,5537,5538],{},"Ensure network connectivity to Git provider",[51,5540,5541],{},"Review ServiceNow proxy settings if applicable",[19,5543,5545],{"id":5544},"conclusion-embracing-the-future-of-servicenow-development","Conclusion: Embracing the Future of ServiceNow Development",[12,5547,5548],{},"The ServiceNow Xanadu release represents a pivotal moment for the platform. These developer-focused enhancements aren't just incremental improvements—they're transformational changes that bring ServiceNow development into the modern era.",[32,5550,5552],{"id":5551},"key-takeaways","Key Takeaways",[12,5554,5555,5557],{},[27,5556,29],{}," provides a professional-grade development environment that rivals standalone IDEs, complete with Git integration and real-time collaboration.",[12,5559,5560,5563],{},[27,5561,5562],{},"Fluent DSL"," enables type-safe, code-first application development with all the benefits of modern TypeScript tooling.",[12,5565,5566,5568],{},[27,5567,1135],{}," unlocks local development workflows, CI\u002FCD integration, and true version control for ServiceNow applications.",[12,5570,5571,5574],{},[27,5572,5573],{},"ECMAScript 2021 support"," finally brings modern JavaScript to both scoped and global scripts, making code more readable, maintainable, and powerful.",[12,5576,5577,5579],{},[27,5578,4215],{}," empowers developers to create custom AI-powered features that understand their specific business context.",[32,5581,5583],{"id":5582},"moving-forward","Moving Forward",[12,5585,5586],{},"The Xanadu release sets a new standard for what ServiceNow development can be. Whether you're building custom applications, integrating systems, or optimizing existing solutions, these tools will help you work faster, smarter, and with greater confidence.",[12,5588,5589],{},"Start by exploring ServiceNow IDE with a small pilot project. Enable ES12 in your new scripts and experience the difference modern JavaScript makes. If you're building new applications, give Fluent and the SDK a try—you'll be amazed at how much more productive you can be.",[12,5591,5592],{},"The future of ServiceNow development is here with Xanadu. Are you ready to embrace it?",[12,5594,5595],{},"Happy coding!",[5597,5598,5599],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sCydW, html code.shiki .sCydW{--shiki-default:#D73A49;--shiki-dark:#D73A49}html pre.shiki code .se37E, html code.shiki .se37E{--shiki-default:#6F42C1;--shiki-dark:#6F42C1}html pre.shiki code .sKWpL, html code.shiki .sKWpL{--shiki-default:#24292E;--shiki-dark:#24292E}html pre.shiki code .sj_tP, html code.shiki .sj_tP{--shiki-default:#E36209;--shiki-dark:#E36209}html pre.shiki code .sMN4m, html code.shiki .sMN4m{--shiki-default:#005CC5;--shiki-dark:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sOTlB, html code.shiki .sOTlB{--shiki-default:#032F62;--shiki-dark:#032F62}",{"title":230,"searchDepth":245,"depth":245,"links":5601},[5602,5606,5612,5617,5623,5628,5631,5636,5641,5645,5651],{"id":21,"depth":245,"text":22,"children":5603},[5604,5605],{"id":34,"depth":266,"text":35},{"id":140,"depth":266,"text":141},{"id":193,"depth":245,"text":194,"children":5607},[5608,5609,5610,5611],{"id":204,"depth":266,"text":205},{"id":214,"depth":266,"text":215},{"id":730,"depth":266,"text":731},{"id":781,"depth":266,"text":782},{"id":1128,"depth":245,"text":1129,"children":5613},[5614,5615,5616],{"id":1139,"depth":266,"text":1140},{"id":1189,"depth":266,"text":1190},{"id":1331,"depth":266,"text":1332},{"id":1483,"depth":245,"text":1484,"children":5618},[5619,5620,5621,5622],{"id":1494,"depth":266,"text":1495},{"id":2852,"depth":266,"text":2853},{"id":2879,"depth":266,"text":2880},{"id":2890,"depth":266,"text":2891},{"id":4208,"depth":245,"text":4209,"children":5624},[5625,5626,5627],{"id":4219,"depth":266,"text":4220},{"id":4240,"depth":266,"text":4241},{"id":4605,"depth":266,"text":4606},{"id":4641,"depth":245,"text":4642,"children":5629},[5630],{"id":4648,"depth":266,"text":4649},{"id":4725,"depth":245,"text":4726,"children":5632},[5633,5634,5635],{"id":4729,"depth":266,"text":4730},{"id":5060,"depth":266,"text":5061},{"id":5115,"depth":266,"text":5116},{"id":5136,"depth":245,"text":5137,"children":5637},[5638,5639,5640],{"id":5140,"depth":266,"text":5141},{"id":5192,"depth":266,"text":5193},{"id":5244,"depth":266,"text":5245},{"id":5391,"depth":245,"text":5392,"children":5642},[5643,5644],{"id":5395,"depth":266,"text":5396},{"id":5429,"depth":266,"text":5430},{"id":5447,"depth":245,"text":5448,"children":5646},[5647,5648,5649,5650],{"id":5451,"depth":266,"text":5452},{"id":5475,"depth":266,"text":5476},{"id":5497,"depth":266,"text":5498},{"id":5519,"depth":266,"text":5520},{"id":5544,"depth":245,"text":5545,"children":5652},[5653,5654],{"id":5551,"depth":266,"text":5552},{"id":5582,"depth":266,"text":5583},"2025-01-15T10:00:00","Explore the ServiceNow Xanadu release's revolutionary developer features including ServiceNow IDE, Fluent DSL, ECMAScript 2021 support, and more.","servicenow-xanadu-release-developer-features",null,"md",[5661,5664,5667,5670],{"question":5662,"answer":5663},"What is ServiceNow IDE in the Xanadu release?","ServiceNow IDE is a new web-based application development environment introduced in the Xanadu release. Built on Visual Studio Code principles, it provides a familiar, intuitive interface for building scoped applications directly in the Now Platform. It includes Git integration for source control, embedded UI previews, and enhanced collaboration features.",{"question":5665,"answer":5666},"What is Fluent DSL and how does it work?","Fluent is a TypeScript-based domain-specific language (DSL) that enables developers to define ServiceNow application metadata using code. Unlike regular TypeScript, Fluent compiles to XML metadata files rather than JavaScript. It provides APIs for creating tables, roles, ACLs, business rules, and Automated Test Framework tests in a type-safe, developer-friendly way.",{"question":5668,"answer":5669},"Can I use modern JavaScript features in ServiceNow with Xanadu?","Yes! The Xanadu release enables ECMAScript 2021 (ES12) support for both scoped and global scripts. You can now use modern JavaScript features like arrow functions, template literals, destructuring, default parameters, spread operators, optional chaining (??.), and nullish coalescing (??). This can be enabled per-script by selecting 'Turn on ECMAScript 2021 mode' in the script settings.",{"question":5671,"answer":5672},"What is the ServiceNow SDK and how does it help developers?","The ServiceNow SDK (Now-SDK) is a command-line tool distributed as an NPM package (@servicenow\u002Fsdk) that compiles Fluent code into ServiceNow metadata XML files. It enables local development workflows, allowing developers to build applications on their machines, manage them in Git, and sync changes with ServiceNow instances.","ServiceNow Xanadu Release: Revolutionary Features Every Developer Must Know",{},"\u002Fblog\u002Fservicenow-xanadu-release-developer-features",{"title":5,"description":5656},{"src":5678,"mime":5679,"alt":5680,"width":5681,"height":5682},"\u002Fmeta-img.webp","webp","ServiceNow Xanadu release developer features and tools",1200,630,"blog\u002Fservicenow-xanadu-release-developer-features",[5685,5686,5687,5688,5562,5689,5690,5691,5692],"ServiceNow","Xanadu","Developer Tools","IDE","TypeScript","ECMAScript 2021","Now Assist","Platform Update","4zvmZNIHG1wxawbTOSodK3soyWb9vzxBZLPQmnUlcw8",1788768210499]