售 价:¥
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
Title Page
ServiceNow: Building Powerful WorkFlows
Automating IT Service Management
A course in three modules
Copyright
ServiceNow: Building Powerful Workflows
Credits
Preface
What this learning path covers
What you need for this learning path
Who this learning path is for
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
Module 1
Learning ServiceNow
The Interface
Frames
Banner frame
System Settings
Help
Connect chat conversations
Global Text Search
Profile
The Application Navigator
Filter text box
Favorites
History
Important application menus and modules
Content frame
UI settings and personalization
Summary
Lists and Forms
List v2 versus List v3
Lists and Tables
Creating a custom table
Creating an update set
Creating the table
Adding a field
List view
Condition builder
Building a filter
Dot-walking
Forms
Form designer
Form layout
Related lists
Summary
UI Customization
UI15 versus UI16
Switching between UI15 and UI16
Branding your instance
Custom themes
UI-Impacting system properties
Configuring service portal UI
Creating a custom homepage
Styling pages and widgets
Styling the CMS
Summary
Understanding Data and Relationships
One-to-many relationships in ServiceNow
Many-to-many relationships in ServiceNow
Creating a M2M table
Other M2M relationships
Enforcing one-to-one relationships
Defining custom relationships
Database table inheritance
Summary
Tasks and Workflows
Important task fields
Active
Additional comments and work notes
Assigned to and Assignment group
Created, Created by, Updated, and Updated by
Description and Short description
Number
State
Journals and the Activity formatter
Extending the task table
Workflows
Important workflow activities
User and Group Approval
Approval Coordinator
If
Switch
Wait for Condition
Create Task and Catalog Task
Branch and Join
Return value
Run Script
Set Values
Workflow Stages
Demo
Approvals
Assignment
Creating Task fields
Summary
UI and Data Policies
UI Policies
Catalog UI Policies
Reverse if False
Scripting in UI Policies
UI Policy Order
Demo
Data Policies
Demo
Converting between Data and UI Policies
Demo
Data Policies versus ACLs
Summary
User Administration and Security
Groups and Roles
Impersonating users for testing
Emails and notifications
Demo
Notification Devices
User preferences
Default preferences
Preferences in update sets
Scripting user preferences
ACLs - security rules
ACL process order
High security plugin
Summary
Introduction to Scripting
To script, or not to script?
Client side versus server side APIs
Client side APIs
Server side APIs
Where scripting is supported
Access controls-executes on: server
Business rules-executes on: server
Client scripts and catalog client scripts-executes on: client
Condition builder (and the URL)-executes on: server
Default value-executes on: server
Script Includes-executes on: server
UI actions-executes on: client and/or server
UI policies and catalog UI policies-executes on: client
UI scripts-runs on: client
Workflow activities-executes on: server
Integrated development environment
Script tree
Script auto-completion
Script editor macros
Documentation macro
For-loop macro
GlideRecord macros
Demo
Summary
The Server-side Glide API
The structure of an API class
Server-side APIs
GlideRecord
Initialize
Example usage
addQuery()
Available query operators
Example usage
addNullQuery() and addNotNullQuery()
Example Usage
canRead(), canWrite(), canCreate(), and canDelete()
Example usage
deleteRecord() and deleteMultiple()
Example usage
get()
Example usage
getDisplayValue()
Example usage
getValue() and getUniqueValue()
Example usage
hasNext()
Example usage
initialize() and insert()
Example usage
next()
Example usage
orderBy() and orderByDesc()
Example usage
query()
Example usage
setAbortAction()
Example usage
setLimit()
Example usage
setValue()
Example usage
setWorkflow()
Example usage
update() and updateMultiple()
Example usage
GlideElement
changes(), changesFrom() and changesTo()
Example usage
getDisplayValue()
Example usage
getED()
Example usage
getReferenceTable() and getRefRecord()
Example usage
nil()
Example usage
toString()
Example usage
GlideDateTime
Adding or removing time
Example usage
getDayOfMonth() and getDayOfWeek()
Example usage
GlideSession
getClientData() and putClientData()
Example usage
getTimeZoneName()
Example Usage
GlideSystem
addErrorMessage() and addInfoMessage()
Example usage
debug()
Example usage
eventQueue()
Example usage
getProperty()
Example usage
getUser()
Example usage
getUserID()
Example usage
hasRole()
Example usage
GlideUser
getPreference() and savePreference()
Example usage
hasRole()
Example usage
isMemberOf()
Example usage
Client-side APIs
GlideAjax
GlideForm (g_form)
Setting/Clearing messages on the form and fields
Summary
The Client-side Glide API
Client-side APIs
GlideAjax
GlideForm (g_form)
Setting/clearing messages on the form and fields
Dealing with drop-down list fields
Getting and setting values on the form
Controlling field visibility
Setting fields mandatory and read-only
Submitting a client-side form
GlideUser (g_user)
Getting user details
Checking user permissions
Getting client data
GlideRecord
Querying for one or more records
Deleting a record asynchronously
Summary
Server-side Scripting
Dot-walking and GlideElement
Script Includes
Server-side GlideAjax
Business rules
After business rules
Asynchronous business rules
Display business rules and g_scratchpad
Summary
Client-side Scripting
Client Scripts
Client Script types
onLoad
onChange
onSubmit
onCellEdit
Security
Compatibility
Build for performance
Reference fields
GlideAjax and asynchronous GlideRecord
g_scratchpad
UI scripts
Running only necessary scripts
Scripts files from the server
Summary
Debugging
Logging
Client-side debugging
Debugging field visibility
Server-side debugging
Reference versus Value
Debugging security
JavaScript debugger (Istanbul)
Debugger interface
Breakpoints
General Debugging
Summary
Pro Tips
Admin Pro Tips
List personalization
Update Set selector
Reference Field background color
List v3 Rendering
List, Form, and New Window shortcuts
Adding the ServiceNow Frame by URL
Impersonation simplification
Derived Field Risks
Finding derived fields and other field data
Dictionary overrides
Scripting Pro Tips
Avoiding Nested Loops
Limit Logging
Always Use Getters and Setters
What the pros wish they knew
Field case
Generating Encoded Query Strings
How to modify OOB scripts
Other technical best practices
Summary
Module 2
ServiceNow Cookbook
Getting Started with Service-Now
Introduction
Service-Now prerequisites
Service-Now and the ITIL framework
How it works...
See also
Understanding Service-Now procurement
Understanding Service-Now roles and licensing
There's more…
Understanding the Service-Now setup
Accessing the Service-Now application
Getting ready
How to do it...
How it works...
There's more…
See also
Microsoft Active Directory authentication
Getting ready
How to do it...
How it works...
There's more...
Logging in to the Service-Now application portal or end user view
Getting ready
How to do it...
There's more…
See also
Creating service requests from the Service-Now portal
Getting ready
How to do it...
There's more…
Understanding the Service-Now IT view
Getting ready
How to do it...
How it works...
There's more…
See also
Understanding Service-Now's self-service application
Getting ready
How to do it...
See also
Understanding Service-Now's service desk application
Getting ready
How to do it...
Understand unique record identifier
Getting ready
How to do it...
There's more…
See also
Using the incident management application
Getting ready
How to do it…
How it works…
There's more…
See also
Using the related lists of applications
Getting ready
How to do it...
See also
Using the problem management application
Getting ready
How to do it...
How it works...
There's more…
Using the change management application
Getting ready
How to do it...
There's more…
See also
Creating the change/problem task from the incident task
Getting ready
How to do it...
Performing Core Configuration and Management Tasks
Introduction
Setting up basic configuration
Getting ready
How to do it...
Understanding LDAP servers
Getting ready
How to do it...
Understanding user administration
Getting ready
How to do it...
Understanding group administration
Getting ready
How to do it...
Using service-now plugins
Getting ready
How to do it...
Configuring the Service-Now form
Getting ready
How to do it...
There's more…
See also
Configuring UI policies on Service-Now forms
Getting ready
How to do it...
Configuring UI actions on forms
Getting ready
How to do it...
Understanding deployments or update sets
Getting ready
How to do it...
There's more…
See also
Getting into CMDB
Getting ready
How to do it...
There's more…
See also
Setting up an SLA/OLA/underpinning contract
Getting ready
How to do it...
See also
Setting up system rules
Getting ready
How to do it...
There's more…
Understanding the system dictionary
Getting ready
How to do it...
Understanding the Service-Now tables schema
Getting ready
How to do it...
Getting into system security
Getting ready
How to do it...
There's more…
Building Data-Driven Application
Introduction
Starting a new application
Getting ready
How to do it…
Getting into new modules
Getting ready
How to do it…
Getting into the client script
Getting ready
How to do it…
Getting into the server-side script
Getting ready
How to do it…
Understanding the team development plugin
Getting ready
How to do it…
Understand web services
Getting ready
How to do it...
See also
Understanding development best practice
Getting ready
How to do it...
Configuring Alerts and Notifications
Introduction
Understanding the Service-Now system mailbox
Getting ready
How to do it…
Creating a new e-mail notification
Getting ready
How to do it…
Creating an e-mail template
Getting ready
How to do it…
Creating an e-mail notification script
Getting ready
How to do it…
Setting up an inbound e-mail action
Getting ready
How to do it…
Inbound e-mail action - new
Getting ready
How to do it…
Inbound e-mail action - forward
Getting ready
How to do it…
Inbound e-mail action - reply
Getting ready
How to do it…
There's more...
E-mail Notification by event registry
Getting ready
How to do it…
E-mail notification troubleshooting
Getting ready
How to do it…
Building and Configuring Reports
Introduction
Viewing and running reports
Getting ready
How to do it...
Creating new reports
Getting ready
How to do it...
Scheduling reports
Getting ready
How to do it...
There's more…
Sending multiple reports in one e-mail
Getting ready
How to do it...
Creating a table-specific report module
Getting ready
How to do it...
Creating a dashboard
Getting ready
How to do it...
Including the date in a report's e-mail notification
Getting ready
How to do it...
Working with the report's header and footer template
Getting ready
How to do it...
Working with the report sources
Getting ready
How to do it...
Working with the report range
Getting ready
How to do it...
Creating a database view
Getting ready
How to do it...
Creating and Configuring Workflow Activities
Introduction
Understanding the Service-Now workflow
Getting ready
How to do it...
Attaching a workflow with the service catalog
Getting ready
How to do it...
Attaching workflows with current/new modules
Getting ready
How to do it...
There's more…
Workflow troubleshooting
Getting ready
How to do it...
Setting up an approval activity
Getting ready
How to do it...
Working with condition activities
Getting ready
How to do it...
Working with task activities
Getting ready
How to do it...
Working with workflow utilities
Getting ready
How to do it...
Setting up e-mail notifications from workflows
Getting ready
How to do it...
How to configure a timer in workflows
Getting ready
How to do it...
Understanding the approval engine
Getting ready
How to do it...
Auditing and Diagnosing Service-Now
Understanding auditing in Service-Now
Getting ready
How to do it...
Working with auditing tables
Getting ready
How to do it...
There's more…
See also
Understanding Service-Now upgrades
Getting ready
How to do it...
Working with system logs
Getting ready
How to do it...
There's more…
See also
System diagnostics
Getting ready
How to do it...
Working with background scripts
Getting ready
How to do it...
Working with Field Watcher
Getting ready
How to do it...
Working with JavaScript logs
Getting ready
How to do it...
Module 3
Mastering ServiceNow
ServiceNow Foundations
Diving into the infrastructure
Keeping up with the examples
Being in charge
Changing your instance
Knowing the platform
Choosing functionalities with plugins
Running the latest version
Digging into the hosting
Knowing the nodes
Exploring the database
Introducing the Gardiner Hotel data structure
Creating tables
Adding fields
Knowing what's happening
Introducing the dictionary
The globally unique identifier
Storing data
Storing files as attachments
Setting properties
Reference fields
Creating a reference field
Building out the data structure
Linking the data together
Looking from different perspectives
Using reference qualifiers
Dot-walking through data
Using derived fields
Building the interface
Lists
Choosing the fields to show
Having reference fields on lists
The varied capabilities of lists
Forms
Creating useful forms
Adding related and embedded lists
Defining your own related lists
Enjoying views
Controlling views
Menus and modules
Setting a filter
Building the right modules
Making the most of the UI
Finding your way around the interface
Adding a favorite
Seeing back in time
Defining a tag
Connecting with people
Chatting over records
Live record updates
Summary
Developing Custom Applications
Developing applications in Studio
Recording files
Scoping out limits
Separating by name
Seeing the scope
Moving between applications
Enforcing the separation
Taking control of your application
Delegating to developers
Allowing other applications access
Controlling application access
Restricting your choices during development
Building hierarchical tables
Benefiting from an object-oriented design
Extending the User table
Interacting with hierarchical tables
Viewing hierarchical tables
Overriding field properties
Understanding the background behavior
Making it visual with the Schema Map
Changing class
Repointing the reference field
Many-to-many relationships
Building a many-to-many table
Adding fields to a many-to-many table
Comparing reference fields and many-to-many tables
Deleting a many-to-many table
Choosing lists
Cascading with reference fields
Dynamic creation
Deleting records
Summary
Server-Side Control
Deciding to write code
Using the developer community
Running background scripts
Using GlideRecord (and its friends)
Understanding iterators
Accessing data from GlideRecord
Walking through reference fields
Converting data types
The surprising results of GlideElement
Getting the value another way
Dealing with dates
Counting records with GlideAggregate
Scripting in scoped apps
Being in scope
Improving scripting with ECMAScript 5
Activating ECMAScript 5
Protecting data from scripts
Running scripts in global
Building the restrictions
Business rules
Setting the table
Being advanced
Knowing the predefined variables
Displaying the right table
Conditioning your scripts
Having good conditions
Controlling the database
Controlling database queries with Business Rules
Choosing when to execute - before, after, and really after
Defaulting data
Validating information
Working with dates
Updating information
Running things later with system scheduling
Display business rules
Global business rules
Script Includes
Creating classes
Coding a class
Accessing across scope
Using classes to store and validate data
Having an API for scoped apps
Extending classes
Taking advantage of utility classes
Providing utility classes
Storing functions
Having functions in Script Includes
Client Callable Script Includes
Enforcing data
Forcing a comment using a data policy
Specifying dynamic filters
Displaying guests that are Me
Scripting reference qualifiers
Showing only guests with reservations
Filtering using the current record
Rhino - the JavaScript engine powering ServiceNow
Accessing Java
Summary
Client-Side Interaction
Building a modern interface
The power and pitfalls of Ajax
Being in control
Using client-side code effectively
Choosing a UI Action
Finding the current table
Displaying UI Actions in the right place, at the right time
Using the Condition field
Running client- or server-side code
Saving and redirecting
Converting a record from Reservation to Check-in
Managing fields with UI Policy
Manipulating the form
Client-side conditioning
Forcing a comment on reservations
Controlling UI Policies
Running client-side scripts
Scope on the client
Remembering client-side GlideRecord
Understanding callbacks
The defined function
The anonymous function
Manipulating forms with GlideForm
Using GlideForm
Choosing a UI Policy
Client-side scripting
Sending alerts for VIP guests
The disappearance of current
Changing, submitting, loading, and more
Validating the contents of fields
Storing code in UI Scripts
Efficiently transferring data to the client
Writing a script include for GlideAjax
Using GlideAjax
Passing data when the form loads
Using scratchpad on the client
Storing data in the session
Controlling lists with Context Menus
Finding out about the list
Opening a new tab
Customizing and extending the platform
Firing on more events
Using built-in libraries
What could go wrong
Taking control of the browser
Data Policies save the day
Summary
Getting Things Done with Tasks
Introducing tasks
Looking at the Task table
The important fields
Populating fields automatically
Recording room maintenance tasks
Working with tasks
Working without a queue
Working socially
Chatting with Connect
Communicating some more
Organizing groups and users
Creating a room-maintenance team
Creating a property
Using departments and companies
Using additional comments and work notes
Understanding the State field
Configuring different states
Representing progress
Navigating between states
Creating room maintenance states
Enforcing on the server
Adding a reference qualifier
Removing states with client scripts
Automating an assignment based on state
Using Data Lookup
Setting the Assignment group with Assignment Rules
Drag-and-drop automation with Graphical Workflows
Running a workflow
Exploring under the hood
Exploring the activities
Orchestrating your datacentre
Using data-driven workflows
Approving tasks
Making the decision
Understanding what you are approving
Asking for approval for the repair team
Performing the approval
Starting up the workflow
Monitoring progress
Using the Service Catalog
The different types of Catalog Items
Using Service Creator
Creating a record producer
Adding more information
Routing the submitted request with templates
Testing the record producer
Understanding the data behind Service Catalog
Configuring the Service Catalog
Understanding Request Fulfilment
Checking out
Using the request tables
Scripting variables
Service Level Management
Exploring the SLA data structure
Timing an SLA
Travelling through time
Enjoying relativity
Scheduling and time zones
Customizing condition rules
Avoiding a breach
Working SLAs
Ensuring maintenance is quick
Summary
Events, Notifications, and Reporting
Dealing with events
Registering events
Firing an event
Sending an e-mail for new reservations
Scheduling jobs
Adding your own jobs
Creating events every day
Running scripts on events
Creating tasks automatically
Sending e-mail notifications
Setting e-mail properties
Assigning work
Sending an e-mail notification on assignment
When to send
Who will receive
Send to event creator
Sending informational updates
Sending a custom e-mail
Enabling the e-mail client
Sending e-mails with additional comments and work notes
Sending out work notes
Approving via e-mail
Using the Approval table
Testing the default approval e-mail
Specifying notification preferences
Subscribing to e-mail notifications
Creating a new device
Sending text messages
Delivering an e-mail
Knowing who the e-mail is from
Receiving e-mails
Determining what an inbound e-mail is
Creating inbound email actions
Approving e-mails using Inbound Email Actions
Understanding the code in Update Approval Request
Updating the work notes of a Maintenance task
Having multiple incoming e-mail addresses
Using the Email Accounts plugin
Redirecting e-mails
Processing multiple e-mail addresses
Seeing progress being made
Recording metrics
The difference between metrics and SLAs
Running metrics
Scripting a metric definition
Monitoring the duration of maintenance tasks
Flattening data with Database Views
Creating a Metric Instance Database View
Reporting
The functionality of a list
Using reports elsewhere
Sending a shift handover report
Analytics with ServiceNow
Basic trending with line charts
Performance Analytics
Making sense of reports
Ensuring consistency
Using outside tools
Building homepages
Creating a Maintenance homepage
Making global homepages
Editing homepages
Counting on a homepage
Optimizing homepages
Summary
Exchanging Data – Import Sets, Web Services, and other Integrations
Beginning the web service journey
Pulling data out of ServiceNow
Downloading file-based data
Automatically download data using cURL
Being more specific with URL parameters
Choosing the fields
Specifying records
Getting my stuff
Pulling data designed for the Web
Cleaning up with SOAP
Using direct web services
Filtering the response
Returning display values
Having a REST
Using the REST Explorer
GETting it your way
Using the right method
Selecting the right content
Updating and inserting data
Exploring other APIs
Bringing it in using Import Sets
Specifying the data source
Cleaning up Import Set tables
Getting data
Dealing with XML files
Transforming the data
Creating a field map
Enabling scripting in transform maps
Creating new values
Dealing with times
Importing into reference fields
Moving in the rooms
Scripting in Transform Maps
Knowing when scripting will run
Keeping import sets running
Importing users and groups with LDAP
Importing users from an LDAP server
Reviewing the configuration
Altering the Transform Maps
Importing in a scoped application
Building web service Import Sets
Using a web service Import Sets
Connecting to web services
Using SOAP to send tasks
Testing the web service
Sending the message
Building REST messages
Sending REST messages to CHS
Building custom interfaces
Creating scripted services
Doing multiplication with a scripted REST API
Working inside the data center - introducing the MID server
Integrating with the ECC queue
Picking up jobs
Installing the MID server
Setting up the server
Using the MID server
Running a custom command
Running JavaScript on the MID server
Interacting with the ECC queue
Creating a MID server Script Include
Using Java on the MID server
Adding additional libraries
Exporting data via the MID server
Improving exporting
Authenticating and securing web services
Inbound authentication
Outbound authentication
Designing integrations
Transferring bulk data
Real-time communication
Communicating through the firewall
Summary
Securing Applications and Data
Understanding roles
Defining a role
Assigning roles to users
Finding a user's role
Differentiating between requesters and fulfillers
Roles and Delegated Development
Activating Subscription Management
Using impersonation
High-security settings
Elevating your role
Controlling access to applications and modules
Controlling access to modules with groups
Protecting data with contextual security rules
Understanding contextual security
Specifying rows and fields to secure
Securing rows
Controlling fields
The order of execution
Executing the row and then the field
Rules are searched until one is found
Defaults are possible
The table hierarchy is understood
Multiple rules with the same name are both considered
Field rules check the table hierarchy twice
Summarizing the execution
Scripting and access controls
Securing other operations
Building security rules
Conditioning contextual security
Editing the automatic security rules
Testing using impersonation
Setting security rules quickly
Scripting a security rule
Using security rules effectively
Using Scoped Administration
Controlling the Hotel application
Encrypting data
Disadvantages of field encryption
Evaluating encryption gateways
Evaluating encryption gateways
Introducing Domain Separation
Defining a domain
Applying Domain Separation
Organizing domains
Introducing global
Understanding domain inheritance
Turning on Domain Separation
Looking at Domain Separation
Exploring domain visibility
Understanding Delegated Administration
Overriding configuration
Displaying different messages for different domains
Creating more domain relationships
Using Domain Separation appropriately
Authenticating users
Using internal authentication
Controlling authentication
Using an LDAP server for authentication
Enabling Single Sign-on through SAML
Automatically creating users
Logging out
Using Multiple Provider Single Sign-on
Configuring Single Sign-On
Consuming metadata from SSOCircle
Navigating to the side door
Preventing access to the instance
Securing web services
Using WS-Security
Improving security with signatures
Mutual authentication
Setting up outbound mutual authentication
Using OAuth
Summary
Diagnosing ServiceNow – Knowing What Is Going On
Building a methodology
Identifying the issue
Looking at the system log
Writing to the system log
Using the file log
Logging appropriately
Using the debugging tools
Debugging Business Rules
Debugging contextual security rules
Enabling the JavaScript client side log
Seeing client-side messages
Logging to the JavaScript log
Tracking each page request
Recording the time taken
Monitoring the instance's performance
Recording the browser's perspective
Breaking down the browser's time
Visualising the data
Going through other logs
Finding slow database transactions
Classifying slow queries
Examining the Slow Query log
Understanding behaviour
Seeing the plan
Dealing with other performance issues
Managing large tables
Archiving data
Rotating and extending through sharding
Choosing table extension
Selecting table rotation
Auditing and versioning
Turning on auditing
Viewing audit
Using auditing responsibly
Versioning configuration
Reviewing the changes
Optimizing hardware resources
Controlling resources with semaphores
Accessing the system internals
Understanding the ServiceNow Performance homepage
Flushing the system cache
Reviewing the system stats
Summary
Packaging with Applications, Update Sets, and Upgrades
Using your instances
Serializing records to XML
Exporting and importing serialized XML
Transporting data via XML
Recording configuration in Update Sets
Capturing configuration
Transferring an Update Set
Applying an Update Set
Understanding multiple Update Sets
Relying upon other updates
Managing Update Sets
Using the wrong Update Set
Working with workflows
Having the wrong IDs
Backing out Update Sets
Using Update Sets effectively
Cloning instances
Preserving and excluding data
Using clones effectively
Packaging with applications
Application use cases
The philosophy of scoped applications
Identifying configuration
Moving applications
Publishing applications
Exporting applications
Using a Git repository
Using source control effectively
Including data in applications
Sharing with Share
Selling on ServiceNow Store
Adding more with plugins
Activating plugins
Choosing the right plugin
Configuration and customization
Knowing areas of risk
Protecting your scripts
Upgrading ServiceNow
Understanding upgrades
Applying upgrades
Reverting customizations and restoring out of the box
Managing instances
Summary
Making ServiceNow Beautiful with Service Portal and Custom Interfaces
Making it self – service
Providing self-service access
Layering on a better look and feel
Starting with Service Portal
Getting the assets
Branding the existing portal
Reviewing Service Portal fundamentals
Service Portal and the Service Catalog
Selecting the widgets
Creating the reservation
Creating the portal
Building a home
Creating a theme
Creating some style
Adding a menu
Adding a client-side widget
Exploring dynamic widgets
Building the dynamic widget
Locking down the data
Filtering maintenance tasks
Finding the reservations
Altering access controls
Testing the site
Digging into Jelly
Creating a UI Page
Adding interactivity to UI pages
Including UI macros
Looping with Jelly
Extending Jelly
Using Angular and Jelly
Using Angular to say hello
Interacting with the database
Updating records
Including Jelly in the standard interface
Adding formatters
Decorating and contributing to fields
Launching a dialog box
Launching UI pages with GlideDialogWindow
Fitting in a form
Displaying any page with GlideBox
Summary
Bibliography
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜