Guidewire PolicyCenter 9.0.9 Setup Guide
Guidewire PolicyCenter 9.0.9 Setup Guide
Configuration Guide
Release 9.0.9
©2020 Guidewire Software, Inc.
For information about Guidewire trademarks, visit [Link]
Guidewire Proprietary & Confidential — DO NOT DISTRIBUTE
Contents
Part 1
PolicyCenter configuration basics
1 Overview of PolicyCenter configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
What you can configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Guidewire internal methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
How you configure PolicyCenter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Types of application environments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
The development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
The production environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Deploying configuration files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Deploying changes in a development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Deploying changes to the production server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Regenerating the data and security dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Generating the data and security dictionaries in HTML format. . . . . . . . . . . . . . . . . . . . . . . . . . .39
Generating the data and security dictionaries in XML format . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Generating the security dictionary from PolicyCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Generating the dictionaries as you generate a .war or .ear file. . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Aspects of regenerating the Security Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Managing configuration changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
BusinessDayEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
BusinessDayStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
BusinessWeekEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
HolidayList (obsolete). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
IsFridayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
IsMondayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
IsSaturdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
IsSundayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
IsThursdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
IsTuesdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
IsWednesdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
MaxAllowedDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
MinAllowedDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Business rules parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
BizRulesCacheStaleTimeMinutes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
BizRulesDeploymentEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
BizRulesDeploymentId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
BizRulesImportBootstrapRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
BizRulesLeafSearchNumOfHops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
BulkLoadRuleHeadByIdCacheEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
PreloadBizRulesBeansCacheEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Cache parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
ExchangeRatesCacheRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
GlobalCacheActiveTimeMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
GlobalCacheDetailedStats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheReapingTimeMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheSizeMegabytes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheSizePercent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheStaleTimeMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheStatsRetentionPeriodDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GlobalCacheStatsWindowMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GroupCacheRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
ScriptParametersRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
TreeViewRefresh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
ZoneCacheRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Clustering parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
ClusteringEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
ClusterMemberPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
ClusteringProductModelUpdateMaxRetries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
ClusteringProductModelUpdateRetryTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
ClusteringProductModelUpdateSleepTimeCeiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
ConfigVerificationEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
PDFMergeHandlerLicenseKey. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
SerializationWhitelistEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
Database parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableHashJoinPolicySearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableIndexFastFullScanForPolicySearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableSequenceUtil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableSortMergeJoinPolicySearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DiscardQueryPlansDuringStatsUpdateBatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
IdentifyQueryBuilderViaComments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
IdentifyORMLayerViaComments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
MigrateToLargeIDsAndDatetime2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
UseOracleHintsOnMessageQueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
Data destruction parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
4
Guidewire PolicyCenter 9.0.9 Configuration Guide
ArchiveReferenceTrackingEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
ContactDestructionRequestAgeForPurgingResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
PersonalDataDestructionEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Desktop and team parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
ActivityStatisticsWindowSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
OtherWorkOrdersStatisticsWindowSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
RenewalsStatisticsWindowSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
SearchActivityThresholdDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
SubmissionsStatisticsWindowSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
TeamScreenTabVisibilityRowCountCutoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
Document creation and document management parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
DisplayDocumentEditUploadButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
DocumentContentDispositionMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
DocumentTemplateDescriptorXSDLocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
FinalDocumentsNotEditable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
MaximumFileUploadCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
MaximumFileUploadSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
MaximumTotalUploadSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
Environment parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
AddressVerificationFailureAsError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
AlwaysShowPhoneWidgetRegionCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
CurrentEncryptionPlugin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
DeprecatedEventGeneration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
EnableAddressVerification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
EnableInternalDebugTools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
KeyGeneratorRangeSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
MemoryUsageMonitorIntervalMins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
PublicIDPrefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
ResourcesMutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
RetainDebugInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
StrictDataTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
TwoDigitYearThreshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
UnreachableCodeDetection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
UnrestrictedUserName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
UseOldStylePreUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
WarnOnImplicitCoercion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
WebResourcesDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
Financial parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
Geocoding parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
UseGeocodingInPrimaryApp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
ProximitySearchOrdinalMaxDistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
ProximityRadiusSearchDefaultMaxResultCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
UseMetricDistancesByDefault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
Globalization parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
DefaultApplicationLanguage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
DefaultApplicationLocale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
DefaultApplicationCurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
DefaultRoundingMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
MulticurrencyDisplayMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
DefaultCountryCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
DefaultPhoneCountryCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
DefaultNANPACountryCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
AlwaysShowPhoneWidgetRegionCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
Integration parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
BillingSystemArchiveEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
5
Guidewire PolicyCenter 9.0.9 Configuration Guide
BillingSystemArchivePolicyPeriodDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
BillingSystemURL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
ClaimSystemURL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
DefaultXmlExportIEncryptionId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
KeepCompletedMessagesForDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
LockDuringDistributedMessageRequestHandling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
LockPrimaryEntityDuringMessageHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
PaymentSystemURL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
PluginStartupTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
Job expiration parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
JobExpirationCheckAudit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
JobExpirationCheckCancellation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpirationCreateDateThreshold. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpirationEffDateThreshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpireCheckIssuance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpireCheckPolicyChange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpireCheckReinstatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpireCheckRenewal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
JobExpireCheckRewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
JobExpireCheckSubmission. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
JobExpireCheckTestJob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
Lookup table parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
AvailabilityContextCacheEntryExpirationTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
AvailabilityContextCacheSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
UsePolicyPeriodReferenceDateForOfferingAvailability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
Miscellaneous job-related parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
AllowedDaysBeforeOrAfterPolicyStartDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
MaximumPolicyCreationYearDelta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MaxRecentAccounts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MaxRecentPoliciesAndJobs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MaxSubmissionsToCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
MinimumPolicyCreationYear. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
PatternCacheMaxDuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
PolicyChangeMaxQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
PurgeTemporaryPolicyPeriodsAfterDays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
PurgeTemporaryPolicyPeriodsEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
RenewalMaxQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
RenewalProcessLeadTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
SubmissionMaxQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
Miscellaneous parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
ConsistencyCheckerThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
DefaultDiffDateFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
DisableDomainGraphSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
IgnoreLeapDayForEffDatedCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
InitialSampleDataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
PreloadSystemTableToCacheForFasterSynchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
ProfilerDataPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
TransactionIdPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
Policy exception parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
BoundPolicyThresholdDays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
ClosedPolicyThresholdDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
OpenPolicyThresholdDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
PDF print settings parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
DefaultContentDispositionMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
PrintFontFamilyName. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
6
Guidewire PolicyCenter 9.0.9 Configuration Guide
PrintFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintFOPUserConfigFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintHeaderFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintLineHeight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintListViewBlockSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintListViewFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintMarginBottom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintMarginLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMarginRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMarginTop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMaxPDFInputFileSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintPageHeight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintPageWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintPdfDefaultBaseFileExtension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintPdfMimeType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
Print settings parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintCsvDefaultBaseFileExtension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintCsvMimeType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintDefaultBaseFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Product model parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
ExternalProductModelDirectory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
ProductModelClassCacheConcurrencyLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Quote purging configuration parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
PruneAndPurgeJobsEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
PruneVersionsDefaultRecheckDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
PruneVersionsPolicyTermDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
PruneVersionsPolicyTermDaysCheckDisabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
PruneVersionsRecentJobCompletionDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
PurgeJobsDefaultRecheckDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
PurgeJobsPolicyTermDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
PurgeJobsPolicyTermDaysCheckDisabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
PurgeJobsRecentJobCompletionDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
PurgeOrphanedPolicyPeriodsEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
Rating management parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
EnableRateRoutinesJar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
OverriddenTableArgsLabelSimple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
PurgeRateBookExportResultEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
PurgeWorksheetsEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
RateBookExportResultAgeForPurging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
RateBookPreloadEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
RateRoutineIndexingThreshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
RateRoutinesJarFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
RateRoutinesUpdateJarFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
RateTableManagementNormalizationRowLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RateTableManagementNormalizationRowThreshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RatingWorksheetContainerAgeForPurging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
SmallRateTableRowLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RateBookCacheEntryLifetimeSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RateBookCacheUpdateIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RateTableCacheConcurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
RateTableCacheEntryLifetimeSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
RateTableCacheMaxSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
RateTableCacheUpdateIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
RateTableDefinitionCacheUpdateIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Risk assessment parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
7
Guidewire PolicyCenter 9.0.9 Configuration Guide
MultipleLocationRiskAssessmentEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
PurgeRiskAssessmentTempStoreDays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
RiskAssessmentIntegrationEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
RiskAssessmentThumbnailMapEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
SingleLocationRiskAssessmentEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
SpotlightInteractiveServiceURL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
SpotlightLoginURL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
SpotlightRiskAssessmentServiceURL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
SpotlightThumbnailMapURL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
Scheduler and workflow parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
SchedulerEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
WorkflowLogDebug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
WorkflowLogPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
WorkflowPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
WorkflowStatsIntervalMins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
Search parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
FreeTextSearchEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
MaxContactSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
PolicySearchMaxResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
Security parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
EnableDownlinePermissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
ExternalUserAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
FailedAttemptsBeforeLockout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
LockoutPeriod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
LoginRetryDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
MaxPasswordLength. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
MinPasswordLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
RestrictContactPotentialMatchToPermittedItems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
RestrictSearchesToPermittedItems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
SessionTimeoutSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
Side-by-side quoting parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
RenewalMaxSideBySideQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
SideBySide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
SubmissionMaxSideBySideQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
PolicyChangeMaxSideBySideQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
User interface parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
ActionsShortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
AutoCompleteLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
InputMaskPlaceholderCharacter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
ListViewPageSizeDefault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
MaxBrowserHistoryItems (obsolete). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
QuickJumpShortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
UISkin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
WebUIAJAXTimeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
Work queue parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
InstrumentedWorkerInfoPurgeDaysOld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkItemCreationBatchSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkItemPriorityMultiplierSecs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkItemRetryLimit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkQueueHistoryMaxDownload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
WorkQueueThreadPoolMaxSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
WorkQueueThreadPoolMinSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
WorkQueueThreadsKeepAliveTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
8
Guidewire PolicyCenter 9.0.9 Configuration Guide
Part 2
The Guidewire development environment
3 Getting started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
What Is Guidewire Studio? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
The Studio development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
Working with the QuickStart development server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
Connecting the development server to a database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
Deploying your configuration changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
PolicyCenter configuration files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Key directories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Studio and IntelliJ IDEA configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Using Studio with IntelliJ IDEA Ultimate Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Setting IntelliJ IDEA properties in Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Studio and the DCEVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Start Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Stop Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Updating Guidewire Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Enable or disable automatic update checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Manually check for Studio updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Setting the Studio update site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Updating Studio manually . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Part 3
Guidewire Studio editors
7 Using the Studio editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Editing in Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Working in the Gosu editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Using Product Designer to edit the product model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
10
Guidewire PolicyCenter 9.0.9 Configuration Guide
Part 4
Data model configuration
14 Working with the Data Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
What is the Data Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
What can you view in the Data Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Using the Data Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Property colors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Object attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Property attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Property tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Entity subtypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Data field types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Virtual properties on data entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
11
Guidewire PolicyCenter 9.0.9 Configuration Guide
14
Guidewire PolicyCenter 9.0.9 Configuration Guide
Part 5
User interface configuration
23 Using the PCF editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Page configuration (PCF) editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Page canvas overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Creating a new PCF file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Create a new PCF folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Create a new PCF file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
PCF file type icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Working with shared or included files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Understanding PCF modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Setting a PCF mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Create new modal PCF files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Page Config menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Toolbox tab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Structure tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Properties tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Child lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
PCF elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
PCF elements and the Properties tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Working with elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Adding an element to the canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Moving an element on the canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Changing the type of an element. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Adding a comment to an element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Find a PCF element on the canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
View the source of a PCF element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Duplicate a PCF element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Delete a PCF element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Copy a PCF element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Cut a PCF element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Paste a PCF element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Linking widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
27 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Navigation overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Tab bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Configure the default tab bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Specify which tab bar to display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Define a tab bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Tabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Define a tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Define a drop-down menu on a tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
16
Guidewire PolicyCenter 9.0.9 Configuration Guide
Part 6
Workflow, activity patterns, and email configuration
30 Using the workflow editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Workflow in Guidewire PolicyCenter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Workflow in Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Access the workflow editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Workflow editor window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Workflow editor elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Understanding workflow steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Using the workflow right-click menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Using search with workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Part 7
Testing Gosu code
34 Testing and debugging your configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Testing PolicyCenter with Guidewire Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Running PolicyCenter without debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Debugging PolicyCenter within Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Debugging a PolicyCenter server that is running outside of Studio . . . . . . . . . . . . . . . . . . . . . . . 500
The Studio debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Setting breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Set a breakpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
View a breakpoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Remove a breakpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Stepping through code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Viewing current values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
18
Guidewire PolicyCenter 9.0.9 Configuration Guide
Part 8
Guidewire PolicyCenter configuration
36 PolicyCenter configuration guidelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Guidelines for modularizing line-of-business code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
19
Guidewire PolicyCenter 9.0.9 Configuration Guide
20
Guidewire PolicyCenter 9.0.9 Configuration Guide
22
Guidewire PolicyCenter 9.0.9 Configuration Guide
Part 9
Guidewire PolicyCenter job configuration
55 Configuring jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Common ways to configure jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Wizards for jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Gosu classes for jobs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Job rule sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Job workflows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
System configuration parameters for jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Changing jobs to expired status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Configuring the job expire batch process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Configuring job history events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732
History events in the default configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
Configuring history search criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Multiple revision jobs and the job selected branch property . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Selecting the underwriting company through segmentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
Segmentation classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
PolicyPeriodBaseEnhancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
25
Guidewire PolicyCenter 9.0.9 Configuration Guide
26
Guidewire PolicyCenter 9.0.9 Configuration Guide
27
Guidewire PolicyCenter 9.0.9 Configuration Guide
28
Guidewire PolicyCenter 9.0.9 Configuration Guide
Document Purpose
InsuranceSuite Guide If you are new to Guidewire InsuranceSuite applications, read the InsuranceSuite Guide for informa‐
tion on the architecture of Guidewire InsuranceSuite and application integrations. The intended read‐
ers are everyone who works with Guidewire applications.
Application Guide If you are new to PolicyCenter or want to understand a feature, read the Application Guide. This guide
describes features from a business perspective and provides links to other books as needed. The in‐
tended readers are everyone who works with PolicyCenter.
Upgrade Guide Describes the overall upgrade process, and describes how to upgrade your configuration and data‐
base from a previous major version. The intended readers are system administrators and implementa‐
tion engineers who must merge base application changes into existing application extensions and in‐
tegrations.
The Upgrade Guide is available separately from the main documentation set.
Configuration Upgrade Guide Describes the overall PolicyCenter upgrade process, and describes how to upgrade your PolicyCenter
configuration from a previous major version. The intended readers are system administrators and im‐
plementation engineers who must merge base application changes into existing PolicyCenter applica‐
tion extensions and integrations. The Configuration Upgrade Guide is published with the Upgrade
Tools and is available from the Guidewire Community.
New and Changed Guide Describes new features and changes from prior PolicyCenter versions. Intended readers are business
users and system administrators who want an overview of new features and changes to features. Con‐
sult the “Release Notes Archive” part of this document for changes in prior maintenance releases.
Installation Guide Describes how to install PolicyCenter. The intended readers are everyone who installs the application
for development or for production.
System Administration Guide Describes how to manage a PolicyCenter system. The intended readers are system administrators re‐
sponsible for managing security, backups, logging, importing user data, or application monitoring.
Configuration Guide The primary reference for configuring initial implementation, data model extensions, and user inter‐
face (PCF) files for PolicyCenter. The intended readers are all IT staff and configuration engineers.
PCF Reference Guide Describes PolicyCenter PCF widgets and attributes. The intended readers are configuration engineers.
Data Dictionary Describes the PolicyCenter data model, including configuration extensions. The dictionary can be gen‐
erated at any time to reflect the current PolicyCenter configuration. The intended readers are configu‐
ration engineers.
Security Dictionary Describes all security permissions, roles, and the relationships among them. The dictionary can be
generated at any time to reflect the current PolicyCenter configuration. The intended readers are con‐
figuration engineers.
Globalization Guide Describes how to configure PolicyCenter for a global environment. Covers globalization topics such as
global regions, languages, date and number formats, names, currencies, addresses, and phone num‐
bers. The intended readers are configuration engineers who localize PolicyCenter.
Rules Guide Describes business rule methodology and the rule sets in Guidewire Studio for PolicyCenter. The in‐
tended readers are business analysts who define business processes, as well as programmers who
write business rules in Gosu.
Document Purpose
Contact Management Guide Describes how to configure Guidewire InsuranceSuite applications to integrate with ContactManager
and how to manage client and vendor contacts in a single system of record. The intended readers are
PolicyCenter implementation engineers and ContactManager administrators.
Best Practices Guide A reference of recommended design patterns for data model extensions, user interface, business
rules, and Gosu programming. The intended readers are configuration engineers.
Integration Guide Describes the integration architecture, concepts, and procedures for integrating PolicyCenter with ex‐
ternal systems and extending application behavior with custom programming code. The intended
readers are system architects and the integration programmers who write web services code or plu‐
gin code in Gosu or Java.
Java API Reference Javadoc‐style reference of PolicyCenter Java plugin interfaces, entity fields, and other utility classes.
The intended readers are system architects and integration programmers.
Gosu Reference Guide Describes the Gosu programming language. The intended readers are anyone who uses the Gosu lan‐
guage, including for rules and PCF configuration.
Gosu API Reference Javadoc‐style reference of PolicyCenter Gosu classes and properties. The reference can be generated
at any time to reflect the current PolicyCenter configuration. The intended readers are configuration
engineers, system architects, and integration programmers.
Glossary Defines industry terminology and technical terms in Guidewire documentation. The intended readers
are everyone who works with Guidewire applications.
Product Model Guide Describes the PolicyCenter product model. The intended readers are business analysts and implemen‐
tation engineers who use PolicyCenter or Product Designer. To customize the product model, see the
Product Designer Guide.
Product Designer Guide Describes how to use Product Designer to configure lines of business. The intended readers are busi‐
ness analysts and implementation engineers who customize the product model and design new lines
of business.
narrow bold The name of a user interface element, such Click Submit.
as a button name, a menu item name, or a
tab name.
monospace Code examples, computer output, class and The getName method of the IDoStuff API returns the name of the
method names, URLs, parameter names, object.
string literals, and other objects that might
appear in programming code.
monospace italic Variable placeholder text within code Run the startServer server_name command.
examples, command examples, file paths, Navigate to [Link]
and URLs.
Support
For assistance, visit the Guidewire Community.
Guidewire customers
[Link]
Guidewire partners
[Link]
Overview of PolicyCenter
configuration
This topic provides some basic information, particularly about the Guidewire PolicyCenter data model and system
environment. Guidewire recommends that before you undertake any configuration changes, that you thoroughly
understand this information.
Define workflows
You can create new workflows, create new workflow types, and attach entities to workflows as context entities. You
can also set new instances of a workflow to start within Gosu business rules.
See also
• “Using the Studio editors” on page 131
36 chapter 1: Overview of PolicyCenter configuration
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. After making configuration changes in your development environment, run one of the build commands from
your development PolicyCenter directory.
For example:
gwb warTomcatDbcp
Also, delete the existing .war (or .ear) file on the production server. In any case, moving a new copy to the
production server overwrites the existing file.
4. Navigate to your development installation dist directory (for example, PolicyCenter/dist). The build
script places the new [Link] or [Link] file in this directory.
5. Copy the newly created [Link] file to the production webapps folder (for Tomcat). If using WebSphere or
WebLogic, use the administrative console to deploy the [Link] file.
6. Restart the production application server.
7. During a server start, if the application recognizes changes to the data model, then it mandates that a database
upgrade be run. The server runs the database upgrade automatically.
See also
• If working in a clustered server environment, see the System Administration Guide.
38 chapter 1: Overview of PolicyCenter configuration
Guidewire PolicyCenter 9.0.9 Configuration Guide
PolicyCenter Administration→Utilit- Security Dictionary “Generating the security dictionary from PolicyCenter” on
ies→Export Data page 40
Command prompt gwb Security Dictionary “Generating the data and security dictionaries in HTML format”
genDataDictionary Data Dictionary on page 39
“Generating the data and security dictionaries in XML format” on
page 39
See also
• To understand the Data Dictionary and the information it includes, see “Working with the Data Dictionary” on
page 163.
• To understand the Security Dictionary and the information it includes, see the Application Guide
This command generates HTML files for the dictionaries in the following locations:
PolicyCenter/build/dictionary/data
PolicyCenter/build/dictionary/security
To view a dictionary, open its [Link] file from the listed locations.
This command generates the following XML and XSD files for the dictionaries:
PolicyCenter/build/dictionary/data/[Link]
PolicyCenter/build/dictionary/data/[Link]
PolicyCenter/build/dictionary/security/[Link]
PolicyCenter/build/dictionary/security/[Link]
The parameter that specifies the output format has two allowed values.
-DoutputFormat={html|xml}
If you specify -DoutputFormat=html or you omit the -DoutputFormat parameter, the genDataDictionary
command generates HTML versions of the Data Dictionary and the Security Dictionary.
See also
• Installation Guide
IMPORTANT It is possible for the Security Dictionary to become out of synchronization with the
actual roles in your database. Guidewire PolicyCenter bases the Security Dictionary on the file
[Link] only.
This topic covers the PolicyCenter configuration parameters, which are static values that you use to control various
aspects of system operation. For example, you can control business calendar settings, cache management, and user
interface behavior through the use of configuration parameters, along with much more.
Each entry sets the parameter named param_name to the value specified by param_value.
The [Link] file in the base configuration contains all available parameters. To set a parameter, edit the file,
locate the parameter, and change its value. PolicyCenter configuration parameters are case-insensitive. If a
parameter does not appear in the file, Guidewire PolicyCenter uses the default value, if the parameter has one.
Required
Guidewire designates certain configuration parameters as required, which means that you must supply a value for
that parameter.
Configuration parameters that are required have Required: Yes in their parameter descriptions.
Note: For information on server environments in Guidewire PolicyCenter, see the System
Administration Guide.
Dynamic
Guidewire designates certain configuration parameters as dynamic. This indicates that Guidewire permits you to
change this value on a running application server through management integration. The discussion of configuration
parameters indicates this by adding Dynamic: Yes to the parameter description.
See the Integration Guide.
Permanent
Guidewire specifies several configuration parameter values as permanent. After you set the value of a permanent
parameter and start the production application server, you cannot change the parameter’s value. An example is the
DefaultApplicationLocale configuration parameter. If you set the value of this parameter on a production server and
then start the server, you are unable to change the value thereafter.
Guidewire stores these values in the database and checks the value at server start up. If an application server value
does not match a database value, PolicyCenter throws an error.
Semi‐permanent
Guidewire specifies a limited number of configuration parameter values as semi-permanent. After you set the value
of a semi-permanent parameter and start the production application server, you can change the value of the
parameter only once to a specified value.
Nullable
The parameter value is allowed to be null.
Procedure
1. Open the Server Tools page of the PolicyCenter server.
2. In the sidebar, click Info Pages→Configuration.
Result
See the Integration Guide.
Example
For example:
var businessDayEnd = [Link]
var forceUpgrade = [Link]
Procedure
1. If necessary, add the MIME type to the configuration of the application server. This step is dependent on the
configuration requirements of the application server.
For example, Tomcat stores MIME type information in the [Link] configuration file in a series of <mime-
mapping> tags. Verify that the needed MIME type exists in the appropriate file. If necessary, add it.
Application configuration parameters 43
Guidewire PolicyCenter 9.0.9 Configuration Guide
2. Add the new MIME type to the PolicyCenter [Link] file in the <mimetypemapping> section.
• For the name attribute, specify the name of the MIME type, such as text/plain.
• For the extensions attribute, specify the file extensions used by the MIME type. If the MIME type is used
by more than one file extension, separate each extension with a “|” character. PolicyCenter uses this
information to associate MIME types and file extensions. If retrieving a file extension from a MIME type,
PolicyCenter uses the first extension in the list. If retrieving a MIME type from a file extension,
PolicyCenter uses the first <mimetype> entry associated with the extension.
• For the icon attribute, specify the image to use for documents of the MIME type. For example, Tomcat
assumes the images are stored in the tomcat/webapps/pc/resources/images directory.
3. Create a description for the MIME type. The description is stored in the displaykey files. The definition has a
prefix of Mimetype. (notice the prefix-terminating period) followed by the MIME type name attribute
specified in the type’s definition in the [Link] <mimetypemapping> section. Any non-alphanumeric
character in the name must be replaced with an underscore character. For example, the text/plain MIME
type would have a displaykey description of Mimetype.text_plain.
Account parameters
Guidewire provides the following configuration parameters in the [Link] file related to approval activities.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
AccountsWithdrawnAfterMonths
This parameter is one of the factors that Account Withdraw Evaluation batch processing uses to evaluate whether to
change an account's status to withdrawn. If the creation time or origination date of the account is greater than this
value in months, then the account can be withdrawn.
Default: 37 months
Archive parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to archiving.
See also
• “Working with configuration parameters” on page 41
• “Policy Term archiving” on page 703
• Application Guide
ArchiveDaysRetrievedBeforeArchive
Minimum number of days that must pass after PolicyCenter restores a policy term before it is possible to archive the
term again.
Default: 90
ArchiveDefaultRecheckDays
Minimum number of days that must pass before PolicyCenter reconsiders a policy term for archiving after a
previous check did not identify the policy term as an archiving candidate.
Default: 30
44 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
ArchiveEnabled
A Boolean string that specifies whether archiving is enabled or disabled. If set to true, an archive storage area must
be implemented. An archive storage area can be implemented as a database, a regular file on a storage system, or
some other desired method of storage. The PolicyCenter base configuration does not provide an archive storage
area.
This parameter also controls the creation of indexes on the ArchivePartition column. If you set the value of this
parameter to true, PolicyCenter creates a non-unique index on the ArchivePartition column for Extractable
entities.
In PolicyCenter, ArchiveEnabled controls whether or not the domain graph is started. If this parameter and
DisableDomainGraphSupport are both true, the server will not start.
The value of ArchiveEnabled is semi-permanent, meaning that after you start the production server, you can change
the value of this parameter from false to true, but not the converse.
WARNING After you set ArchiveEnabled to true and start the server, you cannot change the
value again. If you reset the value to false, the server will not start.
Default: false
Required: Yes
Permanent: Semi-permanent
ArchivePolicyTermDays
Minimum number of days that must pass before the policy periods associated with a given policy term can be
archived.
Default: 366
ArchiveRecentJobCompletionDays
Minimum number of days that must pass after a job is closed before archiving the associated policy term. Jobs are
associated with policy periods.
Default: 90
DomainGraphKnownUnreachableTables
Use to define a comma-separated list of relative names of entity types that are linked to the graph through a nullable
foreign key. This can be problematic because the entity can become unreachable from the graph if the foreign key is
null. Naming the type in this configuration parameter suppresses the warning that would otherwise be generated for
the type by the domain graph validator
Default: None
Assignment parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to assignment.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
AssignmentQueuesEnabled
Whether to display the PolicyCenter interface portions of the assignment queue mechanism. If you turn this on, you
cannot turn it off again while working with the same database.
Default: false
Application configuration parameters 45
Guidewire PolicyCenter 9.0.9 Configuration Guide
BatchProcessHistoryPurgeDaysOld
Number of days to retain batch process history before PolicyCenter deletes it.
Default: 45
CleanupETLPurgeRoot
Minimum number of days that must pass after a purge event has occurred for the request to be eligible for delete by
the Cleanup ETLPurgeRoot process.
Default: 180
BusinessDayDemarcation
The time at which a business day begins.
Default: 12:00 AM
Set For Environment: Yes
BusinessDayEnd
Indicates the time at which the business day ends.
Default: 5:00 PM
Set For Environment: Yes
BusinessDayStart
Indicates the time at which the business day starts.
Default: 8:00 AM
Set For Environment: Yes
BusinessWeekEnd
The day of the week considered to be the end of the business week.
Default: Friday
Set For Environment: Yes
HolidayList (obsolete)
This parameter is obsolete. Do not use it. Previously, you would use this to generate a comma-delimited list of
dates to consider as holidays. Instead, use the Administration screen within Guidewire PolicyCenter to manage the
46 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
official designation of holidays. Guidewire retains this configuration parameter to facilitate upgrade from older
versions of PolicyCenter.
IsFridayBusinessDay
Indicates whether Friday is a business day.
Default: true
Set for Environment: Yes
IsMondayBusinessDay
Indicates whether Monday is a business day.
Default: true
Set for Environment: Yes
IsSaturdayBusinessDay
Indicates whether Saturday is a business day.
Default: false
Set for Environment: Yes
IsSundayBusinessDay
Indicates whether Sunday is a business day.
Default: false
Set for Environment: Yes
IsThursdayBusinessDay
Indicates whether Thursday is a business day.
Default: true
Set for Environment: Yes
IsTuesdayBusinessDay
Indicates whether Tuesday is a business day.
Default: true
Set for Environment: Yes
IsWednesdayBusinessDay
Indicates whether Wednesday is a business day.
Default: true
Set for Environment: Yes
MaxAllowedDate
The latest date allowed to be used.
Default: 2200-12-31
Set For Environment: Yes
Application configuration parameters 47
Guidewire PolicyCenter 9.0.9 Configuration Guide
MinAllowedDate
The earliest date allowed to be used.
Default: 1800-01-01
Set For Environment: Yes
See also
• Application Guide
BizRulesCacheStaleTimeMinutes
Time (in minutes) that PolicyCenter retains rule data in the RuleVersion cache before it considers cached items to
be stale and thus eligible for reaping.
PolicyCenter initializes the RuleVersion cache once, at server start up. It then rebuilds the cache every time the
following entities change:
• RuleHead
• RuleVersion
• Rule
Default: 60
Minimum: 1
Maximum: 120
Set for Environment: Yes
BizRulesDeploymentEnabled
Determines whether it is necessary to explicitly deploy a business rule before PolicyCenter can evaluate the rule. If
you set the value of this parameter to true, you must also provide a value for configuration parameter
BizRulesDeploymentId.
It is possible to disable the requirement for rule deployment in a test or development environment, by setting
BizrulesDeploymentEnabled to false. In a non-production environment, if you do not enable business rule
deployment, PolicyCenter evaluates all enabled and valid rules at runtime, including rules in the draft state.
Default: false
BizRulesDeploymentId
Unique string identifier of the server to which you intend to deploy the business rules. There is no default value for
this parameter. If the value of BizRulesDeploymentEnabled is true, then you must supply a value for this
parameter. Otherwise, the server generates an error during server start and refuses to start. PolicyCenter ignores this
configuration parameter if the value of BizRulesDeploymentEnabled is false.
It is possible to change the value of this parameter through a server restart. However, if you change the value of
BizRulesDeploymentId, PolicyCenter does not update already deployed rule versions.
48 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
Guidewire recommends, in a production environment, that you have a single BizRulesDeploymentId value for the
entire production cluster. This action guarantees that all nodes in the cluster use the same BizRulesDeploymentId
parameter value. Using the same value on all cluster nodes ensures that rule deployment works consistently across
all nodes in the cluster. You can choose any name for this value if you use only a single PolicyCenter production
cluster. For example, if all nodes in a cluster point to a single database, you can use the database ID as the
BizRulesDeploymentId value.
However, if you use multiple production clusters, each separate cluster must have its own unique value for this
configuration parameter. PolicyCenter expressly does not permit you to import business rules from another cluster
instance that has the same BizRulesDeploymentId value as the cluster instance into which you are importing the
rules.
PolicyCenter associates the BizRulesDeploymentId value (name) with a rule during its deployment. Thus, if you
deploy the rule in one production cluster, the name appears along with the rule version number in other production
clusters to identify that the rule was deployed in a particular production cluster. For example, if the value of
BizRulesDeploymentId is GW100-A, the rule version appears as 1.GW100-A in all other production clusters.
Default: None
See also
• System Administration Guide
BizRulesImportBootstrapRules
Whether PolicyCenter imports the business rules located in folder config/import/bizrules on starting the
application server with an empty database. Set the value of this parameter to true to import the files located in the
bizrules folder.
IMPORTANT Guidewire recommends that you set the value of this configuration parameter to true in
a non-production test environment only.
Default: false
See also
• System Administration Guide
BizRulesLeafSearchNumOfHops
Maximum number of hops for a leaf search to search through in suggesting matching results. This parameter refers
to the autocomplete feature of the Rule Condition editor on the Business Rules detail screens.
In the following expression, A is the root, B is a single hop, and c is a leaf.
A.B.c
The following example illustrates a two hop expression, with the root being office and PhoneNumber the leaf.
[Link][0].[Link]
Default: 3
BulkLoadRuleHeadByIdCacheEnabled
The Rule Head cache stores the RuleHead IDs for all business rules used in the application. If not configured to do
otherwise, PolicyCenter populates this cache using multiple database queries. The use of multiple queries can
greatly impact the performance of the business rules. However, if you set this configuration parameter to true,
PolicyCenter uses a single database query to bulk load the cache, thereby significantly improving the performance of
the business rules.
Application configuration parameters 49
Guidewire PolicyCenter 9.0.9 Configuration Guide
PreloadBizRulesBeansCacheEnabled
The Rule Entities cache stores the entities that comprise the entire rule graph for all rule versions that can possibly
execute in the application. If not configured to do otherwise, PolicyCenter populates this cache using multiple
database queries. The use of multiple queries can greatly impact the performance of the business rules. However, if
you set this configuration parameter to true, PolicyCenter uses a single database query to bulk load the cache,
thereby significantly improving the performance of the business rules.
This parameter can take the following values:
• true - PolicyCenter uses a single query to preload the Rule Entities cache with business rule entities from the
database.
• false - PolicyCenter uses multiple queries during rule execution to fetch the necessary business rule entities.
Note: For information on how to bulk load the Rule Entities cache at server start, see the System
Administration Guide.
Default: true
Cache parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to the application
cache.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
See also
• System Administration Guide
ExchangeRatesCacheRefreshIntervalSecs
The time between refreshes of the ExchangeRateSet cache, in seconds. This integer value must be 0 or greater. See
the System Administration Guide for more information.
Default: 600
GlobalCacheActiveTimeMinutes
Time period (in minutes) in which PolicyCenter considers cached items as active, meaning that Guidewire
recommends that the cache give higher priority to preserve these items. You can think of this as the period during
which PolicyCenter is using one or more items very heavily. For example, this can be the length of time that a user
stays on a page. The maximum value for this parameter is the smaller of 15 and the value of
GlobalCacheStaleTimeMinutes.
See the System Administration Guide for more information.
Default: 5
Minimum: 1
Maximum: 15
Set for Environment: Yes
50 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
GlobalCacheDetailedStats
Configuration parameter GlobalCacheDetailedStats determines whether to collect detailed statistics for the global
cache. Detailed statistics are data that PolicyCenter collects to explain why items are evicted from the cache.
PolicyCenter collects basic statistics, such as the miss ratio, regardless of the value of this parameter.
In the base configuration, Guidewire sets the value of the GlobalCacheDetailedStats parameter to false. Set the
parameter to true to help tune your cache.
At runtime, use the PolicyCenter Management Beans page to enable the collection of detailed statistics for the global
cache. If you disable the GlobalCacheDetailedStats parameter, PolicyCenter does not display the Evict Information
and Type of Cache Misses graphs.
Default: false
Dynamic: Yes
Required: Yes
GlobalCacheReapingTimeMinutes
Time (in minutes) since the last use before PolicyCenter considers cached items to be eligible for reaping. You can
think of this as the period during which PolicyCenter is most likely to reuse and entity. See the System
Administration Guide for more information.
Default: 15
Minimum: 1
Maximum: 15
Set for Environment: Yes
GlobalCacheSizeMegabytes
The amount of space to allocate to the global cache. If you specify this value, it takes precedence over
GlobalCacheSizePercent. See the System Administration Guide for more information.
Nullable: Yes
Set for Environment: Yes
GlobalCacheSizePercent
The percentage of the heap to allocate to the global cache. See the System Administration Guide for more
information.
Default: 15
Set for Environment: Yes
GlobalCacheStaleTimeMinutes
Time (in minutes) since the last write before PolicyCenter considers cached items to be stale and thus eligible for
reaping. See the System Administration Guide for more information.
Default: 60
Minimum: 1
Maximum: 120
Set for Environment: Yes
Dynamic: Yes
Application configuration parameters 51
Guidewire PolicyCenter 9.0.9 Configuration Guide
GlobalCacheStatsRetentionPeriodDays
Time period (in days), in addition to today, for how long PolicyCenter preserves statistics for historical comparison.
See the System Administration Guide for more information.
Default: 7
Minimum: 2
Maximum: 365
Set for Environment: Yes
GlobalCacheStatsWindowMinutes
Time period (in minutes). PolicyCenter uses this parameter for the following purposes:
• To define the period of time to preserve the reason for which PolicyCenter evicts an item from the cache, after
the event occurred. If a cache miss occurs, PolicyCenter looks up the reason and reports the reason in the Cache
Info page.
• To define the period of time to display statistics on the chart on the Cache Info page.
See the System Administration Guide for more information.
Default: 30
Minimum: 2
Maximum: 120
Set for Environment: Yes
GroupCacheRefreshIntervalSecs
The time in seconds between refreshes of the group cache. This integer value must be 0 or greater. See the System
Administration Guide for more information.
Default: 600
ScriptParametersRefreshIntervalSecs
The time between refreshes of the script parameter cache, in seconds. This integer value must be 0 or greater. See
the System Administration Guide for more information.
Default: 600
TreeViewRefresh
The time in seconds that Guidewire PolicyCenter caches a tree view state.
Default: 120
ZoneCacheRefreshIntervalSecs
The time between refreshes of the zone cache, in seconds. See the System Administration Guide for more
information.
Default: 86400
Clustering parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to the application
clusters.
52 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
To improve performance and reliability, you can install multiple PolicyCenter servers in a configuration known as a
cluster. A cluster distributes client connections among multiple PolicyCenter servers, reducing the load on any one
server. If one server fails, the other servers transparently handle its traffic.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
See also
• System Administration Guide
ClusteringEnabled
Whether to enable clustering on this application server.
See also
• “ResourcesMutable” on page 63
ClusterMemberPurgeDaysOld
The number of days to keep cluster member records before they can be deleted.
Default: 30
Minimum value: 1
Required: true
ClusteringProductModelUpdateMaxRetries
Note: This configuration parameter has no meaning unless configuration parameter
ClusteringEnabled is set to true.
Sets the maximum number of retries for each cluster node to perform synchronized product model update
operations. In a multi-node PolicyCenter cluster, you install product model changes on one server, then start that
server to force the upgrade changes. After the first server completes the upgrade process, you can then start the other
nodes in the server cluster simultaneously. Due to the number of concurrent server starts, it is possible for there to be
contention for the shared update lock while updating the PolicyCenter product model on each node. This
Application configuration parameters 53
Guidewire PolicyCenter 9.0.9 Configuration Guide
configuration parameter sets the maximum number of times that a server node attempts to acquire the update lock
before failing.
This parameter works in conjunction with ClusteringProductModelUpdateRetryTimeout and
ClusteringProductModelUpdateSleepTimeCeiling. See ClusteringProductModelUpdateSleepTimeCeiling
for an explanation of how these parameters interact.
Default: 25 (retries)
ClusteringProductModelUpdateRetryTimeout
Note: This configuration parameter has no meaning unless configuration parameter
ClusteringEnabled is set to true.
Sets the time between successive attempts (retries) by a server node to perform synchronized product model update
operations. In a multi-node PolicyCenter cluster, you install product model changes on one server, then start that
server to force the upgrade changes. After the first server completes the upgrade process, you can then start the other
nodes in the server cluster simultaneously. Due to the number of concurrent server starts, it is possible for there to be
contention for the shared update lock while updating the PolicyCenter product model on each node. This
configuration parameter sets the time to wait between successive attempts to acquire the update lock.
Each node in the server cluster uses the following algorithm to calculate the timeout before the next retry attempt. In
this equation, TIMEOUT is the value of ClusteringProductModelUpdateRetryTimeout and n is the value of
ClusteringProductModelUpdateMaxRetries.
(TIMEOUT) + (2 * TIMEOUT) + ... + ((n-1) * TIMEOUT) + (n * TIMEOUT)
This parameter works in conjunction with ClusteringProductModelUpdateMaxRetries and
ClusteringProductModelUpdateSleepTimeCeiling. See ClusteringProductModelUpdateSleepTimeCeiling
for an explanation of how these parameters interact.
Default: 5000 (milliseconds)
ClusteringProductModelUpdateSleepTimeCeiling
Note: This configuration parameter has no meaning unless configuration parameter
ClusteringEnabled is set to true.
Sets the maximum time between successive attempts (retries) by a server node to perform synchronized product
model update operations. In a multi-node PolicyCenter cluster, you install product model changes on one server,
then start that server to force the upgrade changes. After the first server completes the upgrade process, you can then
start the other nodes in the server cluster simultaneously. Due to the number of concurrent server starts, it is possible
for there to be contention for the shared update lock while updating the PolicyCenter product model on each node.
Each cluster server uses a retry/back-off approach in which each retry causes an increasing sleep time delay on that
node. This configuration parameter sets the maximum allowable sleep time between successive attempts to acquire
the update lock. PolicyCenter uses the minimum of the calculated sleep time and this parameter value to calculate
the sleep time for each cluster node for each retry.
This parameter works in conjunction with ClusteringProductModelUpdateMaxRetries and
ClusteringProductModelUpdateRetryTimeout. The following table illustrates the connections between these
three configuration parameters.
ConfigVerificationEnabled
Whether to check the configuration of this server against the other servers in the cluster. You must also set
configuration parameter ClusteringEnabled to true for ConfigVerificationEnabled to be meaningful.
Default: true
Set for Environment: Yes
PDFMergeHandlerLicenseKey
Provides the BFO (Big Faceless Organization) license key needed for server-side PDF generation. If you do not
provide a license key for a server, each generated PDF from that server contains a a large DEMO watermark on its
face. The lack of a license key does not, however, prevent document creation entirely.
It is possible to set this value differently for each server node in the cluster.
Default: None
SerializationWhitelistEnabled
Whether PolicyCenter permits only those Java classes placed on a serialization whitelist to be deserialized. In some
situations, it is possible for deserialized Java objects from untrusted sources to be used to perform remote code
invocation attacks against a Guidewire application server.
For this configuration parameter:
• If disabled, PolicyCenter permits any Java class sent over a cluster channel to be deserialized, except for those
classes specifically placed on a black (forbidden) list.
• If enabled, PolicyCenter permits only those Java classes placed on a white list to be deserialized if sent over a
cluster channel. If enabled, it is not possible to place any class on the black list on the white list as well.
You define the permitted (whitelist) and forbidden (blacklist) Java classes in the following configuration files:
• [Link]
• [Link]
The Server Tools Serialization Info screen (under Info Pages) provides a means of monitoring the deserialization of Java
classes.
Default: false
Application configuration parameters 55
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• System Administration Guide
Database parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to the application
database.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
DisableHashJoinPolicySearch
On an Oracle database, you can improve the performance of a policy search—if the search criteria include a first
name, last name or a company name—by disabling a Hash Join.
Default: true
DisableIndexFastFullScanForPolicySearch
On Oracle, you can improve the performance of a policy search—if the search criteria include a first name, last
name or a company name—by disabling an Index Fast Full Scan. This parameter has no effect on databases other
than Oracle.
Default: true
DisableSequenceUtil
Disables the sequence utility class [Link]. Use this to ensure that any sequences
in your code use some alternative mechanism for sequenced identifiers.
Default: false
DisableSortMergeJoinPolicySearch
On Oracle, you can improve the performance of a policy search—if the search criteria include a first name, last
name or a company name—by disabling a Sort Merge Join. This parameter has no effect on databases other than
Oracle.
Default: true
DiscardQueryPlansDuringStatsUpdateBatch
Whether to instruct the database to discard existing query plans during a database statistics batch process.
Default: false
IdentifyQueryBuilderViaComments
(SQL Server only.) Whether to provide comments with contextual information in certain SQL Select statements
sent to the relational database. The comments are generated by instrumentation in higher level database objects
created by using the query builder APIs.
The SQL comments are in the following format:
/* applicationName:ProfilerEntryPoint */
Default: true
See also
• Gosu Reference Guide
IdentifyORMLayerViaComments
(SQL Server only.) Whether to provide comments with contextual information in certain SQL Select statements
sent to the relational database. The comments are generated by instrumentation in lower level objects, such as beans,
typelists, and other database building blocks.
The SQL comments are in the following format:
/* applicationName:ProfilerEntryPoint */
See also
• Gosu Reference Guide
MigrateToLargeIDsAndDatetime2
(SQL Server only.) Use to control whether to migrate to large 64-bit IDs in the database while upgrading. Migrating
to 64-bit IDs is an expensive operation. Also updates timestamps to use the data type Datetime2.
Default: true
UseOracleHintsOnMessageQueries
An Oracle database can experience improved performance if Oracle hints are used on queries for Message objects.
This parameter affects Oracle databases only.
Default: true
See also
• “Data destruction configuration parameters” on page 709
• “Working with configuration parameters” on page 41.
ArchiveReferenceTrackingEnabled
A Boolean string that controls whether Guidewire PolicyCenter uses reference tracking during an archive operation.
During an archive operation, if this value is true, PolicyCenter stores references to objects outside an archive graph
in a specific table. The purpose of this table is to allow for the purging of non- archive graphs.
Set this value to true. If you have already archived policies before setting this parameter to true, then you must run
the ArchiveReferenceTrackingSync batch process in order to add reference tracking for previously archived
Application configuration parameters 57
Guidewire PolicyCenter 9.0.9 Configuration Guide
documents. The ArchiveReferenceTrackingSync batch process must first complete for each previously archived
document before you can use personal data purge.
ContactDestructionRequestAgeForPurgingResults
Used by the RemoveOldContactDestructionRequest work queue to determine the age of
PersonalDataDestructionRequest objects that have a status of Finished. In the base configuration, this parameter
is set to 10 days.
See also
PersonalDataDestructionEnabled
Set this parameter to true to enable destruction of personal data. In the base configuration, this parameter is false.
The server will not start if both PersonalDataDestructionEnabled and DisableDomainGraphSupport parameters
are true.
ActivityStatisticsWindowSize
Time window to capture activity statistics.
Default: 0
OtherWorkOrdersStatisticsWindowSize
Time window that the Team tab uses to calculate statistics for work orders other than renewals and submissions.
Possible values are:
0 Use this week as the window, defined as the start of the current business week until now.
‐1 Use this month as the window, defined as the start of the current month until now.
Any positive integer N The window is the last N days of activity, including the current day.
Default: 0
See also
• “Setting the window size for team statistics” on page 628
• Application Guide
RenewalsStatisticsWindowSize
Time window that the Team tab uses to calculate renewal statistics. Possible values are:
0 Use this week as the window, defined as the start of the current business week until now.
‐1 Use this month as the window, defined as the start of the current month until now.
Any positive integer N The window is the last N days of activity, including the current day.
Default: 0
See also
• “Setting the window size for team statistics” on page 628
• Application Guide
SearchActivityThresholdDays
This parameter controls the threshold within which an activity must have been modified to qualify a job as being
assigned to a user. The UpdateTime field on an activity contains a timestamp of when the activity was last modified.
The activity must have been modified within SearchActivityThresholdDays days before the current date.
Default: 366
See also
• “Configuring the Team tab” on page 627
• Application Guide
SubmissionsStatisticsWindowSize
Time window that the Team tab uses to calculate submission statistics. Possible values are:
0 Use this week as the window, defined as the start of the current business week until now.
‐1 Use this month as the window, defined as the start of the current month until now.
Any positive integer N The window is the last N days of activity, including the current day.
Default: 0
See also
• “Setting the window size for team statistics” on page 628
• Application Guide
TeamScreenTabVisibilityRowCountCutoff
This parameter sets the maximum number of rows on the Team tab screens. Increasing this parameter potentially
increases the amount of time that PolicyCenter takes to render the Team screens. If the results exceed the value of
this parameter, then PolicyCenter displays a message on that screen and does not display the results.
If you select an individual user, PolicyCenter always displays the filtered results even if the number of results
exceeds the cutoff parameter.
Default: 200
• “Setting the maximum number of rows on the Team screens” on page 630
• Application Guide
See also
DisplayDocumentEditUploadButtons
Whether the Documents list displays Edit and Upload buttons. Set this parameter to false if the
IDocumentContentSource integration mechanism does not support it.
Default: true
DocumentContentDispositionMode
The Content-Disposition header setting to use when PolicyCenter returns document content directly to the
browser. Supported settings are inline and attachment.
Default: inline
DocumentTemplateDescriptorXSDLocation
The path to the XSD file that PolicyCenter uses to validate document template descriptor XML files. Specify this
location relative to the following directory:
modules/configuration/config/resources/doctemplates
FinalDocumentsNotEditable
Indicates whether documents with Final status can be transferred by using the Asynchronous implementation of the
IDocumentContentSource plugin. A value of false indicates that documents with Final status can be transferred. A
value of true indicates that documents with Final status cannot be transferred.
Default: false
MaximumFileUploadCount
The maximum number of document content files that can be listed and uploaded at once. The number of files listed
for upload can affect the performance of the upload screen.
Default: 200
MaximumFileUploadSize
The maximum allowable size in megabytes for a document file that you can upload to the server. Attempting to
upload a file larger than this size results in failure. Because the uploaded document must be handled on the server,
this parameter protects the server from possible memory consumption problems.
Default: 150 MB
MaximumTotalUploadSize
The maximum allowable total size in megabytes per session for documents uploads that are pending commitment to
the document management system. Because multiple documents can be uploaded at once, this value also provides
control of the overall size of an upload and protects the server from possible memory consumption problems.
Default: 150 MB
60 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
Environment parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to the application
environment.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
AddressVerificationFailureAsError
Set to true to have address verification failures shown as errors instead of warnings. This parameter has no effect if
EnableAddressVerification is set to false.
Default: false
See also
• “EnableAddressVerification” on page 62
AlwaysShowPhoneWidgetRegionCode
Whether the phone number widget in the application user interface always displays a selector for phone region
codes.
Default: false
Set for Environment: Yes
CurrentEncryptionPlugin
Set this value to the name of the plugin that you intend to use to manage encryption. Typically, a Guidewire
installation has only a single implementation of an encryption plugin interface. However, you can, for example,
decide to implement a different encryption algorithm using a different implementation of the encryption interface as
part of an upgrade process. In this case, you must retain your old encryption plugin implementation in order to
support the upgrade.
To support multiple implementations of encryption plugins, PolicyCenter provides the CurrentEncryptionPlugin
configuration parameter. Set this configuration parameter to the EncryptionID of the encryption plugin currently in
use—if you have implemented multiple versions IEncryption plugin interface.
• If you do not provide a value for this configuration parameter, then data is unencrypted.
• If you create multiple implementations of a plugin interface, then you must name each plugin implementation
individually and uniquely.
IMPORTANT PolicyCenter does not provide an encryption algorithm. You must determine the best
method to encrypt your data and implement it.
Default: None
See also
• For information on using the Plugins Registry editor, see “Using the plugins registry editor” on page 133.
• Integration Guide
DeprecatedEventGeneration
Whether to use the now-deprecated event logic that had previously been available.
Default: false
Application configuration parameters 61
Guidewire PolicyCenter 9.0.9 Configuration Guide
EnableAddressVerification
Set this value to true to enable address verification warnings. Address verification checks that all the fields match
each other based on the zone data.
This parameter works in concert with the AddressVerificationFailureAsError parameter to show either a
warning or an error, as follows:
• If EnableAddressVerification is true and AddressVerificationFailureAsError is false, PolicyCenter
shows a warning message if verification against zone data fails.
• If EnableAddressVerification is true and AddressVerificationFailureAsError is true, PolicyCenter
shows an error message if verification against zone data fails.
• If EnableAddressVerification is false, PolicyCenter does not verify the address based on zone data.
Default: false
See also
• “AddressVerificationFailureAsError” on page 61
EnableInternalDebugTools
Make internal debug tools available to developers.
Default: false
Set for Environment: Yes
KeyGeneratorRangeSize
The number of key identifiers (as a block) that the server obtains from the database with each request. This integer
value must be 0 or greater.
As you create a new PolicyCenter object such as a Policy, PolicyCenter assigns it a key, or unique public identifier.
To ensure that keys are unique, the server requests an available key from the PolicyCenter database. If every server
in a cluster queried the database each time it needed a single key, performance would degrade.
Instead, use this configuration parameter to obtain a block of keys with a single request. For example, a server can
reserve a block of 100 keys, and then assign each key without needing to query the database again. The server
continues to assign the keys from a block until it uses all keys in that block.
The default value of 100 is large enough to prevent frequent database queries for more keys. It is also small enough
to not waste too many keys that the server reserves but never uses. The server discards allocated but unused keys as
it shuts down. Keys are 64-bit integers, so wasting a few keys is not an issue. The default value of 100 is reasonable
in most situations.
Default: 100
MemoryUsageMonitorIntervalMins
How often the PolicyCenter server logs memory usage information, in minutes. This is often useful for identifying
memory problems.
To disable the memory monitor, do one of the following:
• Set this parameter to 0.
• Remove this parameter from [Link].
Default: 0
PublicIDPrefix
The prefix to use for public IDs generated by the application. Generated public IDs are of the form prefix:id. This
id is the actual entity ID. Guidewire strongly recommends that you set this parameter to different values in
production and test environments to allow for the clean import and export of data between applications.
62 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
This PublicIDPrefix must not exceed 9 characters in length. Use only letters and numbers. Do not use space
characters, colon characters, or any other characters that other applications might process or escape specially. Do not
specify a two-character value. Guidewire reserves for itself all public IDs that start with a two-character ID and then
a colon
IMPORTANT Guidewire reserves two-character public ID prefixes for its own current or future use.
Required: Yes
Default: None
ResourcesMutable
Indicates whether resource are mutable (modifiable) on this server. If you connect Studio to a remote server (on
which this parameter set to true), then Studio pushes resource changes to the remote server as you save local
changes. Guidewire strongly recommends that you set this value to false on a production server to prevent changes
to the configuration resources directory.
See also “RetainDebugInfo” on page 63.
WARNING Guidewire recommends that you always set this configuration parameter to false in a
production environment. Setting this parameter to true has the potential to modify resources on a
production server in unexpected and possibly damaging ways.
See also
• “ClusteringEnabled” on page 53
RetainDebugInfo
Whether the production server retains debugging information. This parameter facilitates debugging from Studio
without a type system refresh.
• If set to true, PolicyCenter does not clear debug information after compilation.
• If set to false, the server does not retain sufficient debugging information to enable debugging. As a production
server does not recompile types, it is not possible to regenerate any debugging information.
Default: false
Application configuration parameters 63
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “ResourcesMutable” on page 63
StrictDataTypes
Controls whether PolicyCenter uses the pre-PolicyCenter 4.0 behavior for configuring data types, through the use of
the [Link] file.
• Set this value to false to preserve the existing behavior. This is useful for existing installations that are
upgrading but want to preserve the existing functionality.
• Set this value to true to implement the new behavior. This is use for new PolicyCenter installations that want to
implement the new behavior.
StrictDataTypes = true
If you set the StrictDataTypes value to true, then PolicyCenter:
• Does not permit decimal values to exceed the scale required by the data type. The setter throws a
[Link] if the scale is greater than that allowed by the data type. You are responsible
for rounding the value, if necessary.
• Validates field validator formats in both the PolicyCenter user interface and in the field setter.
• Validates numeric range constraints in both the PolicyCenter user interface and in the field setter.
StrictDataTypes = false
If you set the StrictDataTypes value to false, then PolicyCenter:
• Auto-rounds decimal values to the appropriate scale, using the RoundHalfUp method. For example, setting the
value 5.045 on a field with a scale of 2 sets the value to 5.05.
• Validates field validator formats in the interface but not at the setter level. For example, PolicyCenter does not
permit a field with a validator format of [0-9]{3}-[0-9]{2}-[0-9]{4} to have the value 123-45-A123 in the
interface. It is possible, however, to set a field to that value in Gosu code, for example. This enables you to
bypass the validation set in the interface.
• Validates numeric range constraints in the interface, but not at the setter level. For example, Guidewire does not
allow a field with a maximum value of 100 to have the value 200 in the interface. However, you can set the field
to this value in Gosu rules, for example. This enables you to bypass the validation set in the interface.
Default: true
TwoDigitYearThreshold
The threshold year value for determining whether to resolve a two-digit year to the earlier or later century.
Default: 50
UnreachableCodeDetection
Determines whether the Gosu compiler generates errors if it detects unreachable code or missing return statements.
Default: true
UnrestrictedUserName
By default, PolicyCenter uses the su user as the user with unrestricted permissions to do anything in PolicyCenter.
To set the unrestricted user to a different user, set the value of the UnrestrictedUserName parameter to that user’s
login name.
Default: su
64 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
UseOldStylePreUpdate
Deprecated. This parameter has no effect in PolicyCenter.
Default: false
WarnOnImplicitCoercion
A value of true indicates that the Gosu compiler generates warnings if it determines that an implicit coercion is
occurring in a program.
Default: true
WebResourcesDir
Specifies the location of the Web resources directory under the root of the Tomcat configuration directory.
Default: resources
Financial parameters
Guidewire provides the following parameters in the [Link] file to help configure how PolicyCenter works with
monetary amounts.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
See also
• Globalization Guide
Geocoding parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to geocoding.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
UseGeocodingInPrimaryApp
If true, PolicyCenter enables searching for nearby locations in the Reinsurance Management user interface.
ContactManager does not respond to this parameter.
Default: false
ProximitySearchOrdinalMaxDistance
A distance that provides an approximate bound to improve performance of an ordinal (nearest n items) proximity
search. This distance is in miles, unless you set UseMetricDistancesByDefault to true. This parameter has no
effect on radius (within n miles or kilometers) proximity searches or walking-the-group-tree-based proximity
assignment.
Default: 300
ProximityRadiusSearchDefaultMaxResultCount
The maximum number of results to return if performing a radius (within n miles or kilometers) proximity search.
This parameter has no effect on ordinal (nearest n items) proximity searches.
Default: 1000
Application configuration parameters 65
Guidewire PolicyCenter 9.0.9 Configuration Guide
UseMetricDistancesByDefault
If true, PolicyCenter uses kilometers and metric distances instead of miles and United States distances for location
searches. Set this parameter identically in both PolicyCenter and ContactManager.
Default:
false
Globalization parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to globalization.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
IMPORTANT If you integrate the core applications in Guidewire InsuranceSuite, you must set the
values of DefaultApplicationCurrency and MulticurrencyDisplayMode to be the same in each
application.
DefaultApplicationLanguage
Default display language for the application as a whole.
IMPORTANT This parameter setting is permanent. Once you set the parameter and then start the
server, you cannot change the value.
Default: en_US
Permanent: Yes
See also
• Globalization Guide
DefaultApplicationLocale
Default locale for regional formats in the application. You must set configuration parameter
DefaultApplicationLocale to a typecode contained in the LocaleType typelist.
IMPORTANT This parameter setting is permanent. Once you set the parameter and then start the
server, you cannot change the value.
Default: en_US
Permanent: Yes
See also
• Globalization Guide
DefaultApplicationCurrency
Default currency for the application. You must set configuration parameter DefaultApplicationCurrency to a
typecode contained in the Currency typelist, even if you configure PolicyCenter with a single currency. Guidewire
applications which share currency values must have the same DefaultApplicationCurrency setting in their
respective [Link] files. The default currency is sometimes known as the preferred currency.
66 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
IMPORTANT This parameter setting is permanent. Once you set the parameter and then start the
server, you cannot change the value.
Default: usd
Permanent: Yes
See also
• Globalization Guide
DefaultRoundingMode
Sets the default rounding mode for monetary amount calculations.
The available choices are a subset of those supported by [Link], namely:
• UP
• DOWN
• CEILING
• FLOOR
• HALF_UP
• HALF_DOWN
• HALF_EVEN
Guidewire strongly recommends that you use one of the following:
• HALF_UP
• HALF_EVEN
You can access this value in Gosu code by using the following method:
[Link]()
IMPORTANT This parameter setting is permanent. Once you set the parameter and then start the
server, you cannot change the value.
Default: HALF_UP
Permanent: Yes
• Globalization Guide
MulticurrencyDisplayMode
Determines whether PolicyCenter displays currency selectors for monetary values. The following are the allowed
values for MulticurrencyDisplayMode:
• SINGLE
• MULTIPLE
In the base configuration of PolicyCenter, the value is set to SINGLE. You can change the value to MULTIPLE once
only. After you change the value to MULTIPLE, you cannot later change it back to SINGLE. If you change the value
back to SINGLE, subsequent attempts to start the server fail.
Default: SINGLE
Permanent: Semi-permanent
See also
• Globalization Guide
Application configuration parameters 67
Guidewire PolicyCenter 9.0.9 Configuration Guide
DefaultCountryCode
The default ISO country code that PolicyCenter uses if the country for an address is not set explicitly. PolicyCenter
also uses the value of this parameter as the default country code for new addresses that it creates. The country code
must be a valid ISO country code that exists as a typecode in the Country typelist.
See the following page to search a list of ISO country codes:
[Link]
DefaultPhoneCountryCode
The default ISO country code used for phone data.
Default: None
DefaultNANPACountryCode
The default country code for region 1 phone numbers. If the area code is not in the [Link] map file,
then it defaults to the value configured with this parameter.
Default: US
AlwaysShowPhoneWidgetRegionCode
Whether the phone number widget in the application user interface always displays a selector for phone region
codes.
Default: false
Integration parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to how multiple
Guidewire applications integrate with each other.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
BillingSystemArchiveEnabled
Whether or not the archiving is enabled in the billing system. This parameter needs to match billing system settings
for archiving.
Default: false
BillingSystemArchivePolicyPeriodDays
The minimum number of days after the term end date before the billing policy period is archived. This value must be
less than the setting in the billing system. This value must be less than or equal to the setting in the billing system.
Guidewire recommends setting the value to be equal and keeping the value of
BillingSystemArchivePolicyPeriodDays synchronized with the value of ArchivePolicyPeriodDays in
BillingCenter.
This parameter is used to decide whether to check the billing system for the archiving flag. A negative value
disables this check, and PolicyCenter ignores the archiving flag when determining whether to call the billing system
API. This parameter is applicable only if the BillingSystemArchiveEnabled parameter is true.
Default: -1
68 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
BillingSystemURL
URL to use in ExitPoint PCF pages that view items in the billing system.
• If integrating Guidewire PolicyCenter with Guidewire BillingCenter, then set this parameter to the BillingCenter
base URL (for example, [Link] In this case, the exit points add the appropriate BillingCenter entry
point.
• If integrating with a non-Guidewire billing system, then you need to modify the ExitPoint PCF to set up the
parameters required by that system.
• If you omit this parameter or if you set it to an empty string, then PolicyCenter hides the buttons in the interface
that take you to the exit points.
Default: Empty string
See also
• Integration Guide
ClaimSystemURL
URL to use in ExitPoint PCF pages that view items in the claims system.
• If integrating Guidewire PolicyCenter with Guidewire ClaimCenter, then set this parameter to the ClaimCenter
base URL (for example, [Link] In this case, the exit points add the appropriate ClaimCenter entry
point.
• If integrating with a non-Guidewire claim system, then you need to modify the ExitPoint PCF to set up the
parameters required by that system.
• If you omit this parameter or if you set it to an empty string, then PolicyCenter hides the buttons in the interface
that take you to the exit points.
Default: Empty string
See also
• Integration Guide
DefaultXmlExportIEncryptionId
The unique encryption ID of an encryption plugin. If archiving is enabled, PolicyCenter uses the encryption plugin
to encrypt any encrypted fields during XML serialization.
Default: null (no encryption)
KeepCompletedMessagesForDays
Number of days after which PolicyCenter purges old messages in the message history table.
Default: 90
LockDuringDistributedMessageRequestHandling
When processing a distributed message transaction, the parameter determines whether to lock the transaction's
message object. The parameter has no effect on non-distributed message transactions.
Default: false
LockPrimaryEntityDuringMessageHandling
When processing a message transaction, the parameter determines whether to lock the primary entity instance
associated with the message. If the message has no primary entity associated with it, the parameter has no effect.
Application configuration parameters 69
Guidewire PolicyCenter 9.0.9 Configuration Guide
Regardless of the parameter's setting, the primary entity instance is locked only if the transaction's message object is
also locked. For example, a distributed message transaction that does not lock its message object will not lock the
primary entity either, even if locking of the entity is enabled by this parameter. Whether a distributed message
transaction locks its message object is determined by the LockDuringDistributedMessageRequestHandling
configuration parameter.
In the base configuration, PolicyCenter (and ContactManager) do not update the primary entity while
acknowledging a message. Therefore, it is possible to set configuration parameter
LockPrimaryEntityDuringMessageHandling to false under the following conditions:
• You are not updating any entity on the acknowledgment of a message.
• You are only updating a very few fields on non-primary entities that do not cause a lock on a primary entity. The
non-primary entities must be mutually exclusive for destinations on the acknowledgment of a message.
Guidewire recommends that you review your integration code for these conditions before you set this configuration
parameter to false.
If you do set LockPrimaryEntityDuringMessageHandling to false, be aware that PolicyCenter does not lock the
primary entity during the following processes:
• Sending a message
• Handling all parts of a message
• Marking a message as skipped
However, PolicyCenter does lock the primary entity message creation.
Default: true
PaymentSystemURL
URL to use in ExitPoint PCF pages that view items in a payment system.
• If integrating Guidewire PolicyCenter with Guidewire BillingCenter, then set this parameter to the BillingCenter
base URL (for example, [Link] In this case, the exit points add the appropriate BillingCenter entry
point.
• If integrating with a non-Guidewire billing system, then you need to modify the ExitPoint PCF to set up the
parameters required by that system.
• If you omit this parameter or if you set it to an empty string, then PolicyCenter hides the buttons in the interface
that take you to the exit points.
Note: Guidewire configures this parameter in the base configuration to work with a demonstration
payment system. For more details, see the Integration Guide.
Default: pc
See also
• Integration Guide
PluginStartupTimeout
OSGi plugins startup timeout (in seconds). The PluginConfig component waits for at most this time for all required
OSGi plugins to start. The PluginConfig component reports an error for each OSGi plugin that does not start after
this timeout has expired.
Default: 60
Job types – For this configuration parameter, <JobType> can be any of the following:
• Audit
• Cancellation
• Issuance
• PolicyChange
• Reinstatement
• Renewal
• Rewrite
• Submission
• TestJob
To enable the expiration of a particular job type, set JobExpirationCheck<JobType> to true for that particular job
type.
See also
JobExpirationCheckAudit
Set to true to enable PolicyCenter to expire this job type. For audit jobs, you must override the canExpireJob
method in the [Link] class and modify it to return true. You can find this class in the Classes folder
in Studio.
Default: false
Application configuration parameters 71
Guidewire PolicyCenter 9.0.9 Configuration Guide
JobExpirationCheckCancellation
Set to true to enable PolicyCenter to expire this job type.
Default: false
JobExpirationCreateDateThreshold
Number of days past the job creation date before batch process JobExpire expires a job. Batch process JobExpire
first examines all jobs meeting the date criteria set by this parameter. In addition to this threshold, the job must also
meet the JobExpirationEffDateThreshold threshold. The batch process then expires those jobs for which
[Link] is true.
The job creation date is specified in [Link].
A value of -1 disables this parameter.
IMPORTANT Setting the create date threshold to a negative number effectively disables create date
checking, as it is not possible to create a job with a future create date. Disabling
JobExpirationCreateDateThreshold does not disable JobExpirationEffDateThreshold.
Default: -1
JobExpirationEffDateThreshold
Number of days past the job effective date before batch process JobExpire expires a job. Batch process JobExpire
first examines all jobs meeting the date criteria set by this parameter. In addition to this threshold, the job must also
meet the JobExpirationCreateDateThreshold threshold. The batch process then expires those jobs for which
[Link] is true.
The job effective date is the EditEffectiveDate of a PolicyPeriod on the Job. If the job has more than one policy
period, then each active policy period on the job must meet the threshold. You access the active policy periods on
the job through the [Link] array.
A negative value means that the batch process expires unbound jobs by that number of days before their effective
date is reached. For example, a value of -5 for this parameter indicates that jobs expire five days before their
effective date.
Default: 7
JobExpireCheckIssuance
Set to true to enable PolicyCenter to expire this job type.
Default: false
JobExpireCheckPolicyChange
Set to true to enable PolicyCenter to expire this job type.
Default: false
JobExpireCheckReinstatement
Set to true to enable PolicyCenter to expire this job type.
Default: false
JobExpireCheckRenewal
Set to true to enable PolicyCenter to expire this job type.
Default: false
72 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
JobExpireCheckRewrite
Set to true to enable PolicyCenter to expire this job type.
Default: false
JobExpireCheckSubmission
Set to true to enable PolicyCenter to expire this job type.
Default: true
JobExpireCheckTestJob
Set to true to enable PolicyCenter to expire this job type.
Default: false
AvailabilityContextCacheEntryExpirationTime
Lookup Table Manager uses a cache to improve performance of Product Model availability lookups. Cache entries
expire after a period of inactivity defined by this configuration parameter. Specify the expiration time in minutes.
Consider the performance impact before reducing the expiration time. Cache misses may result if entries have been
flushed.
Default: 1440 minutes (1 hour)
Required: No
AvailabilityContextCacheSize
The maximum size of the cache holding AvailabilityContexts after a lookup.
Default: 1000
Required: Yes
UsePolicyPeriodReferenceDateForOfferingAvailability
Whether to use written date or effective date for offerings availability. If true, use effective date. If false, use
written date.
Default: false
Required: No
AllowedDaysBeforeOrAfterPolicyStartDate
Number of days, before or after a given policy period StartDate, to search for a non-cancelled bound
PolicyPeriod on which to base the renewal.
Application configuration parameters 73
Guidewire PolicyCenter 9.0.9 Configuration Guide
For example, if you need to rewrite a cancelled policy with an earlier start date, the most recent bound period is the
cancelled period. To renew such a policy, it must be possible to identify the rewrite. This parameter establishes the
windows in which to search for a rewritten policy.
• If the policy term is 6 months or longer, then the default of 90 days is acceptable.
• If the policy term is shorter, then use a smaller number for this parameter.
Default: 90
MaximumPolicyCreationYearDelta
Value, which added to the current year, represents the maximum year to use during policy creation. This integer
value must be 0 or greater.
Default: 1
MaxRecentAccounts
Maximum number of recent accounts that PolicyCenter shows in the Account tab.
Default: 5
MaxRecentPoliciesAndJobs
Maximum number of recent policies and jobs that PolicyCenter shows in the Policy tab.
Default: 8
MaxSubmissionsToCreate
Maximum number of submissions that PolicyCenter can create at one time in the New Submission page.
Default: 20
MinimumPolicyCreationYear
Minimum (earliest) year to use during policy creation. This integer value must be 1000 or greater.
Default: 1000
PatternCacheMaxDuration
Upper bound on how long PolicyCenter allows caches of pattern entities to exist without refresh, measured in
seconds.
Default: 86400
PolicyChangeMaxQuotes
Maximum number of allowable quotes for a policy change.
Default: 3
PurgeTemporaryPolicyPeriodsAfterDays
Minimum number of days that must pass before a temporary policy period can be purged.
Default: 14
PurgeTemporaryPolicyPeriodsEnabled
Enables Purge Temporary Policy Periods batch processing. If false, the work queue will not remove any temporary
policy periods.
74 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
Default: false
RenewalMaxQuotes
Maximum number of allowable quotes for a renewal.
Default: 3
RenewalProcessLeadTime
Lead time (in number of days) before the state non-renewal notification deadline to start renewals.
Default: 165
SubmissionMaxQuotes
Maximum number of allowable quotes for a submission.
Default: 3
Miscellaneous parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to various
miscellaneous application features.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
ConsistencyCheckerThreads
Number of threads to use when running the consistency checker.
Default: 1
DefaultDiffDateFormat
Sets the default format for dates in the difference tree user interface. Valid formats mirror the Java default date
formats:
• short
• medium
• long
• full
Default: short
DisableDomainGraphSupport
All PolicyCenter environments are expected to have valid data models. However, in rare situations, you might want
to upgrade a PolicyCenter environment that does not yet have a valid data model. If there are compelling business
reasons not to correct the data model during the upgrade, you can disable domain graph support by setting the
DisableDomainGraphSupport parameter to true.
Guidewire strongly recommends that you resolve domain graph issues at the earliest opportunity to minimize the
upgrade cost of the changes required to achieve a valid data model.
You cannot disable domain graph support if you are using archiving, quote purging, quote cloning, and personal data
destruction. These features require domain graph support. Therefore, PolicyCenter will not start if
DisableDomainGraphSupport is true and ArchiveEnabled or PersonalDataDestructionEnabled is true.
Default: false
Application configuration parameters 75
Guidewire PolicyCenter 9.0.9 Configuration Guide
IgnoreLeapDayForEffDatedCalc
In the default configuration, the IgnoreLeapDayForEffDatedCalc parameter determines whether PolicyCenter
ignores a leap day in the following calculations:
• Calculating scalable properties
• Prorating premiums for policies that are less than a full term
The following table describes the values for the IgnoreLeapDayForEffDatedCalc parameter:
Value Description
true PolicyCenter does not include the leap day while calculating the values for scalable properties or prorated premiums.
false PolicyCenter includes the leap day while calculating the scalable property amount or prorated premium.
In the default configuration, some scalable properties are OverrideAmount on the Cost entity and
ScalableBasisAmount on the GLExposure entity.
Default: true
InitialSampleDataSet
Optional set of sample data to load at server start up. This value must be a typecode from the SampleDataSet
typelist, or null. In the base application configuration, valid typecodes are:
Typecode Description
Tiny Just a few users like aapplegate, good for test purposes.
Small A small community model and a few sample Accounts and Policies, useful for local development.
Large A large, full data set useful for application demonstrations and manual Quality Assurance.
Set value to Tiny, Small, or Large, corresponding to the data set that you want to load:
• If there is no sample data loaded as the server starts, PolicyCenter loads the sample data set that you specify.
• If there is sample data, PolicyCenter does nothing.
Default: None
Set for Environment: Yes
PreloadSystemTableToCacheForFasterSynchronization
Enables or disables the pre-load of system tables at server start. To enable pre-loading, set this parameter to true.
Pre-loading the system tables at server start allows for faster synchronization and faster server startup times.
However, be aware that the use of system table pre-loading can require PolicyCenter to allocate additional heap
space.
Default: true
Required: Yes
76 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
ProfilerDataPurgeDaysOld
Number of days to keep profiler data before PolicyCenter deletes it.
Default: 30
TransactionIdPurgeDaysOld
Number of days to keep external transaction ID records before they can be deleted.
Default: 30
See also
• Rules Guide
BoundPolicyThresholdDays
The minimum number of days that must pass before the Policy Exception Rules run again on a bound
PolicyPeriod entity. This integer value must be 0 or greater.
Default: 14
Dynamic: Yes
ClosedPolicyThresholdDays
The minimum number of days that must pass before the Policy Exception Rules run again on a closed
PolicyPeriod entity. This integer value must be 0 or greater.
Default: 14
Dynamic: Yes
OpenPolicyThresholdDays
The minimum number of days that must pass before the Policy Exception Rules run again on an open
PolicyPeriod entity. This integer value must be 0 or greater.
Default: 1
Dynamic: Yes
DefaultContentDispositionMode
The Content-Disposition header setting to use when PolicyCenter returns file content directly to the browser.
This parameter applies to printed and exported content. It does not apply to documents. For documents, use the
DocumentContentDispositionMode parameter. Supported settings are inline and attachment.
Application configuration parameters 77
Guidewire PolicyCenter 9.0.9 Configuration Guide
Default: attachment
PrintFontFamilyName
Use to configure FOP settings for printing non-U.S. character sets. (FOP refers to the Apache Formatting Objects
Processor.) Set this value to the name of the font family for custom fonts as defined in your FOP user configuration
file. For more information, refer to the following:
[Link]
Default: san-serif
PrintFontSize
Font size of standard print text.
Default: 10pt
PrintFOPUserConfigFile
Path to FOP user configuration file, which contains settings for printing non-U.S. character sets. (FOP refers to the
Apache Formatting Objects Processor.) Enter a fully qualified path to a valid FOP user configuration file. There is
no default. However, a typical value for this parameter is the following:
C:\fopconfig\[Link]
Default: None
PrintHeaderFontSize
Font size of headers in print text.
Default: 16pt
PrintLineHeight
Total size of a line of print text.
Default: 14pt
PrintListViewBlockSize
Use to set the number of elements in a list view to print as a block. This parameter splits the list into blocks of this
size, with a title page introducing each block of elements. A large block size consumes more memory during
printing, which can cause performance issues. For example, attempting to print a block of several thousand elements
can potentially cause an out-of-memory error.
Default: 20
PrintListViewFontSize
Font size of text within a list view.
Default: 10pt
PrintMarginBottom
Bottom margin size of print page.
78 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
Default: 0.5in
PrintMarginLeft
Left margin size of print page.
Default: 1in
PrintMarginRight
Right margin size of print page.
Default: 1in
PrintMarginTop
Top margin size of print page.
Default: 0.5in
PrintMaxPDFInputFileSize
During PDF printing, PolicyCenter first creates an intermediate XML file as input to a PDF generator. If the input is
very large, the PDF generator can run out of memory.
Value Purpose
Negative A negative value indicates that there is no limit on the size of the XML input file to the PDF generator.
Non‐ A non‐negative value limits the size of the XML input file to the set value (in megabytes). If a user attempts to
negative print a PDF file that is larger in size than this value, PolicyCenter generates an error.
Default: -1
PrintPageHeight
Total print height of page.
Default: 8.5in
PrintPageWidth
Total print width of page.
Default: 11in
PrintPdfDefaultBaseFileExtension
Default base output file extension for PDF documents.
Default: 11in
PrintPdfMimeType
MIME type used for generated PDF output files.
Default: application/pdf
Application configuration parameters 79
Guidewire PolicyCenter 9.0.9 Configuration Guide
PrintCsvDefaultBaseFileExtension
Default base output file extension for CSV documents.
Default: csv
PrintCsvMimeType
MIME type used for generated CSV output files.
Default: application/excel
PrintDefaultBaseFileName
Default base output filename for output generation.
Default: Print
ExternalProductModelDirectory
Specifies the directory from which to load product model availability data. PolicyCenter loads the information in
this directory at server startup time or if requested through the Server Tools Product Model Info screen. For the load to
succeed, all of the following must true:
• The parameter specifies a directory accessible to the application server.
• The directory is not in the deployment directory.
• The directory contains a complete product model definition that only defines existing patterns.
• The directory contains at least one lookup XML file ending in -[Link].
• The XML files in the directory are all valid.
If this parameter is blank, PolicyCenter loads availability data from the standard configuration module at server
startup time. Any attempt to reload the data through the Server Tools Product Model Info screen then fails with an error
message.
Default: None
Dynamic: No
See also
• Product Model Guide
• System Administration Guide
80 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
ProductModelClassCacheConcurrencyLevel
To fine tune performance, use this parameter to adjust the concurrency level of the product model class cache. This
cache is lazy-loaded when product model pattern objects, such as coverage patterns, are instantiated. See
[Link]#concurrencyLevel for more information about caches and
concurrency levels. The minimum value is 1. The maximum value is 100.
Default: 10
Dynamic: No
See also
• “Configuring quote purging” on page 551
• Application Guide
PruneAndPurgeJobsEnabled
Specifies whether the Purge batch process is enabled.
Default: false
See also
• “Enable quote purging batch processes” on page 555
PruneVersionsDefaultRecheckDays
The minimum number of days that must pass after failing a purging check before reconsidering the unselected
policy periods on the job for pruning.
Default: 30
PruneVersionsPolicyTermDays
The minimum number of days that must pass after a job’s selected policy period has ended before the unselected
policy periods on the job are eligible for pruning. This parameter is ignored if
PruneVersionsPolicyTermDaysCheckDisabled is true.
Default: 30
PruneVersionsPolicyTermDaysCheckDisabled
If true, then disable the PruneVersionsPolicyTermDays parameter. Setting this parameter to true does not disable
pruning closed jobs.
Default: false
PruneVersionsRecentJobCompletionDays
The minimum number of days that must pass after a job is closed before the unselected policy periods on the job are
eligible for pruning.
Application configuration parameters 81
Guidewire PolicyCenter 9.0.9 Configuration Guide
Default: 210
PurgeJobsDefaultRecheckDays
The minimum number of days that must pass after failing a purging check before a job is reconsidered for purging.
Default: 30
PurgeJobsPolicyTermDays
The minimum number of days that must pass after the end of a job’s selected policy period before the job is eligible
for purging. This parameter is ignored if PurgeJobsPolicyTermDaysCheckDisabled is true.
Default: 30
PurgeJobsPolicyTermDaysCheckDisabled
If true, then disable the PurgeJobsPolicyTermDays parameter. Setting this parameter to true does not disable
purging closed jobs.
Default: false
PurgeJobsRecentJobCompletionDays
The minimum number of days that must pass after a job is closed before the job is eligible for purging.
Default: 210
PurgeOrphanedPolicyPeriodsEnabled
Specifies whether the Purge Orphaned Policy Periods batch process is enabled.
Default: false
See also
• “Enable quote purging batch processes” on page 555
EnableRateRoutinesJar
Set this Boolean parameter to true if you want rate routines to be preloaded from the rate routines JAR file at
system startup. This parameter also enables the Generate JAR File and Download JAR File buttons on the Rate Books
screen.
If you enable this parameter, then you must also specify the location in the RateRoutinesJarFile parameter.
Note:
Precompiling rate routine JAR file is not supported on JBoss application servers.
Default: false
82 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Precompiling rate routines JAR file” on page 634
OverriddenTableArgsLabelSimple
You can speed up rate table preloading by setting the parameter OverriddenTableArgsLabelSimple to true. (The
RateBookPreloadEnabled parameter must also be true.)
When true, when viewing a rate routine on the Rate Routine screen, parameters in rate routine steps may appear as
ellipses (...).
PurgeRateBookExportResultEnabled
If true, enable Purge Rate Book Export Result batch processing.
Default: true
See also
• System Administration Guide
PurgeWorksheetsEnabled
Enable the Purge Rating Worksheets batch process.
Default: false
See also
• “Extract Rating Worksheets batch process” on page 660
RateBookExportResultAgeForPurging
Purge Rate Book Export Result batch processing removes from the PolicyCenter database RateBookExportResult
Excel and XML files that have been around for more days than this parameter.
Default: 60
See also
• System Administration Guide
RateBookPreloadEnabled
This parameter determines whether to load Rating Management components on system startup. If true,
PolicyCenter loads all rate books and their associated rate routines and rate tables on system startup.
Note: Unrelated to whether this parameter is true or false, PolicyCenter always preloads some parts
of rate books that load quickly. After this, PolicyCenter writes this message to the log file:
INFO [Link] Preloading all ratebooks
See also
• “Preloading Rating Management components” on page 633
RateRoutineIndexingThreshold
When editing a long rate routine, you can edit the rate routine by section. A long rate routine has more steps than the
value of the indexing threshold, the RateRoutineIndexingThreshold parameter.
Application configuration parameters 83
Guidewire PolicyCenter 9.0.9 Configuration Guide
Default: 150
See also
• Application Guide
RateRoutinesJarFile
Specify the file system location of the rate routines JAR file. May be an absolute path or path relative to the web
application root. For allowed locations, see Integration Guide. Guidewire recommends that you deploy the JAR file
in the following location:
modules/configuration/plugins/Gosu/lib/[Link]
For example, if you are running PolicyCenter under Apache Tomcat and the WAR file expands into
<TOMCAT_HOME>/webapps/pc, where <TOMCAT_HOME> is the Tomcat root directory, then set RateRoutinesJarFile
to webapps/pc/modules/configuration/plugins/Gosu/lib/[Link].
If the directory does not exist, PolicyCenter will attempt to create it. If the file exists, it must be a valid JAR file. If
the file does not exist, PolicyCenter will create it if EnableRateRoutinesJar is true. If the JAR does not exist at
startup, PolicyCenter compiles all rate routines in the rate books returned by the RateBookPreloadPlugin to the
JAR. To avoid this delay during startup, deploy the JAR file to the production system when you build PolicyCenter.
Note:
Precompiling rate routine JAR file is not supported on JBoss application servers.
See also
• “Precompiling rate routines JAR file” on page 634
RateRoutinesUpdateJarFile
Specify the location of the rate routines JAR file that is updated dynamically while PolicyCenter is running. If you
specify this parameter, PolicyCenter modifies the file referred to by it whenever an update event happens. If you do
not specify this parameter, PolicyCenter updates the file pointed to by RateRoutinesJarFile.
Note:
You must use this parameter if you are running PolicyCenter on Windows Server.
For allowed locations, see Integration Guide. Guidewire recommends that you deploy the JAR file in the following
location:
modules/configuration/plugins/Gosu/lib/rateroutines_update.jar
}
%TOMCAT_HOME%\bin\[Link]
RateTableManagementNormalizationRowLimit
PolicyCenter determines whether to normalize a rate table if the table contains this many rows or more.
If the number of rows in the normalized table would exceed this limit, the table is automatically marked as non-
normalizable. PolicyCenter stores the non-normalized version of the table.
Default: 10000
See also
• “Rate table normalization configuration parameters” on page 641
RateTableManagementNormalizationRowThreshold
If the number of rows in the normalized table would exceed this threshold, the user is given the option to store a
non-normalized version of the table.
Default: 1000
See also
• “Rate table normalization configuration parameters” on page 641
RatingWorksheetContainerAgeForPurging
The Purge Rating Worksheets batch process uses this parameter as one factor in determining if a worksheet
container can be purged. To be considered for purging, the worksheet container’s job must have been completed at
least RatingWorksheetContainerAgeForPurging days.
Default: 90
See also
• “Purge Rating Worksheet batch process” on page 661
SmallRateTableRowLimit
Before importing rate tables, PolicyCenter scans the import file. The scan does not examine rate tables with more
rows than specified in SmallRateTableRowLimit.
Default: 10000
RateBookCacheEntryLifetimeSecs
The maximum time in seconds that a non-active rate book can stay in the rate book cache without being refreshed.
Default: 53
See also
• “Improving performance of rate tables loaded in memory” on page 640
RateBookCacheUpdateIntervalSecs
The time in seconds after which the rate book cache is rebuilt: all non-active rate books are refreshed and any rate
books added after the last update are added to the cache.
Default: 307
Application configuration parameters 85
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Improving performance of rate tables loaded in memory” on page 640
RateTableCacheConcurrency
Provides guidance on the maximum number of concurrent operations on the rate table cache.
Default: 16
See also
• “Improving performance of rate tables loaded in memory” on page 640
RateTableCacheEntryLifetimeSecs
The maximum time in seconds for which a rate table in a non-active rate book can stay in the rate table cache
without being refreshed.
Default: 53
See also
• “Improving performance of rate tables loaded in memory” on page 640
RateTableCacheMaxSize
The maximum number of rate tables that can be in the rate table cache. For no limit, set to -1. To disable rate table
caching, set to 0.
Default: -1
See also
• “Improving performance of rate tables loaded in memory” on page 640
RateTableCacheUpdateIntervalSecs
The time in seconds after which the rate table cache is cleared.
Default: 307
See also
• “Improving performance of rate tables loaded in memory” on page 640
RateTableDefinitionCacheUpdateIntervalSecs
The time in seconds after which the rate table definition cache is cleared.
Default: 601
See also
• “Improving performance of rate tables loaded in memory” on page 640
See also
• “Enabling Spotlight services” on page 580
• Application Guide
MultipleLocationRiskAssessmentEnabled
Specify whether multiple location risk assessment calls may be made to Spotlight.
Default: false
PurgeRiskAssessmentTempStoreDays
Minimum number of days that must pass after temporary risk assessment objects has been created before the objects
can be eligible for purging.
Default: 30
See also
• System Administration Guide
RiskAssessmentIntegrationEnabled
Enable or disable access to all Spotlight services from PolicyCenter.
Default: false
RiskAssessmentThumbnailMapEnabled
Enable or disable access to Spotlight thumbnail map service.
Default: false
SingleLocationRiskAssessmentEnabled
Specify whether single location risk assessment calls may be made to Spotlight.
Default: false
SpotlightInteractiveServiceURL
Specifies the URL to the Spotlight interactive service. This service provides interactive access to Spotlight.
Default: [Link]
SpotlightLoginURL
Specifies the URL to the Spotlight login screen.
Default: [Link]
SpotlightRiskAssessmentServiceURL
Specifies the URL to the Spotlight risk assessment service.
Default: [Link]
SpotlightThumbnailMapURL
Specifies the URL to the Spotlight thumbnail map service.
Application configuration parameters 87
Guidewire PolicyCenter 9.0.9 Configuration Guide
Default: [Link]
SchedulerEnabled
Whether to enable the internal batch process application scheduler. See the System Administration Guide for more
information on batch processes and the scheduler.
Default: true
Dynamic: Yes
WorkflowLogDebug
Configuration parameter WorkflowLogDebug takes a Boolean value:
• If set to true, PolicyCenter outputs the ordinary verbose system workflow log messages from the Guidewire
server to the workflow log.
• If set to false, PolicyCenter does not output any of the ordinary system messages.
The setting of this parameter does not have any effect on calls to log workflow messages made by customers.
Therefore, all customer log messages are output. If customers experience too many workflow messages being
written to the xx_workflowlog table, Guidewire recommends that you set this parameter to false.
Default: true
WorkflowLogPurgeDaysOld
Number of days to retain workflow log information before PurgeWorkflowLogs batch processing deletes it.
See the System Administration Guide for details.
Default: 30
WorkflowPurgeDaysOld
Number of days to retain workflow information before PurgeWorkflows batch processing deletes it.
See the System Administration Guide for details.
Default: 60
WorkflowStatsIntervalMins
Aggregation interval in minutes for workflow timing statistics. Statistics such as the mean, standard deviation, and
similar statistics used in reporting on the execution of workflow steps all use this time interval. A value of 0 disables
statistics reporting.
Default: 60
Search parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to searching.
88 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
FreeTextSearchEnabled
Whether to enable the free-text search feature. Setting the FreeTextSearchEnabled parameter to true enables the
free-text plugins for indexing and search. Setting the parameter to true also enables the display of the
Search Polices→Basic screen, which uses free-text search. The FreeTextSearchEnabled parameter has no effect on
the user interface unless you also set the EnableDisplayBasicSearchTab script parameter to true. Script
parameters are defined initially through Studio but administered on the Script Parameters page of the Administration tab.
Default: false
See also
MaxContactSearchResults
Maximum number of contacts that PolicyCenter returns in a search. If the number to return is greater than this value,
then PolicyCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 100
PolicySearchMaxResult
Number of maximum results to return from a database policy search. This parameter has no effect on free-text
policy search.
Default: 300
See also
Security parameters
Guidewire provides the following configuration parameters in the [Link] file that relate to application security.
For information on editing [Link] and setting configuration parameters, see “Working with configuration
parameters” on page 41.
EnableDownlinePermissions
If UseACLPermissions is true, then setting this parameter to true means that supervisors inherit permissions on an
object that has been added for a supervised user or group.
Default: true
ExternalUserAccess
Indicate which groups and producer codes are available to external users. In order of increasing access, values are:
• FULLYRESTRICTED – External users can be assigned to groups only within their organization. Users inherit
producer codes from their groups. In addition, external users can be assigned producer codes from their
organization.
• PROTECTINTERNAL – External users can be assigned to any external groups. Users inherit producer codes from
their groups. In addition, external users can be assigned producer codes from any external organization.
• ALLOWINTERNAL – External users can be assigned to any groups, internal or external. Users inherit producer codes
from their groups. In addition, external users can be assigned producer codes from internal or external
organizations.
Default: FULLYRESTRICTED
See also
• Application Guide
FailedAttemptsBeforeLockout
Number of failed attempts that PolicyCenter permits before locking out a user. For example, setting this value to 3
means that the third unsuccessful try locks the account from further repeated attempts. This integer value must be 1
or greater. A value of -1 disables this feature.
Default: 3
Minimum: -1
LockoutPeriod
Time in seconds that PolicyCenter locks a user account. A value of -1 indicates that a system administrator must
manually unlock a locked account.
Default: -1
LoginRetryDelay
Time in milliseconds before a user can retry after an unsuccessful login attempt. This integer value must be 0 or
greater.
Default: 0
Minimum: 0
MaxPasswordLength
New passwords must be no more than this many characters long. This integer value must be 0 or greater.
Default: 16
MinPasswordLength
New passwords must be at least this many characters long. For security purposes, Guidewire recommends that you
set this value to 8 or greater. This integer value must be 0 or greater. If 0, then Guidewire PolicyCenter does not
require a password. (Guidewire does not recommend this.)
Default: 8
Minimum: 0
90 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
RestrictContactPotentialMatchToPermittedItems
Whether PolicyCenter restricts the match results from a contact search screen to those that the user has permission to
view.
Default: true
RestrictSearchesToPermittedItems
Whether PolicyCenter restricts the results of a search to those that the user has permission to view.
Default: true
SessionTimeoutSecs
Use to set the browser session expiration timeout, in seconds. By default, a session expires after three hours (60 * 60
* 3 = 10800 seconds).
• The minimum value to which you can set this parameter is five minutes (60 * 5 = 300 seconds).
• The maximum value to which you can set this parameter is one week (3600 * 24 * 7 = 604800 seconds)
This value sets the session expiration timeout globally for all PolicyCenter browser sessions. See the System
Administration Guide for information on how to set the session timeout at a more granular level.
Default: 10800
Minimum: 300
Maximum: 604800
RenewalMaxSideBySideQuotes
Sets an upper limit on the number of versions to show on a side-by-side quote page for a policy renewal.
Default: 4
SideBySide
Determines whether validation warnings block Quote All in side-by-side quoting.
In the default configuration, Quote All in the Side by Side Quoting screen does not produce quotes when there are
validation warnings. This is to prevent PolicyCenter from generating invalid quotes. Guidewire expects that the
default implementation is suitable for most implementations.
Default: true
See also
• For more information about setting this parameter, see “Configuring quote all to ignore validation warnings” on
page 790.
SubmissionMaxSideBySideQuotes
Sets an upper limit on the number of versions to show on a side-by-side quote page for a policy submission.
Default: 4
Application configuration parameters 91
Guidewire PolicyCenter 9.0.9 Configuration Guide
PolicyChangeMaxSideBySideQuotes
Sets an upper limit on the number of versions to show on a side-by-side quote page for a policy change.
Default: 4
ActionsShortcut
The keyboard shortcut to use for the Actions button.
Default: A
AutoCompleteLimit
The maximum number of autocomplete suggestions to show.
Default: 10
InputMaskPlaceholderCharacter
The character to use as a placeholder in masked input fields.
Default: . (period)
ListViewPageSizeDefault
The default number of entries that PolicyCenter displays in each page in a list view, if the page does not explicitly
specify this value. This integer value must be at least 1.
Default: 15
Minimum: 1
MaxBrowserHistoryItems (obsolete)
This parameter is obsolete. Do not use it.
QuickJumpShortcut
The keyboard shortcut to use to activate the QuickJump box.
Default: / (forward slash)
UISkin
Name of the PolicyCenter interface skin to use.
Default: theme-9
WebUIAJAXTimeout
Number of seconds that the PolicyCenter web client waits after issuing a call to the PolicyCenter server. If the server
does not respond within this time, the web client assumes that the server is offline, terminates all connections, and
92 chapter 2: Application configuration parameters
Guidewire PolicyCenter 9.0.9 Configuration Guide
displays an error. You may want to increase this value if you are performing data-intense operations that take a long
time to process.
Default: 600
InstrumentedWorkerInfoPurgeDaysOld
Number of business days to retain instrumentation information for a worker instance before PolicyCenter deletes it.
Default: 45
WorkItemCreationBatchSize
The maximum number of work items for a work queue writer to create for each transaction.
Default: 100
WorkItemPriorityMultiplierSecs
Used to calculate the AvailableSince field for new work items. For new work items without a priority,
PolicyCenter sets AvailableSince to the current time. Later, PolicyCenter checks out work items from the work
queue in ascending order by AvailableSince, so work items without a priority are checked out in the order they
were created.
You can assign a priority to new work items by implementing the Work Item Priority plugin
(IWorkItemPriorityPlugin). For new work items with a priority, PolicyCenter sets AvailableSince according to
the following formula:
[Link] = CurrentTime – ([Link] * WorkItemPriorityMultiplierSecs)
Work items with higher priorities have earlier AvailableSince values than work items with lower priorities.
Therefore, work items with higher priorities are checked out before ones with lower priorities because their
AvailableSince values are earlier.
Priority influences the calculation of AvailableSince only at the time work items are created. If a worker throws an
exception while processing a work item, PolicyCenter reverts the status of the work item from checkedout to
available. At the same time, PolicyCenter resets AvailableSince according to the following formula:
[Link] = CurrentTime + RetryInterval
Work items are retried in the order they encounter exceptions, irrespective of priority.
IMPORTANT Prioritization affects only work items of type WorkflowWorkItem or its derivatives.
Default: 600
WorkItemRetryLimit
The maximum number of times that PolicyCenter retries an orphaned or failed work item.
Guidewire logs a ConcurrentDataChangeException generated by workers at different levels depending on context.
If the ConcurrentDataChangeException occurs on processing the work items, PolicyCenter logs the error only if
the number of attempts exceeds the configured value of the WorkItemRetryLimit. Otherwise, PolicyCenter logs the
debug message instead.
Application configuration parameters 93
Guidewire PolicyCenter 9.0.9 Configuration Guide
The value for WorkItemRetryLimit applies to all work queues unless overridden in [Link] by
retryLimit for specific work queues. For more information on tuning work queue performance by adjusting the
number of retries, see the System Administration Guide.
Default: 3
WorkQueueHistoryMaxDownload
The maximum number of ProcessHistory entries to consider when producing the Work Queue History download.
The valid range is from 1 to 525600. (The maximum of 525,600 is 60*24*365, which is one writer running every
minute for a year.)
Default: 10000
WorkQueueThreadPoolMaxSize
Maximum number of threads in the work queue thread pool. This must be greater than or equal to
“WorkQueueThreadPoolMinSize” on page 94. All threads that are not core threads are additional on-demand
threads. PolicyCenter terminates any idle on-demand threads after the period of time defined by configuration
parameter WorkQueueThreadsKeepAliveTime.
Default: 50
Set For Environment: Yes
WorkQueueThreadPoolMinSize
Minimum number of core threads in the work queue thread pool.
Default: 0
Set For Environment: Yes
WorkQueueThreadsKeepAliveTime
Keep alive timeout (in seconds) for additional on-demand threads in the work queue thread pool. An additional on-
demand thread is terminated if it is idle for more than the time specified by this parameter.
Default: 60
Set For Environment: Yes
Getting started
This topic describes Guidewire Studio, which is the PolicyCenter administration tool for creating and managing
PolicyCenter resources. (Studio resources include Gosu rules, classes, enhancements, the product model, script
parameters, and the PolicyCenter data model files.) Using Guidewire Studio, you can do the following:
• Create and edit individual rules, and manage these rules and their order of consideration within a rule set
• Create and manage PCF pages, workflows, entity names, and display keys
• Create and manage Gosu classes
• Access rule sets, Gosu classes, and other resources stored in a SCM (Source Control Management) system
IMPORTANT Do not create installation directories that have spaces in the name. This can prevent
Guidewire Studio from functioning properly.
propagate into production. You must specifically build a .war file and deploy it to a server for the changes to take
effect. (Studio and the production application server—by design—do not share the same configuration file system.)
Guidewire recommends that you not run Studio on a machine with an encrypted hard drive. If you run Guidewire
Studio on a machine with hard drive encryption, Studio can take 15 or more seconds to refresh. This slow refresh
can happen when you switch focus from the Studio window to something else, such as the browser, and back again.
To assist with this development and testing process, Guidewire bundles the following with the PolicyCenter
application:
• A QuickStart development server
• A QuickStart database
• A QuickStart server used for testing that you cannot control
• A QuickStart database used for testing that is separate from the QuickStart development database
The following diagram illustrates the connections between Guidewire Studio, the bundled QuickStart applications,
the local file system, and the PolicyCenter application server. You use the QuickStart test server and test database for
testing only as PolicyCenter controls them internally. You can use either the bundled QuickStart development server
bundled with Guidewire PolicyCenter or use an external server such as Tomcat. In general, dotted lines indicate
actions on your part that you perform manually. For example, you must manually create a .war file and manually
move it to the production server. The system does not do this for you.
Guidewire
Studio
Debug
Development Debug
QuickStart
Server
Test
Server
PolicyCenter
QuickStart Database Application
and
Check Out/Submit
Configuration
Files
Database
Local
Configuration WAR / EAR
Files
SCM
System
PolicyCenter Database
For information on starting and testing the QuickStart server from within Studio, see “Testing PolicyCenter with
Guidewire Studio” on page 499.
Mode Description
file mode The database persists data to the hard drive (the local file system), which means that the data can live from one
server start to another. This is the Guidewire‐recommended default configuration.
memory The database does not persist data to the hard drive and it effectively drops the database each time you restart
mode the server. Guidewire does not recommend this configuration.
You set configuration parameters for the QuickStart database associated with the development server in database-
[Link]. For example:
<!-- H2 (meant for development/quickstart use only!) -->
<database
name="PolicyCenterDatabase"
dbtype="h2">
<dbcp-connection-pool
jdbc-url="jdbc:h2:file:/tmp/guidewire/pc"/>
<upgrade
defer-create-nonessential-indexes="false"/>
</database>
In the base configuration, the QuickStart database runs in file mode. You set the database mode using the jdbc-url
attribute. In file mode, the jdbc-url attribute value specifies an actual file location. For example:
jdbc-url="jdbc:h2:file:/tmp/guidewire/pc"
Occasionally, you may want (or need) to drop the QuickStart database. For example, Guidewire recommends that
you drop the QuickStart database if you make changes to the PolicyCenter data model.
Drop the database from the command line
• At the command prompt, run gwb dropDb.
Drop the database manually
• Delete the files from the directory specified by the jdbcURL parameter (by default, <root>/tmp/guidewire/pc).
The server must be stopped when you delete the directory.
Getting started 99
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. Navigate to the PolicyCenter web interface on the deployment server, and log in.
2. Reload the PCF configuration using either the Internal Tools page or the Alt+Shift+L shortcut.
Result
Hot-deploy Gosu files
Editing and saving Gosu files in Studio does not automatically reload them in the QuickStart server, even if there is
a connection between it and Studio. To reload the Gosu files, do one of the following:
• To recompile all files, click Build→Compile.
• To compile only files that were changed since the last compile, click Build→Make Project.
Directory Description
.gradle Configuration and settings for Gradle, the project build tool.
.idea Configuration and settings for IntelliJ IDEA, the foundation for Guidewire Studio.
admin Administrative tools. See the System Administration Guide for descriptions.
bin Deprecated. The gwpc batch file and shell script used to launch commands for building and deploying.
These commands are deprecated, and are provided only for backwards compatibility with previous releas‐
es. For the updated commands, see the Installation Guide.
build The output of build commands such as exploded .war files and the data and security dictionaries. This
directory is not present when you first install PolicyCenter. The directory is created when you run one of
the build commands.
dist Guidewire application .war, and .jar files are built in this directory. The directory is created when you run
one of the build commands to generate .war files.
doc HTML and PDFs of PolicyCenter documentation.
gradle Support files for Gradle, the project build tool.
java-api The Java API libraries created by running the gwb genJavaApi command. See the Integration Guide.
javadoc Reference documentation for the Java API libraries.
licenses License information for third‐party tools used by PolicyCenter.
logs Application log files.
modules Subdirectories including configuration resources for each application component.
productdesigner Application files for Product Designer.
Key directories
The installation process creates a configuration environment for PolicyCenter. In this environment, you can find all
of the files needed to configure PolicyCenter in two directories:
• The main directory of the configuration environment. In the default PolicyCenter installation, the location of this
directory is PolicyCenter/modules/configuration.
• PolicyCenter/modules/configuration/config contains the application server configuration files.
The installation process also installs a set of system administration tools in PolicyCenter/admin/bin.
PolicyCenter runs within a J2EE server container. To deploy PolicyCenter, you build an application file suitable for
your server and place the file in the server’s deployment directory. The type of application file and the deployment
directory location is specific to the application server type. For example, for PolicyCenter (deployed as the [Link]
application) running on a Tomcat J2EE server on Windows, the deployment directory might be C:\Tomcat\webapps
\pc.
Edition, you must obtain your own license for it from IntelliJ. For information about the supported versions of
IntelliJ IDEA Ultimate, visit the Guidewire Community and search for knowledge article 1005, “Supported
Software Components”.
Procedure
1. In your PolicyCenter installation directory, create a text file named [Link] that contains the full
path of your IntelliJ IDEA Ultimate Edition installation directory. For example:
C:\Program Files (x86)\JetBrains\IntelliJ IDEA 15.0.6
2. Run Guidewire Studio.
3. When prompted for your IntelliJ IDEA Ultimate Edition license, provide it.
Procedure
1. Edit the file PolicyCenter/modules/script/[Link].
2. Locate the studio section:
studio {
...
}
3. Within this section, set any properties that are valid in the [Link] file by adding a statement in the
following format:
ideaProperties["property_name"] = "property_value"
For example, to disable the IntelliJ IDEA cycle buffer, set the following:
ideaProperties["[Link]"] = "disabled"
DCEVM Limitations
If you reload Gosu classes using hotswap on the DCEVM, it is possible to add new static fields (again, only on the
DCEVM). However, Gosu does not execute any initializers for those static variables. For example, if you add the
following static field to a class:
public static final var NAME = "test"
Gosu adds the NAME field to the class dynamically. However, the value of the field is null until you restart the server
(or Studio, if you are running the code from the Studio Gosu Scratchpad). If you need to initialize a newly added
static field, you must write a static method that sets the variable and then executes that code.
For example, suppose that you added the following static method to class MyClass:
public static var x : int = 10
To initialize this field, write code to set the static variable to the value that you expect and then execute that code:
MyClass.x = 10
See also
• For details on how to select the proper JVM for your installation, see the Installation Guide.
gwb studio
Result
The first time that you start Guidewire Studio, it may take some extra time to load and index configuration data.
Subsequent starts, however, generally load much more quickly.
Click File→Exit. You can also stop Studio by closing its window (by clicking the x in the upper right-hand corner of
the window).
Procedure
1. Click File→Settings.
2. In the Settings dialog, in the navigation list, click Guidewire Studio.
3. In the Update section, select or clear the Check Automatically check box.
Procedure
1. Click File→Settings.
2. In the Settings dialog, in the navigation list, click Guidewire Studio.
3. In the Update section, set the Update Site URL text box to the following:
[Link]
Your update site can be a web server, FTP server, network file share, or any location accessible using standard URL
protocols such as http, ftp, file, and so on.
Procedure
1. Download the Studio update files. See “Download update files from the Guidewire Community” on page 105.
2. Place the Studio update files in the shared location in your update site.
3. Create a file that identifies the latest Studio update. Studio checks this file to determine when an update is
available.
a. In the shared location on your update site, create a text file named [Link].
b. Edit [Link] and add a line that specifies a Studio major release and the latest minor release
number for that major release.
For example, the following specifies that for any Studio "3.0.x" major release, Studio updates to the
"3.0.4" minor release:
3.0.x = 3.0.4
Next steps
When you place a new Studio release in your update site, edit [Link] and change the minor release number
to match the latest release.
See also
• “Download update files from the Guidewire Community” on page 105
• “Copy update files from an updated Studio installation” on page 106
• “Manually install the Studio update files” on page 106
See also
• “Manually install the Studio update files” on page 106.
Procedure
1. In the updated Studio installation, go to the directory PolicyCenter/studio.
2. Copy the studio-*.zip file with the highest release number.
See also
• “Manually install the Studio update files” on page 106.
Procedure
1. In the Studio installation to update, go to the directory PolicyCenter/studio/plugins.
2. Delete the following directories:
• gosucheckstyle
• ij-gosu
• ij-studio
• inspections
3. Extract the studio-*.zip Studio update file into the PolicyCenter/studio/plugins directory.
See also
• “Updating Studio manually” on page 105.
Dot comple‐ Opens a context‐sensitive pop‐up window that contains all the subobjects and methods that are valid for this
tion object, in this context. Dot completion works with both Gosu or Java packages.
SmartHelp Displays a list of valid fields and subobjects for the current object.
Keyboard commands provide code completion, code navigation, and code editing shortcuts. See “Using Studio
keyboard shortcuts” on page 108 for information on keyboard shortcuts.
Gosu API Reference Provides a searchable reference on the Gosu APIs, methods and properties. See the Gosu Reference
Guide.
PCF Reference Guide Provides a description of the PCF widgets and their attributes that you can use within the PCF editor.
This documentation is also known as the PCF Format Reference.
Gosu Reference Guide Provides information on the Gosu language.
Alt+Enter Intention actions Offers suggestions to correct the error nearest the caret.
Ctrl+N Find class or file by name Finds and opens the class or file in its editor.
Ctrl+Shift+N
Ctrl+Q Context help Shows documentation for the symbol at the caret.
Ctrl+Shift+G Show type information Shows the type of the symbol at the caret.
Command Description
File→Save All Writes any unsaved changes to your local fie or SCM (Source Control Management) system. You can also
use the standard keyboard shortcut Ctrl+S save your changes.
Toolbar Save icon Works the same way that Save All and Ctrl+S do.
See also
• “Compiling configuration resources” on page 110
• “Verifying configuration resources” on page 109
• “Setting options for Gosu command prompt compilation” on page 110
The following table lists and describes the available configuration options for Gosu compilation.
Examples
Each example stands alone. Remove the line or lines that you added for one example before you try the next
example.
• Add the following line to the top of the [Link] file.
[Link] = true
At the command prompt run the gwb compile command. When you run a compiled class that causes a numeric
overflow, the class throws an arithmetic exception and terminates.
• Add the following line to the top of the [Link] file.
[Link] = false
At the command prompt run the gwb compile command. Even if there are multiple compilation errors, the task
ignores the maxErrs option and compiles all available Gosu classes. Output similar to the following lines
appears.
Error threshold of 10 exceeded; aborting compilation.
gosuc completed with 12 errors. Warnings were disabled.
At the command prompt run the gwb compile command. If the number of compilation errors after completing
compilation of any Gosu file is greater than maxErrs, the compilation task terminates. Output similar to the
following lines appears.
Error threshold of 10 exceeded; aborting compilation.
gosuc completed with 12 errors. Warnings were disabled.
:modules:configuration:compileGosu FAILED
At the command prompt run the gwb compile command. If the number of compilation warnings after
completing compilation of any Gosu file is greater than maxWarns, the compilation task terminates. Output
similar to the following lines appears.
Warning threshold of 100 exceeded; aborting compilation.
gosuc completed with 129 warnings and 0 errors.
:modules:configuration:compileGosu FAILED
At the command prompt run the gwb compile command. Output similar to the following lines appears.
gosuc: about to compile file: C:\Guidewire\PolicyCenter\modules\configuration\gsrc\gw\policy
\[Link]
gosuc: about to compile file: C:\Guidewire\PolicyCenter\modules\configuration\gsrc\gw\policy
\[Link]
See also
• Gosu Reference Guide
You can use the @SuppressWarnings annotation in several kinds of declarations. Such declarations exclude
declarations of local variables. Instead, the @SuppressWarnings annotation can apply to declarations of the
following categories:
• Type
• Function
• Property
• Constructor
• Field
• Parameter
The @SuppressWarnings annotation requires one parameter. This parameter is a String value that indicates the
warnings you wish to suppress.
For example, suppose you pass in the argument "all" into the @SuppressWarnings annotation. The annotation
invocation in this case would be @SuppressWarnings("all"). The effect of the annotation would be to suppress all
warnings.
For another example, suppose instead that you pass in the argument "deprecation" into the @SuppressWarnings
annotation. Suppose further that you invoke the annotation on the line prior to a Gosu class declaration. The
invocation in this case would be @SuppressWarnings("deprecation"). The effect of this annotation is to suppress
all deprecation warnings for the Gosu class you have declared.
Procedure
1. Open the resource in the Studio editor.
2. At the bottom of the editor pane, click the Text tab. The XML definition is shown in the editor pane.
3. Modify the XML as desired.
4. To switch back to the visual editor, click the tab next to the Text tab that shows the type of the resource that
you are editing.
Next steps
Make sure that the XML remains valid, and that you do not introduce any syntax errors. If the XML contains errors,
the representation of the resource in the visual editor may not be accurate.
This topic describes Guidewire Studio and the Studio development environment.
Procedure
1. Edit the file PolicyCenter/modules/script/[Link].
2. Locate the studio section:
studio {
...
}
ideaProperties["[Link]"] = "memory_value"
Set memory_value to the number of megabytes desired, followed by the letter m. For example, to assign Studio
6GB, set this property to 6000m. The default value is 4000m.
Note: To set the memory for IntelliJ IDEA with OSGi Editor, set the property
[Link].
4. Restart Studio.
See also
• “Setting IntelliJ IDEA properties in Studio” on page 102
•
Working with Guidewire Studio 115
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. In Studio, click File→Settings.
2. In the Settings dialog, navigate to Build, Execution, Deployment→Compiler.
3. In the Build process heap size text box, type the number of megabytes.
For example, to assign Studio 12GB for project builds, set this property to 12000.
Note: You can set anti-aliasing of fonts in the editor Appearance settings page at
File→Settings→Editor→Appearance. Additionally, you can set font size zooming with the Ctrl+Mouse
wheel in the main Editor settings page at File→Settings→Editor.
Procedure
1. Navigate to File→Settings→Editor→Colors & Fonts.
2. Use the Colors & Fonts menu selections to set Studio display of text in the editors.
For example, if you click Gosu, you can set the font type and size of Gosu code in the editor.
3. You can also set how Studio displays specific Gosu code items, such as keywords or operators.
Studio displays a code sample at the bottom of the dialog that reflects your settings.
This topic discusses how to work with Gosu code in Guidewire Studio.
Gosu packages
Guidewire PolicyCenter stores Gosu classes, enhancements, and templates in hierarchical structure known as
packages. To access a package, expand the Classes node in the Studio Resources tree.
Note: You can delete only an empty package.
Procedure
1. Select Classes in the Resources tree.
2. Right-click, select New, then Package from the menu.
3. Enter the name for this package.
4. Click OK to save your work and exit this dialog.
Gosu classes
Gosu classes correspond to Java classes. Gosu classes reside in a file-based package structure. You can extend
classes in the base configuration of PolicyCenter to add properties and methods, and you can write your own Gosu
120 chapter 6: Guidewire Studio and Gosu
Guidewire PolicyCenter 9.0.9 Configuration Guide
classes. You define classes in Gosu, and you access the properties and call the methods of Gosu classes from Gosu
code within methods.
You create and reference Gosu classes by name, just as in Java. For example, you define a class named MyClass in a
package named MyPackage. You define a method on your class named getName. After you define your class, you
can instantiate an instance of the class and call the method on that instance, as the following Gosu sample code
demonstrates.
var myClassInstance = new [Link]()
var name = [Link]()
Studio stores enhancement files in the gsrc folder in the resources tree. Gosu class files end in .gs.
See also
• “PolicyCenter base configuration classes” on page 121
• “Class visibility in Studio” on page 122
• “Preloading Gosu classes” on page 123
• Gosu Reference Guide
For a discussion of the QuickJump functionality, see “Implementing QuickJump commands” on page 141.
The gw package
In the base PolicyCenter configuration, the gw.* Gosu class libraries contain a number of Gosu classes, divided into
subpackages by functional area. To access these libraries, you merely need to type gw. (gw dot) in a Studio editor.
The following subpackages under the gw package play an important role in Studio:
• [Link].*
• [Link]
Guidewire Studio and Gosu 121
Guidewire PolicyCenter 9.0.9 Configuration Guide
[Link].*
There are actually two [Link] packages that you can access:
• One consists of a set of built-in library functions that you can access and use, but not modify.
• The other set of library functions is visible in the Studio gsrc folder in the configuration tree. You cannot only
access these classes but also modify them to suit your business needs.
You access both the same way, by entering [Link] in the Gosu editor. You can then choose a package or class that
falls into one category or the other. For example, if you enter [Link]. in the Gosu editor, the Studio Complete Code
feature provides you with the following list:
• activity
• address
• admin
• ...
In this case, the activity and admin packages contain read-only classes. The address package is visible in Studio,
in the gsrc folder.
[Link]
If you create a new Gosu plugin, place your plugin class in the [Link] package.
See also
• For information on how to use Studio to work with plugins, see “Using the plugins registry editor” on page 133.
• For information on various types of plugins and how to implement plugins, see the Integration Guide.
See also
• “Using the web service editor” on page 139
• Integration Guide
To access the class functionality, first create a new class in the following Studio Classes package:
[Link]
uses [Link]
uses [Link]
uses [Link]
construct() { }
Static meth‐ Static method invocations dictate some kind of action and have the following syntax:
od invoca‐ type#method
tions The referenced method must be a static, no‐argument method. However, the method can be on either a Java
or Gosu type.
In the base configuration, Guidewire includes some actions on the [Link] class. For
example, to cause all Gosu types to be loaded from disk, use the following:
[Link]#headerCompileAllGosuClasses
You can add additional lines that call static methods.
Type names Type names can be either Gosu or Java types. You must use the fully‐qualified name of the type. For any Java or
Gosu type that you list in this file:
• Java – PolicyCenter loads the associated Java class file.
• Gosu – PolicyCenter parses and compiles the type to Java byte code, as well as any Gosu blocks and inner
classes within that type.
Guidewire provides the logging category [Link], which provides DEBUG level logging of all actions and
preloaded types.
Procedure
1. Navigate to the Loaded Gosu Classes page (Server Tools→Info Pages).
2. Copy and paste the list that you see there into the [Link] file.
Result
The next time that you start the application server, PolicyCenter compiles those types on startup.
Guidewire Studio and Gosu 123
Guidewire PolicyCenter 9.0.9 Configuration Guide
Gosu enhancements
Gosu enhancements provide additional methods (functionality) on a Guidewire entity. For example, suppose that
you create an enhancement to the Activity entity. Within this enhancement, you add methods that support new
functionality. Then, if you type Activity. (Activity dot) within any Gosu code, Studio automatically uses code
completion on the Activity entity. It also automatically displays any methods that you have defined in your
Activity enhancement, along with the native Activity entity methods.
Studio stores enhancement files in the gsrc folder in the resources tree.
• Gosu class files end in .gs.
• Gosu enhancement files end in .gsx.
The Gosu language defines the following terms:
• Classes – Gosu classes encapsulate data and code for a specific purpose. You can subclass and extend existing
classes. You can store and access data and methods on an instance of the class or on the class itself. Gosu classes
can also implement Gosu interfaces.
• Enhancements – Gosu enhancements are a Gosu language feature that allows you to augment classes and other
types with additional concrete methods and properties. For example, use enhancements to define additional
utility methods on a Java class or interface that you cannot directly modify. Also, you can use an enhancement to
extend Gosu classes, Guidewire entities, or Java classes with additional behaviors.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→gsrc, and then to the package for
your new class.
2. Right-click the package, and then click New→Gosu Enhancement.
3. Type the name for the enhancement.
Guidewire strongly recommends that you end each enhancement name with the word Enhancement.
For example, if you create an enhancement for an Activity entity, name your enhancement
ActivityEnhancement.
4. Enter the entity type to enhance.
For example, if enhancing an Activity entity, enter Activity.
See also
• Gosu Reference Guide
Define a GX model
1. Navigate to the Classes package in which you want to create the GX model.
2. Right-click the package name, and then click New→GX Model.
124 chapter 6: Guidewire Studio and Gosu
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• Gosu Reference Guide
Script parameters
Script parameters are resources defined in Guidewire Studio™ that you can use as global variables in Gosu code.
System administrators change the values of script parameters on the Administration tab. Changes to values take effect
immediately in Gosu code.
IMPORTANT After you create a script parameter in Studio, PolicyCenter ignores subsequent changes
that you make to the parameter value. You must make all subsequent changes to parameter values in
the Script Parameters administration screen of the PolicyCenter user interface.
To see the data types available for script parameters, examine the ScriptParameter entity definition. This entity
contains properties for each valid type. For example, ScriptParameter uses BitValue for bit, DatetimeValue for
datetime, IntegerValue for decimal, and VarcharValue for varchar script parameter values.
To make a new script parameter value available in Gosu, you must provide a getter method in the script parameters
enhancement file.
IMPORTANT After you create a script parameter in Studio, PolicyCenter ignores subsequent changes
that you make to the parameter value. You must make all subsequent changes to parameter values in
the Script Parameters administration screen of the PolicyCenter user interface.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→resources, and then open the
file [Link].
2. Edit the XML and remove the element defining the parameter to delete.
You can, instead, create a script parameter named escalationTime, set its value to 5, and rewrite the line as
follows:
[Link]( [Link] ) > [Link]
Note: Guidewire recommends that you use Gosu class variables instead of script parameters to
reference values in Gosu expressions. The exception would be if you needed the ability to reset the
value from the PolicyCenter interface.
See also
• “Configuration parameters and files for free-text search in PolicyCenter” on page 409
• “Enabling free-text search in PolicyCenter” on page 411
• “Enabling the free-text search user interface in PolicyCenter” on page 412
This topic discusses the various editors available to you in Guidewire Studio.
See also
• Gosu Reference Guide
See also
• Product Model Guide
• Application Guide
A PolicyCenter plugin is a mini-program that you can invoke to perform some task or calculate a result.
See also
• Integration Guide
The Plugins Registry fields work slightly differently depending on whether the interface supports multiple
implementations. Most plugin interfaces supports only a single plugin implementation. Other plugin interfaces, such
as messaging plugins and startable plugins, support multiple plugin implementations.
See also
• For the maximum number of supported implementations for each plugin interface, see the table the Integration
Guide.
Startable plugins
To register code that runs at server start up, you register startable plugin implementations. Startable plugins
implement the IStartablePlugin interface. Typically, startable plugins are implemented as daemons, such as
listeners to JMS queues. Unlike standard Guidewire plugins, you can stop and start startable plugins from the
administrative interface. Alternatively, you can use PolicyCenter multi-threaded inbound integration APIs, which
use startable plugins.
See also
• Integration Guide
Gosu Type the name of the Gosu class that implements this plugin interface. In the base configuration, Guidewire
Class places all Gosu plugin implementation classes in the following package under configuration→gsrc:
[Link]
You must enter the fully qualified path to the Gosu implementation class. For example, use
[Link] for the Gosu emailMessageTransport plugin.
134 chapter 8: Using the plugins registry editor
Guidewire PolicyCenter 9.0.9 Configuration Guide
Java Class For the Java class that implements this plugin, type the fully qualified path, which includes the dot‐
separated package path to the class. Place all Java plugin classes that are not provided in the base config‐
uration in the following directory:
PolicyCenter/modules/configuration/plugins/
Plugin Di- (Optional) Type the name of the base plugin directory for the Java class. This is a folder (directory) in the
rectory modules/configuration/plugins directory. If you do not specify a value, Studio assumes that the class
exists in the modules/configuration/plugins/shared directory.
See the Integration Guide.
• OSGi Implementations
If you select Add OSGi Plugin, you see the following:
Service PID Type the fully qualified Java class name for your OSGi implementation class.
See the Integration Guide.
• All Implementations
Optionally, you can set the following:
Environment Type a comma‐separated list of the environments in which the plugin operates.
See “Configuring a plugin environment” on page 135.
Server Type the name of the server on which the plugin operates.
See “Configuring a plugin environment” on page 135.
3. After creating the plugin, you can add parameters to it. To do so, click Add Parameter , and enter the
parameter name and value.
Next steps
For more information on setting environment or server properties, see “Configuring a plugin environment” on
page 135.
environment or both of them depending on the value you set for the environment property. If you specify any value
in the environment property, the plugin only operates in an environment that matches the value of that property.
By default, a plugin can operate on any server. If PolicyCenter is running in a clustered environment, to restrict the
plugin so that it operates only on a specific server, specify the server ID in the Server property.
If you do not specify a value for the environment property, the plugin operates in all environments. If you do not
specify a value for the server property, the plugin operates on all servers.
To configure a plugin's operation for a particular environment, you can specify parameter values that apply to that
environment. During its execution, the plugin uses a parameter's value to determine the actions to perform.
Environment values are specified for particular parameter Name and Value property pairs.
If the plugin operates in an environment that is not specified for a particular parameter, you can provide a default
value for the parameter by adding a line containing a value for the parameter but leaving the environment property
for the parameter empty. Alternatively, the plugin code can provide a default value for the parameter.
For example, consider a plugin that operates in an environment called production. The plugin provides a parameter
called loglevel. For the production environment, the parameter's value is error. If the plugin is running in the
production environment, retrieving the value of the loglevel parameter instructs the plugin to log events of type
error.
To extend the example, assume the plugin also operates in an environment called test. If both environments are
specified in a single, comma-separated Environment value, the value of error is used for the loglevel parameter if
the plugin operates in either environment.
To assign a different loglevel value for each environment, specify the environments on separate lines in the list of
plugin parameters. The loglevel parameter can then provide different values specific to each environment. The
plugin retrieves a different loglevel value based on the environment in which it is operating.
A parameter that does not specify the environment property uses the same value for all environments. In the
following context, the incomingFileDir parameter uses the value /tmp/inbound/incoming for both the
production and test environments.
By default, a plugin uses the same value for a parameter on any server. If PolicyCenter is running in a clustered
environment, you can assign different values for a plugin parameter for specific servers by specifying the server ID
in the Server property. You can provide a default value for a plugin parameter by adding a line containing a value for
the parameter but leaving the server property for the parameter empty. Alternatively, the plugin code can provide a
default value for the parameter.
transferTimeoutSec 15 messaging
transferTimeoutSec 10 shorttimeout
transferTimeoutSec 120
A parameter that does not specify the server property uses the same value on all servers.
See also
• Integration Guide
• System Administration Guide
For integrations with other Guidewire InsuranceSuite applications, choose the plugin implementation class that
matches the version of your applications. Choose the implementation with the proper version number of the other
application (not the current application) in its package name.
Guidewire uses the following abbreviation conventions for naming its applications:
Using the plugins registry editor 137
Guidewire PolicyCenter 9.0.9 Configuration Guide
Application Abbreviation
ClaimCenter cc
PolicyCenter pc
ContactManager ab
BillingCenter bc
PolicyCenter supports WS-I web services. WS-I web services use the SOAP protocol. This topic discusses how to
define and configure web services with Guidewire Studio.
Editor Description
area
Toolbar The toolbar is located directly above the Resources pane. The toolbar icons provide the following actions.
• Add New Resource – Create new URL resource to the web service WSDL file.
• Edit Resource ‐ Edit the URL resource to the web service WSDL file.
• Remove Resource – Remove the URL from the list of web service resources.
• Move Up ‐ Move the selected URL resource up one level in the list of resources.
• Move Down ‐ Move the selected URL resource down one level in the list of resources.
• Fetch – Retrieve WSDL and XSD files for a web service resource. The retrieved files are shown in the editor's
Fetched Resources tab.
• Setup Environment ‐ Show the Studio Settings window. In the window's Sidebar, select Guidewire Studio to show
the Web Services Environment setting.
Resources Contains the list of defined URL resources for the web service. Each URL points to a web service WSDL file. The
pane WSDL file can exist in any of the following locations.
• The local file system
• A local server
• A remote server
Editor Description
area
Settings tab Create and manage configuration entries for the web service. The following types of configuration entries are
supported.
• Configuration Provider – Specifies a class that implements the IWsiWebserviceConfigurationProvider
interface.
• Override URL – Specifies an override proxy URL for the web service.
See the Integration Guide.
Fetched Re- Shows the WSDL and XSD files for the web services.
sources tab
See also
• Integration Guide
This topic discusses how you can configure, or create new, QuickJump commands.
What Is QuickJump?
The QuickJump box is a text-entry box for entering navigation commands using keyboard shortcuts. Guidewire places
the box at the upper-right corner of each PolicyCenter screen. You set which commands are valid through the
QuickJump configuration editor. At least one command must exist (be defined) in order for the QuickJump box to appear
in PolicyCenter. (Therefore, to remove the QuickJump box from the PolicyCenter interface, remove all commands
from the QuickJump configuration editor.)
You set the keyboard shortcut that activates the QuickJump box in [Link]. The default key is “/” (a forward
slash). Therefore, the default action to access the box is Alt+/.
There are three basic types of navigation commands:
Subclass Section
StaticNavigationCommand “Implementing QuickJumpCommandRef commands” on page 142
ParameterizedNavigationCommand “Implementing QuickJumpCommandRef commands” on page 142
All QuickJumpCommand subclasses must define a constructor that takes a single parameter—the command name—as
a String.
number of extraneous classes needed. See “Implementing StaticNavigationCommandRef commands” on page 143
for details.
same manner as for a static navigation command. You must also specify the Command Target, and any necessary
Command Arguments. These parameters have the following meanings:
• Command Target specifies the ID of the target page.
• Command Arguments specify one or more parameters to use in the case in which the target page accepts one or
more string parameters. If there is more than one parameter, enter a comma-separated list.
See also
• “Implementing QuickJumpCommandRef commands” on page 142
Subclassing StaticNavigationCommand
Commands that implement this subclass check the canVisit permission by default to determine whether a user has
the necessary permission to see that QuickJump option in the QuickJump box. The permission hole in this case arises
if permissions were in place for all approaches to the destination but not on the destination itself.
For example, suppose that you create a new QuickJump navigation for NewNotePopup. Then suppose that previously
you had placed a permission check on all New Note buttons. In that case PolicyCenter would have checked the
[Link] permissions. However, enabling QuickJump navigation to NewNotePopup bypasses those previous
permissions checks. The best practice is to check permissions on the canVisit tag of the actual destination page, in
this case, on NewNotePopup.
Subclassing ContextualNavigationCommand
As with StaticNavigationCommand subclasses, add permission checks to the destination page's canVisit tag.
Subclassing ParameterizedNavigationCommand
Classes subclassing ParameterizedNavigationCommand have the (previously described) method called
isPermitted, which is possible for you to override. This method—isPermitted—controls whether the user can
see the navigation command in the QuickJump box. After a user invokes a command, PolicyCenter performs standard
permission checks (for example, checking the canVisit expression on the target page), and presents an error
message to unauthorized users.
It is possible for the canVisit expression on the destination page to return a different value depending on the actual
parameters passed into it. As a consequence, PolicyCenter cannot determine automatically whether to display the
144 chapter 10: Implementing QuickJump commands
Guidewire PolicyCenter 9.0.9 Configuration Guide
command to the user in the QuickJump box before the user enters a value for the parameter. If it is possible to
manually determine whether to display the command to the user, check for permission using the overridden
isPermitted method. (This might be, for example, from the destination's canVisit attribute.)
This topic describes entity names and entity name types and how to work with the entity names in the Entity Names
editor in Guidewire Studio™.
WARNING Do not reference in an entity name definition either a virtual property or an otherwise
non-queryable column, including an amount virtual property. Failing to follow this guidance will
compromise performance and lead to exceptions.
Variable table
You must declare any field that you reference in the entity definition (in the code definition pane) as a variable in the
variable table at the top of the page. This tells the Entity Name feature which fields to load from the database, and
puts each value in a variable for you to use.
For example, the Contact entity name defines the following variables:
Notice that this defines LastName as [Link] and Name as [Link], for example.
Use the variable table to manage variables that you can embed in the Gosu entity name definitions. You can add and
remove variables using the function buttons next to the table. The columns in the table have the following meanings:
String variable called claimant. PolicyCenter would then use this value in constructing the entity name for the
Exposure entity.
Note: If you set the Use Entity Name? field to true and then attempt to use a virtual field as an Entity
Path value, Studio resource verification generates an error.
Therefore, if PolicyCenter is in the process of determining how to order two contacts, it first compares the values in
the (Sort Path) LastNameDenorm fields (Sort Order = 1). If these values are equal, Studio then compares the values in
the FirstNameDenorm fields (Sort Order = 2), repeating this process for as long as there are fields to compare.
These columns specify the default sort order. Other aspects of Guidewire PolicyCenter can override this sort order,
for example, the sort order property of a list view cell widget.
To use the Contact entity name definition, you can embed the following in a PCF page, for example.
<Cell id="Name" value="[Link]" ... />
Do not use virtual entity methods to define display names. Doing so may result in slow performance. Also, if the
entity for which the display name is being generated is retired, calls to virtual methods may behave unpredictably.
You can then use these variables in Gosu code (in the text editor) to include the Claimant and Incident information
in the entity name for Exposure.
Guidewire recommendations
Do not end an Entity Path value with an entity foreign key, without setting the Use Entity Name value to true.
Otherwise, PolicyCenter loads the entire entity being referenced into memory. In actuality, you probably only need a
couple fields from the entity to construct your entity name. Instead, you one of the approaches described in one of
the previous steps.
Denormalized columns
Within the PolicyCenter data model, it is possible for a column to end in Denorm for (at least) two different reasons:
• The column contains a direct foreign key to a particular Contact (for example, as in [Link].)
• The original column is of type String and the column attribute supportsLinguisticSearch is set to true. In
this case, the denormalized column contains a normalized version of the string for searching, sorting, and
indexing. Thus, the Contact entity definition uses LastNameDenorm and FirstNameDenorm as the sort columns
in the definition for the Contact entity name. It then uses LastName and FirstName in the variables' entity paths
for eventual inclusion in the entity name string.
150 chapter 11: Using the entity names editor
Guidewire PolicyCenter 9.0.9 Configuration Guide
Only internal application code (internal code that Guidewire uses to build the application) can access any of non-
default entity name types. For example, some of the entity names contain an additional type or definition of
ContactRoleMessage. PolicyCenter uses the ContactRoleMessage type to define the format of the entity name to
use in role validation error messages. In some cases, this definition is merely the same as the default definition.
Note: It is not possible for you to either add or delete an entity name type from the base application
configuration. You can, however, modify the definition—the Gosu code—for all defined types. You
can directly access only the default type from Gosu code.
This topic covers how you use the messaging editor in Guidewire Studio.
Messaging editor
You use the Messaging editor to set up and define one or more message environments, each of which includes one or
more message destinations. A message destination is an abstraction that represents an external system. Typically, a
destination represents a distinct remote system. However, you can also use destinations to represent different remote
APIs or different types of messages that must be sent from PolicyCenter business rules.
You use the Messaging editor to set up and define message destinations, including the destination ID, name, and the
transport plugin to use with this destination. In a similar fashion to the Plugins editor, you can also set the
deployment environment in which this message destination is active.
Each destination can specify a list of events that are of interest to it, along with some basic configuration
information.
See also
• Integration Guide
Procedure
1. In the Messaging Config drop-down list, click the messaging configuration to remove.
2. Click Remove Messaging .
PolicyCenter deletes the messaging environment without asking for confirmation.
IMPORTANT If you register a messaging plugin, you must register it in two places. First,
register it in the plugin registry in the plugin editor; see “Using the plugins registry editor” on
page 133. Remember the plugin name that you use. You need it to configure the messaging
destination in the Messaging editor in Studio for each destination. Use those plugin names in the
messaging editor.
5. After you click Add Destination in the Messaging editor, fill in the following fields.
ID The destination ID (as an integer value). The valid range for custom destination IDs is 0 through 63, inclusive.
Guidewire reserves all other destination IDs for built‐in destinations such as the email transport destination.
Studio marks these internal values with a gray background, indicating that they are not editable. Studio also
marks valid entries with a white background and invalid entries with a red background.
Name Required. The name to use for this messaging destination.
Trans- Required. The name of the MessageTransport plugin implementation that knows how to send messages for
port Plu- this messaging destination. A destination must define a message transport plugin that sends a Message object
gin over a physical or abstract transport. For example, the plugin might do one of the following.
• Submit the message to a message queue.
• Call a remote web service API and get an immediate response that the system handled the message.
• Implement a proprietary protocol that is specific to a remote system.
Each messaging destination must specify its own unique implementation of a MessageTransport plugin. A
particular MessageTransport plugin cannot be assigned to multiple destinations.
Next steps
If the Disabled check box is selected, the messaging destination is disabled.
See also
• Integration Guide
This topic discusses how to work with the display key editor that is available to you in Guidewire Studio.
Task Actions
View a display key Navigate to the display key that you want to view by scrolling through the display key proper‐
ties file. To search for a particular key or value, press Ctrl+F and then type your search term
in the search bar.
Modify the text of an existing Navigate to the display key that you want to modify, and then modify the string in the editor
display key as you want.
Create a new display key In the display key editor, type the desired name and value for your new display key.
Delete an existing display key Highlight the display key that you want to delete, and then press Delete.
Procedure
1. Place the cursor within the string, and then press Alt+Enter.
2. Click Convert string literal to display key. Studio opens the Create Display Key dialog.
3. In the Name text box, type the name of the display key. Studio fills in this text box with the string value, but
you can change it.
4. In the Values box, under the desired locale name, verify or change the string value.
5. Click OK. Studio creates the new display key in the display key properties file. Studio also inserts a reference
to that display key in place of the string literal in the Gosu code.
Example
For example, suppose that you enter the following in the Rules editor:
var errorString = "Failed to send"
If you place the cursor within that string, then press Alt+Enter, and then click Convert string literal to display key,
Studio opens the Create Display Key dialog.
If you name the new display key SendFailed, then Studio creates the following new display key in the display key
properties file:
SendFailed=Failed to send
Studio also replaces the string literal in your Gosu code, and changes it to the following:
var errorString = [Link]("SendFailed")
Thus, at run time, PolicyCenter replaces {0} with the appropriate value, in this case, the name of an activity.
Occasionally, there are display keys that contain multiple arguments. For example:
[Link] = The group {0} cannot be added for the user {1}
as they do not belong to the same organization.
Method [Link]
Use the [Link] method to return the value of the display key. Use the following syntax:
[Link](display_key_name)
For example:
[Link]("[Link]")
returns:
158 chapter 13: Using the display keys editor
Guidewire PolicyCenter 9.0.9 Configuration Guide
This also works with display keys that require a parameter or parameters. To retrieve the parameter value, use the
following syntax.
[Link](display_key_name, arg1)
For example, the display key properties file defines the following display key with placeholder {0}:
[Link] = Cannot delete user because they are supervisor of the
following groups\: {0}.
Suppose that you have the following display key Gosu code:
[Link]("[Link]", GroupName)
If the variable GroupName is defined as WesternRegion, this display key returns the following:
Cannot delete user because they are supervisor of the following groups: WesternRegion
Note: Make sure to include the following line in any Gosu code that calls the [Link]
method:
uses [Link]
Guidewire provides the Data Dictionary to help you understand the PolicyCenter data model. The Data Dictionary
is a detailed set of linked documentation in HTML format. These linked HTML pages contain information on all the
data entities and typelists that make up the current data model.
Related concepts
PolicyCenter stores the current version of the Data Dictionary in the following directory:
PolicyCenter/build/dictionary/data/
As an option, you can generate the Data Dictionary in XML format with associated XSD files. Use the generated
XML and XSD files to import the Data Dictionary into third-party database design tools.
Related concepts
Related concepts
“Using the Data Dictionary” on page 165
Related concepts
Property colors
An examination of the Data Dictionary shows properties in green, blue, and red. These colors have the following
meanings:
Color Meaning
Green The object property is part of the Guidewire base configuration. The object definition file exists in Studio in the follow‐
ing locations:
• config→configuration→Metadata
• config→configuration→Extensions
Blue The object property is defined in an extension file, either by Guidewire or as a user customization. The object defini‐
tion file exists in Studio in the following location:
• config→configuration→Extensions
It is possible for Guidewire to define a base object in the Metadata folder and then to extend the object using an exten‐
sion entity in the Extensions folder.
Red Occasionally, it is possible to see a message in red in the Data Dictionary that states:
This entity is overwritten by the application during staging.
This message indicates that Guidewire PolicyCenter auto‐populates a table or column's staging table equivalent. Do
not attempt to populate the table yourself as the loader import process overwrites the staging table during import.
See also the description of the overwrittenInStagingTable attribute in “<entity> elements and related data object
types” on page 183.
Object attributes
An object in the PolicyCenter data model can have a number of special attributes assigned to it. These attributes
describe the object (or entity) further. You use the Data Dictionary to see what these are. For example, the Policy
entity has the attributes Editable, Exportable, Extendable, Final, Keyed, Loadable, Sourceable, and Versionable.
The following list describes the possible attributes:
Attribute Description
Abstract The entity is a supertype. However, all instances of it must be one of its subtypes. That is, you cannot instantiate
the supertype entity itself. An abstract entity is appropriate if the supertype serves only to collect logic or common
fields. The abstract entity is appropriate because, in this case, it is not expedient for the supertype to exist on its
own.
Editable The related database table contains rows that you can edit. An Editable table manages additional fields that track
the immediate status of an entity in the table. For example, the table tracks who created the entity, the creation
time, who last modified the entity, and the modification time.
Exportable Unused.
Extendable It is possible to extend the entity with additional custom fields added to it.
Final It is not possible to subtype this entity. However, you can extend the entity by adding fields to it.
Keyed The entity has a related database table that has a primary key. Each row in a Keyed table has an integer primary
key named ID. PolicyCenter manages these IDs internally, and the application ensures that no two rows in a keyed
table have the same ID. You can also associate an external unique identifier with each row in a table.
Loadable It is possible to load the entity through the use of staging tables.
Sourceable The entity links to an external source. Each row in a table for a Sourceable entity has additional fields to identify
the external application and to store the ID of the Sourceable entity in the external application.
Supertype The entity has a single table that represents multiple types of entities called subtypes. Each subtype shares appli‐
cation logic and a majority of its fields. Each subtype can also define fields that are particular to it.
Temporary The entity is a temporary entity created as part of an upgrade or staging table loading. PolicyCenter deletes the
entity after the operation is complete.
Versionable The entity has a version number that increases every time the entity changes. The PolicyCenter cache uses the
version number to determine if updates have been made to an entity.
To view the definition of a particular attribute, click the small question mark (?) by the attribute name in the attribute
list in the Guidewire Data Dictionary.
Property attributes
A property in the PolicyCenter data model can have a number of special attributes assigned to it. These attributes
describe the property further. You use the Data Dictionary to see what these are. For example, the Policy entity has
a property named Account. The attributes of this property are exportable, non-null, and writable.
The following list describes the possible attributes:
Attribute Description
database column: [name] The corresponding database column for the property has a name of [name]. This attribute is
present if [name] is a name other than the name of the property.
default: [value] This attribute is often present for a property that is associated with a column or a typekey. When
the attribute is present, [value] represents the default value for the property.
exportable Unused.
export as id Unused.
Attribute Description
loadable The property is loadable by way of the staging tables.
localized The property contains a <localization> subelement. This subelement causes a localization
table to be created during the next database upgrade. A localization table stores localized values
for a column for every language other than the default application language. See Globalization
Guide.
non-null The property cannot contain null values.
overwritten on load The property contains an overwrittenInStagingTable attribute with a value of true.
PolicyCenter uses the property and a corresponding staging table during the load of staging table
data to operational tables. When the overwrittenInStagingTable attribute has a value of true,
the loader import process overwrites the staging table corresponding the property. See “Staging
tables” on page 178 for more information.
triggers validation The property contains a triggersValidation attribute with a value of true. When this scenario
exists and an array, a foreign key, or a one‐to‐one entity on the property changes, PolicyCenter
initiates validation on the property. See “<array>” on page 199, “<foreignkey>” on page 211,
and “<onetoone>” on page 217 for more information about the effects of the
triggersValidation attribute when arrays, foreign keys, and one‐to‐one entities change.
To view the definition of a particular attribute, click the small question mark (?) by the attribute name in the attribute
list in the Guidewire Data Dictionary.
Property tags
A property in the PolicyCenter data model can have a number of tags assigned to it. These tags further describe the
property.
You use the Data Dictionary to see what these tags are. For example, the Data Dictionary indicates whether the
PersonalData obfuscation tag is set on the various fields that use the tag as well as the tag value. One such value
for the PersonalData tag is ObfuscateDefault.
Entity subtypes
If you look at Contact in the Guidewire Data Dictionary, for example, you see that data dictionary lists a number of
subtypes. For certain PolicyCenter objects, you can think of the object in several different ways:
• As a generic object. That is, all contacts are similar in many ways.
• As a specific version or subtype of that object. For example, you would want to capture and display different
information about companies than about people.
PolicyCenter creates Contact object subtypes by having a base set of shared fields common to all contacts and then
extra fields that exist only for the subtype.
PolicyCenter also looks at the subtype as it decides which fields to show in the PolicyCenter interface. You can
check which subtype a contact is by looking at its subtype field (for example, in a Gosu rule or class).
Type Description
array Represents a one‐to‐many relationship. For example, consider the relationship between a contact and a set of
addresses. There is no actual column in the database table that maps to the array. PolicyCenter stores this infor‐
mation in the metadata.
column As the name specifies, it indicates a column in the database. Inside a column field, you can add tag subtypes to
point out additional information about the field. The Data Dictionary displays such tags and their values.
foreign key References a keyable entity. For example, Policy has a foreign key (AccountID) to the related account on the
policy, found in the Account entity.
typekey Represents a discrete value picked from a particular list, called a typelist.
virtual prop- Indicates a derived property. PolicyCenter does not store virtual properties in the PolicyCenter physical database.
erty
Note: Inside any field of the data model aside from virtual properties, you can add tags and optional
corresponding values to point out additional information about the field. The Data Dictionary displays
such tags and values.
Examples
The following examples illustrate some of the various ways that Guidewire applications determine a virtual
property. The following examples use Guidewire ClaimCenter for illustration.
Virtual property based on a foreign key
[Link] is a virtual property that pulls its value from the cc_claimtext table, which
stores [Link] = BenefitsDecisionReason. It returns a mediumtext value. The other
fields in cc_claimtext and cc_exposuretext work in a similar fashion.
Virtual property based on an associated role
[Link] is a virtual property that retrieves the Contact associated with the Claim having the
ClaimContactRole of claimant. The virtual property returns a Person value.
Virtual property based on a typelist
[Link] is a virtual property that calculates its return value based on the value from
[Link]. It retrieves the telephone number stored in the field represented by that typekey. The
telephone number can be one of the following:
• [Link]
• [Link]
• [Link]
The virtual property returns a phone value.
The in PolicyCenter data model comprises the persistent data objects, called entities, that PolicyCenter manages in
the application database.
Related concepts
Related references
Entities An entity defines a set of fields for information. You can add the following kinds of fields to an entity:
• Column
• Type key
• Array
• Foreign key
• Edge foreign key
Typelists A typelist defines a set of code/value pairs, called typecodes, that you can specify as the allowable values for the
type key fields of entities. Several levels of restriction control what you can modify in typelists:
• Internal typelists – You cannot modify internal typelists because the application depends upon them for internal
application logic.
• Extendable typelists – You can modify this kind of typelist according to its schema definition.
• Custom typelists – You can also create custom typelists for use on new fields on existing entities or for use with
new entities.
Guidewire PolicyCenter loads the metadata of the data model on start-up. The loaded metadata instantiates the data
model as a collection of tables in the application database. Also, the loaded metadata injects Java and Gosu classes
in the application server to provide a programmatic interface to the entities and typelists in the database.
The PolicyCenter data model 169
Guidewire PolicyCenter 9.0.9 Configuration Guide
WARNING Do not attempt to modify any files other than those in the PolicyCenter/modules/
configuration directory. Any attempt to modify files outside of this directory can prevent the
PolicyCenter application from starting.
However, suppose that you want to reference a field on an entity that relates to the account, such as a policy
expiration date. You must first describe the path from the account to the policy, then describe the path from the
policy to the policy expiration date:
[Link]
Related concepts
“The PolicyCenter archive domain graph” on page 325
WARNING Do not modify any of the base data entity definition files (those in the PolicyCenter/
modules/configuration/config/metadata directory) by editing them directly. You can view
these files in read-only mode in Guidewire Studio™ in the configuration →config→Metadata folder.
To better understand the syntax of entity metadata, it is sometimes helpful to look at the PolicyCenter data model
and its metadata definition files. PolicyCenter uses separate metadata definition files for entity declarations and
extensions to them.
The base metadata files are available in Studio in the following location: configuration→config→Metadata
The extension metadata files are available in Studio in the following location: configuration→config→Extensions
The file extensions of metadata definition files distinguish their type, purpose, and contents.
.dti Data Type Info A single data type definition. “Data types” on page 283
.eti Entity Type In‐ A single Guidewire or custom entity declaration. The “XML root elements and related
formation name of the file corresponds to the name of the enti‐ base PolicyCenter data object
ty being declared. types” on page 179
.eix Entity Internal A single Guidewire entity extension. The name of the Internal defintion; see .etx
eXtension file corresponds to the name of the Guidewire entity
being extended.
.etx Entity Type eX‐ A single Guidewire or custom entity extension. The “<extension> elements and relat‐
tension name of the file corresponds to the name of the enti‐ ed data object types” on page 189
ty being extended. “<viewEntityExtension> elements
and related data object types” on
page 197
.tti Typelist Type In‐ A single Guidewire or custom typelist declaration. “Working with typelists” on
fo The name of the file corresponds to the name of the page 303
typelist being declared.
.tix Typelist Internal A single Guidewire typelist extension. The name of “Working with typelists” on
eXtension the file corresponds to the name of the Guidewire page 303
typelist being extended.
.ttx Typelist Type eX‐ A single Guidewire or custom typelist extension. The “Working with typelists” on
tension name of the file corresponds to the name of the page 303
typelist being extended.
The type of a metadata definition file determines what you can store and whether you can modify its contents.
At runtime, PolicyCenter merges the .eti and .eix versions of the Address definition file to create a complete
Address entity type.
To extend the PolicyCenter Activity entity, create the following extension file through Guidewire Studio.
WARNING Use only Guidewire Studio to create data model definition files. Use of Studio assures
that the files reside in the correct location.
WARNING If the server is operating in either production or test mode, Guidewire strictly requires
that you increment the version number whenever you make changes to the data model before you
restart the application server. Otherwise, unpredictable results can occur. Use of the
[Link] file in a development environment is optional. However, as a general
best practice, Guidewire recommends that you always increment the version number in
[Link] after you make changes to the product model.
Note: Guidewire strongly recommends that you verify your entity definitions at the time that you
create them. To do so, right-click the entity in the Project window, and then click Validate. The
verification process highlights any issues with a data model definition, enabling you to correct any
issues.
Result
Studio opens the file in the appropriate editor.
Result
Studio displays the name of your new file in the Extensions→entity folder in Studio, and it stores the new file in the
file system at the following location.
configuration/config/extensions/entity
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→Metadata, and then expand
Entity.
2. Right-click the entity that you want to extend, and then click New→Entity Extension.
The file that you want to extend must have the .eti extension.
3. In the Entity Extension dialog, Studio displays the name and location of the extension file it will create. Click
OK.
174 chapter 15: The PolicyCenter data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
Result
Studio displays the name of your new file in the Extensions→Entity folder and stores the new file at the following
location:
configuration/config/extensions/entity
WARNING Do not attempt to modify [Link]. You can invalidate your PolicyCenter
installation and prevent it from starting thereafter.
At application server start up, PolicyCenter loads the XML definitions of the data entities into the application
database.
Notice that for the base configuration Activity object, PolicyCenter sets the type attribute to retireable. The
type attribute that determines how PolicyCenter manages the data entity in the PolicyCenter database. For example:
• If a data entity has a type value of versionable, PolicyCenter stores instances of the entity in the database with
a specific ID and version number.
• If a data entity has a type value of retireable, PolicyCenter stores instances of the entity in the database
forever. However, you can retire, or hide, specific instances so that PolicyCenter does not display them in the
interface.
The PolicyCenter data model 175
Guidewire PolicyCenter 9.0.9 Configuration Guide
IMPORTANT For each data entity in the PolicyCenter data model and for each entity type that you
declare, PolicyCenter automatically generates a field named ID that is of data type key. An ID field is
the internally managed primary key for the object. Do not attempt to create entity fields of type key.
The key type is for Guidewire internal use only. Guidewire also reserves the exclusive use of the
following additional data types: foreignkey, typekey, and typelistkey.
The following table lists the possible values for the entity type attribute. Use only those type attributes marked for
general use to create or extend an data entity. Do not attempt to create or extend an entity with a type attribute
marked for internal-use.
pc_ Entity table – one for each entity in the base configuration
pcx_ Extension table – one for each custom extension added to the extensions folder in Studio
Note: It is possible to create non-persistent entities. These are entities or objects that you cannot save
to the database. Guidewire discourages the use of non-persistent entities in favor of Plain Old Gosu
Objects (POGOs), instead. See “<nonPersistentEntity> elements and related data object types” on
page 191 for more information.
Besides entity tables, PolicyCenter creates the following types of tables in the database:
Shadow tables
A shadow table stores a copy of data from a main table for testing purposes. Every entity table potentially has a
corresponding shadow table. Shadow tables in the database have one of the following prefixes:
Shadow tables provide a way to quickly save and restore test data. All GUnit tests, including those that you write
yourself, use shadow tables automatically. You cannot prevent GUnit tests from using shadow tables. GUnit tests use
shadow tables according to the following process:
1. GUnit copies data from the main application tables to the shadow tables to create a backup of your test data.
2. GUnit runs your tests.
3. GUnit copies data backed up data in shadow tables to the main tables to restore a fresh copy of your test data
for subsequent tests.
To start a test server, set its [Link] system property to true either explicitly or programmatically.
In addition, set the server environment to one that uses your test database. Upon server startup, if shadow tables do
not already exist, PolicyCenter drops the database, recreates it, and then creates the shadow tables. PolicyCenter
creates shadow tables only in an empty database.
Staging tables
PolicyCenter generates a staging table for any entity that is marked with an attribute of loadable="true". The
loadable attribute is true by default in the base configuration. A staging table largely parallels the main entity table
except that:
• PolicyCenter replaces foreign keys by PublicID objects of type String.
• PolicyCenter replaces typecode fields by typekey objects of type String.
After you load data into these staging tables, you run the command line tool table_import to bulk load the staging
table data into the main application database tables. See the System Administration Guide for information on how to
use this command.
In the application database, you can you identify a staging table by the following prefix pcst_.
Type Description
all Exposed in Gosu, wherever Gosu is valid, for example, in rules and PCF files
doesNotExist Not exposed in Gosu
If you do not specify a scriptability annotation, then PolicyCenter defaults to a scriptability of all.
IMPORTANT There are subtle differences in how PolicyCenter treats entities and fields marked as
doesNotExist and hidden. However, these differences relate to internal PolicyCenter code. For your
purpose, these two annotations behave in an identical manner, meaning any entity or field that uses
one of these annotations does not show in Gosu code. In general, there is no need for you to use either
one of these annotations.
in Gosu. Within the PolicyCenter data model, you can set the following scriptability annotation on <entity>
objects:
<entity> .eti metadata, “<entity> elements and related data object types” on page 183
extensions
<extension> .etx extensions “<extension> elements and related data object types” on page 189
<nonPersistentEntity> .eti metadata, “<nonPersistentEntity> elements and related data object types” on
extensions page 191
<subtype> .eti metadata, “<subtype> elements and related data object types” on page 192
extensions
<viewEntity> .eti metadata “<viewEntity> elements and related data object types” on page 195
<viewEntityExtension> .etx extensions “<viewEntityExtension> elements and related data object types” on
page 197
IMPORTANT There are additional data objects that Guidewire uses for internal purposes. Do not
attempt to create or extend a data entity that is not listed in the previous table.
Related concepts
“<delegate> elements and related data object types” on page 180
Related references
“<entity> elements and related data object types” on page 183
“<extension> elements and related data object types” on page 189
“<nonPersistentEntity> elements and related data object types” on page 191
“<subtype> elements and related data object types” on page 192
“<viewEntity> elements and related data object types” on page 195
“<viewEntityExtension> elements and related data object types” on page 197
Attributes of <delegate>
The <delegate> element contains the following attributes.
Subelements of <delegate>
The <delegate> element contains the following subelements.
180 chapter 15: The PolicyCenter data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
For example, in the base configuration, the Group entity implements the Validatable delegate by using the
following:
<entity entity="Group" ... >
<implementsEntity name="Validatable"/>
...
</entity>
It is possible for an entity to implement multiple delegates, just as a Gosu or Java class can implement multiple
interfaces.
See also
• “<implementsEntity>” on page 214
• “Creating a new delegate object” on page 247.
• For a discussion of working with delegates in Gosu classes, see the Gosu Reference Guide.
For example, in the base configuration, the Group entity also implements the Retireable delegate by setting the
entity type attribute to retireable.
<entity entity="Group" ... type="retireable">
<implementsEntity name="Validatable"/>
...
</entity>
Also, it is not possible to explicitly implement the EventAware delegate. PolicyCenter automatically adds this
delegate to any entity that contains an <events> element.
WARNING Do not change or remove the archiving delegates on Guidewire entities in the base
configuration. Otherwise, the server may not start due to errors in the archiving domain graph.
however, push all methods and behaviors that can possibly be polymorphic into an interface, rather than the Java
superclass. You can then require that all implementers of the delegate implement that interface (the
<implementsEntity>) through the use of the delegate requires attribute. This delegate usage permits the use of
polymorphism and enables delegate implementations to share common implementations on a common superclass.
Attributes of <entity>
The <entity> element contains the following attributes.
final If true, you cannot subtype the entity. If false, you can de‐ true
fine subtypes using this entity as the supertype.
IMPORTANT If you define this incorrectly, PolicyCenter gener‐
ates an error message upon resource verification and the ap‐
plication server refuses to start. PolicyCenter generates this
verification error:
• If you attempt to subtype an entity that is marked as
final that exists in the metadata folder in Guidewire
Studio™.
• If you attempt to subtype an entity that is marked as
final that exists in the extensions folder in Studio.
loadable If true, you can load the entity through staging tables. true
readOnly Optional. The typical use of read‐only entities is for tables of None
reference data that you import as administrative data and
then never touch again.
You can add a read‐only entity only to a bundle that has the
allowReadOnlyBeanChanges() flag set on its commit options.
That means that inserting, modifying or deleting a read‐only
entity requires one of these special bundles.
You cannot set bundle commit options from Gosu. Therefore,
you cannot modify these entities from Gosu, unless some
Gosu‐accessible interface gives you a special bundle. The ad‐
ministrative XML import tools use such a special bundle. How‐
ever, Guidewire uses these tools internally only in the
PolicyCenter product model.
setterScriptability See “Data objects and scriptability” on page 178. None
subpackage Subpackage to which the class corresponding to this entity be‐ None
longs.
table Required. The name of the database table in which None
PolicyCenter stores the data for this entity. PolicyCenter auto‐
matically prefixes table names with pc_ for base entities and
pcx_ for extension entities.
Guidewire recommends the following table naming conven‐
tions:
• Do not begin the table name with any product‐specific
extension.
• Use only unaccented, lowercase Roman letters and the
underscore character.
• Prefix the table name with test_ if you use the table
solely for testing.
• Because PolicyCenter automatically prefixes extension
table names with pcx_, if you run into limits on the length
of the table name, you can consider removing the _Ext
suffix from the table name.
Guidewire enforces the following restrictions on the maxi‐
mum allowable length of the table name:
• loadable="true" — maximum of 25 characters
• loadable="false" — maximum of 26 characters
temporary Internal. If true, then this table is a temporary table that false
PolicyCenter uses only during installation or upgrade.
PolicyCenter deletes all temporary tables after it completes
the installation or the upgrade.
type Required. See “Overview of data entities” on page 171 for a None
discussion of data entity types.
typelistTableName The typelist that PolicyCenter generates when you create a None
non‐final entity has an associated database table. If you do
not specify a value for the typelistTableName attribute, then
PolicyCenter uses the name of the entity as the table name for
the subtype typelist.
IMPORTANT Do not modify internal entity attributes. This instruction applies even in the case of
custom entities.
IMPORTANT
If you create a non-final <entity> element, then PolicyCenter automatically creates a typelist with the
same name as the resulting entity. The typelist allows you to keep track of the subtypes of that entity.
PolicyCenter creates this typelist whether or not a <subtype> element exists that refers to the non-
final <entity> element.
Suppose that you change a final <entity> element to a non-final <entity> element. Suppose further
that you already have a typelist with the same name as the resulting entity. In this case, you must
change the name of the preexisting typelist beforehand. Otherwise, the automatic typelist generation
cannot proceed, and you will receive an error.
Subelements of <entity>
The <entity> element contains the following subelements.
IMPORTANT Do not modify internal entity subelements even in the case of custom entities.
sourceSubtype Optional name of the particular subtype on which the source column is None
defined. If not specified, then PolicyCenter assumes that the source
column to exist on the entity referred to by the source object. However,
you must specify this value if the sourceColumn is on a subtype of the
entity referred to by sourceForeignKey.
For example, suppose that you set the following attribute definitions:
• searchColumn – MyDenormColumn
• sourceForeignKey – Source
• sourceColumn – SourceField
This declaration says:
Copy the value of SourceField on the object pointed to by the foreign key named Source into the field named
MyDenormColumn. PolicyCenter automatically populates the column as part of bundle commit, staging table load,
and database upgrade.
If you need to denormalize a field on a subtype of the entity referred to by the foreign key, then you can specify the
optional sourceSubtype attribute.
As with linguistic denormalization columns, you cannot access the value of these search denormalization columns in
memory. The value is only available in the database. Thus, you can only access the value through a database query.
It is possible to make a query against a search denormalization column that is a denormalization of a linguistic
denormalization column. In that case, the query generator knows not to wrap the column values in the linguistic
denormalization function. This preserves the optimization that linguistic denormalization columns provide.
It is important to understand that search denormalization columns specify one column only — the column that you
specify with the sourceColumn attribute. So, if you want to denormalize both a column and its linguistic
denormalization, then you need two separate search denormalization columns. However, in this case, you typically
would just want to denormalize the linguistic denormalization column. You would only want to denormalize the
source column if you wanted to support case-sensitive searches on it.
Search denormalization columns can only specify <column> or <typekey> fields.
See also
• For information on how to extend the base data objects, see “Modifying the base data model” on page 237.
Attributes of <extension>
The <extension> element contains the following attributes.
The PolicyCenter data model 189
Guidewire PolicyCenter 9.0.9 Configuration Guide
Subelements of <extension>
The <extension> element contains the following subelements.
Attributes of <nonPersistentEntity>
The <nonPersistentEntity> element contains the following attributes.
final If true, you cannot subtype the entity. If false, you can define subtypes using this true
entity as the supertype.
platform Internal. Do not use. The only real effect is to change the location in which the table false
appears in a data distribution report.
priority The priority of the corresponding subtype key. This value is meaningful only for enti‐ -1
ties participating in a subtype hierarchy, which can be either the <subtype> entities
or the root <entity>.
typelistTableName If you create a non‐final entity, then PolicyCenter automatically creates a typelist to None
keep track of the subtypes of that entity. That typelist has an associated database ta‐
ble. If you do not specify a value for this attribute, then PolicyCenter uses the name
of the entity as the table name for the subtype typelist.
However, PolicyCenter places a restriction of 25 characters on the length of the data‐
base table name. You use this attribute to specify the database table name for the
typelist if an entity name is too long to become a valid typelist table name.
It is not valid to use this attribute with entity types marked as final.
Subelements of <nonPersistentEntity>
The <nonPersistentEntity> element contains the following subelements.
—even the ones defined as non-nullable. However, if you define a field as non-nullable, then the PolicyCenter
metadata service enforces this for all data operations.
You can only define a subtype for any entity that has its final attribute set to false. PolicyCenter automatically
creates a Subtype field for non-final entities.
Attributes of <subtype>
entity Required.
final If true, you cannot subtype the entity. If false, you can define subtypes using this entity as false
the supertype.
platform Internal. Do not use. The only real effect is to change the location in which the table ap‐ false
pears in a data distribution report.
priority The priority of the corresponding subtype key. This value is meaningful only for entities -1
participating in a subtype hierarchy, which can be either the <subtype> entities or the root
<entity>.
readOnly Optional. The typical use of read‐only entities is for tables of reference data that you import None
as administrative data and then never touch again.
You can add a read‐only entity only to a bundle that has the allowReadOnlyBeanChanges()
flag set on its commit options. That means that inserting, modifying or deleting a read‐only
entity requires one of these special bundles.
You cannot set bundle commit options from Gosu. Therefore, you cannot modify these en‐
tities from Gosu, unless some Gosu‐accessible interface gives you a special bundle. The ad‐
ministrative XML import tools use such a special bundle. However, Guidewire uses these
tools internally only in the PolicyCenter product model.
setterScriptability See “Data objects and scriptability” on page 178 for information. None
supertype Required.
Subelements of <subtype>
monetaryamount Handles monetary amounts. The <monetaryamount> subelement is a compound data type that
stores its values in two separate database columns: a <money> column type, and a typekey to
the Currency typelist.
onetoone See “<onetoone>” on page 217.
searchColumn See “<entity> elements and related data object types” on page 183.
searchTypekey Defines a search denormalization typekey in the database. The denormalization copies the val‐
ue of a column on another table into a typekey field on the denormalizing table. You must link
the tables through a foreign key. The purpose of this denormalization is to avoid costly joins in
performance critical searches.
tableAugmenter Internal.
typekey See “<typekey>” on page 220.
validatetypekeyinset Internal.
validatetypekeynotinset Internal.
Notice that while InspectorExt is subtype of Person, Person, itself, is a subtype of Contact. PolicyCenter
automatically adds the new InspectorExt type to the Contact typelist. This is true, even though PolicyCenter
marks the Contact typelist as final.
To see this change:
• In the PolicyCenter Data Dictionary, you must restart the application server.
• In the Contact typelist in Studio, you must restart Studio.
See also
Attributes of <viewEntity>
priority For supertypes and subtypes, the priority of the corresponding subtype key. -1
Subelements of <viewEntity>
The <viewEntity> elements contain the following subelements:
The Data Dictionary uses the fulldescription subelement. The following example illustrates how to use this
element:
<fulldescription>
<![CDATA[<p>Aggregates the information needed to display one activity row (base entity for all other
activity views).</p>]]>
</fulldescription>
The other subelements all require both a name and path attribute. The following code illustrates this:
Specify the path value relative to the primaryEntity on which you base the view.
The computedcolumn takes a required expression attribute and an additional, optional function attribute. The
following is an example of a computedcolumn:
<computedcolumn name="Amount" expression="${1}" paths="[Link]" function="SUM"/>
The expression for this column can take multiple column values ${column_num} passed from the PolicyCenter
interface. For example, a valid expression is ${1} - ${2}, where ${1} represents the first column and ${2}
represents the second column. The function value must be an SQL function that you can apply to this expression.
The following are legal values:
• SUM
• AVG
• COUNT
• MIN
• MAX
Note: If the SQL function aggregates data, PolicyCenter applies an SQL group automatically.
Attributes of <viewEntityExtension>
Subelements of <viewEntityExtension>
Important caution
Guidewire strongly recommends that you not create a view entity extension—viewEntityExtension—that causes
traversals into revisioned (effdated) data. Doing so has the possibility of returning duplicate rows if any
revisioning in the traversal path splits an entity.
Instead, try one of the following:
• Denormalize the desired data onto a non-effdated entity.
• Add domain methods to the implementation of the View entity.
• <dbcheckbuilder>
• <jointableconsistencycheck>
• <tableAugmenter>
• <validatetypekeyinset>
• <validatetypekeynotinset>
<array>
An array defines a set of additional entities of the same type to associate with the main entity. For example, a
Policy entity includes an array of Document entities.
Attributes of <array>
The <array> element contains the following attributes:
deprecated If true, then PolicyCenter marks the item as deprecated in the Data Dictionary and places a false
Deprecated annotation on it in the Guidewire Studio API Reference.
If you deprecate an item, use the description to explain why.
See The deprecated attribute for more information.
desc A description of the purpose and use of the array. None
exportable Unused.
getterScriptability See “Data objects and scriptability” on page 178 for information. all
ignoreForEvents This attribute has complex, non‐intuitive interactions with data entity relationships. See false
“Interactions of ignoreForEvents attribute with data entity relationships” on page 221 for
information on how to use and configure it.
name Required. The name of the property corresponding to this array. None
owner If true, then the entity containing the array owns the objects in the array. The owner attrib‐ false
ute has the following behavior:
• If true (an owned array), then the method isFieldChanged returns true if a child
element of the array has changed. If false (a non-owned array), then the method
isFieldChanged returns false if a child element of the array has changed. In either
case, isFieldChanged returns true if any child elements are added to or removed from
the array, regardless of the value of the owner attribute.
• If true and you delete the owning object, PolicyCenter deletes (or retires) the array
items as well. In this case, PolicyCenter deletes the array items notwithstanding a value
of false for the cascadeDelete attribute. However, see the important note following
this description.
• If true, then if you update the contents of the array, then PolicyCenter considers the
owner as updated as well. This behavior can result in side effects. For example,
notwithstanding a value of false for the triggersValidation attribute, the behavior
can trigger validation.
• If true, then child array elements are copied along with the parent when the parent
copied, such as with the copy method.
• If true, the effects of the owner attribute override the effects of false values for the
cascadeDelete and triggersValidation attributes.
IMPORTANT Whether the owner attribute is true or false, if the entity containing the
array is not retireable, deleting an instance of that entity also deletes the objects inside
the array. This behavior occurs even if the array objects themselves are retireable in order
to preserve the array objects' referential integrity. For this reason, Guidewire recommends
that you avoid placing an array of retireable objects inside an entity that is not retireable.
Note: The owner attribute must have a value of true if the corresponding array permits
concurrent changes to its values. PolicyCenter applies an optimistic locking approach for
concurrent changes to array values. A true value for the owner attribute results in
PolicyCenter notifying the array of concurrent changes or additions to the array children.
The notification is in the form of a concurrent data change exception (CDCE) in the user
interface.
requiredmatch One of the following values None
• all – There must be at least one matching row in the array for every row from this table.
For example, there must be at least one check payee for every check.
• none – There is no requirement for matching rows.
• nonretired – There must be at least one matching row for every non‐retired row from
this table.
setterScriptability See “Data objects and scriptability” on page 178 for information. all
triggersValidation Whether changes to the entity pointed to by this array trigger validation. Changes to the false
array that trigger validation include:
• The addition of an object to the array
• The removal of an object from the array
• The modification of an object in the array
See the discussion on this attribute that follows this table.
If set to true, the triggersValidation attribute can trigger additional PolicyCenter processing. Exactly what
happens depends on several different factors:
• If the parent entity for the array is validatable, then any modification to the array triggers the execution of the
Preupdate and Validation rules on the parent entity. Validation occurs whenever PolicyCenter attempts to commit
a bundle that contains the parent entity. For an entity to be validatable, it must implement the Validatable
delegate.
• If the parent entity has preupdate rules, but no validation rules, then PolicyCenter executes the preupdate rules on
the commit bundle. This is the case only if configuration parameter UseOldStylePreUpdate is set to true,
which is the default. If UseOldStylePreUpdate is set to false, PolicyCenter invokes the IPreUpdateHandler
plugin on the commit bundle instead. Then, PolicyCenter executes the logic defined in the plugin on the commit
bundle.
• If the parent entity has validation rules, but no preupdate rules, then PolicyCenter executes the validation rules on
the commit bundle.
• If the parent entity has neither preupdate nor validation rules then the following occurs:
1. In the case of UseOldStylePreUpdate=true, PolicyCenter does nothing.
2. In the case of UseOldStylePreUpdate=false, PolicyCenter calls the IPreUpdateHandler plugin on the
commit bundle.
Subelements of <array>
The <array> element contains the following subelements:
<column>
The <column> element defines a single-value field in the entity.
Note: For a discussion of <column-override>, see “Working with attribute and element overrides” on
page 243 for details.
Attributes of <column>
The <column> element contains the following attributes:
autoincrement The name of a database sequence used as the source of values for the None
column. This attribute is applicable only for integer columns, and only
for implementations where PolicyCenter relies on the database for the
sequence. Do not use the same sequence in more than one
autoincrement column. There can be at most one autoincrement col‐
umn per table.
columnName Optional. If specified, PolicyCenter uses this value as the column name None
of the corresponding database column. If you do not specify a
columnName value, then PolicyCenter uses the value of the name attrib‐
ute for the database column name.
The columnName attribute must be no more than 30 characters in
length. It allows only unaccented Roman letters, numbers, and the un‐
derscore character. The first character of the columnName attribute
must be a letter. Although the underscore character is allowable here,
Guidewire discourages its use.
ignoreforevents If you change (or add, or remove) an entity X that does not generate false
events, then PolicyCenter searches for all event‐generating entity in‐
stances that specify X. If PolicyCenter finds any of these event‐
generating entity instances, it generates Changed events for those enti‐
ty instances.
To determine what entities reference a non‐event‐generating entity,
PolicyCenter examines the foreign keys and arrays that point to the en‐
tity. However, if you set ignoreForEvents to true on an entity that ref‐
erences the non‐event‐generating entity, then PolicyCenter ignores
that link as it determines what entities specify another entity.
• At the entity level, the ignoreForEvents attribute means changes
to (or addition or removal of) this entity do not cause Changed
events to fire for any other entity.
• At the column level, the ignoreForEvents attribute means changes
to this column do not cause the application to generate events.
loadable If true, you can load the field through staging tables. A staging table true
can contain a column mapping to the field.
loadedByCallback Internal. If true, then the loading code does not use a default value or false
report a warning if the column is nullable without a default.
name Required. The name of the column on the table and the field, or prop‐ None
erty, on the entity. PolicyCenter uses this value as the column name
unless you specify a columnName attribute. Use this name to access the
column in data views, rules, and other areas within PolicyCenter.
soapnullok Unused.
supportsLinguisticSearch Applies only to columns of varchar‐based data types. false
• If true, case insensitive searches can be performed on the
denormalized version of the column.
• If false, searches are binary and cannot be performed on a
denormalized version of the column.
You cannot use this attribute with an encrypted column.
The setting of this attribute does not affect locale or language used in
searches.
See also
• “Including data from subentities” on page 150
• Globalization Guide
type Required. Data type of the column, or field. In the base configuration, None
Guidewire defines a number of data types and stores their metadata
definition files (*.dti) in under configuration→config→datatypes.
Each metadata definition file name is the name of a specific data type.
You use one of these data types as the type attribute on the <column>
element. Thus, the list of valid values for the type attribute is the same
as the set of .dti files in the application datatypes folders.
Each metadata definition also defines the value type for that data type.
The value type determines how PolicyCenter treats that value in mem‐
ory.
The name of the data type is not necessarily the same as the name of
its value type. For example, for the bit data type, the name of the data
type is bit and the corresponding value type is [Link].
Similarly, the data type varchar has a value type of [Link].
The datetime data type is a special case. PolicyCenter persists this data
type in the application database using the database data type
TIMESTAMP. This corresponds to the value type [Link]. In
other words:
• PolicyCenter represents a column whose type is datetime in
memory as instances of [Link].
• PolicyCenter stores this type of value in the database as TIMESTAMP.
Subelements of <column>
The <column> element contains the following subelements:
<columnParam> subelement
You use the <columnParam> element to set parameters that a column type requires. The type attribute of a column
determines which parameters you can set or modify by using the <columnParam> subelement. You can determine the
list of parameters that a column type supports by looking up the type definition in its .dti file.
For example, if you have a mediumtext column, you can determine the valid parameters for that column by
examining file [Link]. This file indicates that you can modify the following attributes of a mediumtext
column:
• encryption
• logicalSize
• trimwhitespace
• validator
Because you cannot modify the base configuration data type declaration files, you cannot see these files in
Guidewire Studio. To view these files, navigate to the directory modules/configuration/config/datatypes.
The following example, from [Link] in PolicyCenter, illustrates how to use this subelement to define certain
column parameters.
<?xml version="1.0"?>
<entity xmlns="[Link]
desc="An account is ..."
entity="Account"
...
table="account"
type="retireable">
...
<column desc="Business and Operations Description."
name="BusOpsDesc"
type="varchar">
<columnParam name="size" value="240"/>
</column>
...
</extension>
Parameter Description
countryProperty Name of a property on the owning entity that returns the country to use for localizing the data
format for this column.
createSpatialIndex Applies to columns with a spatial point data field. If the createSpatialIndex parameter has
the default value of true in a column of an extension or custom entity, PolicyCenter creates an
index for spatial point data. If the parameter has a value of false, PolicyCenter does not create
such an index. In this case, PolicyCenter avoids creating an index regardless of whether the pa‐
rameter is in a <columnParam> subelement of a <column> element or a <column-override>
element.
currencyProperty Name of a property on the owning entity that returns the currency for this column.
encryption Whether PolicyCenter stores this column in encrypted format. This only applies to text‐based
columns.
Guidewire allows indexes on encrypted columns, or fields. However, because Guidewire stores
encrypted fields as encrypted in the database, you must encrypt the input string and search for
an exact match to it.
exchangeRateProperty Name of a property on the owning entity that returns the exchange rate to use during currency
conversions.
extensionProperty The name of a property on the owning entity whose value contains the phone extension.
logicalSize The size of this field in the PolicyCenter interface. You can use this value for String columns
that do not have a maximum size in the database, such as CLOB objects. If you specify a value
for the size parameter, then the logicalSize value must be less than or equal to the value of
that parameter.
phonecountrycodeProperty The name of a property on the owning entity whose value contains the country with which to
validate and format values.
precision The precision of the field. Precision is the total number of digits in the number. The precision
parameter applies only if the data type of the field allows a precision attribute.
scale The scale of the field. Scale is the number of digits to the right of the decimal point. The scale
parameter applies only if the data type of the field allows a scale attribute.
secondaryAmountProperty Name of a property on the owning entity that returns the secondary amount related to this cur‐
rency amount column.
size Integer size value for columns of type TEXT and VARCHAR. This parameter specifies the maxi‐
mum number of characters, not bytes, that the column can hold.
WARNING The database upgrade utility automatically detects definitions that lengthen or short‐
en a column. For shortened columns, the utility assumes that you wrote a version check or oth‐
erwise verified that the change does not truncate existing column data. For both Oracle and
SQL Server, if shortening a column causes the truncation of data, the ALTER TABLE statement in
the database fails and the upgrade utility fails.
trimwhitespace Applies to text‐based data types. If true, then PolicyCenter automatically removes leading and
trailing white space from the data value.
validator The name of a ValidatorDef in [Link]. See “<ValidatorDef>” on page 298.
See also
• See “Overriding data type attributes” on page 244 for an example of using a nested <columnParam> subelement
within a <column-override> element to set the encryption attribute on a column.
<localization> subelement
For a discussion of the column <localization> element with examples on how to use it, see the Globalization
Guide.
Attributes of <localization>
<edgeForeignKey>
You use the <edgeForeignKey> element to define a reference to another entity, in a manner similar to the
“<foreignkey>” on page 211 element. However, you use an edge foreign key in place of a standard foreign key to
break a cycle of foreign keys in the data model. Guidewire defines this element in the data model metadata files as
the <edgeForeignKey> XML subelement.
In PolicyCenter, the associative table that implements an edge foreign key has two columns:
• OwnerID
• ForeignEntityID
If entity instance A has an edge foreign key to entity type B, PolicyCenter creates a row in the edge foreign key
table. The value in the row for OwnerID points to A and the value for ForeignEntityID points to B.
Every time you traverse, or dereference, the edge foreign key, PolicyCenter loads the join array.
• If the array is of size 0, then the value of the edgeForeignKey is null.
• If the array is of size 1, the PolicyCenter follows the ForeignEntityID on the row.
IMPORTANT When you change a foreign key to an edge foreign key, you must write an upgrade
trigger to populate the edge table for existing data. Otherwise, the associative edge table will remain
empty even upon a database upgrade. Moreover, when you reference the edge foreign key, you will
receive a null value.
See also
• “The PolicyCenter archive domain graph” on page 325
Attributes of <edgeForeignKey>
The <edgeForeignKey> element contains the following attributes.
208 chapter 15: The PolicyCenter data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
fkentity Required. The entity to which this foreign key points. None
getterScriptability See “Data objects and scriptability” on page 178 for information. all
ignoreforevents This attribute has complex, non‐intuitive interactions with data entity rela‐ false
tionships. See “Interactions of ignoreForEvents attribute with data entity rela‐
tionships” on page 221 for information on how to use and configure it.
importableagainstexistingobject If true and the entity is importable, or loadable, then the value in the staging true
table can be a reference to an existing object. This reference is the publicID
of a row in the source table for the referenced object.
loadable If true, then PolicyCenter creates a staging table for the edge table. false
loadedByCallback Internal. If true, then the loading code does not use a default value or report a false
warning if the column is nullable without a default.
name Required. Specifies the name of the property on the entity. None
nullok Whether the column can contain null values. This value is meaningless for true
edgeForeignKey objects.
overlapTable Whether the edge entity implements the OverlapTable delegate and is false
marked OverlapTable for archiving.
overwrittenInStagingTable Internal. If true and the edge table is loadable, the loader process auto‐ false
populates the staging table during import.
soapnullok Unused.
Subelements of <edgeForeignKey>
<edgeForeignKey> subelement Attributes Description
fulldescription None See “<fulldescription>” on page 214.
tag None See “<tag>” on page 219.
<events>
If the <events> element appears within an entity, that entity and its descendant entities raise events. The names of
the standard events are XXAdded, XXChanged, and XXRemoved, where XX is the name of the entity declaring the
<events> element. A subtype or descendant of an event-aware entity can override the names of the standard events
by declaring its own <events> element. The descendant can also add additional events.
If the <events> element does not appear in an entity or any of its ancestors, that entity does not raise any events.
Note: This element is not valid for a nonPersistentEntity.
Guidewire defines this element in the data model metadata files as the <events> XML subelement. There can be at
most one <events> element in an entity. However, you can specify additional events through the use of <event>
subelements. For example:
<events>
<event>
...
</events>
Note: PolicyCenter automatically adds the EventAware delegate to any entity that contains the
<events> element. This addition makes such an entity aware of events that it raises and that other
entities raise.
Attributes of <events>
Subelements of <events>
<foreignkey>
The <foreignkey> element defines a foreign key reference to another entity.
Attributes of <foreignkey>
createbackingindex If true, the database automatically creates a backing index on the foreign key. true
If set to false, the database does not create a backing index.
createhistogram Whether to create a histogram on the column during an update to the data‐ false
base statistics.
Note: It is possible to override this attribute on an existing column in an ex‐
tension (*.etx) file using the <column-override> element. You can use the
override to turn off an existing histogram or to create one that did not previ‐
ously exist.
This change does not take effect during an upgrade. The change occurs only if
you regenerate statistics for the affected table by using the Guidewire
maintenance_tools command.
See also
• “Working with attribute and element overrides” on page 243
• System Administration Guide
deprecated If true, then PolicyCenter marks the item as deprecated in the Data Diction‐ false
ary and places a Deprecated annotation on it in the Guidewire Studio API Ref-
erence.
If you deprecate an item, use the description to explain why.
For more information, see “Data entity subelements” on page 198.
ignoreforevents This attribute has complex, non‐intuitive interactions with data entity rela‐ false
tionships. See “Interactions of ignoreForEvents attribute with data entity rela‐
tionships” on page 221 for information on how to use and configure it.
importableagainstexistingobject If true and the entity is importable (loadable), then the value in the staging true
table can be a reference to an existing object. (This is the publicID of a row in
the source table for the referenced object.)
includeIdInIndex If true, then include the ID as the last column in the backing index for the for‐ false
eign key.
This is useful if the access pattern in one or more important queries is to join
to this table through the foreign key. You can then use the ID to probe into a
referencing table. The only columns that you need to access from the table
are this foreign key, and the retired and ID columns.
In that case, adding the ID column to the index creates a covering index and
eliminates the need to access the table.
loadable If true, you can load the field through staging tables. A staging table can con‐ true
tain a column for the public ID of the referenced entity.
loadedByCallback Internal. If true, then the loading code does not use a default value or report a false
warning if the column is nullable without a default.
name Required. Specifies the name of the property on the entity. None
nonEffDated Internal. This applies only to a foreign key that points to an effdated entity. If false
a foreign key points to an effdated entity and this attribute is true, then
PolicyCenter creates a real foreign key between the source and target entities.
nullok Whether the field can contain null values. true
overwrittenInStagingTable Internal. If true (and the table is loadable), it indicates that the loader process false
auto‐populates the staging table during import.
IMPORTANT If set to true, do not attempt to populate the table yourself be‐
cause the loader import process overwrites this table.
required Whether the foreign key is required to be non‐null upon initial construction of false
instances of the entity. See the Gosu Reference Guide.
setterScriptability See “Data objects and scriptability” on page 178 for information. all
soapnullok Unused.
triggersValidation Whether changes to the entity referred to by this foreign key trigger valida‐ false
tion.
Subelements of <foreignkey>
See also
• Application Guide
<fulldescription>
PolicyCenter uses the fulldescription subelement to populate the Data Dictionary. For example:
<fulldescription>
<![CDATA[<p>Aggregates the information needed to display one activity row
(base entity for all other activity views).</p>]]>
</fulldescription>
<implementsEntity>
The <implementsEntity> subelement specifies that an entity implements the specified delegate. Guidewire calls an
entity an implementor of a delegate if the entity specifies the delegate in a <implementsEntity> subelement.
IMPORTANT Do not change the delegate that a Guidewire base entity implements by creating an
extension entity that includes an “<implementsEntity>” on page 214 subelement. PolicyCenter
generates an error if you do.
If a delegate definition includes the optional requires attribute, then the implementor must provide an adapter
attribute on its <implementsEntity> subelement. The adapter attribute specifies the name of a Java or Gosu type
that implements the interface that the delegate definition specifies in its own requires attribute.
For example, the PolicyCenter base configuration defines a Cost delegate as follows:
<?xml version="1.0"?>
<delegate ... name="Cost" requires="[Link]">
...
</delegate>
The base configuration defines a BACost entity that includes an <implementsEntity> subelement, which specifies
delegate with name="Cost". Therefore, the BACost entity is an implementor of the Cost delegate.
<?xml version="1.0"?>
<entity ... entity="BACost" ... >
...
<implementsEntity name="Cost" adapter="[Link]" />
...
</entity>
The Cost delegate requires an implementation of the CostAdapter interface. So in its adapter attribute, the BACost
entity specifies a BACostAdapter class, which implements the CostAdapter interface that the Cost adapter specifies
in its requires attribute. The following diagram illustrates the relationship between the Cost delegate and the
BACostAdapter adapter class:
Cost CostAdapter
Delegate Interface
BACost BACostAdapter
Delegate Entity Interface
Implementor / Implementor
Indirect Interface
Implementor
Attributes of <implementsEntity>
The <implementsEntity> element contains the following attributes.
Subelements of <implementsEntity>
There are no subelements on the <implementsEntity> subelement.
<implementsInterface>
The <implementsInterface> subelement specifies that an entity implements the specified interface. This element
defines two attributes: an interface (iface) attribute and an implementation (impl) attribute.
For example, the PolicyCenter base configuration defines the BACost entity with the following
<implementsInterface> subelement:
<entity ... entity="BACost" ...>
...
<implementsInterface
iface="[Link]"
impl="[Link]"/>
</entity>
The BACostMethods interface has getter methods that any class that implements this interface must provide. The
getter methods are coverage, state, and vehicle. By including the <implementsInterface> subelement, the BACost
entity lets you use getter methods on instances of the BACost entity in Gosu code.
var cost : BACost
var cov = [Link]
var state = [Link]
var vehicle = [Link]
Attributes of <implementsInterface>
The <implementsInterface> element contains the following attributes.
iface Required. The name of the interface that this data object must implement.
impl The name of the class or subclass that implements the specified interface, if any. Valid
only when declared on abstract entities or delegates.
Subelements on <implementsInterface>
There are no subelements on the <implementsInterface> subelement.
<index>
The <index> element defines an index on the database table used to store the data for an entity. Guidewire defines
this element in the data model metadata files as the <index> XML subelement. This element contains a required
subelement, which is <indexcol>.
The <index> element instructs PolicyCenter to create an index on the physical database table. This index is in
addition to those indexes that PolicyCenter creates automatically.
An index improves the performance of a query search within the database. It consists of one or more fields that you
can use together in a single search. You can define multiple <index> elements within an entity, with each one
defining a separate index. If a field is already part of one index, you do not need to define a separate index
containing only that field.
For example, PolicyCenter frequently searches non-retired accounts for one with a particular account number.
Therefore, the Account entity defines an index containing both the Retired and AccountNumber fields. However,
another common search uses just AccountNumber. Since that field is already part of another index, a separate index
containing only AccountNumber is unnecessary.
A column used in an index cannot have a length of more than 1000 characters.
IMPORTANT In general, the use of a database index has the possibility of reducing update
performance. Guidewire recommends that you add a database index with caution. In particular, do not
attempt to add an index on a column of type CLOB or BLOB. If you do so, PolicyCenter generates an
error message upon resource verification.
Attributes of <index>
The <index> element contains the following attributes.
unique Whether the values of the index are unique for each row. false
Note:
When you set the unique attribute to true for an index on a subtype entity, PolicyCenter
generally sets the attribute to false upon index generation. In this case, the database
does not define the index as unique. Rather, PolicyCenter uses an integrity check to en‐
sure that you do not add duplicates through the staging tables and a consistency check to
highlight past duplicates.
Exceptional cases arise if the unique attribute is true and either the index consists of on‐
ly a single column or the index has an ID column. In these cases, the database defines the
index as unique.
Subelements of <index>
The <index> element contains the following subelements.
<onetoone>
The <onetoone> element defines a single-valued association to another entity that has a one-to-one cardinality.
Guidewire defines this element in the data model metadata files as the <onetoone> XML subelement. A one-to-one
element functions in a similar manner to a foreign key in that it makes a reference to another entity. However, its
purpose is to provide a reverse pointer to an entity or object that is pointing at the <onetoone> entity, through the
use of a foreign key.
For example, entity A has a foreign key to entity B. You can associate an instance of B with at most one instance of
A. Perhaps, there is a unique index on the foreign key column. This then defines a one-to-one relationship between
A and B. You can then declare the <onetoone> element on B, to provide simple access to the associated A. In
essence, using a one-to-one element creates an array-of-one, with, at most, one element. Zero elements are also
possible.
Note: PolicyCenter labels one-to-one elements in the Guidewire Data Dictionary as foreign keys. You
access these elements in Gosu code in the same manner as you access foreign keys.
Attributes of <onetoone>
The <onetoone> element contains the following attributes.
ignoreForEvents This attribute has complex, non‐intuitive interactions with data entity relationships. See false
“Interactions of ignoreForEvents attribute with data entity relationships” on page 221 for
information on how to use and configure it.
IMPORTANT Do not confuse the definition of the ignoreForEvents attribute for the
<onetoone> element with the definition of the attribute of the same namesake in
<entity> and <array> elements. Although they share the same name, the two
ignoreForEvents attributes are near opposites in effect.
linkField Optional. Specifies the foreign key field that points back to this object. None
name Required. Specifies the name property on the entity. None
nullok Whether the field can contain null values. true
owner If true, this entity owns the linked object (the object to which the <onetoone> element false
points):
• If you delete the owning object, then PolicyCenter deletes the linked object as well.
• If you update the object pointed to by the <onetoone> element, then PolicyCenter
considers the owning object updated as well.
setterScriptability See “Data objects and scriptability” on page 178 for information. all
triggersValidation Whether changes to the entity pointed to by this entity trigger validation. false
Subelements of <onetoone>
The <onetoone> element contains the following subelements.
<remove‐index>
The <remove-index> element defines the name of a database index that you want to remove from the data model. It
is valid for use with the following data model elements:
• <entity>
• <extension>
You can use this element to safely remove a non-primary key index if it is one of the following:
• non-unique
• unique and contains an ID column
Guidewire performs metadata validation to ensure that the <remove-index> element removes only those indexes
that fall into one of these categories.
Note: Adding, removing, or changing indexes results in changes to server performance. Before
making modifications to indexes, consult with your database administrator or Guidewire
representative. Include performance testing in your modification plan.
Note: The <remove-index> element does not remove spatial point indexes. To remove a spatial point
index for an extension entity, override a spatial point <column> element with a createSpatialIndex
parameter having a value of false.
See “Overriding data type attributes” on page 244 for an example of using a nested <columnParam>
subelement within a <column-override> element to set an attribute on a column. Use the same
pattern to set the createSpatialIndex parameter to false and to remove a spatial point index for an
extension entity. See also “<columnParam> subelement” on page 205 for a description of the
createSpatialIndex parameter.
Although the unique attribute is set to true, you can safely remove this index because the index definition contains
an ID column; in this example, keyposition="4".
Attributes of <remove‐index>
The <remove-index> element contains the following attributes.
Modifying an index
In many cases, you want to modify an existing database index. In that case, use the <remove-index> element to
remove the index, and then add a new index with the same name that contains the desired characteristics.
<tag>
The <tag> element defines a data model annotation. You can use predefined tags to add your own metadata to the
data model.
The file PolicyCenter/modules/configuration/config/metadata/[Link] specifies the list of valid tags that
you can use. You cannot add a new tag to this file.
At most one of each tag can exist on a field at one time. Extensions can add, but not override, tags on existing fields.
Attributes of <tag>
The <tag> element contains the following attributes.
The PolicyCenter data model 219
Guidewire PolicyCenter 9.0.9 Configuration Guide
One of the common uses for the <tag> subelement is adding the element to a foreign key to assist in resolving
certain archive domain graph issues. See System Administration Guide for details.
<typekey>
The <typekey> element defines a field for which a typelist defines the values. Guidewire defines this element in the
data model metadata files as the <typekey> XML subelement.
Note: For information on typelists, typekeys, and keyfilters, see “Working with typelists” on
page 303.
Attributes of <typekey>
overwrittenInStagingTable Internal. If true and the typekey is loadable, the loader process auto‐populates the false
typekey in the staging table during import.
IMPORTANT If set to true, do not attempt to populate the typekey yourself because
the loader import process overwrites this typekey.
required Whether the typekey is required to be non‐null upon initial construction of instances false
of the entity. See the Gosu Reference Guide.
setterScriptability See “Data objects and scriptability” on page 178 for information. None
soapnullok Unused.
typefilter The name of a filter associated with the typelist. See “Static filters” on page 315 for None
additional information.
typelist Required. The name of the typelist from which this field gets its value. None
See also
• “Working with typelists” on page 303.
Subelements of <typekey>
The <typekey> element contains the following subelements.
Subelements of <keyfilters>
The <keyfilters> element contains the following subelements.
However, an understanding of event generation and behavior, the definitions of the ignoreForEvents attribute, the
direction of data entity relationships, and the behavior of the relationships in light of the attribute helps to predict
such outcomes. Such an understanding will also help you to design predictable data entity relationships.
To this end, Guidewire recommends that you configure both sides of a data entity relationship with the same
ignoreForEvents attribute value. For example, in an <array>-<foreignkey> pair and a <onetoone>-
<foreignkey> pair, use the same ignoreForEvents attribute value for both pair members when possible. This topic
assumes that you have followed this recommendation.
Note: As a shorthand, this topic sometimes refers to entities declaring foreign key relationships and
one-to-one relationships as foreign key entities and one-to-one entities respectively. Similarly, as a
shorthand, the topic sometimes refers to the <foreignkey> and <one-to-one> elements themselves as
foreign keys and one-to-ones. The topic refers to the entity to which a foreign key or one-to-one points
as the target entity or target.
ignoreForEvents attribute has a value of true, the foreign key entity is the parent, and the one-to-one entity is
the child.
• With a foreign key relationship, the entity declaring a foreign key is the event parent, and the target entity of the
foreign key is the event child. An exception to this scenario occurs if the foreign key backs an array. If the
foreign key backs an array, the foreign key entity is the event child.
• With an edge foreign key relationship, the entity declaring an edge foreign key is the event parent, and the target
entity of the edge foreign key is the event child.
Examples
1. Array and foreign key
Suppose that an entity A has a foreign key to entity B and that the foreign key backs an array. Moreover,
suppose that B has an array of A. In this case, B is the parent, and A is the child. The ignoreForEvents used
is set on the array entity. In this case, the ignoreForEvents used is set on the array, but Guidewire
recommends applying the same setting both to the array and to the backing foreign key.
If the foreign key does not back an array, then A is the parent, and B is the child.
2. Array and multiple foreign keys
Suppose the following:
• Claim has an array of ABC_NonEAEntity with an ignoreForEvents value of false.
• ABC_NonEAEntity has a foreign key, ClaimID, to Claim with an ignoreForEvents value of true.
• ABC_NonEAEntity has a foreign key, ABC_AnotherNonEAEntityID, to ABC_AnotherNonEAEntity with an
ignoreForEvents value of true.
The PolicyCenter data model 223
Guidewire PolicyCenter 9.0.9 Configuration Guide
This topic describes the different types of associative arrays that Guidewire provides as part of the base data model
configuration.
Related concepts
“Overview of associative arrays” on page 225
“Subtype mapping associative arrays” on page 227
“Typelist mapping associative arrays” on page 230
Note: When you modify an array such that it is an associative array, the array continues to exhibit its
original properties as an indexed array. You can use an associative array just as you would an indexed
array. For example, you can use an associative array in for loops.
PolicyCenter uses associate arrays to expose array values as a type-safe map within Gosu code. The following
example uses a typekey from a State typelist as a mapping index for an associative array of state capitals:
Capital[State.TC_AK] Juneau
Capital[State.TC_AZ] Phoenix
To implement an associative array, add one of the following elements to an <array> element in the data type
definition file. The number of results that each returns—the cardinality of the result set—depends on the element
type.
<link-association> Returns at most one element. The return type is an object of the type of the array.
<array-association> Returns an array of results that match the value. The number of results can be zero, one, or more.
Each <array> element in a data type definition file can have zero or one of each of these elements.
As an example, in the ClaimCenter Claim definition file (configuration→config→Metadata→Entity→[Link]), you see
the following XML (simplified for clarity):
<entity xmlns="[Link]
entity="Claim"
table="claim"
type="retireable">
...
<array arrayentity="ClaimMetric"
desc="Metrics related to this claim."
exportable="false"
ignoreforevents="true"
name="ClaimMetrics"
triggersValidation="false">
<link-association>
<subtype-map/>
</link-association>
<array-association>
<typelist-map field="ClaimMetricCategory"/>
</array-association>
</array>
...
</entity>
See also
• “Subtype mapping associative arrays” on page 227.
• “Typelist mapping associative arrays” on page 230.
See also
• “Data objects and scriptability” on page 178.
• You can set array values only on fields that are database-backed fields, not on fields that are derived properties.
To determine which fields are derived, consult the PolicyCenter Data Dictionary.
See also
• Gosu Reference Guide
The JobTypes array contains a number of objects. Each of these objects is a subtype of a Job object. The data model
defines the associative array using the <link-association> element. A link association returns at most one
element. The return type is an object of the type of the array. In this case, the return type is an object of type Job or,
more specifically, one of its subtypes.
Working with associative arrays 227
Guidewire PolicyCenter 9.0.9 Configuration Guide
The PolicyCenter data model defines a number of subtypes of the Job object, including:
• Audit
• Cancellation
• Issuance
• PolicyChange
• Reinstatement
• Renewal
• Rewrite
• RewriteNewAccount
• Submission
To determine the complete list of subtypes on an object, consult the PolicyCenter Data Dictionary. The dictionary
organizes the subtypes into a table at the top of the dictionary page with active links to sections that describe each
subtype in greater detail.
Field Description
base-entity The base object on which the associative array exists. For example, consider the Claim entity for the
ClaimMetrics array.
subtype-map The array entity subtype, for example, AllEscalatedActivitiesClaimMetric (a subtype of ClaimMetric).
property A field or property on the array object. For example, the AllEscalatedActivitiesClaimMetric object con‐
tains the following properties (among others):
• ClaimMetricCategory
• DispalyTargetValue
• DisplayValue
Note: To see a list of subtypes for any given object, consult the PolicyCenter Data Dictionary. To
determine the list of fields (properties) on an object, again consult the Data Dictionary.
The following table lists the attributes associated with the <subtype-map> element.
Example 1
The following example code uses the sample data in the Guidewire ClaimCenter base configuration. It first retrieves
a specific claim object using a query builder and then uses that object as the base entity from which to retrieve array
member properties.
228 chapter 16: Working with associative arrays
Guidewire PolicyCenter 9.0.9 Configuration Guide
uses [Link]
uses [Link]
The output of running this code in the Gosu Scratchpad looks similar to the following:
AllEscalatedActivitiesClaimMetric Claim Metric Category = Claim Activity
AllEscalatedActivitiesClaimMetric Display Value = 0
AllEscalatedActivitiesClaimMetric Reach Yellow Time = null
Example 2
The following sample code:
• Retrieves a read-only claim object.
• Adds the claim object to transaction bundle to make it writable.
• Sets a specific property on the AllEscalatedActivitiesClaimMetric object (a subtype of the ClaimMetric
object) associated with the claim.
In the definition of the claim object, ClaimCenter associates an array of ClaimMetric objects—the ClaimMetrics
array—with the Claim object. The metadata definition file also defines the ClaimMetrics array as being of type
<link-association> using subtypes. Thus, you can access array member properties by first accessing the array
member of the proper subtype.
uses [Link]
uses [Link]
//Query result is read-only, need to get current bundle and add object to bundle
[Link](\bundle -> {
if (clm != null) {
clm = [Link](clm)
The output of running this code in the Gosu Scratchpad looks similar to the following:
AllEscalatedActivitiesClaimMetric Reach Yellow Time = null
See also
• Gosu Reference Guide
The <typelist-map> element requires that you set a value for the field attribute. This attribute specifies the
typelist to use to partition the array.
Associative arrays of type <array-associaton> are different from those created using <link-association> in that
they can return more than a single element. In this case, the code creates an array of ClaimMetric objects named
ClaimMetrics. Each ClaimMetric object as well as all subtype objects of the ClaimMetric object contain a
property called ClaimMetricCategory. The array definition code utilizes that fact and uses the
ClaimMetricCategory typelist as a partitioning agent.
The ClaimMetricCategory typelist contains three typecodes, which are:
• ClaimActivityMetrics
• ClaimFinancialMetrics
• OverallClaimMetrics
Each typecode specifies a category. This category contains multiple ClaimMetric object subtypes. For example, the
OverallClaimMetrics category contains two ClaimMetric subtypes:
• DaysInitialContactWithInsuredClaimMetric
• DaysOpenClaimMetric
In another example from the ClaimCenter base configuration, you see the following defined for ReserveLine.
<entity entity="ReserveLine"
xmlns="[Link]
...
table="reserveline"
type="retireable">
...
<array arrayentity="TAccount"
arrayfield="ReserveLine"
name="TAccounts"
...
setterScriptability="hidden">
<link-association hasGetter="true" hasSetter="true">
<typelist-map field="TAccountType"/>
</link-association>
</array>
...
</entity>
In this case, the array definition code creates a <link-association> array of TAcccount objects and partitions the
array by the TAccountType typelist typecodes.
Field Description
entity The object on which the associative array exists. For example, consider the ReserveLine entity on which the
Taccounts array exists.
typecode The typelist typecode that delimits this array partition, for example, OverallClaimMetrics (a typecode from the
ClaimMetricCategory typelist).
property A field or property on the array object. For example, the ClaimMetric object contains the following properties
(among others):
• ReachRedTime
• ReachYellowTime
• Skipped
The following table lists the attributes associated with the <typelist-map> element.
Example 1
The following example code uses sample data in the Guidewire ClaimCenter base configuration. It iterates over the
members of the ClaimMetrics array that fall into the OverallClaimMetrics category.
uses [Link]
uses [Link]
The output of running this code in the Gosu Scratchpad looks similar to the following:
Days Open: ReachYellowTime = 2018-08-24
Initial Contact with Insured (Days): ReachYellowTime = 2018-02-12
Example 2
The following example code also uses the sample data in the Guidewire ClaimCenter base configuration. It first
retrieves a specific Claim object and then retrieves a specific ReserveLine object associated with that claim.
uses [Link]
uses [Link]
"235-53-365870").select().AtMostOneRow
var thisReserveLine = [Link]()
print(thisReserveLine)
print([Link])
The output of running this code in the Gosu Scratchpad looks similar to the following:
(1) 1st Party Vehicle - Ray Newton; Claim Cost/Auto body
Thu Feb 22 15:35:02 PST 2018
The following example code also uses the sample data in the Guidewire ClaimCenter base configuration. It uses a
query builder expression to retrieve a specific claim entity. Because the result of the query is read-only, you must
first retrieve the current bundle, then add the claim to the bundle to make its fields writable. The retrieved claim is
the base entity on which the ClaimMetrics array exists.
The following sample code:
• retrieves a read-only claim object
• adds the claim object to transaction bundle to make it writable
• sets specific properties on the ClaimMetric object associated with the claims that are in the
OverallClaimMetrics category
In the definition of the claim object, ClaimCenter associates an array of ClaimMetric objects—the ClaimMetrics
array—with the Claim object. The metadata definition file also defines the ClaimMetrics array as being of type
<array-association> using the ClaimMetricCategory typelist. Thus, you can access array member properties by
first accessing the array member of the proper category.
uses [Link]
uses [Link]
[Link](\bundle -> {
if (thisClaim != null) {
thisClaim = [Link](thisClaim)
//Print out the current values for the [Link] field on each subtype
for (color in [Link]) {
print("Subtype - " + [Link] + ": ReachYellowColor = " + [Link])
}
//Modify the [Link] value and print out the new values
for (color in [Link]) {
[Link] = todaysDate
print("Subtype - " + [Link] + ": ReachYellowColor = " + [Link])
}
}
}, "su")
The output of running this code in the Gosu Scratchpad looks similar to the following:
Subtype - Days Open: ReachYellowColor = 2017-11-08
Subtype - Initial Contact with Insured (Days): ReachYellowColor = 2017-10-30
See also
Procedure
Result
You now have three new virtual properties on the Ext_Automation database entity with which to access the three
Ext_AutomationCheckResult types—CoverabilityResult, HandleabilityResult, and PayabilityResult.
Working with associative arrays 233
Guidewire PolicyCenter 9.0.9 Configuration Guide
<array-association>
<constant-map field="AddressType">
<property name="HomeLocs" value="home"/>
<property name="BusinessLocs" value="business"/>
<property name="OtherLocs" value="other"/>
</constant-map>
</array-association>
</array>
</extension>
The structure of the constant-map association allows you to specify multiple properties under a constant. Notice that
you specify array-association constants and link-association constants in two separate groups.
See also
Field Description
base-entity The base object on which the associative array exists. For example, consider the Account entity for the
Contacts array.
defined-property The property that you defined for the constant map array.
The following tables list the attributes and subelements associated with the <constant-map> element.
This topic discusses how to extend the base data model as well as how to create new data objects.
Related concepts
“Planning changes to the base data model” on page 237
“Defining a new data entity” on page 240
“Extending a base configuration entity” on page 242
“Working with attribute and element overrides” on page 243
“Extending the base data model” on page 246
“Removing objects from the base configuration data model” on page 256
“Deploying data model changes to the application server” on page 260
retireable This type of entity is an extension of the editable entity. It is not possible to delete this entity. It is possible to
retire it, however.
versionable This type of entity has a version and an ID. It is possible to delete entities of this type from the database.
In general, you typically want to create a new entity under the following circumstances:
• If your business model requires an object that does not logically exist in the application. Or, if you have added
too many fields to an existing entity, and want to abstract away some of it into a new, logical entity.
• If you need to manage arrays of objects, as opposed to multiple objects, you can create an entity array.
Reference entities
To store some unchanging reference data, such as a lookup table that seldom changes, you can create a reference
entity. An example of a business case for a reference entity is a list of typical reserve amounts for a given exposure.
To avoid the overhead of maintaining foreign keys, make reference entities keyable. Unless you want to build in the
ability to edit this information from within the application, set setterscriptability = hidden. This prevents
Gosu code from accidentally overwriting the data.
Guidewire recommends that you determine that this is not really a case for creating a typelist before you create a
reference entity.
See also
• “Defining a reference entity” on page 253
• “The archive domain graph and reference data” on page 327
WARNING Do not directly modify the physical database that PolicyCenter uses. Only make
changes to the PolicyCenter data model through Guidewire Studio.
WARNING Do not decrease the number of digits in either the characteristic (precision - scale) or
the mantissa (scale) of a database column. If you do, the application server will throw an
exception during startup.
IMPORTANT Deviations from these guidelines can result in product errors or unexpected behavior.
An extension name cannot start with a number; it must start with a letter. Other than that, an extension name can
contain letters, numbers, or underscores (_). Guidewire does not permit any other characters in extension names.
<subtype> “<subtype> elements and related data object types” on page 192
<viewEntity> “<viewEntity> elements and related data object types” on page 195
4. Add fields to your new data entity. In the Field drop-down list, select the field type to add, and then click Add
. For example:
For information on the possible XML elements that you can add to your new entity definition, see “Data entity
subelements” on page 198.
5. Deploy your changes to the application server. You must redeploy the application after you make any change
to the Guidewire PolicyCenter data model. See “Deploying data model changes to the application server” on
page 260 for details.
Property Description
ID Internally managed primary key
CreateTime Timestamp indicating when the object was created. This property is only applicable for editable, effdated,
effdatedbranch, effdatedcontainer, and retireable entity types.
CreateUser User who created the object. This property is only applicable for editable, effdated, effdatedbranch,
effdatedcontainer, and retireable entity types.
LoadCommandID This property is included for entities where the loadable attribute has a value of true. However,
PolicyCenter does not use this property.
New Indicator of whether this object is a new object that has not been committed to the database.
NewlyImported Obsolete.
PublicID ID or primary key of the row in the external system to which this row is mapped
Retired Derived property returning a Boolean value. The Boolean value is true if the RetiredValue property has a
non‐zero value. The Boolean value is false if the RetiredValue property has a zero value. The Retired
property is only applicable for effdatedbranch, effdatedcontainer, and retireable entity types.
RetiredValue Value indicating whether the object is still in active use. A zero value for the property means that the object
is not retired. A non‐zero value equal to the entity ID means that the object is retired from active use. Note
that even if an object is retired, it can still be referred to by another object. The RetiredValue property is
only applicable for effdatedbranch, effdatedcontainer, and retireable entity types.
UpdateTime Timestamp when the object was last updated. This property is only applicable for editable, effdated,
effdatedbranch, effdatedcontainer, and retireable entity types.
UpdateUser User who last updated the object. This property is only applicable for editable, effdated, effdatedbranch,
effdatedcontainer, and retireable entity types.
Note: New entities have constant properties that the PolicyCenter data dictionary lists. The table in
this topic does not list these properties. Instead of using these constant properties, use feature literals
to refer to the static properties of entities in queries.
See also
• For more information on using feature literals to refer to entity properties, see Gosu Reference Guide.
IMPORTANT Guidewire provides certain entity extensions as part of the base application
configuration. Many of the extension index definitions address performance issues. Other extensions
provide the ability to configure the data model in ways that would not be possible if the extension was
part of the base data model. Do not overwrite a Guidewire extension with your own extension without
understanding the full implications of the change.
PolicyCenter extensions enable you to add new fields to the base data entities. You can add custom fields to
extendable entities only. Not all entities are extendible, but most of the important business entities such as Policy,
User, Contact, and others are extendible. (You can determine if an entity is extendible by looking in the Data
Dictionary to see if it supports the Extendable attribute. The Data Dictionary displays the list of attributes for that
entity type directly underneath the entity name.)
Use the <extension> XML root element to create an extension entity. Before creating a new extension file, first
determine if one already exists.
• If an extension file for the entity does exist, edit that file to extend the entity.
• If an extension file for the entity does not exist, create the new extension file and populate it accordingly.
You can define multiple extensions for base configuration entities and typelist entities. Each extension file must
have a unique name.
You can add a qualifier to a base entity or typelist file name to adhere to the uniqueness constraint. The following
list contains valid entity extension file names with the first name being the base file name and the subsequent file
names having qualifiers:
• [Link]
• [Link]
• [Link]
The following list contains valid typelist extension file names with the first name being the base file name and the
subsequent file names having qualifiers:
• [Link]
• [Link]
• [Link]
Procedure
1. In the Studio Project tool window, navigate to configuration→config→Metadata→Entity, and then locate the entity
that you want to extend.
242 chapter 17: Modifying the base data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
2. Right-click the entity, and then click New→Entity Extension. Studio creates a basically empty extension file
named <entity>.etx, places it in the configuration→config→Extensions→Entity folder, and opens it in a view
tab for editing.
Note: If an extension file for the selected entity file already exists, Studio does not permit you to
create another one. If the file name in the Entity Extension dialog box is grayed out, that means
that an extension already exists. In that case, search in the
configuration→config→Extensions→Entity folder for an existing extension file.
3. Populate the extension with the required attributes.
4. Deploy your changes to the application server.
Next steps
You must redeploy the application after you make any change to the Guidewire PolicyCenter data model. See
“Deploying data model changes to the application server” on page 260 for details.
<column-override> createhistogram
default
desc
name
nullok
supportsLinguisticSearch
<foreignkey-override> desc
importableagainstexistingobject
name
nullok
triggersValidation
<onetoone-override> desc
name
triggersValidation
<typekey-override> default
desc
name
nullok
typefilter
<keyfilters-override>
<keyfilters-override> <keyfilter>
See also
• “Changing the length of a text field” on page 302 for overriding the size data type attribute or the logicalSize
data type attribute.
• “<columnParam> subelement” on page 205 for more information on size, logicalSize, and other data type
attributes.
• “The data types configuration file” on page 285 for the global configuration of data type attributes.
• “The Length attribute” on page 287 for the global configuration of the character length of a column.
name="TaxID"
type="ssn"/>
To encrypt the contents of this column (a reasonable course of action), create a Contact extension ([Link])
and use the <column-override> element to set the encryption attribute on the column:
<column-override name="TaxID">
<columnParam name="encryption" value="true"/>
</column-override>
See also
• See “<columnParam> subelement” on page 205 for a description of the <columParam> element and the column
attributes that you can modify using this element.
Procedure
1. Open Guidewire Studio.
2. Navigate to configuration→config→Extensions.
3. Right-click Entity, and then click New Entity Extension.
4. Click Document, and then click OK.
5. In the Primary Value column, right-click Name, and then click override.
6. For the desc attribute, in the Value column, type the new value.
A triggersValidation example
You use the triggersValidation attribute to instruct PolicyCenter whether changes to an array, a foreign key, or a
one-to-one entity initiates validation on that entity. To illustrate, in the base configuration, Guidewire defines the
Account entity in file [Link].
<entity ... entity="Account" ...>
...
<array arrayentity="UserRoleAssignment"
desc="Role Assignments for this account."
exportable="false"
name="RoleAssignments"
triggersValidation="true"/>
...
</entity>
The definition of the RoleAssignments array specifies that if any element of the array changes, the change triggers
a validation of the object graph that includes the array. Suppose, for some reason, that you want to turn off validation
even if changes occur to the RoleAssignments array. To do so, you need to create an extension file with an <array-
override> element that modifies the triggersValidition attribute set on the base data object.
The following steps illustrate this concept.
3. Stop and restart the application server. The application server recognizes that there are changes to the data
model and automatically runs the upgrade utility on start up.
This effectively switches off the validation that usually occurs on changes to elements of the RoleAssignments
array.
<typekey-override
name="Languages">
<keyfilters-override>
<keyfilter name="Canada Languages"/>
</keyfilters-override>
</typekey-override>
After you make any change to the data model, Guidewire recommends that you do the following to test your work.
• First, stop and restart Guidewire Studio. Verify that there are no errors or warnings. If there are, do not proceed
until you have corrected the issues. Guidewire does not strictly require that you always stop and restart Studio
after a data model change. However, it is one way to test that you have not inadvertently made a typing error, for
example.
• After starting Studio, start Guidewire PolicyCenter. As the application server starts, it recognizes that you have
made changes to the database and runs the upgrade utility automatically. Verify that the application server starts
cleanly, without errors or warnings.
246 chapter 17: Modifying the base data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
Related concepts
Related tasks
The first step in defining a new delegate is to create the delegate file and populate it with the necessary code.
Procedure
Next steps
After completing this task, complete “Step 2: Define the delegate functionality” on page 248.
Modifying the base data model 247
Guidewire PolicyCenter 9.0.9 Configuration Guide
Java class imple‐ In the base configuration, Guidewire provides a Java class implementation for each delegate to provide the
mentation necessary functionality. The Delegate object designates the Java class through the javaClass attribute. It is
not possible for you to create and use a Java class for this purpose.
Gosu enhance‐ You must implement the delegate functionality through a Gosu enhancement that defines any functionality
ment imple‐ associated with the fields on the delegate. By providing the name of the delegate entity to the enhancement
mentation as you create it, you inform Studio that you are adding functionality for that particular delegate. Studio auto‐
matically recognizes that you are enhancing the delegate.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→gsrc→gw.
This is an example package. In actual practice, you can place the enhancement in a location that makes
business sense.
2. Right-click gw, and then click New→Gosu Enhancement.
3. In the Name text box, type the name of the enhancement.
As a best practice, Guidewire recommends that you use the name of the delegate followed by Enhancement.
For example, if the delegate is named MyDelegate, then name the enhancement MyDelegateEnhancement.
4. In the Enhanced type list, click the name of the delegate entity that you created.
5. Click OK.
6. In the enhancement code window, enter code to provide the necessary functionality. The delegate
automatically has access to all fields and members that you define in the Gosu enhancement.
Next steps
After completing this task, complete “Step 3: Add the delegate to the parent entity” on page 248.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to the entity to modify, or create a new entity.
2. In the Field drop-down list, click implementsEntity, and then click Add .
248 chapter 17: Modifying the base data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
3. Next to the name attribute, click the Value drop-down list, and click the name of the delegate.
Next steps
After completing this task, complete “Step 4: Deploy your data model changes” on page 249.
Note: In addition to these application-specific delegates, you can extend the following system
delegate: AddressAutofillable.
You can extend a delegate only if the base configuration definition file for that delegate contains the following:
extendable="true"
The default for the extendable attribute on <delegate> is false. Therefore, if it is not set explicitly to true in the
delegate definition file, you cannot extend that delegate.
Do not attempt to change the graph to which a Guidewire base entity belongs through extension. In other words, do
not attempt to change the delegate that a Guidewire base entity implements through an extension entity using
<implementsEntity>. PolicyCenter generates an error if you attempt to do so.
1. Navigate to configuration→config→Extensions→Entity.
2. Right-click and select New→Entity Extension.
3. Enter the name of the delegate that you want to extend and add the .etx extension. Studio opens an empty
file.
4. Enter the delegate definition in the delegate extension file. If necessary, find an existing delegate file and use it
as a model for the syntax. For details, see “Creating a new delegate object” on page 247.
These fields are then accessible to any entity that implements this delegate. You use these fields to support user
overrides of the modifier rates originally suggested by an external process. All modifiers for all lines of business use
this override process. Thus, by placing this functionality in the Modifier delegate, each entity that implements the
Modifier delegate inherits this functionality, instead of each entity implementing this functionality separately.
Each line of business (LOB) uses one or two LOB-specific modifier entities that implement the Modifier delegate.
For example:
• BAModifier
• BOPModifier
• CPModifier
• GLModifier
• PAModifier
• PAVehicleModifier
• ProductModifier
• WCModifier
Because each of these LOB-specific modifier entities already implements the Modifier entity, each automatically
inherits the Modifier column extensions.
If an entity does not already implement the Modifier delegate, then you need to do one of the following:
• If an extension for that entity already exists in the Extensions folder, then you need to modify that extension file so
that it implements the required delegate. In this case, modify the extension entity and add the following, using the
appropriate adapter name:
<implementsEntity adapter="xxx" name="Modifier"/>
• If an extension for that entity does not exist in the Extensions folder, then you need to create an extension and
have that entity extension implement the required delegate. In this case, right-click the extensions folder and
select New→Other file. Enter the entity name and add the .etx extension. Populate the extension file with
something similar to the following, using the appropriate adapter and entity name (entityName):
<?xml version="1.0"?>
<extension xmlns="[Link] entityName="xxx">
<implementsEntity adapter="xxx" name="Modifier"/>
</extension>
implements the Modifier delegate (for example, BAModifier), there must also be a corresponding entity that
implements the RateFactor delegate (for example, BARateFactor)
See also
• “The PolicyCenter data model” on page 169
• “<delegate> elements and related data object types” on page 180
• “<implementsEntity>” on page 214
• “Creating a new delegate object” on page 247
• Product Model Guide
Defining a subtype
A subtype is an entity that you base on another entity (its supertype). The subtype has all of the fields and elements
of its supertype, and it can also have additional ones. You can also create subtypes of subtypes, with no limit to the
depth of the hierarchy.
PolicyCenter does not associate a unique database table with a subtype. Instead, the application stores all subtypes in
the table of its supertype. The supertype table includes a subtype column. The subtype column stores the type
values for each subtype. PolicyCenter uses this column to resolve a subtype.
You define a subtype using the <subtype> element. You must specify certain attributes of the subtype, such as its
name and its supertype (the entity on which PolicyCenter bases the subtype entity). For a description of required and
optional attributes, see “<subtype> elements and related data object types” on page 192.
Within the <subtype> definition, you must define its fields and other elements. For a description of the elements
you can include, see “Data entity subelements” on page 198.
Example
This example defines an Inspector_Ext entity as a subtype of Person. The Inspector_Ext entity includes a field
for the inspector’s business license. To create the Inspector_Ext.eti file
1. In Studio, navigate to configuration→config→Extensions→Entity.
2. Right-click Entity, and then click New→Entity.
3. In the Entity text box, type Inspector_Ext.
4. In the Entity Type drop-down list, click subtype.
5. In the Supertype box, type Person.
6. Click OK.
7. In the Field drop-down list, click column.
252 chapter 17: Modifying the base data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
IMPORTANT You can use any entity type as a reference entity. However, if you use the entity solely
for storing and querying reference data, then Guidewire recommends that you use a keyable entity.
Example
This example defines a read-only reference table named ExampleReferenceEntityExt.
<entity entity="ExampleReferenceEntityExt" table="exampleref" type="keyable"
setterScriptability="hidden">
<column name="StringColumn" type="shorttext"/>
<column name="IntegerColumn" type="integer"/>
<column name="BooleanColumn" type="bit"/>
<column name="TextColumn" type="longtext"/>
<index name="internal1">
<indexcol name="StringColumn" keyposition="1"/>
<indexcol name="IntegerColumn" keyposition="2"/>
</index>
</entity>
See also
• “The archive domain graph and reference data” on page 327
As you define the entity for the array, consider the type of entity to use. The general rule, is that if another entity
does not refer to the new entity through a foreign key, then make the entity versionable. Otherwise, make the
entity retireable.
Procedure
1. Define the entity to use as a member of the array. Although you can use one of the PolicyCenter base entities
for an array, it is often likely that you need to define a new entity for this purpose.
2. Define an array field in the entity that contains the array. You can give the field any name you want. It does
not need to be the same name as the array entity.
3. Define a foreign key in the array entity that references the containing entity. PolicyCenter uses this field to
connect an array to a particular data object.
Example
The following example, defines a new retireable entity named ExampleRetireableArrayEntityExt and adds it as
an array to the Policy entity.
The first step is to define the array entity:
<?xml version="1.0"?>
<entity entity="ExampleRetireableArrayEntityExt" table="exampleretarray" type="retireable"
exportable="true">
<column name="StringColumn" type="shorttext"/>
<typekey name="TypekeyColumn" typelist="SystemPermissionType" desc="A test typekey column"/>
<foreignkey name="RetireableFKID" fkentity="ExampleRetireableEntityExt"
desc="FK back to ExampleRetireableEntity" exportable="false"/>
<foreignkey name="KeyableFKID" fkentity="ExampleKeyableEntityExt"
desc="FK through to ExampleKeyableEntity" exportable="false"/>
<foreignkey name="ClaimID" fkentity="Claim" desc="FK back to Claim" exportable="false"/>
<implementsEntity name="Extractable"/>
<index name="internal1" unique="true">
<indexcol name="RetireableFKID" keyposition="1"/>
<indexcol name="TypekeyColumn" keyposition="2"/>
</index>
</entity>
To make this example useful, suppose that you now add this array field to the Policy entity. It is possible that a
Policy entity already exists in the base configuration. Verify that the data type declaration file does not exist before
adding another one. To determine if a Policy extension file already exists, use CTRL-N to search for [Link].
• If the file does exist, then you can modify it.
• If the file does not exist, then you need to create one.
Add the following to [Link].
<extension entityName="Policy" ...>
...
<array arrayentity="ExampleRetireableArrayEntityExt"
desc="An array of ExampleRetireableArrayEntityExt objects."
name="RetireableArrayExt" />
...
</extension>
Next, modify the array entity definition so it includes a foreign key that refers to Policy:
<entity entity="ExampleRetireableArrayEntityExt" table="exampleretarray" ... >
...
<foreignkey name="PolicyID" fkentity="Policy" desc="FK back to Policy" exportable="false"/>
</entity>
To access the relationship, you need to add an array of the new join entities to either end or to both ends of the
relationship. For example:
<extension xmlns="[Link] entityName="Account">
<array arrayentity="AccountContact"
desc="All the AccountContact entities related to Account."
name="AccountContacts"/>
</extension>
Next, search for [Link]. Suppose that you do not find this file, but you see that
[Link] exists. As this is part of the base configuration, you cannot modify this declaration file.
However, find the highlighted file in Guidewire Studio™ and select New→Entity Extension from the right-click
submenu. This opens a mostly blank file.
Enter the following in [Link]:
<viewEntityExtension entityName="ActivityDesktopView">
<viewEntityColumn name="validExt" path="validExt"/>
</viewEntityExtension>
Note: The path attribute is always relative to the primary entity on which you base the view.
These data model changes add a validExt column (field) to the Activity object, which is also accessible from the
ActivityDesktopView entity.
By defining a TotalPremiumRPT column on the view entity, the view entity loads the total reported premium.
The complete extension of the PolicyPeriodSummary view entity will also have a currency type for the
TotalPremiumRPT column. Adding this currency type requires a type key. The name and path for the type key must
have the respective suffixes Cur and _cur. The complete extension of the PolicyPeriodSummary view entity is as
follows:
<viewEntityExtension xmlns="[Link] entityName="PolicyPeriodSummary">
<viewEntityColumn name="TotalPremiumRPT" path="TotalPremiumRPT_amt"/>
<viewEntityTypekey name="TotalPremiumRPTCur" path="TotalPremiumRPT_cur"/>
</viewEntityExtension>
Base configuration extension extensions .etx “Remove an extension to a base object” on page 258
Guidewire recommends that you review the material in “Implications of modifying the data model” on page 258
before you remove an object from the data model.
IMPORTANT PolicyCenter provides certain entity extensions as part of the base application
configuration. Many of the extension index definitions address performance issues. Other extensions
provide the ability to configure the data model in ways that would not be possible if the extension was
part of the base data model. Do not modify a PolicyCenter extension without understanding the full
implications of the change.
WARNING Do not attempt to remove a base configuration data object (meaning one defined in the
configuration→config→Metadata folder). Also, do not attempt to remove any extension marked as
internal. Any attempt to do so can invalidate your Guidewire installation, causing the application
server to refuse to start.
Related concepts
“Implications of modifying the data model” on page 258
Related tasks
“Remove a base extension entity” on page 257
“Remove an extension to a base object” on page 258
Procedure
1. Open the entity extension .eti file. This file must be located in the extensions folder.
• If the .eti file is one that you created (meaning it is not part of the Guidewire-provided base configuration),
then you merely need to delete the file. You can then omit the next step and continue to step 3.
• If the .eti file is part of the Guidewire-provided base configuration, then continue to the next step.
Modifying the base data model 257
Guidewire PolicyCenter 9.0.9 Configuration Guide
2. Use the <deleteEntity> object to define the extension entity to remove from the data model.
For example, if you want to remove an extension entity named RateGLClassCodeExt, then enter the
following:
<?xml version="1.0"?>
<deleteEntity xmlns="[Link] name="RateGLClassCodeExt" />
Next steps
If you encounter error messages, or the application server refuses to start, examine your code and correct any issues
before you attempt to continue.
IMPORTANT You cannot delete an extension marked as internal. Any attempt to do so can invalidate
your Guidewire installation, causing the application server to refuse to start.
Procedure
1. Navigate to the extensions folder and open the declaration file for the entity extension that you want to remove.
• If the .etx file is one that you created (meaning it is not part of the Guidewire-provided base configuration),
then you merely need to delete the file. You can then omit the next step and continue to step 3.
• If the .etx file is part of the Guidewire-provided base configuration, then continue to the next step. For
example, suppose that you want to remove (hide) the extension defined in the base configuration for the
Contact entity. In that case, you open [Link] in the Extensions folder.
2. Delete the contents of the declaration file and insert a blank skeleton definition.
For example, for the Contact extension, use the following:
<?xml version="1.0"?>
<extension xmlns="[Link] entityName="Contact"/>
Next steps
If you encounter error messages, or the application server refuses to start, examine your code and correct any
problems before you attempt to continue.
WARNING Be very careful of making changes to the data model on a live production database.
You can invalidate your installation.
Development environment
If you are working in a development environment, then do the following:
1. Use the following command to regenerate the Data Dictionary so that it reflects your data model changes:
gwb genDataDictionary
2. Stop and restart both the application server and Studio. As the application server and Studio share the same
file structure in the development environment, you need only restart the development application server to
pick up these changes.
260 chapter 17: Modifying the base data model
Guidewire PolicyCenter 9.0.9 Configuration Guide
If necessary (and it is almost always necessary if you change the data model), PolicyCenter runs the database
upgrade tool during application start up.
Production environment
If you are working in a production environment, then do the following:
1. Use the following command to regenerate the Data Dictionary so that it reflects your data model changes:
gwb genDataDict
This topic describes how to modify the Guidewire data model. It illustrates how to construct a data entity and make
it assignable.
IMPORTANT The code and objects in this example refer to Guidewire ClaimCenter. However, the
principles involved in extending the data model apply to all Guidewire applications.
Procedure
1. Create the new extension entity file.
a. In Studio, navigate to configuration→config→extensions→Entity.
b. Right-click Entity and select New→Entity.
2. Provide the required information for the new entity definition.
a. Enter the name of the extension entity in the text field.
To follow the rest of this procedure, use the name UserAssignableEntity_Ext.
Example: Creating assignable entities 263
Guidewire PolicyCenter 9.0.9 Configuration Guide
fulldescription Simple entity that you can assign. This entity does not have a foreign
key.
impl [Link]
type datetime
nullok true
type varchar
nullok true
value 60
typelist Country
nullok true
typelist PhoneType
nullok true
keyposition 1
Result
Next steps
See also
• For information on how to extend the data model, see “Modifying the base data model” on page 237.
• For information on the data model in general, see “The PolicyCenter data model” on page 169.
Procedure
1. Create a new class file in the package [Link] and name it NewAssignableMethodsImpl.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Class.
c. Enter the name of the class in the text box.
For this example, enter the following class name.
NewAssignableMethodsImpl
d. Click OK.
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
2. Have your class do one of the following.
• Implement the interface [Link].
• Extend the abstract superclass [Link].
Which of these options you implement depends on your business needs. In either case, you must provide
method bodies for all unimplemented methods. To determine what methods you need to implement, you need
merely to have your class implement the interface or extend the abstract superclass.
In this example, you extend the abstract superclass. Make the class declaration look like the following line.
class NewAssignableMethodsImpl extends CCAssignableMethodsBaseImpl {
7. To resolve the error indication, press Alt-Enter and click Import class. Import the class
[Link].
Result
Your new class looks like the following code.
package [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
construct(testEntity : UserAssignableEntity_Ext) {
super(testEntity)
}
Next steps
• “Step 3: Test assignment of your extension entity instance” on page 266
Procedure
1. Stop the server, if it is running.
2. Start the server from within Studio.
3. Correct any problems that occur and repeat the previous steps until the server starts without errors.
4. If you have not already done so, load the demonstration data into the database.
The next step requires this data.
5. Click Tools→Gosu Scratchpad to open the Studio Gosu Scratchpad.
6. Enter the following code in the Gosu Scratchpad tab.
uses [Link]
uses [Link]
uses [Link]
7. Click Run.
Output similar to the following lines appears in the Console tab.
true The assign method succeeded. Thus, it returns true.
Andy Applegate The user that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
Auto1 - TeamA The group that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
IMPORTANT The code and objects in this example refer to Guidewire ClaimCenter. However, the
principles involved in extending the data model apply to all Guidewire applications.
Procedure
1. In Guidewire Studio, open [Link] for editing or create a new entity extension.
a. Press Ctrl-N and start entering the entity type name.
Studio displays a number of matches because files with the name DynamicAssignmentState already
exist.
b. If [Link] appears in the list, double-click that file.
c. If [Link] is not in the list, create a new extension by navigating to
configuration→config→extensions→Entity. Right-click Entity and select New→Entity Extension. Enter
DynamicAssignmentState and click OK.
2. In the entity editor, add the following items to the DynamicAssignmentState extension.
fkentity User
nullok true
columnName LastTEAEUserId
fkentity Group
nullok true
columnName LastTEAEGrpId
fkentity User
nullok true
columnName LastTCAUserId
fkentity Group
nullok true
columnName LastTCAGrpId
3. Add fields to the file [Link]. If this file does not exist, you need to create it. Follow the
instructions in In Guidewire Studio, open [Link] for editing or create a new entity
extension. to search for [Link].
4. In the entity editor, add the following items to the GroupAssignmentState extension.
fkentity User
nullok true
columnName LastTEAEUserId
fkentity Group
nullok true
columnName LastTEAEGrpId
fkentity User
nullok true
columnName LastTCAUserId
fkentity Group
nullok true
columnName LastTCAGrpId
type integer
nullok true
type integer
nullok true
5. Add fields to the file [Link]. If this file does not exist, you need to create it.
Follow the instructions in In Guidewire Studio, open [Link] for editing or create a
new entity extension. to search for [Link].
6. In the entity editor, add the following items to the GroupUserAssignmentState extension.
type integer
nullok true
type integer
nullok true
Next steps
• “Step 2: Subclass class AssignmentType” on page 270
• “Step 3: Create class UserAssignableEntityExtEnhancement” on page 271
• “Step 4: Test round-robin assignment” on page 272
Procedure
1. Create a new class file in the package [Link] and name it
UserAssignableEntityExtAssignmentType.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Class.
c. Enter the name of the class in the text box.
For this example, enter the following class name.
UserAssignableEntityExtAssignmentType
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
2. Enter the following code in your class file.
package [Link]
uses [Link]
uses [Link]
uses [Link]
construct() {}
Studio indicates that the code is invalid in the get AssignableClass method definition because you have not
yet created the necessary UserAssignableEntity_Ext Gosu enhancement. You create this entity
enhancement in the next step.
Next steps
• “Step 3: Create class UserAssignableEntityExtEnhancement” on page 271
• “Step 4: Test round-robin assignment” on page 272
Procedure
1. Create a new enhancement file and name it UserAssignableEntityExtEnhancement.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Enhancement.
c. Enter the UserAssignableEntity_Ext in the Enhanced type text box.
The text that you enter filters the available entity types. If multiple selections are shown, ensure that you
select UserAssignableEntity_Ext. This entity type is the one that you need to enhance.
d. Enter the name of the class in the Type to enhance text box.
Example: Creating assignable entities 271
Guidewire PolicyCenter 9.0.9 Configuration Guide
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
e. Click OK.
2. Enter the following code in the enhancement file.
package [Link]
uses [Link]
Next steps
• “Step 4: Test round-robin assignment” on page 272
Procedure
1. Stop the server, if it is running.
2. Start the server from within Studio.
3. Correct any problems that occur and repeat the previous steps until the server starts without errors.
4. If you have not already done so, load the demonstration data into the database.
The next step requires this data.
5. Click Tools→Gosu Scratchpad to open the Studio Gosu Scratchpad.
6. Enter the following code in the Gosu Scratchpad tab.
uses [Link]
uses [Link]
uses [Link]
7. Click Run.
Output similar to the following lines appears in the Console tab.
Pass 1:
true The assign method succeeded. Thus, it returns true.
Andy Applegate The user that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
Auto1 - TeamA The group that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
true The assignUserByRoundRobin method succeeded. Thus, it returns true.
Andy Applegate The assignUserByRoundRobin method assigns the object to the next person in the group.
Pass 2:
true The assign method succeeded. Thus, it returns true.
Andy Applegate The user that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
Auto1 - TeamA The group that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
true The assignUserByRoundRobin method succeeded. Thus, it returns true.
Sue Smith The assignUserByRoundRobin method assigns the object to the next person in the group.
Pass 3:
true The assign method succeeded. Thus, it returns true.
Andy Applegate The user that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
Auto1 - TeamA The group that is assigned the newExtEntity (UserAssignableEntity_Ext) object.
true The assignUserByRoundRobin method succeeded. Thus, it returns true.
Betty Baker The assignUserByRoundRobin method assigns the object to the next person in the group.
IMPORTANT The code and objects in this example refer to Guidewire ClaimCenter. However, the
principles involved in extending the data model apply to all Guidewire applications.
Procedure
1. Create the new extension entity type.
a. In Studio, navigate to configuration→config→extensions→Entity.
b. Right-click Entity and select New→Entity.
2. Provide the required information for the new entity type definition.
a. Enter the name of the extension entity type in the text field.
To follow the rest of this procedure, use the name TestClaimAssignable_Ext.
b. In Entity Type, select entity.
c. In Desc, type:
CCAssignable extension entity, which has a foreign key back to Claim, used for testing
d. In Type, select retireable.
e. Select the check boxes Extendable and Final.
f. Click OK.
3. In the entity editor, add the following items to TestClaimAssignable_Ext.
exportable true
fulldescription Simple test assignable with a foreign key back to Claim. This foreign
key, together with the CCAssignableMethods delegate in
TestClaimAssignableMethodsImpl, allows this entity type to participate
in manual assignment, assignment to claim owner and cascading. An
instance of this type also creates history events as it is assigned.
impl [Link]
fkentity Claim
nullok false
columnName ClaimID
exportable false
Result
Notice the following:
• Entity TestClaimAssignable_Ext implements the CCAssignable delegate.
• Entity TestClaimAssignable_Ext uses class TestClaimAssignableMethodsImpl, which implements the
CCAssignableMethods interface, to define the necessary assignment methods and properties.
• Entity TestClaimAssignable_Ext has a foreign key back to Claim.
Next steps
• “Step 2: Add foreign keys to assignable entity types” on page 275
• “Step 3: Create new assignment type for extension entity type TestClaimAssignable_Ext” on page 275
• “Step 4: Create enhancement class TestClaimAssignableExtEnhancement” on page 277
274 chapter 18: Example: Creating assignable entities
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. In Guidewire Studio, open [Link] for editing or create a new entity extension.
a. Press Ctrl-N and start entering the entity type name.
Studio displays a number of matches because files with the name Claim already exist.
b. Find [Link] in the list and double-click that file.
2. In the entity editor, add the following items to the Claim extension.
arrayentity TestClaimAssignable_Ext
3. Add fields to the file [Link]. If this file does not exist, you need to create it. Follow the instructions in
In Guidewire Studio, open [Link] for editing or create a new entity extension. to search for
[Link].
4. In the entity editor, add the following items to the Activity extension.
arrayentity TestClaimAssignable_Ext
nullok true
Next steps
• “Step 3: Create new assignment type for extension entity type TestClaimAssignable_Ext” on page 275
• “Step 4: Create enhancement class TestClaimAssignableExtEnhancement” on page 277
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 278
• “Step 6: Add the necessary permission for the extension entity type” on page 279
• “Step 7: Test assignment of the assignable entity type” on page 281
Procedure
1. Create a new class file in the package [Link] and name it
TestClaimAssignableExtAssignmentType.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Class.
c. Enter the name of the class in the text box.
For this example, enter the following class name.
TestClaimAssignableExtAssignmentType
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
d. Click OK.
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
2. Enter the following code in the class file.
package [Link]
uses [Link]
uses [Link]
uses [Link]
construct() { }
Next steps
• “Step 4: Create enhancement class TestClaimAssignableExtEnhancement” on page 277
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 278
• “Step 6: Add the necessary permission for the extension entity type” on page 279
• “Step 7: Test assignment of the assignable entity type” on page 281
Procedure
1. Create a new enhancement file and name it TestClaimAssignableExtEnhancement.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Enhancement.
c. Enter the TestClaimAssignable_Ext in the Enhanced type text box.
d. Enter the name of the class in the Type to enhance text box.
For this example, enter the following class name.
TestClaimAssignableExtEnhancement
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
e. Click OK.
2. Enter the following code in the enhancement file.
package [Link]
uses [Link]
Next steps
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 278
• “Step 6: Add the necessary permission for the extension entity type” on page 279
• “Step 7: Test assignment of the assignable entity type” on page 281
Example: Creating assignable entities 277
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. Create a new class file in the package [Link] and name it TestClaimAssignableMethodsImpl.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Class.
c. Enter the name of the class in the text box.
For this example, enter the following class name.
TestClaimAssignableMethodsImpl
d. Click OK.
Studio creates a skeleton class file in the assignment folder and opens the file in an editor tab.
2. Enter the following code in the file.
package [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
/**
* Example CCAssignableMethods implementation for an assignable entity that is related to a claim,
* and which can be manually assigned, assigned to claim owner, or cascaded. Also creates a history
* event as it is assigned.
*/
construct(testEntity : TestClaimAssignable_Ext) {
super(testEntity)
}
Studio indicates that your newly created class contains a serious error because there is no method definition
for [Link]. You need to provide at least a skeleton body
of this method. The next step resolves this issue.
3. Open [Link] for editing and add the following code.
Next steps
• “Step 6: Add the necessary permission for the extension entity type” on page 279
• “Step 7: Test assignment of the assignable entity type” on page 281
Step 6: Add the necessary permission for the extension entity type
Each extension entity type that has a foreign key to another entity type must set up and handle the permissions for
users to assign instances of this entity type.
• Assign this role to any user that needs to assign the new assignable entity.
If you do not perform these steps correctly, you see the following error if you attempt to assign your assignable
entity:
Procedure
1. Navigate to configuration→config→Security.
2. In this folder, double-click [Link].
The file [Link] opens in an editor tab. You use this file to define system permissions for the
data model entities.
3. Inside the SecurityConfig element, add the following code.
This code defines a permission that you can assign to a user to enable that person to assign an entity instance
of types TestClaimAssignable_Ext and UserAssignableEntity_Ext.
<!-- Permission key needed for assigning extension entity in testing-->
<StaticHandler entity="UserAssignableEntity_Ext" permKey="own">
<SystemPermType code="ownsensclaim"/>
<SystemPermType code="InternalTools"/>
<SystemPermType code="ext_entity_perms"/>
</StaticHandler>
Field Entry
code ext_entity_perms
6. To see your new system permission in Guidewire PolicyCenter, stop and restart the application server.
a. Stop the server, if it is running.
b. Start the server from within Studio.
c. Correct any problems that occur and repeat the previous steps until the server starts without errors.
7. Log into PolicyCenter, using an administrative account.
This example assumes the use of Guidewire ClaimCenter. You must be logged in as an administrator to be
able to access the Administration tab. Additionally, that administrator account must have a role with the Manage
Roles and View Roles permissions to be able to view and edit the Roles screen.
8. If you have not already done so, load the demonstration data into the database.
The next step requires this data.
280 chapter 18: Example: Creating assignable entities
Guidewire PolicyCenter 9.0.9 Configuration Guide
Next steps
• “Step 7: Test assignment of the assignable entity type” on page 281
Procedure
1. In Studio, click Tools→Gosu Scratchpad to open the Studio Gosu Scratchpad.
2. Enter the following code in the Gosu Scratchpad tab.
var _users = Query. make(User).join(User# Credential).compare(Credential# UserName, Equals, "aapplegate")
var _usr = _users.select(). AtMostOneRow
var _group = _usr. GroupUsers[ 0]. Group
//Print out the members of the chosen group
print( "\nChosen group " + _group. DisplayName + " contains the following members:")
_group. [Link](\name -> print( "\t" + name. User. DisplayName))
3. Click Run.
Output similar to the following lines appears in the Console tab.
Chosen group Auto1 - TeamA contains the following members:
Elizabeth Lee
Charles Shaw
Heidi Johnson
Cathy Clark
Felicity Wagner
Gary Wang
Dan Henson
Eugene Nyugen
Betty Baker
Chris Craft
Andy Applegate
Sue Smith
Claim number = 235-53-365870
Pass 1: Assigning claim (with claim number = 235-53-365870) to the test assignment object
The assigned user is Andy Applegate
The assigned group is Auto1 - TeamA
For assignUserByRoundRobin, AssignedUser = Dan Henson
Pass 2: Assigning claim (with claim number = 235-53-365870) to the test assignment object
The assigned user is Andy Applegate
The assigned group is Auto1 - TeamA
For assignUserByRoundRobin, AssignedUser = Eugene Nyugen
Pass 3: Assigning claim (with claim number = 235-53-365870) to the test assignment object
The assigned user is Andy Applegate
The assigned group is Auto1 - TeamA
For assignUserByRoundRobin, AssignedUser = Felicity Wagner
Pass 4: Assigning claim (with claim number = 235-53-365870) to the test assignment object
The assigned user is Andy Applegate
The assigned group is Auto1 - TeamA
For assignUserByRoundRobin, AssignedUser = Gary Wang
Pass 5: Assigning claim (with claim number = 235-53-365870) to the test assignment object
The assigned user is Andy Applegate
The assigned group is Auto1 - TeamA
For assignUserByRoundRobin, AssignedUser = Heidi Johnson
Data types
This topic describes the Guidewire data types, what they are, how to customize a data type, and how to create a new
data type.
See also
• Globalization Guide
Related concepts
“Overview of data types” on page 283
“The data types configuration file” on page 285
“Customizing base configuration data types” on page 287
“Working with the medium text data type (Oracle)” on page 289
“Working with the VARCHAR data type (SQL Server)” on page 289
“The data type API” on page 290
“Defining a new tax identification number data type” on page 292
Related tasks
“Define a new data type” on page 291
Axis Description
Constraint A data type can restrict the range of allowable values. For example, a String data type can restrict values to a
maximum character limit.
Persistence A data type can specify how PolicyCenter stores a value in the database and in the object layer. For example,
one String data type can store values as CLOB (Character Large Object) objects. Another String data type can
store values as VARCHAR objects.
Presentation A data type can specify how the PolicyCenter interface treats a value. For example, a String data type can spec‐
ify an input mask to use in assisting the user with data entry.
Guidewire stores the definitions for the base configuration data types in *.dti files in the datatypes directory.
Each file corresponds to a separate data type, which the file name specifies.
Every data type has an associated Java or Gosu type (defined in the valueType attribute). For example, the
associated type for the datetime data type is [Link]. Thus, you see the following XML code in the
[Link] file.
<DataTypeDef xmlns="[Link]
type="[Link]"
valueType="[Link]">
...
In a similar manner, the decimal data type has an associated type of [Link].
<DataTypeDef xmlns="[Link]
type="[Link]"
valueType="[Link]">
...
Operation Description
Customize an exist‐ Modify the data type definition in file [Link], which you access through Studio. You can modify
ing data type only a select subset of the base configuration data types.
See “Customizing base configuration data types” on page 287.
Create a new data Create a .dti definition file and place it in modules→configuration→config→datatypes. You also need to
type create Gosu code to manage the data type.
See “Define a new data type” on page 291.
Override the data Override the parameterization of the data type on individual columns (fields) on an entity. For example,
type on a column you can make a VARCHAR column in the base data model use encryption by extending the entity and
setting the encryption parameter on a <columnParam> element.
If you add too many large fields to any one table, you can easily reach the maximum row size of a table. In
particular, this is a problem if you add a large number of long text or VARCHAR fields. Have your company database
administrator (DBA) determine the maximum row size and increase the page size, if needed.
The annotation requires you to provide the name of the data type along with any parameters that you want to supply
to the data type.
• You associate a data type with a metadata property by specifying the type attribute on the <column> element.
• You specify any parameters for the data type with <columnParam> elements, which are children of the <column>
element.
Each data type has a value type. You can associate a data type only with a property that has a feature type that
matches the data type of the value type. For example, you can only associate a String data type with String
properties.
Note: Guidewire PolicyCenter does not enforce this restriction at compile time. (However,
PolicyCenter does check for any exception to this restriction at application server start up.) Guidewire
permits annotations on any allowed feature, as long as you supply the parameters that the annotation
requires. Therefore, you need to be aware of this restriction and enforce it yourself.
PolicyCenter lets you modify certain attributes on a subset of the base configuration data types by using the
[Link] configuration file. You can access this file in Guidewire Studio™ from
Data types 285
Guidewire PolicyCenter 9.0.9 Configuration Guide
configuration→config→fieldvalidators. You can modify the values of certain attributes in this file to customize how
these data types work in PolicyCenter.
This [Link] file contains the following elements:
WARNING Modify the [Link] file with caution. If you modify the file incorrectly, you
can invalidate your PolicyCenter installation.
<...DataType>
The <...DataType> element is the basic element of the [Link] file. It assigns default values to base
configuration data types that you can customize. This element starts with the specific data type name. For example,
the element for the PercentageDec data type in the [Link] file is <PercentageDecDataType>.
The <...DataType> element has the following attributes:
Attribute Description
length Assigns the maximum character length of the data type.
validator Binds the data type to a given validator definition. It must match the name attribute of the validator definition.
cause upgrade errors or failure warnings. Therefore, Guidewire recommends that you exercise extreme caution in
making changes to type definitions.
See also
• For information on field validators in general, see “Field validation” on page 297.
• For information on how to localize field validation, see the Globalization Guide.
Related concepts
“Field validation” on page 297
Related references
“List of customizable data types” on page 288
//File [Link]
<FieldValidators>
...
<ValidatorDef description="[Link]" input-mask="###-###-#### x####" name="Phone"
value="[0-9]{3}-[0-9]{3}-[0-9]{4}( x[0-9]{0,4})?"/>
...
</FieldValidators>
See also
• Globalization Guide
For example:
var property = [Link]("ClaimNumber")
var claimNumberDataType = [Link](property)
It may seem odd that the getLength([Link], [Link]) method (in this
example) takes the claim and the claim number property. The reason for this is that the constraint and presentation
aspects of data types are dynamic, meaning that they are based on context.
Many of the methods on [Link] and [Link] take a
context object, representing the owner of the property with the data type, along with the property in question. This
allows the implementation to provide different behavior, based on the context. If you do not have the context object
or property, then you can pass null for either of these arguments.
If you implement a data type, then you must handle the case in which the context is unknown.
Procedure
1. Create a .dti file (data type declaration file) to register the data type within Guidewire PolicyCenter. In
Guidewire Studio, do the following:
a. In the Project tool window, navigate to configuration→config→datatypes.
b. Right-click datatypes, and then click New→File.
c. Enter the name of the data type, followed by the .dti extension.
For example, to create a data type named Age, type [Link].
You must enter definitions for the following items for the data type. If necessary, view other samples of
datatype definition files to determine what you need to enter.
• Name
• Value type
• Parameters
• Implementation type
2. Create a data type definition class that implements the [Link] interface. This class
must include writable property definitions that correspond to each parameter that the data type accepts.
3. Create data type handler classes for each of the three aspects of the data type (constraints, persistence, and
presentation). These classes must implement the following interfaces:
• [Link]
• [Link]
• [Link]
Guidewire provides a number of implementations of these three interfaces for the standard data types. For
example, you can create your own CLOB-based data types by defining a data type that uses the
ClobPersistenceHandler class. To access the handler interface implementations or to view a complete list,
enter the following within Gosu code:
[Link].*
Result
After you create the data type, you will want to use the data type in some useful way.
Example
For example, you can create an entity property that uses that data type and then expose that property as a field within
PolicyCenter.
Data types 291
Guidewire PolicyCenter 9.0.9 Configuration Guide
Next steps
For a discussion of constraints, persistence, and presentation as it relates to data types, see “Overview of data types”
on page 283.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→datatypes.
2. Right-click datatypes, and then click New→File.
3. Enter [Link] as the file name. This action creates an empty data type file and places it in the datatypes
folder.
4. Enter the following text in the file:
<?xml version="1.0"?>
<DataTypeDef xmlns="[Link] type="[Link]"
valueType="[Link]">
<ParameterDef name="countryProperty" desc="The name of a property on the owning entity,
whose value contains the country with which to validate and format values."
required="true" type="[Link]"/>
</DataTypeDef>
parameter contactType
Next steps
After completing this task, complete “Step 2: Implement the IDataTypeDef Interface” on page 293.
See also
• For details on the attributes and elements relevant to the data type definition, see “The PolicyCenter data model”
on page 169.
292 chapter 19: Data types
Guidewire PolicyCenter 9.0.9 Configuration Guide
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
// Check that the CountryProperty names an actual property on the owning type, and that
// the type of the property is [Link].
var countryProp = [Link](CountryProperty)
if (countryProp == null) {
}
}
}
Note that the class defines a property named CountryProperty, which the system calls to pass the
countryProperty parameter. Also notice how the implementation reads the value of CountryProperty as its
constructs its constraints and presentation handlers. Guidewire guarantees to fill the implementation parameters
before calling the handlers.
In the example code, the class refers to constraints and presentation handlers created specifically for this data type.
However, it also reuses a Guidewire-provided persistence handler, the VarcharPersistenceHandler. You do not
usually need to create your own persistence handler, as Guidewire defines persistence handlers for all the basic
database column types.
Next steps
After completing this task, complete “Step 3: Implement the data type aspect handlers” on page 294.
However, if you define a new data type, you must implement the following:
[Link]
This separation of interfaces allows the definition of a caller-friendly interface for data type clients and a
implementation-friendly interface for data type designers.
The example data type defines a handler for both constraints and presentation.
Class TaxIDConstraintsHandler
This class looks similar to the following:
package [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
construct(countryProperty : String) {
_countryProperty = countryProperty
}
switch (country) {
case "US": validateUSTaxID(ctx, prop, value as [Link])
break
// other countries ...
}
switch (country) {
case "US": return ctx typeis Person ? 11 : 10
// other countries ...
}
return null
Class TaxIDPresentationHandler
This class looks similar to the following:
package [Link]
uses [Link]
uses [Link]
construct(countryProperty : String) {
_countryProperty = countryProperty
}
switch (getCountry(ctx)) {
case "US": return ctx typeis Person ? "###-##-####" : "##-#######"
// other countries ...
}
return null
Notice how each of these handlers makes use of the context object in order to determine the type of input mask and
validation string to use.
Field validation
Field validators handle simple validation for a single field. A validator definition defines a regular expression,
which a data field must match to be valid. It can also define an optional input mask that provides a visual indication
to the user of the data to enter in the field.
Each field in PolicyCenter has a default validation based on its data type. For example, integer fields can contain
only numbers. However, it is possible to use a field validator definition to override this default validation.
• You can apply field validators to simple data types, but not to typelists.
• You can modify field validators for existing fields, or create new validators for new fields.
For complex validation between fields, use validation-specific Gosu code instead of simple field validators.
Field validators specify only the validation properties for a general kind of input (for example, any postal code).
They do not specify the properties of a specific field in a particular data view. Instead, detail views and editable list
views include additional validation attributes in their configuration files.
Apply any field validators for elements existing on a delegate entity to the delegate entity. Do not apply any field
validators to the entities that inherit the elements from the delegate. Applying a field validator to an element on the
delegate entity ensures that PolicyCenter applies the field validator uniformly to that data element in whatever code
utilizes the delegate.
In the previous example, each validator definition specifies a value and an input-mask. These attributes have
different uses, as follows:
value A value is a regular expression that the field value must match for the data to be valid. PolicyCenter persists this
value to the database, including any defined delimiters or characters other than the # character.
input- An input-mask, which is optional, assists the user in entering valid data. PolicyCenter displays the input mask when
mask the field opens for editing. For example, a # character indicates that the user must enter a digit for this character.
These characters disappear when the user starts to enter data.
The input mask guides the user to enter to valid sequences for the regular expression defined in the value attribute.
After the user enters a value, PolicyCenter uses the regular expression to validate the field data as it sets the field on
the object.
See also
• Globalization Guide
Related references
“<FieldValidators>” on page 298
“<ValidatorDef>” on page 298
<FieldValidators>
The <FieldValidators> element is the root element in the [Link] file. It contains the XML
subelement <ValidatorDef>.
<ValidatorDef>
The <ValidatorDef> subelement of <FieldValidators> is the beginning element for the definition of a validator.
This element has the following attributes:
• “description” on page 299
• “floor, ceiling” on page 299
• “input-mask” on page 299
• “name” on page 299
• “placeholder-char” on page 299
• “validation-level” on page 299
• “validation-type” on page 300
298 chapter 20: Field validation
Guidewire PolicyCenter 9.0.9 Configuration Guide
description
The description attribute specifies the validation message to show to a user who enters bad input. The description
refers to a key in the display_languageCode.properties file that contains the actual description text. The naming
convention for this display key is Validator.validator_name.
In the display text in the properties file, {0} represents the name of the field in question. PolicyCenter determines
this at runtime dynamically.
floor, ceiling
The floor and ceiling attributes are optional attributes that specify the minimum (floor) and maximum
(ceiling) values for the field. For example, you can limit the range to 100-200 by setting floor="100" and
ceiling="200".
Use floor and ceiling range values for numeric fields only. For example, use the floor and ceiling attributes to define
a Money validator:
<ValidatorDef description="[Link]"
input-mask="" name="Money"
ceiling="9999999999999999.99"
floor="-9999999999999999.99"
value=".*"/>
input‐mask
The input-mask attribute is optional. It specifies a visual indication of the characters that the user can enter.
PolicyCenter displays the input mask temporarily to the user during data entry. When the user starts to enter text, the
input mask is no longer visible.
The input mask definition consists of the # symbol and other characters:
• The # symbol represents any character the user can type.
• Any other character represents itself in a non-editable form. For example, in an input mask of ###-###-##, the
two hyphen characters are a non-editable part of the input field.
• Any empty input mask of "" is the same as not having the attribute at all.
• A special case is a mask with fixed characters on the end. PolicyCenter displays those characters outside of the
text field. For example ####mph appears as a field #### with mph on the outside end of it.
name
The name attribute specifies the name of the validator. A field definition uses this attribute to specify which validator
applies to the field.
placeholder‐char
The placeholder-char attribute specifies a replacement value for the input mask display character, which defaults
to a period (.) For example, use the placeholder-char attribute to display a dash character instead of the default
period.
validation‐level
This attribute can be set to one of the following values:
Attribute Description
none Disables the validator.
Attribute Description
relaxed Ignores warnings or partial validation.
strict (default) Treats partially validation or warnings as errors.
validation‐type
Specifies whether to use a regular expression or Gosu class for the validation.
This attribute can be set to one of the following values:
Attribute Description
gosu The value of the <ValidatorDef> is a Gosu class. The Gosu class must extend FieldValidatorBase and override
the validate method. See [Link] for an example. Ensure that any Gosu valida‐
tors that you define are low‐latency for performance reasons.
regex (de‐ The value of the <ValidatorDef> defines a regular expression that PolicyCenter uses to validate data entered
fault) into a field that uses the field validator.
value
The value attribute specifies the acceptable values for the field. It is in the form of a regular expression.
PolicyCenter does not persist this value (the regular expression definition) to the database.
Use regular expressions with String values only. Use floor and ceiling range values for numeric fields, for example,
Money.
PolicyCenter uses the Java regex package described in the following location for regular expression parsing:
[Link]
() Parentheses define the order in which PolicyCenter evaluates an expression, just as with any parentheses.
[] Brackets indicate acceptable values. For example:
• [Mm] indicates the letters M or m.
• [0-9] indicates any value from 0 to 9.
• [0-9a-zA-Z] indicates any alphanumeric character.
{} Braces indicate the number of characters. For example:
• [0-9]{5} allows five positions containing any character (number) between 0 and 9.
• {x} repeats the preceding value x times. For example, [0-9]{3} indicates any 3‐digit integer such as 031 or 909, but
not 16.
• {x,y} indicates the preceding value can repeat between x and y times. For example, [abc]{1,3} allows values such
as cab, b, or aa, but not rs or abca.
? A question mark indicates one or zero occurrences of the preceding value. For example, [0-9]x? allows 3x or 3 but not
3xx. ([Mm][Pp][Hh])? means mph, MpH, MPH, or nothing.
()? Values within parentheses followed by a question mark are optional. For example, (-[0-9]{4})? means that you can
optionally have four more digits between 0 and 9 after a dash -.
* An asterisk means zero or more of the preceding value. For example, (abc)* means abc or abcabc but not ab.
+ A plus sign means one or more of the preceding value. For example, [0-9]+ means any number of integers between 0
and 9 (but none is not an option).
See also
• Globalization Guide
Suppose that you want to create a validator for a Date of Birth field ([Link]). To create this validator,
you need to perform the following steps in Studio.
Procedure
1. Create a [Link] file if one does not exist and add the following to it.
<extension entityName="Person">
<column-override name="DateOfBirth">
<columnParam name="validator" value="DateOfBirth"/>
</column-override>
</extension>
In this case, you can potentially create different DateOfBirth validators in different country-specific
fieldvalidators files.
The use of the logicalSize parameter does not affect the actual length of the column in the database. It merely
affects how many characters a user can enter into a text field.
Within Guidewire PolicyCenter, a typelist represents a predefined set of possible values, with each separate value
defined as a typecode. Typically, you experience a typelist as drop-down list within Guidewire PolicyCenter that
presents the set of available choices. You define and manage typelists through Guidewire Studio.
See also
• Globalization Guide
Related concepts
“What is a typelist?” on page 303
“Terms related to typelists” on page 304
“Typelists and typecodes” on page 304
“Typelist definition files” on page 305
“Different kinds of typelists” on page 306
“Working with typelists in Studio” on page 307
“Typekey fields” on page 311
“Removing or retiring a typekey” on page 313
“Typelist filters” on page 314
“Static filters” on page 315
“Dynamic filters” on page 320
“Typecode references in Gosu” on page 322
“Mapping typecodes to external system codes” on page 323
What is a typelist?
IMPORTANT Ensure that you fully understand the dependencies between typelists and other
application files before you modify a typelist. Incorrect changes to a typelist can cause damage to the
PolicyCenter data model.
Guidewire PolicyCenter displays many fields in the interface as drop-down lists of possible values. The list of
available values for a drop-down field is called a typelist. Typelists limit the acceptable values for many fields within
Working with typelists 303
Guidewire PolicyCenter 9.0.9 Configuration Guide
the application. Thus, a typelist represents a predefined set of possible values, with each separate value defined as a
typecode. Whenever there is a drop-down list in the PolicyCenter interface, it is usually a typelist.
For example, the PolicyCenter Contact page that you access as you edit policy vehicle information contains several
different typelists. One of these is the Marital Status typelist that provides the available values from which you can
choose as you enter information about a vehicle owner.
Typelists are very common for coding fields on the root objects of an application. They are also common for status
fields used for application logic. Some typelist usage examples from the Data Dictionary include:
• [Link] uses a simple list.
• [Link] uses a list filtered by VehicleType (that is, choices for this body type depend on
the value of the vehicle type).
Besides displaying the text describing the different options in a drop-down list, typelists also serve a very important
role in integration. Guidewire recommends that you design your typelists so that you can map their typecodes
(values) to the set of codes used in your legacy applications. This is a very important step in making sure that you
code a policy in PolicyCenter to values that can be understood by other applications within your company.
Term Definition
typelist A defined set of values that are usually shown in a drop‐down list within PolicyCenter.
typecode A specific value in a typelist.
typefilter A typelist that contains a static (fixed) set of values.
keyfilter A typelist that dynamically filters another typelist.
typekey The identifier for a field in the data model that represents a direct value chosen from an associated typelist.
Related concepts
Limit the size of typelists to 2,000 typecodes. Because of Java's limit on the size of the class initialization method,
PolicyCenter makes nested classes to implement typelists that have more than 2,048 typecodes. These nested classes
affect how you refer to individual typecodes.
The maximum supported number of typecodes in a typelist is 8,192.
304 chapter 21: Working with typelists
Guidewire PolicyCenter 9.0.9 Configuration Guide
Note: For a SystemPermissionType typelist, the upper limit on the number of typecodes is 7,000
rather than 8,192.
If you have more than 2,048 typecodes in a typelist, PolicyCenter creates nested classes that can each contain an
additional 2,048 typecodes. A new nested class is created if you create a new typecode and the currently used class
contains 2,048 typecodes. To keep the number of nested classes in the base typelist class to a minimum, the entity
code generator adjusts the nested classes as you add and subtract typecodes. These adjustments can change the path
that you use to refer to a particular typecode.
Adhering to a soft limit of 2,000 typecodes provides some room to grow your typelist. This soft limit also aids in
avoiding splitting the typelist into multiple typelists or a nested-class typelist. To adhere to this soft limit, consider
breaking up large typelists by prominent characteristics of your business.
IMPORTANT If at all feasible, keep the size of your typelists under 2,048 typecodes, the maximum
number of typecodes for a single-class typelist. A typelist with more than 2,048 typecodes uses nested
classes. In this case, you must maintain proper references to the typecodes as their allocation among
the nested classes changes. If you fail to maintain appropriate typecode references, PolicyCenter does
not compile.
Using a lookup table for a typelist with more than 2,048 typecodes
If your PolicyCenter implementation does require a typelist with more than 2,048 typecodes, Guidewire strongly
recommends that you use a lookup table, such as a custom entity type, instead of a typelist. By using a custom entity
type, you can ensure referential integrity by using foreign keys to reference the codes in other entity types. If you
add or remove codes from the list, you need to update only the lookup table. You do not need to change your code
that accesses the codes through the lookup table.
If you use a database table to perform the look up, you can use a query to retrieve the codes.
Alternatively, you can use other lookup structures such as XML files.
Internal typecodes
Some typelists contain required internal typecodes that PolicyCenter references directly. Therefore, PolicyCenter
requires that these typecodes exist. Guidewire Studio™ displays internal typecodes in non-editable cells so that you
cannot edit or delete an internal typecode.
Localized typecodes
PolicyCenter supports localizing the individual typecodes in a typelist. See the Globalization Guide for more
information.
File Contains...
type
tti A single typelist declaration. The name of the file prior to the extension corresponds to the name of the typelist. This
can be either a Guidewire base configuration typelist or a custom typelist that you create through Studio.
File Contains...
type
ttx A single typelist extension. This can be a Guidewire‐exposed base application extension or a custom typelist exten‐
sion that you create.
tix A single typelist extension for use by Guidewire only. These are generally Guidewire internal extensions to base ap‐
plication typelists, for use by a specific Guidewire application.
Always create, modify, and manage typelist definition files through Guidewire Studio. Do not edit the XML typelist
files directly.
See also
• “Data entity metadata files” on page 171
Internal typelists
A few of the typelists in the application are internal. Guidewire controls these typelists because PolicyCenter needs
to know the list of acceptable values in advance to support application logic. Guidewire makes these typelists final
by setting the final attribute to true in the data model. For example, ActivityType is an internal typelist because
PolicyCenter implements specific behavior for known activity types.
Guidewire Studio™ disables your ability to add additional typecodes to internal typelists.
The following are examples of internal typelists that you cannot change:
• ActivityStatus
• ArrangementType
• BindOption
306 chapter 21: Working with typelists
Guidewire PolicyCenter 9.0.9 Configuration Guide
• BOPCost
Extendable typelists
Many of the existing typelists are under your control. You cannot delete them or make them empty, but you can
adjust the values (typecodes) within the list to meet your needs. PolicyCenter includes default typelists with sample
typecodes in them. You can customize these typelists for your business needs by adding additional typecodes, if you
want.
The ActivityCategory typelist is an example of an extendable typelist. If you want, you can add additional
typecodes other than the sample values that Guidewire provides in the base configuration.
Custom typelists
If you add a new field to the application, then it is possible that you also need to add an associated typelist. You can
only access these typelists through new extension fields. For more information on how to add a new field to the data
model, see “Extending a base configuration entity” on page 242.
To create a custom typelist, in the Project tools window, navigate to configuration→config→Extensions→Typelist. Right-
click on Typelist, and then click New→Typelist. Enter a name for the typelist, and then define your typecodes.
PolicyCenter limits the number of characters in a typecode to 50 or less.
For example, any modifications that you make to the AdditionalInsuredType typelist can potentially affect the
PolicyLine typelist that the AdditionalInsuredType typelist filters. Therefore, you must update all of the related
typelists.
After you open a typelist, Studio opens a typelist editor showing configuration options for that typelist.
Pay attention to the typelist file extension. For example, if you type AccidentPremises, Studio displays a list
that includes all components whose name contains that text. Typelists will have a file extension of .tti, .tix,
or .ttx. Look for the typelist that ends with the appropriate extension.
Result
Studio opens the file in the appropriate editor.
True You cannot add or delete typecodes from the typelist. You can only override certain attribute fields.
False You can modify or delete typecodes from this typelist, except for typecodes designated as internal, which you
cannot delete. (You cannot remove internal typecodes, but you can modify their name, description, and other
fields.)
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→Metadata, and then expand
Typelist.
2. Right-click the non-internal typelist that you want to extend, and then click New→Typelist Extension.
The file that you want to extend must be non-internal and have either a .tti or .tix file extension.
3. In the Typelist Extension dialog, Studio displays the name and location of the extension file it will create. Click
OK.
Result
Studio displays the name of your new file in the Extensions→Typelist folder and stores the new file at the following
location:
configuration/config/extensions/typelist
Entering typecodes
Each typecode represents one value in the drop-down list. Every typelist must have at least one typecode.
Working with typelists 309
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Typelist size recommendation” on page 304
During application start up, Guidewire upgrades the application database if there are any changes to the data model,
which includes any changes to a typelist or typecode.
See also
• “Typelists and typecodes” on page 304
• “Mapping typecodes to external system codes” on page 323
• Integration Guide
Typekey fields
A typekey field is an entity field that PolicyCenter associates with a specific typelist in the user interface. The
typelist determines the values that are possible for that field. Thus, the specified typelist limits the available field
values to those defined in the typelist. (Or, if you filter the typelist, the field displays a subset of the typelist values.)
For a PolicyCenter field to use a typelist to set values requires the following:
1. The typelist must exist. If it does not exist, then you must create it using Guidewire Studio.
2. The typelist must exist as a <typekey> element on the entity that you use to populate the field. If the
<typekey> element does not exist, then you must extend the entity and manually add the typekey.
3. The PCF file that defines the screen that contains your typelist field must reference the entity that you use to
populate the field.
See also
• “Example: Typekey field” on page 311
For example, in the base configuration, Guidewire declares a number of <typekey> elements on the Activity entity
([Link]), including the Priority typekey:
<entity entity="Activity" ... >
...
<typekey default="task"
desc="The class of the activity."
name="ActivityClass"
nullok="false"
typelist="ActivityClass"/>
<typekey desc="Priority of the activity with respect to other activities."
name="Priority"
nullok="false"
typelist="Priority"/>
<typekey default="open"
desc="Status of the activity."
exportable="false"
name="Status"
nullok="false"
typelist="ActivityStatus"/>
<typekey default="general"
desc="Type of the activity."
name="Type"
nullok="false"
typelist="ActivityType"/>
<typekey desc="Validation level that this object passed (if any) before it was stored."
exportable="false"
name="ValidationLevel"
typelist="ValidationLevel"/>
...
</entity>
After completing this step, complete “Step 3: Reference the typelist in the PCF file” on page 312.
See also
• For information on the <typekey> element, see “<typekey>” on page 220.
• For information on how to create data model entities, see “The PolicyCenter data model” on page 169.
• For information on how to modify existing data model entities, see “Modifying the base data model” on
page 237.
After completing this step, complete “Step 4: Update the data model” on page 313.
See also
• For information on working with the PCF editor, see “Using the PCF editor” on page 349.
• For information on working with PCF files in general, see “Introduction to page configuration” on page 363.
It is not possible to remove a typekey from a typelist marked as final. It is also not possible to remove a typekey
marked as internal. PolicyCenter indicates internal typekeys by placing their typecode values in gray, non-editable
cells. This makes these typecode values inaccessible and impossible to modify.
Remove a typekey
If you remove a typekey, you must ensure that PolicyCenter does not contain code that refers to that typekey.
Procedure
1. Navigate to the typelist that contains the typekey that you want to remove.
2. Click the typekey, and then click Remove .
3. Search for additional references to the typekey in the application files and remove any that apply. Pay
particular attention to .descriptor files. To remove a typekey reference:
a. Perform a case-insensitive text search throughout PolicyCenter files to find all references to the deleted
typekey.
b. Open these files in Studio and modify as necessary.
Retire a typekey
Procedure
1. Navigate to the typelist that contains the typekey that you want to retire.
2. Select the Retired cell of the typekey that you want to retire.
3. Set the cell value to true.
Next steps
If you retire a typekey, Guidewire recommends that you perform the steps outlined in “Remove a typekey” on
page 314 to identify any issues with the retirement:
• Verify all Studio resources.
• Perform a case-insensitive search in the application files for the retired typekey.
Typelist filters
It is possible to configure a typelist so that PolicyCenter filters the typelist values so that they do not all appear in the
drop-down list (typelist) in the PolicyCenter interface. Guidewire divides typelist filters into the following
categories:
Static filters
A static typelist filter causes the typelist to display only a subset of the typecodes for that typelist. Therefore, a static
filter narrows the list of typecodes to show in the typelist view in the application. Guidewire calls this kind of
typelist filter a static typefilter.
In the Typelist editor of Guidewire Studio™, you define a static filter at the level of the typelist by defining a
typefilter for that particular typelist.
Studio manages the typelist XML file for you automatically. If you examine this file, you see that Studio uses the
following XML syntax to define a static typelist filter. (In this case, a static filter that defines—or includes—a subset
of the available typecodes.)
<typelistextension xmlns="[Link] desc="Yes, no or unknown" name="YesNo">
<typecode code="No" desc="No" name="No" priority="2"></typecode>
<typecode code="Yes" desc="Yes" name="Yes" priority="1"></typecode>
<typecode code="Unknown" desc="Unknown" name="Unknown" priority="3"/>
<typefilter desc="Only display Yes and No typelist values" name="YesNoOnly">
<include code="Yes"/>
<include code="No"/>
</typefilter>
</typelistextension>
The XML in this example declares each typecode on the typelist (Yes, No, and Unknown). It then defines a filter
named YesNoOnly that limits the available values to simply Yes and No. This filter is the static (fixed) filter.
See also
Procedure
Attribute Description
name The name of the filter. PolicyCenter uses this value to determine if a field uses this filter.
desc Description of the context for which to use this typefilter.
Attribute Description
includeAll (Boolean) Typically, you only set this value to true if you use the exclude functionality.
• true indicates that the typelist view starts with the full list of typecodes. You then use exclusions to
narrow down the list.
• false (the default) instructs PolicyCenter to use values set in the various subpanes to modify the
typelist view in the application.
6. In the appropriate data model file, add a <typefilter> element to the child <typekey> for this typelist. To be
useful, you must declare a static typelist filter (a typefilter) on that entity. Use the following XML syntax:
<typekey name="FieldName" typelist="Typelist" desc="DescriptionString" typefilter="FilterName"/>
You must manually add a typelist to an entity definition file. Studio does not do this for you.
For example:
• The following code adds an unfiltered YesNo typelist to an entity:
<typekey desc="Some Yes/No question." name="YesNoUnknown" typelist="YesNo"/>
7. (Optional) Regenerate the Data Dictionary and verify that there are no validation errors.
8. Stop and restart the application server to update the data model.
See also
• “Typekey fields” on page 311
Then, for each City typecode, you need to set a category, similar to the following:
1. Click on a typecode.
2. In the selector next to Add , click Add Categories.
3. Select one or more typecodes to apply to this category.
4. Click Next.
5. In the Typelist pane, click the associated category typelist.
6. In the Category pane, click the associated category typecode.
7. Click Finish.
Do this for each of the following:
To generalize this example to regions outside the United States, you could associate the Jurisdiction typelist and a
specific jurisdiction with each city typecode instead.
After making your choices, you have something that looks similar to the following:
4. For the category, set the code to CA, and the typelist to State.
This action creates a static category filter that contains only cities that are in the state of California. Initially, the
typelist contains Los Angeles, San Francisco, and San Diego. If you add additional cities to the list at a later time
that also exist in California, then the typelist displays those cities as well.
To be useful, you need to also do the following:
• Add the typelist to the entity that you want to display the typelist in the PolicyCenter user interface.
• Reference the typelist in the PCF file in which you want to display the typelist.
See “Typekey fields” on page 311 for more information on declaring a typelist on an entity and referencing that
typelist in a PCF file. In general, though, you need to add something similar to the entity definition that want to
display the typelist:
<typekey name="California" typelist="City" typefilter="California" nullok="true"/>
1. Open the typelist that you want to filter in the Guidewire Studio™ Typelists editor.
Dynamic filters
A typecode filter uses categories and category lists at the typecode level to restrict or filter a typelist. Typecode
filters use a parent typecode to restrict the available values on the child typecode.
You define a typecode filter directly on a typecode in Guidewire Studio™. In the Typelist editor, you select a specific
typecode and set a filter, or category, on that typecode.
There are two types of typecode filters that you can define:
activity pattern (Administration→Business Settings→Activity PatternsNew Activity Pattern). Within the New Activity Pattern
screen, you see the following drop-down lists:
• Type
• Category
PolicyCenter automatically sets the default value of Type to General. This value determines the available choices
that you see in the Category drop-down list. For example:
• Correspondence
• General
• Interview
• New mail
• ...
The ActivityCategory typelist is the typelist that controls what you see in the Category field in PolicyCenter. If you
open this typelist in the Studio Typelist editor, you can choose each typecode in the list one after another. As you
select each typecode in turn, notice that the Studio associates each typecode with a category containing typelist and
code values. In this case, Studio associates each ActivityCategory typecode with an ActivityType typecode.
Thus, PolicyCenter filters each individual typecode in this typelist so that it is available for selection only if you first
select the associated typelist and typecode.
After completing this task, complete “Step 2: Declare the category filter on an entity” on page 321.
The sample defines a typekey element with name="Type" and typelist="ActivityType". This is the controlling
(parent) typelist. The sample also defines a second typelist (ActivityCategory) with a keyfilter name="Type". It is
the typelist referenced by the keyfilter element that controls the behavior of the typelist named in the typekey
element. Thus, the value of the ActivityType code controls the associated typecode on the dependent
ActivityCategory typelist.
For more information on the <keyfilter> element, see “<typekey>” on page 220.
After completing this task, complete “Step 3: Set the PolicyCenter field value in the PCF file” on page 322.
For example, the default State typelist has typecodes for states in the US and provinces in Canada.
To refer to the typecode for the state of California in the typelist State, use the following Gosu expression.
[Link].TC_CA
You must prefix the code in the object path expressions for typecodes with TC_.
Note: In the typecode reference syntax, use the appropriate nested class name if and only if your
typelist has over 2,048 typecodes. This modified syntax is as follows:
[Link].[NestedClassName.]TC_Typecode
Note: Use code completion in Studio to build complete object path expressions for typecodes. Type
“typekey.” to begin, and work your way down to the typecode that you want.
See also
• “Typelists and typecodes” on page 304
<typelist name="AccountSegment">
<mapping typecode="PR" namespace="accounting" alias="ACT"/>
</typelist>
</typecodemapping>
The namespacelist element contains one or more namespace elements—one for each external application. Then, to
map the actual codes, specify one or more typelist elements as required. Each typelist element refers to a single
internal or external typelist in the application. The typelist, in turn, contains one or more mapping elements. Each
mapping element must contain the following attributes:
Attribute Description
typecode The PolicyCenter typecode.
namespace The namespace to which PolicyCenter maps the typecode
In the previous example, the PR PolicyCenter code maps to an external application named accounting. You can
create multiple mapping entries for the same PolicyCenter typecode or the same name space. For example, the
following specifies a mapping between multiple PolicyCenter codes and a single external code:
<typelist name="BoatType">
<mapping typecode="AI" namespace="accounting" alias="boat"/>
After you define the mappings, from an external system you can use the TypelistToolsAPI web service to translate
the mappings. See the Integration Guide.
The archive domain graph defines the cluster of entity types that PolicyCenter treats as a single aggregate for
purposes of archiving data.
See also
• Application Guide
archiving APIs use the RootInfo object as a method argument or return type. For PolicyCenter, when you see
RootInfo, this refers to a PolicyPeriod instance.
After archiving, PolicyCenter makes the PolicyPeriod data effectively immutable while that period is archived.
However, within one policy term, at any given instant, it is possible that one or more periods are archived but not all.
From the user interface standpoint, PolicyCenter considers a given policy term archived if one or more of the
periods in the term is archived, even if not all are archived.
Root The root of the archive domain graph is a specific entity type. Starting with the root entity type, the graph follows
ownership relationships in the data model to other entity types until the boundary of the graph is reached. In
PolicyCenter, the root entity type in the archive domain graph is PolicyPeriod.
Boun‐ The boundary of the archive domain graph defines which entity types terminate the traversal of owner relationships
dary from the root and thus prescribe the extent of entities within the graph. In PolicyCenter, the boundary includes the
major entities that relate to the PolicyPeriod entity type, including effective dated entity types such as
PolicyAddress and PolicyDriver.
There is only one root to the archive domain graph, PolicyPeriod, and it implements the RootInfo delegate.
Note: There are other PolicyCenter entities that implement the RootInfo delegate, for example, Job
and Policy, among others. These entities are not in the archive domain graph, however, because they
do not set attribute effDatedBranchType to PolicyPeriod. Instead, PolicyCenter uses these entities
during purging of unnecessary data such as policy quotes not taken.
Note: If PolicyCenter has a database upgrade trigger that updates an entity in the archive domain
graph, PolicyCenter also includes an upgrade trigger to update this entity upon retrieval from the
archive.
Guidewire explicitly defines the relationship between the owned and owning entity in an entity metadata definition
by adding an archivingOwner attribute to the <foreignkey> element definition. For example:
<?xml version="1.0"?>
<entity xmlns="[Link] desc="Notes added by users" entity="Note"... >
...
<foreignkey
columnName="ActivityID"
desc="The activity associated with the note."
archivingOwner="..."
exportable="false"
fkentity="Activity"
name="Activity"
nullok="true"/>
...
</entity>
Ownership Description
Entity owner‐ A child entity (B) has a foreign key to its parent entity (A). The foreign key definition includes setting attribute
ship archivingOwner to target, which indicates that A (the target) owns B (the source). If this attribute is missing
from the foreign key definition, PolicyCenter assumes a value of target, the default.
For example, in the base PolicyCenter configuration, entity Note has a foreign key relationship with the
PolicyPeriod entity. See also “Ownership through the effective dated branch” on page 329.
Inverse owner‐ A child entity (B) has a foreign key to its parent entity (A). However, the foreign key definition sets attribute
ship archivingOwner to source, which indicates that B (the source) owns A (the target). Thus, the direction of the
foreign key for ownership is the inverse of typical entity ownership.
For example, in the base PolicyCenter configuration, entity Contact has a foreign key relationship with the
Address entity.
IMPORTANT Guidewire discourages the use of inverse ownership relationships. The PolicyCenter data model
supports inverse ownership relationships for the rare case in which upgrading the database is unduly cumber‐
some or time consuming. As a general rule, do not use this type of relationship.
Foreign key
Ownership flow
To illustrate, in the base PolicyCenter configuration, Note has a foreign key to PolicyPeriod. The following Note
metadata definition extension shows this relationship.
<internalExtension xmlns="[Link]
entityName="Note" javaClass="[Link]">
...
<foreignkey columnName="PolicyPeriodID"
desc="Associated Policy Period."
exportable="false"
fkentity="PolicyPeriod"
name="PolicyPeriod"/>
...
</internalExtension>
As the code does not provide a value for the archivingOwner attribute, PolicyCenter uses its default value, which is
target. Thus, the owner of the Note entity is the PolicyPeriod entity.
Note: A Note also can be owned by other entities, such as Job.
A foreign key defines an ownership relationship between two entities. Generally, foreign keys point from owned
entities to owning entities in the archive domain graph. However, in certain rare cases, it is possible to define a
foreign key that points from the owning entity to the owned entity in the archive domain graph.
The following graphic illustrates this concept.
Foreign key
Ownership flow
To illustrate, in the base PolicyCenter configuration, Contact and Address have an ownership relationship, with a
foreign key from Contact to Address. The following Contact metadata definition shows this relationship.
<?xml version="1.0"?>
<entity desc="Represents a generic contact like a person or a business." entity="Contact" ...>
...
<foreignkey archivingOwner="source"
columnName="PrimaryAddressID"
desc="Primary address associated with the contact."
fkentity="Address"
name="PrimaryAddress"
nullok="true"
triggersValidation="true"/>
...
</entity>
The archivingOwner attribute of source on the Address foreign key indicates an inverse ownership relationship.
Thus, the Contact entity is the owner of the Address entity.
Domain graph
PolicyPeriod EffectiveDatedFields
Revision graph
Overlap tables
Note Document
Reference
data Legend
A B B has an array of A
See also
WARNING Do not change or remove the archiving delegates on Guidewire entities in the base
configuration. Otherwise, it is possible for the PolicyCenter server to not start due to errors in the
archive domain graph.
In addition, any new entity that you want to add to the archive domain graph must have an ownership relationship
with another entity already in the graph. You can establish ownership in one of the following ways:
• By defining a foreign key in the new entity to another entity already in the graph.
• By defining a foreign key to the new entity from an entity already in the graph and setting the attribute
archivingOwner="source".
The following table summarizes the entity types that exist in the archive domain graph.
See also
• “<delegate> elements and related data object types” on page 180
• “The archive domain graph and reference data” on page 327
• “Ownership relationships in the PolicyCenter archive domain graph” on page 330
• “Ownership through the effective dated branch” on page 329
PolicyCenter does not archive the PolicyPeriod table. PolicyCenter archives only the tables that the PolicyPeriod
entity type owns.
IMPORTANT Because PolicyCenter does not archive the PolicyPeriod table, the table continues to
grow regardless of archiving. Therefore, Guidewire recommends against extending the PolicyPeriod
entity to store large amounts of data, such as BLOB fields.
See also
• “Archive entities and the EffDated delegate” on page 333
332 chapter 22: The PolicyCenter archive domain graph
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Archive entities and the EffDated delegate” on page 333
IMPORTANT If the extractable attribute is not set to true for an edge foreign key on an entity that
is part of the archive domain graph, the server does not start.
<<delegate>>
Extractable
<<delegate>>
EffDatedBase
Legend
A B A has a B
<<delegate>>
EffDated A B A delegates to B
Domain graph
PolicyPeriod
Revision graph
PolicyLocation
See also
• “Ownership relationships in the PolicyCenter archive domain graph” on page 330
Suppose, for example, that you add an additional entity type to the PolicyCenter archive domain graph. If the
archive domain graph never referred to that entity previously, it does not appear in any XML representation of the
archived entity instance. There is no issue.
However, suppose that an archived graph does refer to an entity type newly added to the graph:
• The entity instance appears as a referenced entity in the XML.
• On retrieve, the archive process looks for that entity in the database and links to it.
• On re-archive of the entity instance, the archive process correctly exports the entity instance in the XML. There
is no issue as long you do not delete the entity.
It is possible for an entity to no longer exist as part of the graph. This can happen, for example, if the entity type was
part of reference data that was shared by multiple policy periods, but is now removed from the archive domain
graph.
Suppose, for example, that you remove an entity type from the PolicyCenter archive domain graph. If the archive
domain graph never referred to that entity, it does not appear in any XML representation of the archived entity
instance. There is no issue.
However, suppose that PolicyCenter archived the entity instance already, before you removed it from the graph.
Then, at a later time, someone or PolicyCenter retrieves the instance. On retrieve, the archived instance causes a
duplicate key violation as the archive process attempts to insert the already archived instance into the database. To
handle this scenario, do the following:
1. Search for the duplicate instance in the database.
2. If found, call the [Link] method to create a new IArchivedEntity
that is a referenced entity. The referenced entity must exist in the [Link] can create a new referenced
entity of any type.
See also
If you share an entity type across multiple policy periods, there are several considerations of which you need to be
aware:
• You cannot create a foreign key from that shared entity to any entity in the archive domain graph.
• Any code that you construct around the shared entity must take archiving into account. For example, the code
must handle the possibility that not all related policy periods the code references necessarily exist in the main
application database.
Ownership cycles
A chain of ownership relationships can form a cycle known as an ownership cycle in the archive domain graph.
Ownership cycles are hard to detect because ownership can flow either to or from an entity that has a foreign key to
another entity.
By default, ownership flows in the same direction as foreign keys. For example, if B has a foreign key to A, B is
owned by A. Sometimes it is necessary to invert the flow of ownership, so a foreign key points from the owner to
the owned entity instead.
Guidewire strongly recommends against the use of edge foreign keys to resolve ownership cycles in the archive
domain graph. Introduce edge foreign keys into the archive domain graph only to resolve circular foreign key
references that require edge foreign keys for safe ordering during bundle commit.
IMPORTANT Guidewire strongly recommends that you review the Warnings tab on the Domain Graph
Info screen for possible issues every time you change the data model.
Test Description
Domain graph not parti‐ Verifies that all tables in the archive domain graph are reachable through the root entities.
tioned
Edge tables in domain graph Verifies that if edgeTable is set on an entity in the archive domain graph, it must have all of the
have required foreign keys following:
• An owned foreign key back to one of its parents
• An unowned foreign key to that same parent.
No cycles in domain graph Looks for circular references in the archive domain graph. Circular references in the graph cause
issues for the archive process.
The archive domain graph cannot have any cycle in its is owned by relationships. Thus, the fol‐
lowing example fails validation:
A is owned by B is owned by C is owned by A
You need to resolve any cycles by sorting out the ownership relationships.
The server reports the error and prints the graph problem in DOT format. See “Viewing the ar‐
chive domain graph” on page 343 for information on how to view the graph in a graphical for‐
mat.
Domain graph entities im‐ Ensures that all entities inside the archive domain graph implement the Extractable delegate.
plement Extractable PolicyCenter uses the following column on Extractable during the archive process:
• ArchivePartition
This test also verifies that no entities outside the archive domain graph implement the
Extractable delegate.
Overlap tables implement Verifies that all overlap tables implement the OverlapTable delegate. An overlap table contains
OverlapTable rows that can exist either in the archive domain graph or as part of reference data, but not both.
Overlap tables must implement the following delegates:
• Extractable
• OverlapTable
Entities in domain graph Verifies that all entities in the archive domain graph are keyable. This requirement enables you
keyable to reference the entity by ID.
Reference entities retirea‐ Verifies that all reference entities in the archive domain graph are retireable. See “The archive
ble domain graph and reference data” on page 327 as to why this is important.
Exceptions to links from Verifies that exceptions to links from outside the archive domain graph are actually from entities
outside the domain graph that are outside of the archive domain graph.
are outside the domain
graph
If any one of these tests fails, it prevent the server from starting. You must identify and correct these errors before it
is possible to start the PolicyCenter server.
Graph validation warnings that do not prevent the server from starting
The following list describes validation tests that PolicyCenter performs on the archive domain graph during startup.
Test Description
Archive domain graph enti‐ All foreign keys from entities in the archive domain graph must reference other entities in the
ties refer only to administra‐ domain graph only. Otherwise, foreign key violations can occur as PolicyCenter traverses the
tive data and domain enti‐ domain graph during the archiving processes.
ties
Nothing outside the archive There must not be foreign keys from entities outside the archive domain graph to entities inside
domain graph points to the the archive domain graph.
graph
Null links cannot make a PolicyCenter constructs the archive domain graph by looking at foreign keys. If enough links are
node unreachable null, the graph becomes partitioned and the archiving process is not able to correctly identify
the necessary entities for archiving. This test is a warning rather than one that prevents the
server from starting because it is possible to use business logic to prevent the issue.
None of these issues prevent the PolicyCenter server from starting. PolicyCenter permits the server to start even
upon failure of these tests because it is possible to prevent the erroneous situation through business logic. After the
server starts, you can view the warnings from these tests on the Warnings tab of the Server Tools Domain Graph Info
screen.
Guidewire recommends the following workflow to use in correcting fatal validation errors with the archive domain
graph that occur at server startup.
Procedure
Result
It is now possible to start the application server with a fully valid archive domain graph.
Before you attempt to correct any non-fatal issues with the archive domain graph, first ensure that you have
eliminated all fatal errors in the graph.
IMPORTANT Guidewire recommends that you review the Warnings tab on the Server Tools Domain
Graph Info screen for issues every time that you make changes to the PolicyCenter data model.
Procedure
1. After the server starts successfully with no archive domain errors, perform a test archive operation.
2. If any runtime errors occur, correct those issues before continuing.
3. After no more runtime errors occur, navigate to Server Tools→Info Pages→Domain Graph Info within
PolicyCenter.
4. Review and analyze any warnings shown in the Warnings tab.
5. Fix these issues as appropriate.
Result
The end result is that there are no more warnings remaining on the Warnings tab on the Domain Graph Info screen.
Custom
entity /
extension
c
Archive
Root
a
Overlap or
potential
Overlap entity
aCustom
a entity /
Custom
entity / extension
b
extension
The following list describes how to resolve the archive domain graph issues shown in the previous diagram.
It is possible that there are other issues with the data model that you must resolve before you can successfully
archive your custom entity type. For example, suppose that an entity outside the graph has a foreign key that points
to an non-root entity inside the graph. This foreign key has its nullok attribute set to false. As such, it is not
possible to use a CrossDomainLink tag to resolve the issue. Instead, set the nullok attribute on the foreign key to
true to resolve the issue.
See also
To correct this:
1. To include the entity in PolicyPeriod graph, please change them to implement Extractable.
OR
2. To avoid including it in PolicyPeriod graph, foreignkey must point out of the PolicyPeriod graph and configure
cross graph relationship. For details please see documentation.
The error message indicates that there are two ways to resolve this issue:
• Add ImplementsEntity="Extractable" to the metadata definition of any listed entity. This action includes that
entity type in the archive domain graph.
• Reverse the direction of the foreign key that points from an entity outside the graph to an entity inside the graph.
This action removes the entity from the archive domain graph.
To resolve this issue, remove ImplementsEntity="Extractable" from the metadata definitions of the entity types
that the error message lists.
342 chapter 22: The PolicyCenter archive domain graph
Guidewire PolicyCenter 9.0.9 Configuration Guide
The graph construction algorithm found the 'entity.CustomEntity1' in the graph is referencing entity
that is identified as an overlap table through the link: entity.CustomEntity1.CustomEntity2.
Please refer to documentation for resolving this graph validation error.
The graph construction algorithm found the 'entity.CustomEntity2' in the graph is referencing entity
that is identified as an overlap table through the link: [Link].
Please refer to documentation for resolving this graph validation error.]
This error occurs because the listed entities reference CustomOverlapTable which is an overlap table. Therefore,
you need to mark the listed entities types as overlap. To do so, add ImplementsEntity="OverlapTable" to the
following entity metadata definition:
• CustomEntity1
• CustomEntity2
In this scenario, CustomOverlapTable already implements the OverlapTable delegate.
Failed to archive policy period : Exclude Reason Excluding from archive because some data
is shared with the reference graph
This error occurs because it is not possible to determine in advance of run time whether the PolicyPeriod instance
solely owns the linked entity instance. To resolve this issue, add a cross graph link on the reference entity type as
described in “Defining a cross-domain tag” on page 341.
IMPORTANT Do not create custom code that generates update events for any entity type that can
possibly be part of the archive bundle.
See also
• “Defining a cross-domain tag” on page 341
• Rules Guide
DOT text generally end with a .dot extension. Specialized software can generate a visual presentation of the archive
domain graph from DOT text.
Guidewire provides access to the DOT text description of the archive domain graph through the Server Tools→Info
Pages→Domain Graph Info screen. You must have system administration privileges to access the Server Tools screens.
Procedure
1. Log into PolicyCenter by using an administrative account.
2. Navigate to Server Tools.
3. In the left-hand navigation pane, select Info Pages→Domain Graph Info.
4. Click Download and save the ZIP file to your local machine.
5. Extract the contents of the ZIP file into a permanent directory.
6. In a command prompt, run the following command.
[Link] -Tpdf -[Link] dot-file
In the command, the pdf-file parameter is the name to give to the PDF file. The dot-file parameter is the
name of the DOT-formatted file to use to generate the archive domain graph.
Procedure
1. Log into PolicyCenter by using an administrative account.
2. Navigate to Server Tools.
3. In the left-hand navigation pane, select Info Pages→Domain Graph Info.
4. Click Download and save the ZIP file to your local machine.
5. Extract the contents of the ZIP file into a permanent directory.
6. In a command prompt, run the following command.
[Link] -Tpng -[Link] dot-file
In the command, the png-file parameter is the name to give to the PNG file. The dot-file parameter is the
name of the DOT-formatted file to use to generate the archive domain graph.
See also
• “Viewing the archive domain graph” on page 343
• System Administration Guide
This topic covers how to work with PCF (Page Configuration Format) files in Guidewire Studio.
See also
• “PCF file type icons” on page 351
Icon File type Icon File type Icon File type Icon File type
Page Input Set Navigation Tree Toolbar Buttons
For example, in ClaimCenter (the other Guidewire applications provide similar examples), PCF file
ExposureDetailScreen contains a shared area. The mode drop-down contains a number of possible modal files that
you can embed into the ExposureDetailsScreen. In this screen, the drop-down shows the following:
• Baggage
• Bodilyinjurydamage
• Content
• EmployerLiability
• ...
To determine if a PCF file has multiple modal versions, you can also look at the PCF file names in Studio. If you see
multiple file names that include a common name followed by a dot then a different name, then this is a modal file.
For example, in ClaimCenter, you see the following under the exposures node in the Resources tree:
• [Link]
• [Link]
• [Link]
• [Link]
• ...
Each individual file is a modal version of the ExposureDetailDV PCF file, which you can embed into another file,
in this case, the ExposureDetailsScreen.
Typically, you use a Gosu expression to define the mode for an included section. You can make this expression
either a hard-coded string literal or you can use the expression to evaluate a variable or a method call. For example,
PCF file AddressPanelSet (in PolicyCenter) uses [Link] as the mode expression
variable.
A hard-coded string guarantees that the included section always uses the same mode regardless of the data on the
page. If using a hard-coded string expression, Studio shows only that mode and does not show a drop-down above
the blue area.
It is not possible to change or modify the mode of a base configuration PCF file. You can, however, use an existing
modal file as a template to create a new (different) modal version of that file. To do this:
• Select the template file and duplicate it.
• Select the newly created file and change the mode of that file.
For example, suppose that you wanted to add a new modal version of the ExposureDetailDV PCF file, say
[Link]. To do this:
Procedure
1. Select the file that you intend to use as the template. For this example, select [Link].
2. Right-click the template file and select Duplicate.
3. Enter the name of the new modal file in the Duplicate PCF File dialog and click OK. For this example, enter -
[Link]
Studio inserts the new file into the directory structure, colors the file name blue, and opens a view of the file
automatically.
4. Modify the new modal file as required.
PolicyCenter provides the ability to use a single include file with multiple modes. In this way, you can re-use a
single modal file in multiple PCF files. For example, in the base configuration, ClaimCenter defines PCF file
[Link] with multiple modes:
• PersonVendor
• Attorney
• Doctor
To see this, open [Link] and select the entire file. (You see a solid
blue line surrounding the file.) Examine the mode attribute in the Properties pane at the bottom of the screen. You see
the following:
PersonVendor|Attorney|Doctor
Procedure
Toolbox tab
The Toolbox tab contains a search box and a list of widgets, divided into categories and subcategories.
• Clicking on a category name expands or collapses that category.
• Clicking on a subcategory name expands or collapses that subcategory as well.
Within the toolbox, Studio persists the state of each category (expanded or collapsed) across all PCF editor views. It
also persists the state of each category to each new Studio session.
Studio only displays widget categories containing widgets that are valid and available for use in the current PCF file.
If you hover the mouse cursor over a widget name in the list, then Studio displays a description of that widget in a
tooltip.
Search box
You use the search box to filter the full set of widgets. Typing in the search box temporarily expands all widget
categories and highlights:
• Any widgets whose category name matches the typed text
• Any widgets whose name matches the typed text
• Any widgets whose actual name in the XML matches the typed text
• Any widgets whose description contains the typed text
Clicking the X icon by the search box clears text from the box and stops filtering the widget list. Keyboard shortcut
Alt+/ gives focus to the search box.
Structure tab
The Structure tab shows the hierarchical structure of the PCF file as a tree. Each node in the tree represents a PCF
element. Any children of the node are children of that element:
• If you click an element that represents a concrete element on the canvas, Studio selects that element on the
canvas.
• If you click on an element that does not represent a concrete element on the canvas, then Studio first selects the
containing element on the canvas. It then selects the appropriate properties tab with which to edit the clicked
element. Finally, if necessary, Studio selects the clicked element in the properties tab (at the bottom of the
screen).
Properties tab
The Properties tab (at the bottom of the screen) displays all attributes of the selected element. Studio divides the
attribute workspace into Basic and Advanced sections. You can expand or collapse a workspace section by clicking
the title of that section. Studio maintains the expanded or collapsed state of a section across all element selections
and persists this state to new Studio sessions.
The workspace displays each attribute as a row in a table, with the attribute name in the left column and the value in
the right column. Studio grays out the name if you have not set a value for that attribute (if the attribute value is
nothing or is only a default value). Studio also grays out the attribute value if it is a default value. If the PCF schema
requires an attribute, Studio displays the attribute name in bold font, with an asterisk, and with a different
background color.
If you hover the mouse cursor over an attribute name, Studio displays a tooltip with the documentation for that
attribute.
For each attribute:
• If the attribute takes a non-Gosu string value, Studio displays the value in a text field.
• If the attribute takes a non-Gosu Boolean value, Studio displays the value in a drop-down menu with two
choices, true and false.
• If the attribute takes an enumeration value, Studio displays the value in a drop-down menu with a choice for each
value of the enumeration, plus a <none selected> option.
• If the attribute takes a Gosu value, Studio displays the value in a single-line Gosu editor. Gosu editor commands
that operate on multiple lines have no effect in a single-line editor. (For example, the SmartFix Add uses statement
command does not work in a single-line editor.) Studio displays the single-line editor with a red background if it
contains any errors, and a yellow background if it contains warnings but no errors.
• If the attribute requires a return type, Studio colors the value background red under the following circumstances:
◦ If the entered expression does not evaluate to that type
◦ If the entered statement does not return a value of that type
• If the attribute requires a Boolean return value, Studio displays a drop-down menu on the right side with two
options, true and false. If you select one of these options, Studio sets the text of the editor to the appropriate
value.
If the value editor for an attribute has focus, Studio displays the attribute name in a different background color and
adds an X icon. If you click the X icon, Studio sets the value of the attribute to its default.
If you press Enter on the keyboard while editing a property, Studio moves the focus to the next property in the list.
Child lists
Some of the Properties tabs contain a child list. A child list contains a list of the selected element's child elements of a
certain type, and a properties list for the selected child element. You can perform a number of operations on a child
list, using the following tool icons.
Using the PCF editor 355
Guidewire PolicyCenter 9.0.9 Configuration Guide
If the child list represents a single child type, Studio adds a new child element. Studio selects the newly added child auto‐
matically. If the child list represents multiple child types, Studio opens a drop‐down menu of available child types. If you
select a child type from the drop‐down, Studio adds a child of that type and selects it automatically.
If you select a child and click the delete icon, Studio removes the selected child. Studio disables this action if there is no
selected child.
If you select a child and click the up icon, Studio moves the selected child above the previous child. Studio disables the up
icon if you do not first select a child, or if there are no other children above your selected child.
If you click the down icon, Studio moves the selected child below the next child. Studio disables the down icon if you do
not first select a child, or if there are not other children below your selected child.
Addition‐ Description
al tabs
Axes If an element can have DomainAxis and RangeAxis children, Studio displays the Axes properties tab. This tab con‐
tains a child list of the DomainAxis and RangeAxis children for the selected element. If you select a RangeAxis,
Studio displays a child list for its Interval children.
Code If an element can have a Code child, Studio displays the Code properties tab. This tab contains a Gosu editor for
editing the contents of the Code child. The Code editor has access to all the top‐level symbols in the PCF file (for
example, any required variables). However, you cannot incorporate any uses statements, nor does the Gosu editor
provide the SmartFix to add uses statements automatically.
Data Series If an element can have DataSeries and DualAxisDataSeries children, Studio displays the Data Series properties
tab. This tab contains a child list of the DataSeries and DualAxisDataSeries children for the selected element.
Entry If an element can have LocationEntryPoint children, Studio displays the Entry Points properties tab. This tab con‐
Points tains a child list of the LocationEntryPoint children for the selected element.
Exposes If a parent PCF page contains an iterator that controls a ListView element defined in a separate PCF file, then
Studio displays the Exposes tab on the child PCF file. You use this tab to set the iterator to use for the ListView
element.
Filter Op- If an element can have ToolbarFilterOption and ToolbarFilterOptionGroup children, Studio displays the Filter
tions Options properties tab. This tab contains a child list of the ToolbarFilterOption and ToolbarFilterOptionGroup
children for the selected element.
Next Condi- If an element can have NextCondition children, Studio displays the Next Conditions properties tab. This tab con‐
tions tains a child list of the NextCondition children for the selected element.
Reflection If an element can have a Reflect child, Studio displays a Reflection properties tab. The Reflection tab has a check
box for Enable client reflection, which indicates whether that element has a Reflect child. If you enable client reflec‐
tion, the Reflection tab also contains a properties list for the Reflect element and a child list for its
ReflectCondition children.
Required If an elements can have Require children, Studio displays the Required Variables properties tab. This tab contains a
Variables child list of the Require children for the selected element.
Scope If an element can have Scope children, Studio displays the Scope properties tab. This tab contains a child list of the
Scope children for the selected element.
Sorting If an element can have IteratorSort children, Studio displays the Sorting properties tab. This tab contains a child
list of the IteratorSort elements for the selected element.
Toolbar If an element can have ToolbarFlag children, Studio displays the Toolbar Flags properties tab. This tab contains a
Flags child list of the ToolbarFlag children of the selected element.
Variables If an element can have Variable children, Studio displays the Variables properties tab. This tab contains a child list
of the Variable children for the selected element.
PCF elements
Studio displays a down arrow icon to the right of a non-menu element that contains menu-item children.
• If you click the down arrow, Studio opens a pop-up containing the children of the element.
• If you click anywhere on the canvas outside the pop-up, Studio dismisses the pop-up.
Studio displays elements that contain a comment with a comment icon in the upper right-hand corner of the widget.
It shows disabled elements (commented-out elements) in a faded-out manner
Studio displays elements that cause a verification error with either a red overlay or a thick red border. It displays
elements that cause a verification warning (but not an error) with either a yellow overlay or a thick yellow border.
If you move your mouse over an element:
• Studio highlights the element with a light border.
• If the element has a comment, Studio displays the text of the comment in a tooltip.
• If the element does not have a comment, but does have its desc attribute set, Studio displays the value of the
desc attribute in a tooltip.
• If the element has any errors or warnings, Studio displays these in a tooltip along with any comment or desc text.
If there are no valid element types to which you can change the selected element, Studio disables the Change element
type command.
Result
If the element already has a comment, Studio pre-populates the text field with the contents of the comment.
Result
However, if the element has no comment, Studio disables the Delete comment command.
Result
If the element or any of its descendants have comments, Studio informs you that it is deleting the comments and
prompts you to confirm the disable operation.
It is also possible to set the visible attribute on the widget to false to prevent PolicyCenter from rendering the
widget. In this case, however, the XML file retains the widget. It still exists server-side at run time, although
PolicyCenter does not render it, and the widget does not post data. Thus, commenting out the widget can possibly
give you a marginal performance increase. Also, disabling the widget prevents it from causing errors, for example, if
the signature of some function called by one of its attributes changes.
As it is the use of XML comment tags that disable the widget, you cannot then add a comment to the widget to
describe why you disabled it. If you would like to add an explanation associated with the widget (recommended),
Using the PCF editor 359
Guidewire PolicyCenter 9.0.9 Configuration Guide
then use the widget desc attribute. Studio displays this text in the tooltip if you hover the mouse of over the widget
in the PCF editor. (This does not produce a yellow note icon, however.)
Result
As you type in the text field, Studio filters the visible elements to those whose ID matches the typed text. Selecting
an element from the list selects it on the canvas.
Result
Studio opens a small text window and displays the XML code associated with the selected element.
Result
If the PCF schema permits the target widget to occur one time only within the parent widget (for example, a Screen),
then attempting to duplicate the widget has no effect.
360 chapter 23: Using the PCF editor
Guidewire PolicyCenter 9.0.9 Configuration Guide
Linking widgets
A common feature in PCF pages is a ListView element controlled by a RowEditor iterator. PolicyCenter renders the
list view as a table with multiple rows, with the iterator populating the data in the table rows. Frequently, the user
clicks a button to activate certain functionality within the list view, for example, adding or deleting rows in the table.
Using the PCF editor 361
Guidewire PolicyCenter 9.0.9 Configuration Guide
In many cases, the PCF file is a parent page that contains embedded child PCF files that contain individual
ListView elements. If this is the case, then you need to link the button on the parent PCF file with the iterator used
to populate the child PCF files. To do so, you use the Link widgets command on the Page Config menu. This menu item
provides a visual tool to link widgets on a parent page that spans multiple child PCF files. You use this particularly
for explicit iterator references.
See also
• “Link two widgets” on page 362
This topic provides an introduction to the concepts and files involved in configuring the web pages of the
PolicyCenter user interface.
Every page in PolicyCenter uses multiple PCF elements. You define these elements separately, but PolicyCenter
renders then together during page construction. For example, consider the tab bar available on most PolicyCenter
pages:
Using Ctrl+Shift+W, you can discover that these elements are defined in the PCF file [Link]. In Guidewire
Studio, you can open [Link] in the PCF Editor. Clicking on the arrow next to the Search tab in this file causes
the search menu items to appear:
Locations
A location is a place to which you can navigate in the PolicyCenter interface. Locations are used primarily to
provide a hierarchical organization of the interface elements, and to assist with navigation.
Locations include pages, wizards, worksheets, forwards, and location groups. Locations themselves do not define
any visual content, but they can contain screens that do, as illustrated in the following diagram:
Locations
Location
Page Wizard Worksheet Popup Forward
Group
Location Description
Page A location with exactly one screen. The majority of locations defined in PolicyCenter are pages.
Wizard A location with one or more screens, in which only one screen is active at a time. The contents of a wizard are
usually not defined in PCF files, but are configured either in other configuration files or are defined internally by
PolicyCenter.
Work‐ A page that can be shown in the workspace, the bottom pane of the web interface. The main advantage of work‐
sheet sheets is that they can be viewed at the same time as regular pages. This makes them appropriate for certain kinds
of detail pages such as creating a new note.
Popup A page that appears on top of another page, and that returns a value to its invoking page. Popups allow users to
perform an interim action without leaving the context of the original task. For example, a page that requires the
user to specify a contact person could provide a popup to search for the contact. After the popup closes,
PolicyCenter returns the contact to the invoking page.
Forward A location with zero screens. Since it has no screens, it has no visual content. A Forward must immediately forward
the user to some other location. Forwards are useful as placeholders and for indirect navigation. For example, you
might want to link to the generic Desktop location. This would then forward the user directly to the specific
Desktop page (for example, Desktop Activities) most appropriate for that kind of user.
Location A collection of locations. Typically a location group is used to provide the structure and navigation for a group of
group related pages. PolicyCenter can automatically display the appropriate menus and other interface elements that al‐
low users to navigate among these pages.
Widgets
A widget is an element that PolicyCenter can render into HTML. PolicyCenter then displays the HTML visually.
Buttons, menus, text boxes, and data fields are all examples of widgets. There are also a few widgets that you cannot
see directly, but that otherwise affect the layout of widgets that you can see.
For most locations, a screen is the top-most widget. It represents a single HTML page of visual content within the
main work area of the PolicyCenter interface. Thus, a screen typically contains other widgets. You can reuse a single
screen in more than one location.
The following diagram shows a possible widget hierarchy:
Screen
Widget
Widget
Widget
Widget
Widget Widget
PolicyCenter provides the following tools that allows you to view the structure of any page and to see which PCF
elements it uses:
• “Location info” on page 367
• “Widget inspector” on page 367
To enable these tools, the EnableInternalDebugTools configuration parameter must be set to true.
Location info
The Location Info window shows you information about the construction of the page you are viewing. It includes the
location name, screen names, and high-level widgets defined in the page, and the names of the PCF files in which
they are all defined. Typically, the widgets that appear in this window are the ones that are defined in separate files,
such as screens, detail views, list views, and so on. The Location Info is most useful if you are making changes to a
page as it tells you which files you need to modify.
To view the location information for a particular page, go to that page in the PolicyCenter interface, and then press
Alt+Shift+I. This opens the Location Info window for the active page. For example, the following is the Location Info
window for the ClaimCenter Claim Summary page:
Widget inspector
The Widget Inspector window shows detailed information about the widgets that appear on a page. This includes the
widget name, ID, label text, and the file in which it is defined. The widget information is most useful during
debugging a problem with a page. For example, suppose that a defined widget does not appear on a page. You could
then look at the widget information to determine whether the widget exists (but perhaps is not visible) or does not
exist at all.
To view the widget inspector for a particular page, go to that page in the PolicyCenter interface, and then press Alt
+Shift+W. This opens the Widget Inspector window for the active page. For example, the following graphic shows the
Widget Inspector window for the ClaimCenter Claim Summary page:
Introduction to page configuration 367
Guidewire PolicyCenter 9.0.9 Configuration Guide
The first part of the window shows the variables and other data objects defined in the page. After that, all of the
widgets on the page are listed in hierarchical order.
These elements are arranged in a folder hierarchy that is related to how they appear in the PolicyCenter interface.
For example, the admin, claim, and dashboard folders generally contain PCF elements that are related to the
Administration, Claim, and Dashboard pages within ClaimCenter.
Find an element by ID
About this task
If you know the ID of the element, such as by using the location info or widget inspector windows, you can find it
within Studio. Press Ctrl+N to open the Find By Name dialog box, and then start typing the ID of the element. As you
type, PolicyCenter displays a list of possible elements that match the ID you are entering.
After you see the one you want, click on it and PolicyCenter opens the file in the PCF Editor.
Procedure
1. Browse the Page Configuration folder in the Project window, and locate the folder under which you want to
create your new element.
2. Right-click on that folder, and then click New→PCF File. (You can also click New→PCF Folder to create a new
folder). The PCF File dialog appears.
3. In the File name text box, type the name of the element.
4. Click the type of element to create. If an element has a naming convention, it is shown next to the File name
text box.
For example, the name of a detail view must end with DV.
5. Click OK, and the new element is created and opened for editing in Studio.
Overriding CSS
About this task
Guidewire applications are themed using SASS technology. To make significant changes to the style of your
application, see “Advanced theming” on page 371. However, you can change the theme colors of your application
by following these steps.
For more information about SASS, visit [Link]
Procedure
Advanced theming
PolicyCenter uses SASS to define a robust set of styling rules for ensuring a consistent look across the application.
To make more detailed styling and theme changes, we recommend referencing the SASS documentation for details.
There are, however, a few things specific to the Guidewire implementation:
• You cannot create a new theme and apply it to the application. All changes to the styling need to be made in the
current theme definition, under PolicyCenter/ThemeApp/packages/theme-9/sass/.
• SASS condenses its CSS definition for performance purposes. To see the expanded, debuggable CSS in your web
development tool, run the command gwb webResources and refresh your browser.
◦ gwb updateTheme condenses your CSS for production use.
Data panels
This topic provides an introduction to the concepts and files involved in configuring the web pages of the
PolicyCenter user interface.
Panel overview
A panel is a widget that contains the visual layout of the data to display in a screen. There are several types of
panels:
• “Detail view panel” on page 373 – A series of widgets laid out in one or more columns.
• “List view panel” on page 377 – A list of array objects, or any other data that can be laid out in tabular form.
You can place as many panels in a screen as you like, dividing the screen into one or more areas.
The id attribute is required; it identifies the panel so that it can be referenced by other PCF elements. The ID must
be unique, and it must end with the text string DV.
A detail view must contain at least one vertical column, defined by the Input Column element. The column contains
the input widgets to display, as in the following example:
A column is defined by the Input Column element. This element must appear at least once, to define the first
column. To add additional columns, include the Input Column element multiple times. The following example
defines a two-column detail view:
Label
A label is bold text that acts as a heading for a section of a detail view. All input widgets that appear after a label are
slightly indented to indicate their relationship to the label. The indenting continues until another label appears or the
detail view ends. Thus, you cannot manually end a label indenting level at any point that you choose.
Include a label with the Label element:
Set the label attribute to the display key to use for the label.
Input divider
An input divider draws a horizontal line across a detail view column. You can place an input divider wherever you
like between other elements.
Include an input divider with the Input Divider element:
The id attribute is required; it identifies the panel so that it can be referenced by other PCF elements. The ID must
be unique, and it must end with the text string LV.
A list view contains one or more rows, each containing one or more cells. The structure of the simplest one-row list
view is illustrated below:
List view
Row
Cell 1
Cell 2
...
Cell n
End row
To define the rows and cells of the list view, use Row and one of the *Cell elements such as TextCell or DateCell.
Each occurrence of Row starts a new row, and each *Cell creates a new column within the row. The following
example creates a one-row, three-column list view:
The id attribute of a *Cell element is required. It must be unique within the list view, but does not need to be
unique across all of PolicyCenter. The value attribute contains the Gosu expression that appears within the cell. In
the previous example, the value of each cell is set to 10, 20, and 30, respectively. You can set other attributes of a
*Cell to control formatting, sorting, and many other options.
This simple example demonstrates the basic structure of a list view. However, you will almost never use a list view
with a fixed number of rows. The more useful list views iterate over a data set and dynamically create as many rows
as necessary. This is illustrated in “Iterate a list view over a data set” on page 380.
A list view requires a toolbar so that there is a place to put the paging controls, as well as any buttons or other
controls that are necessary.
You can define a list view in the following ways:
• “Standalone” on page 379
• “Inline” on page 379
Standalone
You can define a list view in a standalone file, and then include it in other screens where needed. This approach is
the most flexible, as it allows you to define a list view once and then reuse it multiple times.
For example, suppose you define a standalone list view called MyLV.
You can then include this list view in a screen with the PanelRef element:
Set the def attribute of the Panel Ref to the name of the list view; in this example, that is MyLV.
Inline
If a list view is simple and used only once, you can define it inline as part of a screen. This approach often makes it
easier to create and understand a screen definition, as all of its component elements can be defined all in one place.
However, an inline list view appears only where it is defined, and cannot be reused in other screens.
The following example defines an inline list view in a screen:
Row
Cell 1
Cell 2
...
Cell n
End row
End iterator
The row iterator specifies the data source for the list. For each record in the data source, the iterator repeats the row
(and other elements) defined within it.
Define a row iterator with the Row Iterator PCF element. For example:
The value attribute of the Row Iterator specifies the data source, such as an array of entities or the results of a
query. For more information on setting a data source, see “Choose the data source for a list view” on page 381.
The elementName attribute is the variable name that represents the “current” row in the list. You can use this
variable anywhere within the row iterator as the root object that refers to the current row.
380 chapter 25: Data panels
Guidewire PolicyCenter 9.0.9 Configuration Guide
To iterate over the array of activities in the claim, this list view creates a row iterator whose value attribute is
[Link]. For each activity in this array, the iterator creates a row with multiple cells. The elementName
attribute of the iterator is Activity; it represents the current row, and is used to get the values of the Activity
object’s fields in each cell.
This example produces the following list view:
Source Description
Array An array field on an entity type is identified in the Data Dictionary as an array key. For example, the Officials field
field on a Claim is an array key. Thus, you can define a list view based on [Link]. In this case, each official
listed on a specified claim is shown on a new row in the list view. You can also define your own custom Gosu meth‐
ods that return array data for use in a list view. The method must return either a Gosu array or a Java list
([Link]).
Query A query processor field on an entity type is identified in the Data Dictionary as a derived property returning
process‐ [Link]. It represents an internally‐defined query, and usually provides a more con‐
or field venient and efficient way to retrieve data. For example, the [Link] field performs a database query
to retrieve only the notes on a claim that the current user has permission to view. This is more efficient than using
the [Link] array field, which loads both viewable and non‐viewable notes and filtering the non‐viewable
ones out later.
Source Description
Finder A finder method on an entity type is similar to a query processor field, except that it is not defined as field in the
method Data Dictionary. Instead, a finder method is an internally‐defined Java class that performs an efficient query on in‐
stances of an entity type. For example, the Activities page of the Desktop uses a list view based on the finder method
[Link].
Query A query builder result uses the result of an SQL query. For more information, see the Gosu Reference Guide.
builder
result
List views behave differently depending on whether the source is an array or one of the query-backed sources.
Location groups
A location group must contain one or more references to another location. Any time that you navigate to the location
group, PolicyCenter uses the locations defined within it to determine what page and surrounding navigation to
display. The following example is the location group defined for a claim in ClaimCenter:
This tab is defined in the element named TabBar (under the util folder):
This tab is defined with its action attribute set to [Link](). This specifies that the action to take if you click
the Desktop tab is to go to the Desktop location.
This location is a location group:
Inside this location group, there are multiple Location Ref elements defined, each one specifying a location. In this
example, the locations referenced in the group correspond to the items in the Desktop menu. If the action for a tab is a
location group containing more than one location, ClaimCenter adds each location in that location group to the menu
in the tab.
Inside this location group, there are multiple Location Ref elements defined, each one specifying a location.
As ClaimCenter displays this location, it notices that it is a location group, and automatically creates menu links for
each location within the group. Notice in this example that the Location Ref elements referenced in this group
correspond to the items in the menu links.
Inside this location group, there are multiple LocationRef elements defined, each one specifying a location.
As ClaimCenter displays this location, it notices that it is a location group, and automatically creates sidebar items
for each location within the group. Notice in this example that the LocationRef elements referenced in this group
correspond to the items in the sidebar.
Navigation
This topic provides an introduction to the concepts and files involved in configuring the web pages of the
PolicyCenter user interface.
Navigation overview
Navigation is the process of moving from one place in a Guidewire application interface to another. If you click on a
link, you “navigate” to the location the link takes you.
A Guidewire application interface provides many elements that you use to navigate within the application. The
following diagram identifies the most common navigation elements:
Tab bar
Menu links
Sidebar
Tab bar A set of tabs that run across the top of the application.
Tabs Items in the tab bar that navigate to particular locations or show a drop‐down menu.
Tab menu items A set of links shown in the drop‐down menu of a tab.
Menu links Links in the sidebar that take you to other locations, typically within the context of the current tab.
Menu actions Links under the Actions menu in the sidebar that perform actions that are typically related to what you can do
on the current tab.
Navigation 389
Guidewire PolicyCenter 9.0.9 Configuration Guide
Tab bars
A tab bar contains a set of tabs that run across the top of the application window, as in the following example:
Tabs
Tabs
Tabs are items in a tab bar that you can click on. A tab can be a single link that takes you directly to another
location, it can be a drop-down menu, or it can be both. The following shows an example of tabs on a tab bar in
ClaimCenter:
Define a tab
About this task
Define a tab by placing a Tab PCF element with a Tab Bar. For example:
The action attribute of a tab defines where clicking the tab takes you. For example, to go to the Desktop location,
set the action attribute to [Link]().
This Search location group contains the Location Ref elements that appear as menu items on the tab:
This creates the menu items that appear on the Search tab:
PolicyCenter provides a Search tab that you can use to search for specific entities. You can configure the Search tab to
add new search criteria or modify or remove existing criteria. Configuring search functionality involves modifying
the PolicyCenter functionality in Gosu classes and modifying the PolicyCenter interface through page configuration
files.
WARNING Guidewire strongly recommends that you consider all the implications before
configuring the Search tab. Adding new search criteria can result in significant performance
impacts, particularly in large databases. Guidewire recommends that you thoroughly test any
search customizations for performance issues before you move them into a production database.
Overview of search
PolicyCenter provides two types of search:
• Database search – Searches the relational database for policies, accounts, producers, activities, and contacts by
using Structured Query Language (SQL). You access these searches from the Search tab.
PolicyCenter also includes database search from screens besides those accessed through the Search tab. For
example, you can do a database search for policy form patterns, policy locations, regions, and other entities and
objects.
• Free-text search – Searches an external, full-text database for policies, by using the APIs of an external full-text
search engine. PolicyCenter includes free-text search for policies and submissions. You access free-text search
from the Search Policies→Basic screen.
Database search is fully enabled by default. Users can search policies, accounts, producers, activities, and contacts
with database search. Users can choose to include archived policies with each database search request. The user
interface for database search is known as advanced search.
Free-text search is available as an option that you must enable and configure. Free-text search is available only for
searching for policies and submissions. Free-text search results never include archived policies. The user interface
for free-text search is known as basic search.
IMPORTANT The PolicyCenter base configuration does not allow free-text search of entity types other
than policies and submissions. Guidewire will support customers in their development of additional
search types.
Relational database
Advanced search
(database search)
PolicyCenter application
Policy updates
Basic search
(free‐text search)
Full‐text database
Free-text search involves two sets of data flows in which a user selects and reviews policies as well as updates them.
In the policy review data flows, the user searches, selects, and reviews policies with the PolicyCenter user interface.
Searching policies entails sending queries to and receiving policy results from a full-text search engine. Selecting
and reviewing policies entails requesting and receiving policies from a relational database:
2. PolicyCenter
1. User searches PolicyCenter Full‐text search
application sends query
policies with basic or application engine
to full‐text search engine.
free‐text search.
3. Full‐text search engine
returns query results to
PolicyCenter application.
4. User selects and
reviews policy from
query results. 5. Relational database
sends selected policy to
PolicyCenter application.
Relational
database
In the policy update data flow, the user updates policies with the PolicyCenter user interface. Updating policies
entails sending updates to a relational database as well as sending an index document with the updates to a full-text
search engine:
Relational
database
PolicyCenter 2. PolicyCenter application
application sends update to relational
database.
1. User updates policy.
3. PolicyCenter application
sends index document
with updates to full‐text
search engine.
Full‐text search
engine
If you enable free-text search, the Search Policies screen displays two tabs:
• Basic – Displays fields on which to search policies and submissions. The Basic screen uses free-text search to
return policies and submissions that match criteria users enter.
• Advanced – Displays fields on which to search policies and jobs. The Advanced screen uses database search to
return policies and jobs that match criteria users enter.
If you enable free-text search, the Search Policies screen displays the Basic and Advanced search screens. Otherwise,
the Search Policies screen displays the Advanced screen only.
Relational database
Advanced search
(database search)
PolicyCenter application
Policy updates
Basic search
(free‐text search)
(unavailable
during batch load
process)
Full‐text database
See also
• “Database search configuration” on page 396
• “Free-text search configuration” on page 406
WARNING Guidewire strongly recommends that you consider all the implications before
customizing the Search tab. Adding new search criteria can result in significant performance
impacts, particularly in large databases. Guidewire recommends that you thoroughly test any
search customizations for performance issues before you move them into a production database.
Virtual entity PolicyCenter implements some search criteria objects as virtual entities. A virtual entity has no underlying table
in the PolicyCenter database and do not persist beyond the session in which you use it. An example of a non‐
persistent entity as a search criteria object is DocumentSearchCriteria, defined in [Link].
Every field on the Search screen maps to an attribute on the relevant search criteria entity. For example, in the Activity
search screen:
• Assigned To maps to AssignedUser in the ActivitySearchDV PCF file.
• AssignedUser maps to [Link] in the same file.
• SearchAssignedUser maps to [Link], the Gosu class definition that contains
the business logic to search on the assigned user field.
is a virtual entity. To add new criteria columns, you can add them to the [Link] entity
extension file. In [Link], you can add new criteria to the actual search. You can also modify
[Link] to change how the search is called.
Location in user interface Search for entity or object Configure search criteria object in...
Search Policies screen from the Search PolicyPeriodSummary [Link]
tab
Search Accounts screen from the AccountSummary [Link]
Search tab
Account File Claims screen from Claims ClaimSet with array to Claim ob‐ [Link]
menu link in the Sidebar of an ac‐ jects in a particular date range.
count
Account File History screen from Histo- History [Link]
ry menu link in the Sidebar
Notes screen from Notes menu link in Note NoteSearchCriteria virtual entity
the Sidebar of a policy [Link]
Location in user interface Search for entity or object Configure search criteria object in...
Location in user interface Search for entity or object Configure search criteria object in...
Rate Routines screen from Administra- CalcRoutineDefinition [Link]
tion→Rating menu This is a feature of Guidewire Rating Management.
Rate Table Definitions screen from Ad- RateTableDefinition [Link]
ministration→Rating menu This is a feature of Guidewire Rating Management.
Search Programs from Reinsurance RIProgram [Link]
menu This is a feature of Guidewire Reinsurance Manage‐
ment.
Search Agreements from Reinsur- LocationRisk [Link]
ance→Agreements menu This is a feature of Guidewire Reinsurance Manage‐
ment.
Search Agreements with Arrangement RIAgreement [Link]
set to Treaty. Accessed through Rein- This is a feature of Guidewire Reinsurance Manage‐
surance→Agreements. ment.
Search Agreements with Arrangement RIAgreement [Link]
set to Facultative. Accessed through This is a feature of Guidewire Reinsurance Manage‐
Reinsurance→Agreements. ment.
See also
• Guidewire Contact Management Guide
</CriteriaDef>
You can map a single search criteria entity to more than one target entity.
Do not add new <CriteriaDef> elements into [Link]. Only modify the contents of existing criteria
definitions. Do not remove a required base CriteriaDef element. Adding or removing these elements can introduce
problems into your PolicyCenter installation.
WARNING Guidewire strongly recommends you do not remove <CriteriaDef> elements that
exist in the base configuration.
See also
• “The <CriteriaDef> element” on page 401
400 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
CriteriaDef Criterion Specifies the mapping from a search criteria entity to the target entity “The <CriteriaDef>
on which to search. element” on
WARNING Do not add or remove CriteriaDef elements in search- page 401
[Link]. Modify only the contents of existing CriteriaDef ele‐
ments.
Criterion Specifies how PolicyCenter matches a column (field) on the search crite‐ “The <Criterion>
ria to the query against the target entity. Use this element to perform subelement” on
simple matching only. Simple matches are criteria that match values in a page 401
single column of the same type in the target entity.
The following list describes the valid matchType values. For String objects, matchType case-sensitivity depends on
the database, except for startsWith and contains, which are always case-insensitive.
IMPORTANT For performance reasons, Guidewire strongly recommends that you avoid the contains
match type. The contains match type is the most expensive type in terms of performance.
WARNING For performance reasons, Guidewire expressly prohibits the addition of new required
fields or changing the match type of existing required fields in the PolicyCenter search screens.
Activity [Link]
Claim [Link]
IndustryCode [Link]
History [Link]
PolicyPeriod [Link]
Guidewire also provides a Gosu enhancement that you can use to configure searches for Contact objects.
[Link]
To improve contact search, Guidewire adds fields to the Contact entity as denormalization fields from the Address
entity. These fields include:
• CityDenorm
• Country
• PostalCodeDenorm
• State
WARNING Guidewire strongly recommends that you consider all the implications before
customizing any search configuration object. Adding new search criteria can result in significant
performance impacts, particularly in large databases. Guidewire recommends that you thoroughly
test any search customizations for performance issues before you move them into a production
database.
See also
• “Configuring PolicyCenter database search” on page 397
• Guidewire Contact Management Guide
See also
• “Add an optional search field to a Gosu class search” on page 404
• “Adding an optional search field to a virtual entity search” on page 405
Procedure
1. Open [Link] for editing in PolicyCenter Studio.
2. Navigate to the definitions of search criteria.
In the base configuration, these definitions look like the following lines.
var _policyNumber : String as PolicyNumber
var _accountNumber : String as AccountNumber
var _overdueNow : Boolean as OverdueNow
var _activityStatus : ActivityStatus as SearchedActivityStatus
var _priority : Priority as SearchedPriority
var _assignedUser : User as SearchedAssignedUser
[Link] = Recurring
5. Add a widget for the new search field to the user interface.
a. Open ActivitySearchDV for editing in Studio.
b. Add an Input widget in the optional section directly under the Overdue Now field.
404 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
c. Enter the following values for this widget in the Properties area at the bottom of the screen.
editable true
id Recurring
label [Link]
required false
value [Link]
PolicyCenter defines variable searchCriteria for this PCF file under Required Variables. To see the definition
of this variable, select the entire DetailViewPanel and then select the Required Variables tab. You see the following
variable definition in the base configuration.
name searchCriteria
type [Link]
File Task
[Link] Add a CriteriaDef element for the search entity. PolicyCenter uses this for the
SearchObjectType in [Link].
[Link] Examine the values of the following properties. These properties determine the
classes and methods that you need to modify.
SearchPanel: Properties
criteriaName: searchCriteria
searchCriteria: new EntitySearchCriteria()
search: [Link]()
Configuring search functionality 405
Guidewire PolicyCenter 9.0.9 Configuration Guide
File Task
If the search screen supports multiple entity types, you see a range input widget
similar to the following one. The value property determines the classes and
methods that you need to modify.
SearchFor: Properties
value: [Link]
This PCF file also contains fields for all searchable criteria. Add your new search
fields to this file.
[Link] Base configuration data model definitions for standard fields on the
EntitySearchCriteria object. You cannot modify this base configuration file.
See also
• Installation Guide
See also
See also
• Installation Guide
• Integration Guide
406 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
Guidewire PolicyCenter
database engine
Free‐text search
application server
ISolrSearchPlugin
Guidewire Solr Extension
ISolrMessageTransportPlugin
Note: Guidewire supports running the separate application server instances for PolicyCenter and the
Guidewire Solr Extension on the same hosts in production.
database server
database engine
application server
Guidewire PolicyCenter
Free‐text search
ISolrMessageTransportPlugin
[Link]
[Link]
[Link]|[Link]
Legend
Running software
Configuration files
Host computer
With embedded operation, the Free-text Search page on the Internal Tools tab is available as an alternative to the free-
text batch load command.
Relational database
Advanced search
(database search)
PolicyCenter application
Policy updates
Basic search
(free‐text search)
(unavailable
during batch load
process)
Full‐text database
• [Link] – Provides detailed configuration of the fields that free-text search extracts from
the PolicyCenter database and sends to the full-text search database for indexing and searching.
• [Link] – Configures how PolicyCenter works with the Guidewire Solr Extension, including
connection information, and whether the mode of operation is external or embedded.
See also
• “Search parameters” on page 88
• “Script parameters” on page 125
• “Configuring the Guidewire Solr Extension” on page 413
See also
• “Configuring the Guidewire Solr Extension” on page 413
• “Configuring free-text search for indexing and searching” on page 423
See also
• “Configuring the free-text batch load command” on page 424
Procedure
1. Start PolicyCenter Studio.
2. Set up the EventFired rules for free-text search:
a. In the Project window, navigate to configuration→config→Rule Sets→EventMessage.
b. Double-click EventFired to open [Link] in the Rules editor, and then ensure that the Indexing
System rules are enabled.
3. Configure the ISolrMessageTransportPlugin plugin:
a. In the Project window, navigate to configuration→config→Plugins→registry.
b. Double-click [Link] to open it in the Plugins Registry editor, and then
enable it with the Gosu class [Link].
c. In the Project window, navigate to configuration→config→Messaging.
d. Double-click [Link] to open it in the Messaging editor.
e. In the list box on the left, select the [Link] destination, and then enable it
with the ISolrMessageTransportPlugin transport plugin.
4. Configure the ISolrSearchPlugin plugin:
a. In the Project window, navigate to configuration→config→Plugins→registry.
b. Double-click [Link] to open it in the Plugins Registry editor, and then enable it with
the Gosu class [Link].
5. Enable free-text search:
a. In the Project window, navigate to configuration→config.
b. Double-click [Link] to open it in the XML editor, and then set FreeTextSearchEnabled to true.
6. Start the PolicyCenter application.
Result
If you enabled free-text search successfully, you see the following message at server startup on the server console
and in the server log file.
***** PCSolrMessageTransportPlugin is initialized *****
If you configured free-text search for embedded operation, you see the following messages at server startup on the
server console and in the server log file.
Solr Installing and provisioning embedded Solr in folder C:\opt\gwsolr
Solr Embedded server configured for automatic provisioning in /opt/gwsolr for appCode pc
See also
• Installation Guide
• Integration Guide
Whenever this script parameter is set to false, the Search Policies screen displays the Advanced screen only. Setting
the EnableDisplayBasicSearchTab script parameter to true has no effect if the FreeTextSearchEnabled
configuration parameter in [Link] is set to false.
Whenever a systems administrator runs the free-text batch load command while PolicyCenter is available to users,
you must set this script parameter to false to hide the Basic search screen. Users continue to use the Advanced search
screen without interruption. After the free-text batch load command finishes, set the
EnableDisplayBasicSearchTab script parameter to true to restore the Basic search screen for users.
Changes to the value of the EnableDisplayBasicSearchTab script parameter take effect immediately. You do not
need to restart the server.
The default value of this parameter is true.
See also
• “Search parameters” on page 88
• “Script parameters” on page 125
• System Administration Guide
See also
• Installation Guide
Generally, you work with these files during installation, at the time you set up free-text search in the application
server or servers dedicated to the Guidewire Solr Extension.
If you make changes to the configuration files within Studio, for the changes to take effect, you must run the
gwb packageSolr command. Then redeploy the [Link] file that this command creates. If you make
changes to the configuration files in the deployment folders outside Studio, you must copy your changes back to the
folders in the Navigation window Studio. If you do not copy your changes back to Studio, the files from Studio
replace your changed files. This occurs the next time you run the gwb packageSolr command and redeploy the pc-
[Link] file.
See also
• Installation Guide
Configuring search functionality 413
Guidewire PolicyCenter 9.0.9 Configuration Guide
The servername attribute specifies a <solrserver> element defined elsewhere in the [Link]
file.
The base configuration includes <document> elements for each type of data that free-text search supports. You must
modify the servername attribute to match the instances of the Guidewire Solr Extension that you define and use.
The servername attributes of <document> elements must match the name attributes of <solrserver> elements. You
can map more than one <document> element to the same <solrserver> element.
The type attribute specifies the operating mode for the Guidewire Solr Extension. The attribute has three possible
values:
• embedded – The Guidewire Solr Extension operates embedded within PolicyCenter.
• http – The Guidewire Solr Extension operates externally from PolicyCenter, as a single server.
• cloud – The Guidewire Solr Extension operates externally from PolicyCenter, as a cluster of servers.
The base configuration includes <solrserver> elements that serve as examples for the <solrserver> elements that
you must define.
In the preceding example, PolicyCenter runs with the embedded server by default. PolicyCenter does so for two
reasons. The first reason is because PolicyCenter base configuration does not have a setting for its Java VM
environment variable. The second reason is because the <document> element associated with an embedded server
has the same name and no setting for its env attribute.
To run PolicyCenter with the external server hosted locally instead, start PolicyCenter with the Java VM
environment variable -[Link]=local. In this case, PolicyCenter looks for the <document> element with the
414 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
same name and with an env attribute having a value of “local.” The <document> element that has these
characteristics corresponds to an external server hosted locally.
PolicyCenter supports the embedded type only in development environments. PolicyCenter supports the http and
cloud types in production and development environments. Setting the type to embedded configures the Guidewire
Solr Extension for embedded operation. Setting the type to http or cloud configures the Guidewire Solr Extension
for external operation.
The name attribute of the <solrserver> element lets you bind document types, such as policies, to a server that has
cores for them. A <document> element may reference a <solrserver> element of type embedded only if you run
the PolicyCenter application in development mode. Otherwise, PolicyCenter generates an error message on the
server console and in the server log, and free-text search does not operate.
For Solr servers of embedded type, you must specify the solrroot parameter. The value is the absolute path to a
directory where the indexes for the cores are located. Generally, you specify a Guidewire Solr Home directory that
holds files extracted from the [Link] file as solrroot. In a typical development environment, the home
directory is on the same host as the one that hosts your PolicyCenter application. Free-text search creates the
directory specified by solrroot during server startup if the directory does not exist and extracts the files from pc-
[Link] into that directory.
The following example shows a typical configuration of an embedded server in a development environment set up
on a Tomcat application server.
<solrserver name="embeddedSolr" type="embedded">
<param name="solrroot" value="/opt/gwsolr"/>
<param name="gwsolrzip" value="/dev/PolicyCenter/solr/[Link]"/>
</solrserver>
...
<document name="policy" archive="false" servername="embeddedSolr"/>
For embedded operation on Tomcat, you must include the gwsolrzip parameter to specify the absolute path to the
[Link] file in your PolicyCenter home directory.
See also
• “Configuring the Guidewire Solr Extension for provisioning” on page 417
Note: Guidewire does not support configuring the Guidewire Solr Extension for external operation
with development environments installed on the bundled QuickStart application server.
The following example in [Link] shows a typical configuration of an external server for a
development environment.
<solrserver name="localhost" type="http">
<param name="host" value="localhost"/>
<param name="port" value="8983"/>
</solrserver>
...
<document name="policy" archive="false" servername="localhost"/>
The name attribute of the <solrserver> element lets you bind a document type, such as policy, to a server that has a
core for it.
For external servers, you must specify the host and the port parameters. Typically in a development environment,
you run the Guidewire Solr Extension in an application server instance hosted on the same machine where you run
the PolicyCenter application. If you run the Guidewire Solr Extension on the same machine that runs PolicyCenter,
specify localhost for the host parameter. Otherwise, specify the host name for the remote host.
The base configuration of the Guidewire Solr Extension configures its port number as 8983. For the port parameter
of a an external server definition, specify the port number that you configured for the Guidewire Solr Extension in
the application server that runs it.
With external servers, you can specify two kinds of HTTP timeout parameters: connectiontimeout and
readtimeout. The following example shows typical timeout parameter settings.
<solrserver name="localhost" type="http">
<param name="host" value="localhost"/>
<param name="port" value="8983"/>
<param name="connectiontimeout" value="300000"/>
<param name="readtimeout" value="300000"/>
</solrserver>
Specify timeout intervals in milliseconds. The connectiontimeout parameter specifies how long PolicyCenter
waits for the Guidewire Solr Extension to respond to a connection request. The readtimeout parameter specifies
how long PolicyCenter waits for the Guidewire Solr Extension to completely return results from a search request.
With external servers, you can also specify two connection quantity parameters: maxtotalconnections and
defaultmaxtotalconnectionsperhost. The following example shows typical connection quantity parameter
settings.
<solrserver name="localhost" type="http">
<param name="host" value="localhost"/>
<param name="port" value="8983"/>
<param name="maxtotalconnections" value="40"/>
<param name="defaultmaxtotalconnectionsperhost" value="40"/>
</solrserver>
The maxtotalconnections parameter places an upper limit on the total number of connections per application
server. The defaultmaxtotalconnectionsperhost parameter places an upper limit on the number of connections
to the specified host. The defaultmaxtotalconnectionsperhost parameter value cannot exceed the value of the
maxtotalconnections parameter. For the Guidewire Solr Extension server with a type of http, Guidewire
recommends that the two connection quantity parameters have the same value.
If the server type is cloud, you can set the maxtotalconnections parameter to a higher value than the value of the
defaultmaxtotalconnectionsperhost parameter. The maximum value for the maxtotalconnections parameter
is N times the value of the defaultmaxtotalconnectionsperhost parameter. In this equation, N is the number of
distinct Guidewire Solr Extension hosts.
Note: If the performance of free-text search is slow, increase the maximum number of connections to
the specified Guidewire Solr Extension host or hosts.
See also
• “Configuring the Guidewire Solr Extension for high availability” on page 418
416 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
[Link]=ERROR
If one of the lines present but commented out, remove the comment marker (#) preceding the line. If neither line is
present, add one of the lines.
For additional information, see the following topics:
• System Administration Guide
If you set the provision parameter to true, free-text search deploys the files from PolicyCenter/gwsolr/pc-
[Link] to the solrroot directory every time you start the PolicyCenter application. If you set provision to
false, you must manually provision changed files that you edit in Studio. Set provision to auto only for
automated testing. With provision set to auto, the indexes are dropped each time you start the PolicyCenter
application.
See also
• “Configuring the Guidewire Solr Extension for embedded or external operation” on page 415
Configuring search functionality 417
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. Start PolicyCenter Studio.
2. In the Project window, navigate to configuration→config→solr.
3. Double-click [Link] to open the file in the editor.
4. In a <solrserver> definition for an embedded server, set the value of the provision parameter to true.
For example:
<solrserver name="embedded" type="embedded">
<param name="provision" value="true"/>
<param name="solrroot" value="c:\opt\gwsolr"/>
</solrserver>
gwb packageSolr
The default port for a ZooKeeper host is to 2181. Specify ports if you need to use a port that is not 2181.
The chroot parameter identifies an application within a ZooKeeper ensemble. The parameter allows multiple
applications to use a single ZooKeeper ensemble for high availability. For the Guidewire Solr Extension included
with PolicyCenter, use pc as the value for chroot. Although you can use any value and although the parameter is
optional for stand-alone instances, Guidewire recommends chroot with the value pc.
418 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
Note: For Tomcat hosts, use the same value that you specify for zkhosts as the value for the launch
parameter zkRun for the Guidewire Solr Extension.
Procedure
1. Start PolicyCenter Studio.
2. In the Project window, navigate to configuration→config→solr.
3. Double-click [Link] to open the file in the editor.
4. Define the zkhosts parameter to specify the hosts and ports of all members of a ZooKeeper ensemble.
a. For the parameter value, specify the hosts and ports in a comma-separated list, using the following syntax:
value="zookeeperHost[:port][,zookeeperHost[:port]][,...]/chRoot"
Example
The following example shows a typical configuration for a high availability cluster of Guidewire Solr Extension
servers.
<solrserver name="cloud" type="cloud">
<param name="zkhosts" value="gwsolr1,gwsolr2,gwsolr3/pc"/>
</solrserver>
Next steps
You must now perform the following tasks:
• “Install ZooKeeper” on page 419
• “Configuring [Link] ” on page 420
Install ZooKeeper
Procedure
1. Download version 3.4.x from the Apache ZooKeeper web site. Here, x is at least 6 for versions of
PolicyCenter that are less than 9.0.5. For versions of PolicyCenter that are greater than or equal to 9.0.5, x is at
least 10. Do not use a ZooKeeper version that is version 3.5 or higher.
2. On each host where you want to run the Guidewire Solr Extension for high availability, create an installation
directory to use as the ZooKeeper home directory. For example:
• On Unix – /opt/zoo
• On Windows – C:\opt\zoo
Configuring search functionality 419
Guidewire PolicyCenter 9.0.9 Configuration Guide
3. Install the ZooKeeper software in the directory that you created. In addition, create a directory for the
ZooKeeper server to store its data. For example:
• On Unix – /opt/zoo/data
• On Windows – C:\opt\zoo\data
Next steps
You must now perform the following task:
• “Configuring [Link] ” on page 420
Configuring [Link]
In [Link], you configure a single ZooKeeper member server. Each ZooKeeper member within an ensemble has its
own copy of [Link]. The [Link] file configures a ZooKeeper server with its client port. PolicyCenter and the
Guidewire Solr Extension connect through the client port to the ZooKeeper server and the ensemble. The file also
lists the members of the ensemble, including their host names and ensemble ports. The members of the ensemble
connect with each other through the ensemble ports.
Important parameters that you can specify in [Link] include the following:
• tickTime – Unit of time in milliseconds for heartbeats and other timing parameters.
• initLimit – Timeout limit for followers to connect to a leader.
• syncLimit – How far out of date a follower can be from a leader.
• dataDir – Location to store the ZooKeeper coordination database, the transaction logs, and the myID file that
specifies the ordinal number for the server within the ensemble. For example:
◦ On Unix – /opt/zoo/data
◦ On Windows – C:\opt\zoo\data
The directory stores only ZooKeeper data and client-uploaded data. The latter data includes the SolrCloud global
configuration and the core configuration. Otherwise, the directory stores no Guidewire Solr Extension data.
• dataLogDir – Location to store the transaction logs. If you do not specify dataLogDir, the server stores
transaction logs in the directory specified by dataDir. To reduce latency on updates, use dataLogDir to specify
a logging directory on a dedicated logging device.
• clientPort – The port on which to listen for connection requests from PolicyCenter and Guidewire Solr
Extension servers. The value for clientPort must match the port specified for the server in the zkhosts
parameter of [Link]. The port defaults to 2181 in both [Link] and solrserver-
[Link].
• server.N – For each member of a ZooKeeper ensemble, its host name, its ensemble port for peer
communication, and its ensemble port for leader election. A member server finds its ensemble ports in the
membership list by matching N with the numerical value in the myID file, located in the directory specified by
dataDir.
The following example [Link] file configures an ensemble of three SolrCloud servers in a ZooKeeper ensemble.
Each server runs on its own host, so all members listen for connections from PolicyCenter through the same client
port. The parameter clientPort is commented out in the example because port 2181 is the default. Because each
member server is on its own host, they all use the same ensemble ports for peer communication and leader election.
Such ensemble ports can include 2888 and 3888.
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zoo/data
# clientPort=2181
server.1=gwsolr1:2888:3888
server.2=gwsolr2:2888:3888
server.3=gwsolr3:2888:3888
You can find a copy of [Link] in Studio by navigating in the Project window to configuration→config→solr.
Generally, the members servers in a ZooKeeper ensemble use the same copy of the file. Use the copy in Studio as
you master copy and deploy it yourself to the ZooKeeper home directory on the host of each member server.
420 chapter 28: Configuring search functionality
Guidewire PolicyCenter 9.0.9 Configuration Guide
myID
Each ZooKeeper member server has an assigned ordinal number. The myID file for each member specifies its ordinal
number.
The myID file is an ASCII text file that resides in the directory specified by the dataDir parameter in the [Link].
For example, store each version of myID in the following directory:
• On Unix – /opt/zoo/data
• On Windows – C:\opt\zoo\data
The member server uses the ordinal number in its myID file to locate its assigned ensemble ports in its copy of
[Link].
See also
• For complete information on configuring and administering a SolrCloud cluster in a ZooKeeper ensemble,
consult the Apache Solr and ZooKeeper documentation at the following respective links:
[Link]
[Link]
PC 1 ZK 1 TCP:
2888,
TCP: 2181 3888
PC 1 PC 1 ZK 2 ZK 3
Solr 2 Solr 3
authenticating the PolicyCenter and Guidewire Solr Extension web sites and associated web servers before
connecting to exchange data. In addition, HTTPS provides bidirectional encryption of exchanged data.
The way you configure PolicyCenter and the Guidewire Solr Extension to use HTTPS depends on the way you
configure the Guidewire Solr Extension for external operation:
• HTTP – Configures a single instance of the Guidewire Solr Extension that runs externally from the application
server in which PolicyCenter runs
• Cloud – Configures a cluster of Guidewire Solr Extension instances, managed as a cluster, or ensemble, by
Apache ZooKeeper
With secure transport enabled, HTTPS authentication and encryption apply to indexing, querying, administration,
and the free-text batch load command.
PolicyCenter inserts a host property in [Link], in the following format, whenever you run the gwb packageSolr
command:
<str name="host">${serverHost:[Link]}</str>
Note: If you modify [Link] manually for any reason, PolicyCenter no longer inserts a host
property when you run the gwb packageSolr command.
The base configuration of PolicyCenter does not include [Link]. To create a [Link] file to edit in Studio or to
retain changes that you make to [Link] in GWSOLR_HOME/pc/solr, copy the file in GWSOLR_HOME/pc/solr. In
PolicyCenter Studio, navigate in the Project window to configuration→config→solr, and then, from the menu, click
Edit→Paste.
PolicyCenter uses host number [Link] by default for locally hosted instances of the Guidewire Solr Extension.
For remotely hosted instances, override the value in the JVM where PolicyCenter runs using the serverHost system
property. For example, if your application server is Tomcat, create or edit the shell script [Link] or, on
Windows, the batch file [Link] in the directory Tomcat_Home/bin. Then, add the following line:
set JAVA_OPTS=%JAVA_OPTS% -DserverHost=mySolrHost
If HTTPS is configured for a port other than 8983, which is the standard port for the Guidewire Solr Extension,
change the port definition in [Link]. Change the port definition in [Link] before you start instances of the
Guidewire Solr Extension for the first time. Alternatively, start the application server with the -DserverPort=####
option.
Run the gwb packageSolr command after you modify free-text search configuration files in Studio to produce an
updated [Link] file to deploy to the Guidewire Solr home directory.
Use the gwzkcli -zkhost command to set the secure flag that enables the Guidewire Solr Extension instances for
secure transport. Use the command after you deploy the Guidewire Solr Extension and the ZooKeeper software to
hosts where you want them to run. Then, before you start the Guidewire Solr Extension on a host for the first time,
run the gwzkcli -zkhost command as the following example shows:
• On Unix
gwzkcli -zkhost localhost:2181 -cmd put /pc/[Link] {"urlScheme":"https"}
• On Windows
gwzkcli -zkhost localhost:2181 -cmd put /pc/[Link] {\"urlScheme\":\"https\"}
If you started an instance of the Guidewire Solr Extension before running the preceding command, run the following
commands to reset that instance:
gwzkcli -zkhost clear /pc
gwzkcli -zkhost localhost:2181 -cmd put /pc/[Link] {\"urlScheme\":\"https\"}
gwzkcli -Dbootstrap_conf=true
For improved security, prompt the user for the trust store password instead of including it directly in the shell script
or batch file.
You can locate and edit the shell script or batch file for the batch load command in the Project window in Studio by
navigating to configuration→config→solr.
See also
• “Modifying free-text search for additional fields” on page 426
• Installation Guide
SQL Select Statement Configuration for the Free‐text Batch Load Command
The free-text batch load command extracts data from the PolicyCenter database by using native SQL. The native
SQL Select statements that the batch loader uses are defined in configuration files for specific database brands. The
configuration files that contain native SQL are:
• For H2 databases – [Link], suitable only for development
• For Oracle databases – [Link], suitable for development or production
• For SQL Server databases – [Link], suitable for development or production
You do not need to modify the native SQL when you first set up and configure the free-text batch load command.
The native SQL correctly selects data for the search fields in the default configuration of free-text search. You must
modify the native SQL only when you want to extend or modify the search fields for your configuration of free-text
search.
See also
• “Modifying free-text search for additional fields” on page 426
• Installation Guide
See also
• Integration Guide
IMPORTANT Adding multi-valued fields can affect free-text search performance. In particular, adding
fields with too many values significantly degrades full-text search performance.
[Link] The implementation class for the free‐text plugin ISolrSearchPlugin. This plugin
sends search criteria to the Guidewire Solr Extension and receives the search results.
PolicyCenter/modules/pc/gsrc/gw/solr/[Link]
The following table lists the configuration files for Guidewire Solr Extension.
/opt/gwsolr/pc/solr/policy_active/conf/data‑[Link]
The following table lists the configuration files for the free-text batch load command.
batchload-config- Contains database connection information and brand‐specific native SQL for selecting
[Link] data from the PolicyCenter relational database.
/opt/gwsolr/pc/solr/policy_active/conf/[Link]
[Link] | [Link] Collates and compiles index documents for the Guidewire Solr Extension using data
selected from the relational database.
/opt/gwsolr/pc/solr/policy_active/conf/[Link]
IMPORTANT The PolicyCenter base configuration does not support free-text search of entity types
other than policies and submissions. The addition of such free-text search fields is a complex
endeavor. When engaging in all such endeavors, proceed with competence and care. Guidewire will
support customers in their development of additional search types.
The definition directs the Guidewire Solr Extension to index the values of postal code fields, so search criteria can
include postal codes. The definition directs the Guidewire Solr Extension to store the values of postal code fields, so
items returned in search results include them.
The type attribute in the preceding definition identifies the analyzer with which Guidewire Solr Extension processes
postal code fields. The analyzer type indicates the category of matches that are possible on applicable search fields.
In this case, a value for the type attribute of gw_unanalyzed indicates that postal codes are raw text fields and that
Guidewire Solr Extension does not analyze them. Given this value, only exact matches are possible for searches on
the values of postal code fields.
Configuring search functionality 427
Guidewire PolicyCenter 9.0.9 Configuration Guide
Access the file in the Project window in Studio by navigating to configuration→config→search policy-search-
[Link]. PolicyCenter defines the format of this file.
Free-text search configuration files have these main elements:
• <Indexer> – Contains <IndexField> elements to define field names and their locations within object graphs of
the root object and in the index documents sent to the Guidewire Solr Extension.
• <Query> – Contains the following types of elements:
◦ <QueryTerm> elements define how specific fields are matched and how a match contributes to the overall
score. A query term is one of two types: term and subquery. A term type searches a single index for a single
field. A subquery type searches multiple indices for multiple fields simultaneously and scores the most
appropriate match.
IMPORTANT Do not confuse the term type query term with the subquery type query term. A
subquery type can search multiple indexes for multiple fields. A term type can only search one
index for a single field. An XSD only validates the structure of a query. The XSD does not
validate the inputs for a term type. Thus, if you attempt to enter multiple terms in a term type, the
XSD will not catch this error. Instead, the platform will throw a run-time exception.
◦ <FilterTerm> elements restrict Guidewire Solr Extension from returning a result if a field in that result
matches given search criteria. The elements do not affect the score of any results. Instead, they help users to
limit the results that a search returns, such as by a date range. The elements can also facilitate security by
controlling the results that users receive.
• <QueryResult> – Contains <ResultProperty> elements to configure whether and how specific fields are
returned in query results from the Guidewire Solr Extension.
To add a free-text field to [Link], first add an <IndexField> element to the <Indexer>
element. The following example defines a free-text field for postal codes.
<IndexField field="postalCode">
<DataProperty path="[Link]"/>
</IndexField>
The definition specifies that values of postalCode fields in the index documents sent to the full-text engine come
from addresses on policy periods, the root object.
Next, add <FilterTerm> elements for the new free-text field to the <Query> element. The following example
specifies how the Guidewire Solr Extension matches PostalCodeCriteria values in search criteria with
postalCode values in the Guidewire Solr Extension.
<FilterTerm>
<DataProperty path="[Link]"/>
<QueryField field="postalCode"/>
</FilterTerm>
The definition directs the Guidewire Solr Extension to accept postal codes in search criteria and where to find them
in the XML structure of the search criteria.
Finally, add a <ResultProperty> element to the <QueryResult> element. The following example defines how the
Guidewire Solr Extension returns postalCode values in query results.
<ResultProperty name="PostalCode">
<ResultField name="postalCode"/>
</ResultProperty>
The definition assigns the postalCode value in the result to the PostalCode on the result object.
To include the postalCode in the index, put an entry in [Link] that looks like the following XML code:
<field column="postalCode" xpath="/CONTAINER_ELEM/POLICY/POSTALCODE"/>
Within the row for one policy, the fields will be in the same order as they were returned by the SELECT statement.
You can have fields in the SQL result that do not become part of the XML of the index documents. The Guidewire
Solr Extension ignores such fields when it loads the SQL result. These fields are not part of the index document
schema. The batch load command uses these kinds of fields to sort and manipulate the data returned from the
database to XML to produce the final XML index documents to load.
[Link]("postalCode", [Link])
If this field is not part of the hash value, you must make the batch load command ignore the field for digest
purposes. An example of such a field is sliceDate. The configuration for the digester is near the bottom of the
batchload-config-database [Link] files. The sliceDate column is among the columns to ignore.
<transformer
name="digestTransformer"
class="[Link]"
ignoreElems="urn, periodID, policyPublicID, sliceDate, periodStart, periodEnd, policyStart,
policyEnd, periodIdWithSliceDate, jobType"
algorithm="SHA"
/>
The final stage to the de-duplication is in the postprocess script. The postprocess script sorts the data by a
combination of URN, slice date, and term number. The script then removes rows with duplicate urn values. Slice
date and term number are used in the initial sort to retain the latest version of the duplicate data, which is the same
way that PolicyCenter indexes the data.
DefaultContentDispositionMode Specifies the Content‐Disposition setting to use if the content to be printed is returned to
the browser. Must be either “attachment” (the default) or “inline”.
PrintFontFamilyName Sets the name of font family to use for output. The default is “sans‐serif”.
PrintFontSize Sets the page font size. The default is 10 points.
PrintFOPUserConfigFile (Optional) Sets the fully qualified path to a valid FOP user configuration file. Use this to
specify or override the default FOP configuration.
PrintHeaderFontSize Sets the header’s font size. The default is 16 points.
PrintLineHeight Specifies the line height. The default is 14 points.
PrintListViewBlockSize Sets the block size of the list elements if printing a list with elements.
PrintListViewFontSize Sets the font size for printing list views. The default is 10 points.
PrintMarginBottom Sets the bottom margin. The default is .5 inches.
PrintMarginLeft Specifies the size of left margin. The default is 1 inch.
PrintMarginRight Specifies the size of right margin. The default is 1 inch.
PrintMarginTop Specifies the size of top margin. The default is .5 inches.
PrintMaxPDFInputFileSize Sets the size of the intermediate XML file to create if printing to PDF.
PrintPageHeight Specifies the height of the page. The default is 8.5 inches.
PrintPageWidth Specifies the width of the page. The default is 11 inches.
You can modify any of the page formatting attributes using property values defined in the CSS2 specification. The
specification resides at the following location: [Link]
Entry points
An entry point takes the form of a URL with a specific syntax. The entry URL specifies a location that a user enters
into the browser. If the PolicyCenter server receives a connection request with a specific entry point, PolicyCenter
responds by serving the page based on the entry point configuration.
To implement this functionality, you must create an EntryPoint PCF (in the entrypoints folder). The following
graphic illustrates an EntryPoint PCF.
authenticationRequired Specifies that PolicyCenter must authenticate the user before the user can access the URL. If true,
PolicyCenter requires that the user already be authenticated to enter. If the user is not already
logged in, PolicyCenter presents a login page before rendering the entry point location.
The default is true. Guidewire strongly recommends that you think carefully before setting this
value to false.
clearSession If true, clears the server session for this user as the user enters this entry point
desc Currently, does nothing.
failurePage Specifies the page to send the user if PolicyCenter cannot display the entry point. Failures typically
happen any time that the data specified by the URL does not exist. The default is Error.
id Required. The PolicyCenter uniform resource identifier to show, minus its .do suffix. Typically, this
is the same as the page ID. No two EntryPoints can use the same URI. Do not use the main
application name, PolicyCenter, as the URI.
For example, if the URI is XXX, then it is possible to enter the application at [Link]
myapp/[Link].
location Required. The ID of the page, Forward, or wizard to which you want to go. Guidewire recommends
that if you want the entry point to perform complex logic, use a Forward.
See “Create a Forwarding EntryPoint PCF” on page 434 for a definition of a forward.
Each EntryPoint PCF can contain one or more EntryPointParameter subelements that specifies additional
functionality.
conversionExpression Gosu expression that PolicyCenter uses to convert a URL parameter to the value passed to the loca‐
tion parameter.
desc Currently, does nothing.
locationParam Required. The name of the LocationParameter on the EntryPoint target location that this parame‐
ter sets.
optional Specifies whether the parameter is optional. If set to true, PolicyCenter does not require this param‐
eter.
type Required. Specifies what type to cast the incoming parameter into, such as String or Integer.
urlParam The name of the parameter passed with the URL. For example, if the urlParam is Activity and the
entry point URI is ActivityDetail,you would pass Activity 3 as:
[Link]
Procedure
1. Define a separate entry point (PCF) with authenticationRequired property set to false. This PCF is
effectively a forwarding page to handle the seamless login.
2. Set the location attribute of the entry point to use a Forward to call the AuthenticationServicePlugin.
3. Do one of the following:
• If the plugin login is successful, forward the user onto the actual page (the desktop, for example) to which
you intended to send the user in the first place. (This is the page to which the user would have gone if
authenticationRequired had been set to true.)
• If the plugin login is not successful, redirect the user to an error page or an alternate login page.
434 chapter 29: Configuring special page functions
Guidewire PolicyCenter 9.0.9 Configuration Guide
Example
For an example of how to define a forward, see ActivityForward in PolicyCenter Studio at
pcf→activity→ActivityForward.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→Page
Configuration→pcf→exitpoints.
2. Right-click exitpoints, and then click New→PCF File.
3. In the New PCF File dialog, in the File name text box, type AnyURL.
4. In the File type list, click Exit Point.
5. In the [Link] file editor, click the Exit Point box.
6. In the Properties tab at the bottom of the window, set the following properties:
7. Select the AnyURL file, so that Studio outlines the ExitPoint element in blue.
Configuring special page functions 435
Guidewire PolicyCenter 9.0.9 Configuration Guide
8. Select the Properties tab at the bottom of the screen and set the listed properties. This example pushes the URL
to a popup window that leaves the user logged into PolicyCenter. You can also configure the ExitPoint PCF
functionality to log out the user or to possibly reuse the current window.
• logout – false
• popup – true
• url – {exitUrl}
9. Click the Entry Points tab, and then click Add .
10. In the signature text box, type the following entry point signature:
AnyURL(url : String)
11. In the Toolbox, expand the Special Navigation node, click the Exit Point Parameter widget, and drag it into your exit
point PCF.
12. Select the Exit Point Parameter widget and enter the following in its Properties tab:
• locationParam – url
• type – String
• urlParam – exitUrl
Next steps
After completing this task, complete “Step 2: Modify the user interface screen to use the exit point” on page 436.
Step 2: Modify the user interface screen to use the exit point
Before you begin
Before beginning this task, complete “Step 1: Create the ExitPoint PCF file” on page 435.
Procedure
1. In Guidewire Studio, create a new [Link] display key. You need this display key as a
label for the button that you create in a later step.
a. Open the Display Key editor and navigate to Button→Activity.
b. Select the Activity node, right-click and select Add.
c. Enter the following in the Display Key Name dialog:
• Display Key Name — [Link]
• Default Value — Dynamic URL
2. Open the PCF for the page on which you want to add the exit point. For the purposes of this example, open the
ActivityDetailScreen PCF file.
Note: The simplest way to find a Studio resource is to press CTRL+N and enter the resource
name.
3. Select the entire ActivityDetailScreen element on the PCF page. Studio displays a blue border around the
selected element.
4. In the Code tab at the bottom of the screen, enter the following as a new function:
// This function must return a valid URL string.
function constructMyURL() : String { return "[Link] }
You can make the actual function as complex as you need it to be. The function can also accept input
parameters as well. The only stipulation is that it must return a valid URL string.
436 chapter 29: Configuring special page functions
Guidewire PolicyCenter 9.0.9 Configuration Guide
5. In the Toolbox for the PCF page that you just opened, find a Toolbar Button widget and drag it into the line of
buttons at the top of the page.
6. Select the new button widget so that it has a blue border around it.
7. Select the Properties tab at the bottom of the screen and set the listed properties. It is possible to use any action
attribute to activate the ExitPoint PCF. This example uses a button input as it is the easiest to configure and
test.
• action – [Link](constructMyURL())
• id – DynamicURL
• label – [Link]
Next steps
After completing this task, complete “Step 3: Test your work” on page 437.
Procedure
1. Start the PolicyCenter application server, if it is not already running. It is not necessary to restart the
application server as you simply made changes to PCF files. You did not actually make any changes to the
underlying PolicyCenter data model, which would require a server restart.
2. Log into PolicyCenter using an administrative account.
3. Press Alt+Shift+T to open the Server Tools screen. This screen is only available to administrative accounts.
4. Choose Reload PCF Files in the Internal Tools→Reload screen. PolicyCenter presents a success message after it
reloads the PCF files from the local file system.
5. Log into PolicyCenter under a standard user account and search for an activity. The Activity Detail screen now
contains a Dynamic URL button.
6. Click the Dynamic URL button and PolicyCenter opens a popup window and loads the URL that you set on the
constructMyURL function.
Result
If you followed the steps of this example exactly, PolicyCenter loads the Guidewire Internet home page into the
popup window.
This topic covers basic information about the workflow editor in Guidewire Studio.
Each file name corresponds to the workflow process that it defines (for example, CompleteCancellationWF.
[Link]). Each workflow file name contains a version number. If you create a new workflow, Studio creates a
workflow file with version number 1. If you modify an existing base configuration workflow, Studio creates a copy
of the file and increments the version number. In each case, Studio places the workflow file in the following
directory:
modules/configuration/config/workflow
See also
• For a discussion of workflow as it relates to specific job types (Submissions, for example), see the Application
Guide.
• “Guidewire workflow” on page 445.
For example, in the PolicyCenter base configuration, Guidewire defines a CompleteCancellationWF script. In
Studio, it looks similar to the following:
ActivityStep Zero, one, or more Step that waits for one or more activities to complete before continu‐
ing. See “ActivityStep workflow step” on page 455.
MessageStep Zero, one, or more Special‐purpose step designed to support messaging‐based integra‐
tions. See “MessageStep workflow step” on page 454.
Outcome One or more Special final step that has no branches leading out of it. See “Outcome
workflow step” on page 457.
See also
• Globalization Guide
Guidewire workflow
This topic covers PolicyCenter workflow. Workflow is the Guidewire generic component for executing custom
business processes asynchronously.
Understanding workflow
There are multiple aspects of workflow:
Term Definition
workflow, workflow in‐ A specific running instance of a particular business process. Guidewire persists a workflow in‐
stance stance to the database as an entity called Workflow.
workflow type A single kind of flow process, for example, a Cancellation workflow.
workflow process A definition of a workflow type in XML. Guidewire defines workflow processes in XML files that
you manage in Guidewire Studio through the graphical Workflows editor.
Discussions about workflow in general or the workflow system refer usually to the workflow infrastructure as a
whole.
Workflow instances
PolicyCenter saves a workflow instance as a row in the database marking the existence of a single running business
flow. PolicyCenter creates a workflow instance in response to a specific need to perform a task or function, usually
asynchronously. For example, in the base configuration, PolicyCenter creates a macro workflow as a companion to
each newly-created Job (Submission, PolicyChange, Renewal, for example). This workflow is responsible for
pushing the Job through its life cycle.
The newly created instance takes the form of a database entity called Workflow. Because PolicyCenter creates the
Workflow entity in a bundle with other changes to its associated business data, PolicyCenter does nothing with the
workflow until it commits the workflow. PolicyCenter does not send messages to any external application unless the
surrounding bundle commits successfully.
Note: For more information on the Workflow entity, consult the PolicyCenter Data Dictionary.
After creation of the Workflow entity, nothing further happens from the viewpoint of the code that created the
workflow. The workflow merely continues to execute asynchronously, in the background, until it completes. It is not
possible, in code, to wait on the workflow, as you can wait for a code thread to complete, for example. This is
because some workflows can literally and deliberately take months to complete.
Guidewire workflow 445
Guidewire PolicyCenter 9.0.9 Configuration Guide
All workflows have a state field ,a typekey of type WorkflowState, that tracks how the workflow is doing. This
state, and the transitions between states, is simple:
• All newly beginning Workflow entities start in the Active state, meaning they are still running.
• If a Workflow entity finishes normally, it moves to the Completed state, which is final. A workflow in the
Completed state takes no further action and exists from then on only as a record in the database.
• If you suspend a workflow, either from the PolicyCenterAdministration interface, from the command line, or
through the Workflow API, the workflow moves to the Suspended state. A workflow in the Suspended state does
nothing until manually resumed from the Administration interface, from the command line, or through the
Workflow API.
• If an error occurs to a workflow executing in the background, the workflow moves into the Error state after it
attempts the specified number of retries. A workflow in the Error state does nothing until manually resumed
from the Administration interface, the command line, or the Workflow API.
The following graphic illustrates the possible workflow states:
This diagram does not convey any information about how an active workflow, a workflow in the Active state, is
actually processing. For active workflows, Guidewire defines the workflow state in the WorkflowActiveState
typelist, which contains the following states:
• Running
• WaitManual
• WaitActivity
• WaitMessage
Whether the workflow is actually running depends on whether it is the current work item being processed.
Work items
Each running workflow instance can have a work item. If a running workflow does not have a work item associated
with it, the workflow writer picks up the workflow instance at the next scheduled run. The state of this work item is
one of the following:
• Available
• Failed – PolicyCenter retries a Failed work item up to the maximum retry limit.
• Checkedout – PolicyCenter processes a Checkedout work item in a specific worker's queue after the work item
reaches the head of that queue.
446 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
See also
See also
Workflow Gosu
Workflow elements Start, Finish, Enter, Exit, GO, TRIGGER, and TIMEOUT can all contain embedded Gosu. The
Workflow engine executes this Gosu code any time that it executes that element. The specific order of execution is:
• The Workflow engine runs Start before everything else
• The Workflow engine runs Enter on entering a step.
• The Workflow engine runs Exit upon leaving a step. It runs Exit before the branch leading to the next step.
Thus, the actual execution logic from Step A to Step B is to Exit A, then do the Branch, then Enter B.
• The Workflow engine runs GO, TRIGGER, TIMEOUT elements as it encounters them upon following a branch.
• The Workflow engine runs Finish after it runs everything else.
Within the Gosu block, you can access the currently-executing workflow instance as Workflow. If you need to use
local variables, declare them with var as usual in Gosu. However, if you need a value that persists from one step to
another, create it as an extension field on Workflow and set its value from scripting. You can also create subflows in
the Gosu blocks.
The current bundle for workflow actions is the bundle that the application uses to load the Workflow entity instance.
The expression [Link] returns the workflow bundle.
See also
Workflow versioning
After you create a workflow script and make it active, it can create hundreds or even thousands of working instances
in the PolicyCenter application. As such, you do not want to modify the script as actual existing workflow instances
can possibly be running against it. (This is similar to modifying a program while executing it. It can lead to very
unpredictable results.)
However, you might choose to modify a script. Then, you would want all newly created instances of the workflow to
use your new version of the script.
Guidewire stores each workflow script in a separate XML file. By convention, Guidewire names each file a variant
of xxxWF.#.xml:
• xxx the workflow name (which is camel-cased LikeThis)
• # is the version number of the workflow process (starting from 1)
Every newly created (copied) workflow script has a different version number from its predecessor. (The higher the
version number, the more recent the script.) Thus, a script file name of [Link] means workflow
type ManualExecution, version 2. As PolicyCenter creates new instances of the workflow script, it uses the most
recent script—the highest-numbered one—to run the workflow instance against.
It is possible to start a specific workflow with a specific version number. For details, see “Instantiating a workflow”
on page 466.
The Workflow engine enforces the following rules in regards to version numbers:
• If you create a new workflow instance for a given workflow subtype, thereafter, the Workflow engine uses the
script with the highest version number. PolicyCenter saves this number on the workflow instance as the
ProcessVersion field.
• From then on, any time that the Workflow instance wakes up to execute, the Workflow engine uses the script
with the same typecode and version number of the instance only.
• It is forbidden to have two workflow scripts with the same subtype and version number. The server refuses to
start if you try.
• If a workflow instance cannot find a script with the right subtype and version number, it fails with an error and
drops immediately into the Error state. (This might happen, perhaps, if someone inadvertently deleted the file or
the file did not load for some reason.)
IMPORTANT If there is an active workflow on a particular step, do not alter that step without
versioning the workflow.
Workflow localization
At the start of the workflow execution, PolicyCenter evaluates the workflow locale and uses that locale for notes,
documents, templates, and similar items. However, it is possible to set a workflow locale that is different from the
default application locale through the workflow editor. This change then affects all notes, documents, templates,
email messages, and similar items that the various workflow steps create or use.
Guidewire workflow 449
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Set a workflow locale” on page 450
• Globalization Guide
Procedure
1. Click in the background area of the layout view.
2. In the properties area at the bottom of the screen, in the Locale field, enter a valid ILocale type to set the
overall locale for a workflow.
See also
• Globalization Guide
Defining Symbols
You must specify in the context any foreign key or parameter that the workflow subtype definition references. To
access the <Context> element, select it in the outline view. You add new symbols in the property area at the bottom
of the screen.
450 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
Field Description
Name The name to use in the workflow process for this entity.
Enter Script Gosu code that the workflow runs just after it evaluates any Asserts in Workflows (conditions) on the step.
(That is, if none of the asserts evaluate to false. If this happens, the workflow does not run this step.)
Exit Script Gosu code that the workflow runs as the final action on leaving this step.
For example, you could enter the following Gosu code for the enter script:
var msg = "Workflow " + [Link] + "started at " + [Link]
print(msg)
Note: If you rename a property or method, or change a method signature, and a workflow references
that property or method in a Gosu field, PolicyCenter throws a ParseResultsException. This is the
intended behavior. You must reload the workflow engine to correct the error (Internal
Tools→Reload→Reload Workflow Engine).
Asserts in workflows
A step can have any number of Assert condition statements. An Assert executes just before the Enter block. If an
Assert fails, the workflow throws an exception and handles it like any other kind of runtime exception. To access
the Assert tab, select a workflow step.
For example, you could add the following assert condition and error message to log if the assertion fails:
Condition
[Link] == “start”
Events in workflows
A step can have any number of Event elements associated with it. An Event runs right after the Enter block, and
generates an event with the given name and the business object. To access the Events tab, select a workflow step.
Entity Name Entity on which to generate the event. This must be a valid symbol See also:
name. • “<Context> workflow element” on
page 450
Event Name Name of the event to generate. This must be a valid event name. See also:
• Integration Guide
For example:
Notifications in workflows
A step can have any number of non-blocking Notification activities. A notification in workflow terms is an
activity that PolicyCenter sends out, but which does not block the workflow from continuing. PolicyCenter only
uses it to notify you of something. The workflow generates any notifications immediately after it executes the Enter
code, if any. See “ActivityStep workflow step” on page 455 for more information on activity generation.
Init Optional Gosu code that the workflow executes immediately after it creates the activity. Typically, you use this code to
assign the activity. If you do not explicitly assign the activity, the workflow auto‐assigns the activity.
For example:
452 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
Name notification
Pattern general_reminder
Each AutoStep step must have at least one “GO” on page 459 branch. (It can have more than one, but it must have
at least one.) Each GO branch that leaves an AutoStep step—except for the last one listed in the XML code—must
contain a condition that evaluates to either Boolean true or false.
After the AutoStep completes its Assert, Enter, and Activity blocks, it goes through its list of GO branches (from
top to bottom in the XML code):
• It picks the first GO branch for which the condition evaluates to true.
• If none of the other GO branches evaluate to true, it picks the last GO element (without a condition).
At that point, it executes the Exit block and proceeds to the step specified by the chosen GO element.
Field Description
Step ID ID of the step to create.
Field Description
ID ID of a branch leaving this step. It defaults to the To value if you do not supply a value.
To ID of the step to which the workflow goes if the condition specified for this branch evaluates to true.
For example:
Step ID Step1
ID -
To DefaultOutcome
3. Click on your newly created step. It is possible that there are additional tabs to fill out in the properties area at
the bottom of the screen. See “Common step elements” on page 451 for information on the various tabs.
Just before running the Enter block, the workflow creates a new message and assigns it to [Link]. Use
the Enter block to set the payload for the message. After the Enter block finishes, the workflow commits its bundle
and stops. This commits the message. At this point, the messaging subsystem picks up the message and dispatches
it.
If something acknowledges the message (either internal or external), PolicyCenter stores an optional response string
(supplied with the ack) on the message in the Response field. PolicyCenter then does the following:
• It copies the message into the MessageHistory table
• It updates the workflow to null out the foreign key to the original message and establishes a foreign key to the
new MessageHistory entity.
It then resumes the workflow (by creating a new work item).
There can be any number of GO branches that leave a message step (but only GO branches). As with AutoStep
Workflow Step, the workflow evaluates each GO condition, and chooses the first one that evaluates to true. If none
evaluate to true, the workflow takes the branch with no condition attached to it.
Field Description
Step ID ID of the step to create.
Destination ID ID of the destination for the message. This must be a valid message destination ID as defined through the
Studio Messaging editor.
EventName Event name on the message.
ID ID of a branch leaving this step. It defaults to the To value if you do not supply a value.
Field Description
To ID of the step to which the workflow goes if the condition specified for this branch evaluates to true.
For example:
Step ID Step4
Dest ID 89
ID
To DefaultOutcome
3. Click on your newly created step. It is possible that there are additional tabs to fill out in the properties area at
the bottom of the screen.
See also
• “Common step elements” on page 451
Within an ActivityStep, you specify one or more activities. The workflow creates each defined activity as it enters
the step. (This occurs immediately after the workflow executes the Enter Script block, if there is one.) The activity is
available on all steps.
The only difference between an Activity and a Notification within a workflow is that:
• An Activity pauses the workflow until all the activities in the step terminate.
• A Notification does not block the workflow from continuing.
If more than one Activity exists on an ActivityStep, then the workflow generates all of them immediately after
the Enter block (along with any events or notifications). The step then waits for all of the activities to terminate. If
desired, an ActivityStep can also contain TIMEOUT and TRIGGER branches as well. In that case, if a timeout or a
trigger on the step occurs, then the workflow does not wait for all the activities to complete before leaving the step.
After PolicyCenter marks all the activities as completed, skipped or canceled, the ActivityStep uses one or more
“GO” on page 459 branches to proceed to the next step. There can be any number of GO branches that leave an
activity step. As with AutoStep Workflow Step, the workflow evaluates each GO condition, and chooses the first
one that evaluates to true. If none evaluate to true, the workflow takes the branch with no condition attached to it.
Notice that it is possible for the condition statement of a GO branch to reference a generated Activity by its logical
name. For instance, it is possible that you want to proceed to a different step depending on whether PolicyCenter
marks the Activity as completed or canceled.
Guidewire workflow 455
Guidewire PolicyCenter 9.0.9 Configuration Guide
Field Description
Step ID The ID of the step to create.
ID ID of a branch leaving this step. It defaults to the To value if you do not supply a value.
To ID of the step to which the workflow goes if the condition specified for this branch evaluates to true.
3. Click on your newly created step and open the Activities tab at the bottom of the screen. After you create the
ActivityStep, you need to create one or more activities. (Each ActivityStep must contain at least one
defined activity.) These fields on the Activities tab have the following meanings:
Init Gosu code that the workflow executes immediately after it creates the activity. Typically, you use this code to
assign the activity. If you do not explicitly assign the activity, the workflow auto‐assigns the activity. For exam‐
ple, the following initialization Gosu code creates an activity and assigns it SomeUser in SomeGroup.
[Link](Activity)
[Link](SomeGroup, SomeUser)
The initialization code creates an activity based on the activity pattern that you set in the Pattern field.
Time Del- The amount of time to wait or pause before continuing. Enter an integer number with its units (3600s, for example).
ta
Time Ab- A fixed point in time, as defined by a Gosu expression that resolves to a date. You can use the Gosu code to define
solute the date, as in the following:
456 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
[Link]
Or, you can use Gosu to calculate the point in time, as in the following:
[Link](-105)
This defines the terms of the TIMEOUT branch that leaves this step. To view these details later, click the branch (the
link) between the two steps.
Field Description
Step ID ID of the step to create.
Type Name of the activity.
ID If you select the following Type value:
• Trigger: A valid trigger key as defined in typelist WorkflowTriggerKey.
• Timeout: ID of a branch leaving this step. It defaults to the To value if you do not supply a value.
To ID of the step to which the workflow goes if the condition specified for this branch evaluates to true.
Time Delta Specifies a fixed amount of time to pause before continuing. For example, the following sets the wait time to
60 minutes (one hour): 3600s,
Time Ab- Specifies a fixed point in time. For example, the following sets the point to continue to after the policy
solute CancelProcessDate:
[Link]
If the WorkflowTriggerKey typelist does not contain any trigger keys, then you do not see the Trigger option in
the dialog.
3. Click on your newly created step. It is possible that there are additional tabs to fill out in the properties area at
the bottom of the screen.
After the workflow successfully enters an Outcome step (meaning that the workflow successfully executes the Enter
block of the Outcome step), it does the following:
1. The workflow generates all the listed events and notifications.
2. It executes the <Finish> Workflow Element block of the workflow process.
Guidewire workflow 457
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
Step branches
A branch is a transition from one step to another. There are multiple kinds of elements that facilitate branching to
another step. They are:
• GO
• TRIGGER
• TIMEOUT
The Workflows editor indicates a branch by linking two steps with a line and placing one of the following icons on the
line to indicate the branch type.
All branch elements contain a To value that indicates the step to which this branch leads. It can also contain an
optional embedded Gosu block for the workflow to execute if a workflow instance follows that branch.
How a workflow decides which branch to take depends entirely on the type of the branch. However, the order is
always the same:
• The workflow executes the Enter block for a given step and generates any events, notifications, and activities
(waiting for these activities to complete).
• The workflow attempts to find the first branch that is ready to be taken. It starts with the first branch listed for
that step in the outline view, then moves to evaluate the next branch if the previous branch is not ready.
• If no branch is ready (which is possible only on a ManualStep), the workflow waits for one to become ready.
• After the workflow selects a branch, it runs the Exit block, then executes the Gosu block of the branch.
• Finally, the workflow moves to the next step and begins to evaluate it.
458 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
GO
The simplest kind of branch is GO. It appears on AutoStep, ActivityStep and MessageStep. There can be a single
GO branch or a list of multiple GO branches. If there is a single GO branch, then you need only specify the To field and
any optional Gosu code. The workflow takes this GO branch immediately as it checks its branches.
The Workflows editor indicates a GO branch with an arrow icon superimposed on the line that links the two steps.
(That is, the initial From step and the To step to which the workflow goes if the GO condition evaluates to true.)
To access the dialog that defines the GO branch, right-click the starting step—in this case, CheckOnOrder—and select
New GO from the menu. (Studio only displays those choices that are appropriate for that step.) This dialog contains
the following fields:
Field Description
Branch ID ID of the branch to create
It is not necessary to enter a branch ID. However, if you create multiple GO branches from a step, then you must
enter a unique ID for each branch.
After you create the GO branch, click on the link (line) that runs between the two steps. You will see a dialog that
contains the following fields:
Field Description
Branch ID Automatically generated.
From Automatically generated. Workflow step ID of the beginning point of the branch.
To Workflow step ID of the ending point of the branch.
Field Description
Arrow Visible Show an arrow head on the branch line to indicate direction.
Notice that this branch definition sets a condition. The From and To fields set the end-points for the branch.
If there are multiple GO branches, all the GO branches except one must define a condition that evaluates to either
Boolean true or false. The workflow decides which GO branch to take by evaluating the GO branches from top to
bottom (within the XML step definition). It selects the first one whose condition evaluates to true. If none of the
conditions evaluate to true, then the workflow uses the GO branch that does not have a condition. A list of GO
branches is thus like a switch programming block or a series of if...else... statements, with the default case at
the bottom of the list.
Infinite Loops
From To
StepA StepB
StepB StepA
If the steps revolve in an infinite loop, PolicyCenter catches this only after 500 steps. This can cause other problems
to occur.
TRIGGER
Another kind of branch is TRIGGER, which can appear in a ManualStep Workflow Step or an ActivityStep
Workflow Step. It also has a To field and an optional embedded Gosu block. However, instead of a condition
checking to see if a certain Gosu attribute is true, someone or something must manually invoke a TRIGGER from
outside the workflow infrastructure. (Typically, this happens from either PolicyCenter interface or from a Gosu call.)
Guidewire requires a branch ID field on all TRIGGER elements, as outside code uses the ID to manually reference the
branch.
Unlike all other the IDs used in workflows, TRIGGER IDs are not plain strings but typelist values from the extendable
WorkflowTriggerKey typelist. This provides necessary type safety, as scripting invokes triggers by ID. However, it
also means that you must add new typecodes to the typelist if you create new trigger IDs.
Invoking a trigger
How does one actually invoke a TRIGGER? Almost anything can do so, from Gosu rules and classes to the
PolicyCenter interface. Typically, in PolicyCenter, you invoke a trigger though the action of toolbar buttons in a
wizard. This is done through a call to the invokeTrigger method on Workflow instances. (As it is also a scriptable
method, you can call it from Gosu rules and the application PCF pages.) See “Synchronicity, transactions, and
errors” on page 469 for a discussion of the invokeTrigger method and its parameters.
Internally, the method works by updating the (read-only) database field triggerInvoked on Workflow to save the
ID. (See the PolicyCenter Data Dictionary entry on Workflow.)
PolicyCenter then wakes up the workflow instance and the TRIGGER inspects the triggerInvoked field to see if
something invoked the trigger. Depending on how you set the invokeTrigger method parameters, the workflow
handles the result of the TRIGGER either synchronously or asynchronously.
460 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
Field Description
Branch ID Name of this branch as defined in the WorkflowTriggerKey typelist. Select from the drop‐down list.
From Automatically generated. Workflow step ID of the beginning point of the branch.
To Workflow step ID of the ending point of the branch.
After you create the branch, click on the link (line) that runs between the two steps. You see the following fields,
which are identical to those used to define a GO branch:
Field Description
Branch ID Automatically generated.
From Automatically generated. Workflow step ID of the beginning point of the branch.
To Workflow step ID of the ending point of the branch.
Arrow Visible Show an arrow head on the branch line to indicate direction.
Trigger availability
Simply because you define a TRIGGER on a ManualStep does not mean it is necessarily available. You can restrict
trigger availability in the following different ways:
• You can specify user access permission through the use of the Permission field.
• You can add any number of Available conditions on the Available tab to further restrict availability. If the
condition expression evaluates to true, the trigger is available. Otherwise, it is unavailable.
For example (from PolicyCenter), the following Gosu code indicates that the workflow can only take this branch
if a user has permission to rescind a policy. (The condition evaluates to true.)
[Link]().Okay
TIMEOUT
Another kind of branch is TIMEOUT, which (like TRIGGER) can appear on ManualStep Workflow Step or an
ActivityStep Workflow Step. You still have a To field and optional Gosu block. However, instead of using a
condition to determine how to move forward, the workflow executes the TIMEOUT element after the elapse of a
specified amount of time.
You can use a TIMEOUT in the following ways:
• As the default behavior for a stalled workflow. For example:
Do x if PolicyCenter has not invoked a trigger for a certain amount of time.
• As a deliberate delay. For example:
Go to sleep for 35 days.
You can specify the time to wait using one of the following attributes. (Studio complains if you use neither or both.)
• timeDelta
• timeAbsolute
Guidewire workflow 461
Guidewire PolicyCenter 9.0.9 Configuration Guide
The Time Delta value specifies an amount of time to wait, starting from the time the Workflow instance successfully
enters the step. (The wait time starts immediately after the workflow executes the Enter Script block for the step.) You
specific the time to wait with a number and a unit, for example:
• 100s for 100 seconds
• 15m for 15 minutes
• 35d for 35 days
You can also combine numbers and units, for example, 2d12h30m for 2 days, 12 hours, and 30 minutes.
Often, you do not want to wait a certain amount of time. Instead, you want the step to time out after passing a certain
point relative to a date in the business model (for example, five days after a specific event occurs). In that case you
can set the Time Absolute value, which is a Gosu expression that must resolve to a date.
IMPORTANT Do not use the current time in a Time Absolute expression. The workflow reevaluates this
expression each time it checks TIMEOUT. For example, the time-out never ends for the following
expression, [Link] + 1, as the expression always evaluates to the future.
You use the Workflows editor to define a Timeout branch. To access the Timeout branch dialog, right-click the
starting step and select New Timeout from the menu. You must enter either a time absolute expression or a time delta
value. This dialog contains the following fields:
Field Description
Branch ID Name you choose for this branch.
From Automatically generated. Workflow step ID of the beginning point of the branch.
To Workflow step ID of the ending point of the branch.
Time Delta Time to wait, starting from the time the Workflow instance successfully enters the step.
Time Absolute Gosu expression that must resolve to a fixed date.
After you create the branch, click on the link that runs between the two steps. You see the following fields:
Field Description
Branch ID Automatically generated.
From Automatically generated. Workflow step ID of the beginning point of the branch.
To Workflow step ID of the ending point of the branch.
Arrow Visible Show an arrow head on the branch line to indicate direction.
Time Delta Time to wait, starting from the time the Workflow instance successfully enters the step.
Time Absolute Gosu expression that must resolve to a fixed date.
Action Description
Clone an Existing Creates an exact copy of an existing workflow type, with the same name but with an incremented ver‐
Workflow sion number. (This process clones the workflow with highest version number, if there multiple versions
already exist.) Perform this procedure if you merely want a new version of an existing workflow.
Extend an Existing Creates a new (blank) workflow with a name of your choice based on the workflow type of your
Workflow choice.
Procedure
1. Open the Workflows node in the Project window tree.
2. Select an existing workflow type, right-click and select New→Workflow from the menu.
Result
Studio creates a cloned, editable copy of the workflow process and inserts it under the workflow node with an
incremented version number. You can then modify this version of the workflow process to meet your business
needs.
Procedure
1. First, determine the workflow type that you want to extend.
2. Select Workflows in the Project window, right-click and select Create metadata for a new workflow subtype from the
menu.
3. In the New Workflow subtype metadata dialog, enter the following:
Field Description
Entity The workflow object to create.
Supertype The type or workflow to extend. You can always extend the Workflow type, from which all subtypes extend.
Description Optional description of the workflow.
Foreign keys Click the Add button to enter any foreign keys that apply to this workflow object.
4. Click Gen to clipboard. This action generates the workflow metadata information in the correct format and
stores on the clipboard.
5. Expand the Extensions folder in the Project window.
6. Right-click the Entity folder and select New→Entity from the menu.
Guidewire workflow 463
Guidewire PolicyCenter 9.0.9 Configuration Guide
7. Enter the name of the file to create in the New File dialog. Enter the same value that you entered in the New
Workflow subtype metadata dialog for Entity and add the eti extension. Studio then creates a new <entity>.eti
file.
Open this file, right-click, and choose Paste from the menu. Studio pastes in the metadata workflow that you
created in a previous step.
For example, if you extend Workflow and create a new workflow named NewWorkflow, then you must create a
new [Link] file that contains the following:
<?xml version="1.0"?>
<subtype desc="" entity="NewWorkflow" supertype="Workflow"/>
8. (Optional) To provide the ability to localize the new workflow, add the following line of code to this file (as
part of the subtype element):
<typekey desc="Language" name="Language" typelist="LanguageType"/>
This example does not actually perform any function. It simply illustrates how to work with the dialogs of the
Workflows editor.
2. Right-click within an empty area in the layout view and select New ManualStep from the menu:
• For Step ID, enter Step2.
• For branch Type, select TRIGGER.
• For trigger ID, select Cancel.
The ID value sets a valid trigger key as defined in typelist WorkflowTriggerKey. If Cancel does not exist, then
choose another trigger key. If no trigger keys exist in WorkflowTriggerKey, then you must create one before you
can select TRIGGER as the type.
1. Select the GO branch (the line) leaving Step1:
• In the property area at the bottom of the screen, change the To field from DefaultOutcome to Step2. Studio
moves the branch to link the specified steps.
• Realign the steps for more symmetry, if you choose.
2. Right-click within an empty area in the layout view and select New ActivityStep from the menu:
• For Step ID, enter Step3.
• For Name, enter ActivityPatternName.
• For Pattern, enter NewActivityPattern.
3. Select Step3, right-click, and select New TIMEOUT from the menu:
• For Branch ID, enter TimeoutBranch.
• For Time Delta, enter 5d. This sets the absolute time to wait to five days.
• For To, select Step3.
Studio adds a branch from Step2 to Step3 and adds the timeout symbol to it.
1. Right-click within an empty area in the layout view and select New MessageStep from the menu:
• For Step ID, enter Step4.
• For Dest ID, enter 89 (or any valid message destination ID).
• For Event Name, enter EventName.
Studio adds the step to the layout view and creates a link between Step4 and DefaultOutcome.
1. Select the new link from Step4 to DefaultOutcome.
• In the property area at the bottom of the screen, change Arrow Visible to false to delete this link.
Studio removes the link (branch).
1. Select Step1, right-click, and select New GO from the menu:
• For Branch ID, enter Step4.
• For To, select Step4.
Studio adds the new GO branch between Step1 and Step4.
Instantiating a workflow
It is not sufficient to create a workflow. Generally, you want to do something moderately useful with it. To perform
work, you must instantiate your workflow and call it somehow.
Suppose, for example, that you create a new workflow and call it, for lack of a better name, HelloWorld1. You can
then instantiate your workflow using the following Gosu:
var workflow = new HelloWorld1()
[Link]()
Starting a workflow
There are multiple workflow start methods. The following list describes them.
See also
• “Workflow versioning” on page 448
See Also
• “Workflow debugging, logging, and testing” on page 474
3. Select your new workflow type from the Workflows node. Right-click and select New→Workflow Process.
4. Create a simple workflow process similar to the following. It does not need to be complex, as it simply
illustrates how to start a workflow from the ClaimCenter interface.
Notice that it has a claim symbol set in “<Context> workflow element” on page 450.
1. For Step1, add the following to the Enter block for that step:
[Link]( "HelloWorld1 step 1, step called ClaimNumber " + [Link])
[Link]( "HelloWorld Step 1", "HelloWorld1 step 1 entered: Claim Number " + [Link] )
2. For Step2, add the following to the Enter block for that step:
[Link]( "HelloWorld1 step 2, step called ClaimNumber " + [Link])
[Link]( "HelloWorld Step 2", "HelloWorld1 step 2 entered: Claim Number " + [Link] )
Rule Actions:
[Link]( "Entering Pre-Update" )
if (hw_wf == null) {
[Link]( "## Studio instantiating HelloWorld1 and starting it!" )
var workflow = new entity.HelloWorld1()
[Link] = claim
[Link]()
}
Distributed execution
PolicyCenter uses a work queue to handle workflow execution. This, in simple terms, means that you can have a
whole cluster of machines that:
• Wake up internal Workflow instances,
• Advance them as far as they can go,
• Then, let them go back to sleep if they need to wait on a timeout or activity.
Asynchronous workflow execution always works the same way:
1. PolicyCenter creates a WorkflowWorkItem instance to advance the workflow.
2. The worker instance picks up the work item.
3. The work item retrieves the workflow and advances it as far as possible (to a ManualStep or Outcome).
You can create a work item in any of the following different ways:
• By a call to the [Link] method
• By invoking a trigger with asynchronous = true
• By completing a workflow-linked activity
• By the Workflow batch process, which queries for active workflows waiting on an expired timeout
• By a call to [Link], typically initiated by an administrator using the workflow management
tool
After the workflow advances as far as it can, PolicyCenter deletes the work item and execution stops until there is
another work item.
It is possible to start workflow either synchronously or asynchronously. To do so, use one of the start methods
described in “Instantiating a workflow” on page 466. These methods are:
• start()
• start(version)
• startAsynchronously()
• startAsynchronously(version)
If a workflow runs synchronously, then it continues to go through one AutoStep Workflow Step or ManualStep
Workflow Step after another until it arrives at a stop condition. This advance through the workflow can encompass
one or multiple steps. The workflow executes the current step (unless there is an error), and then continues to the
next step, if possible. There can be many different reasons that a workflow cannot continue to the next step.
For example, the workflow can encounter:
• An activity step (ActivityStep Workflow Step), which can result in the creation of one or more activities,
causing the workflow to pause until the closure of all the activities.
• A communication step (MessageStep Workflow Step), which can result in a message being sent to another
system, causing the workflow to wait until receiving a response.
• A step that stipulates a timeout (ManualStep Workflow Step), which causes the workflow to wait for the
timeout to complete.
• It can encounter a step that requires a trigger (ManualStep Workflow Step), which causes the workflow to wait
until someone (or something) activates the trigger.
Ultimately, the workflow can run until it reaches an Outcome Workflow Step, at which point, it is done.
After pausing, the workflow waits for one of the following to occur:
• If waiting on one or more activities to complete, the workflow continues after the closure of the last activity.
• If waiting for an acknowledgment of a message, the workflow continues after receiving the appropriate response.
• If waiting on a timeout, the workflow continues after the timeout elapses.
• If waiting on an external trigger, then someone or something must manually invoke a TRIGGER from outside the
workflow infrastructure. Invoking a trigger can be done either from the PolicyCenter interface, such as a user
clicking a button, or from Gosu. In either case, the trigger is invoked through a call to the invokeTrigger
method on a Workflow instance.
The action of completing an activity or the receipt of a message response automatically creates a work item to
advance the workflow. A background batch process checks for timeout elements. The batch process is responsible
for finding timed-out workflows that are ready to advance and creating a work item to advance them.
If a user (or Gosu code) invokes an available trigger (TRIGGER) on a ManualStep Workflow Step, the workflow can
execute either synchronously or asynchronously. A Boolean parameter in the invokeTrigger method determines the
execution type. This method takes the following signature:
void invokeTrigger(WorkflowTrigger triggerKey, boolean synchronous)
The trigger parameter defines the TRIGGER to use. It must be a valid trigger defined in the WorkflowTriggerKey
typelist.
The synchronous value in this method has the following meanings:
true (Default) Instructs the workflow to immediately execute in the current transaction and to block the call‐
ing code until the workflow encounters a new stopping point.
false Instructs the workflow to run in the background, with the calling code continuing to execute. The work‐
flow continues until it encounters a new stopping point.
Trigger availability
For a trigger to be available, the workflow execution sequence must select a branch for which both of the following
conditions are true:
• A trigger must exist on the step.
• There is no other determinable path, which usually means that no timeout has already expired.
If both these conditions are true, after an invocation to the invokeTrigger method, the Workflow engine starts to
advance the workflow from the selected branch again.
Invoking a trigger
If there is an error during a workflow step, the Workflow engine rolls the database back and leaves it in the state that
it was previously in. If working with an external system, you need to do one of the following:
• Design the services in the external system.
• Use the Guidewire message subsystem to keep an external system state in synchronization with the application
database state.
It is important to understand whether a workflow executes synchronously or asynchronously because the type of
execution affects errors and transaction rollbacks.
Workflow guidelines
In practice, Guidewire recommends that you keep the following guidelines in mind as you work with workflows:
• If you invoke a workflow TRIGGER, do so synchronously if you need to make immediate use (in code) of the
results of that trigger. For this reason, the PolicyCenter rendering framework typically always invokes the trigger
synchronously. But notice that you only get immediate results from an AutoStep Workflow Step that might
have executed. If the workflow encounters a ManualStep Workflow Step or an ActivityStep Workflow Step,
it immediately goes into the background.
• If you complete an activity, it does not synchronously (meaning immediately) advance the workflow. Instead, a
background process checks for workflows whose activities are complete and which are therefore ready to move
forward. Guidewire provides this behavior, as otherwise, if an error occurs, the user who completes the activity
sees the error, which is possibly confusing for that user.
• If you invoke a workflow TRIGGER from code that does not necessarily care whether there was a failure in the
workflow, you need to invoke the TRIGGER asynchronously. (You do this by setting the synchronous value in the
workflow method to false.) That way, the workflow advances in the background and any errors it encounters
force the workflow into the Error state. The exception does not affect the caller code. However, the calling code
creates an exception if it tries to invoke an unavailable or non-existent workflow TRIGGER. Messaging plugins, in
particular, need to always invoke triggers asynchronously.
Workflow subflows
A workflow can create another child workflow in Gosu by using the scriptable createSubFlow method on
Workflow. There are multiple versions of this method:
[Link](workflow)
[Link](workflow, version)
A subflow has the same foreign keys to business data as the parent flow. It also has an edge foreign key reference to
the caller Workflow instance, accessed as [Link]. (If internal code, and not some other workflow, calls a
macro workflow, this field is null.)
Each workflow also has a subFlow array that lists all the flows created by the workflow, including the completed
ones. (This array is empty for workflows that have yet to create any subflows.) The Gosu to access this array is:
[Link]
You can use subflows to implement simple parallelism in internal workflows, which is otherwise impossible as a
single workflow instance cannot be in two steps simultaneously. For example, it is possible for the macro flow to
create a subflow in step A. It can then leave this subflow to do its own work, and only wait for it to complete in step
472 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
E. It is your responsibility as the one configuring the macro workflow to decide how to react if a subflow drops into
Error mode or becomes canceled for some reason.
See also
• Globalization Guide
Workflow administration
You can administer workflow in any of the following ways:
• Through the PolicyCenterAdministration→Workflows page
• Through the command line, such as running a batch process to purge the workflow logs
• Through class [Link], which the command line uses
The most likely need for using the PolicyCenterAdministration interface is error handling. Errors can include the
following:
• A few workflows fail
• In a worst case scenario, thousands of workflows fail simultaneously
Finding workflows that have not failed but have been idling for an extremely long time is also likely. A secondary
use is just looking at all the current running flows to see how they work. Guidewire therefore organizes the
Administration interface for workflow around a search screen for searching for workflow instances. You can filter the
search screen, for example, by instance type, state (especially Error state), work item, last modified time, and
similar criteria.
A user with administrative permissions can search for workflows from the Administration→Workflows page. However,
to actually manage workflows, that user must have the workflowmanage permission. In the base PolicyCenter
configuration, only the superuser role has this permission.
With the correct permission, you can do the following from the Administration→Workflows page:
• Search for a specific workflow or see a list of all workflows:
• Look at an individual workflow details, for example:
◦ View its log and current step and action
◦ View any open activities on the workflow
• Actively manage a workflow
Manage workflow
If you have the workflowmanage permission, PolicyCenter enables the following choices on the Find Workflows page:
• Manage selected workflows (active after you select one or more workflows)
• Manage all workflows (active at all times with the correct permission)
Choosing one of these options opens the Manage Workflows page. This page presents a choice of workflow and step
appropriate commands that you can execute. It is only possible to select one command (radio button) at a time.
Choosing either Invoke Trigger or Timeout Branch provides further selection choices.
Command Description
Wait - max Select and enter a time to force the workflow to wait until either that amount of time has expired or the cur‐
time (secs) rently active work item is no longer active. (The work item has failed or has succeeded and has been deleted.)
This option is only available if there is a currently available work item on this workflow.
Invoke Trigger Select to chose a workflow trigger to invoke. After selecting this command, PolicyCenter presents a list of availa‐
ble triggers from which to choose, if any are available on this workflow.
Suspend Select to suspend any active workflows that are currently selected in the previous screen. After you execute this
command, PolicyCenter suspends the selected workflows. This action is appropriate for all workflow and steps.
However, PolicyCenter executes this command only against active workflows.
Command Description
Resume Select to resume workflow execution of any suspended workflows that are currently selected in the previous
screen. This action is appropriate for all workflows and steps.
Timeout Select to choose a workflow timeout branch. After selecting this command, PolicyCenter presents a list of time‐
branch out branches from which to choose, if any are available on this workflow.
After you make your selection and add any relevant parameters, clicking Execute immediately executes that
command. Using these commands, you can:
• Restore workflows from the Error or Suspended state back to the Active state. However, if you have not
corrected the underlying error, presumably a scripting error, the workflow might drop right back into Error
mode.
• Force a waiting workflow to execute:
◦ By setting the specific timeout branch
◦ By setting a specific trigger
• Force an active workflow to wait for a specified amount of time
Batch Process In- Use to view information on the last run‐time of a writer, and to see the schedule for its next run‐time. From
fo this page, you also have the ability to stop and start the scheduling of the writer.
Work Queue Info Use to view information on a writer, what items it picked up and the workers. From this page, you also have
the ability to notify, start and stop workers across the cluster.
The method returns the log entry (WorkflowLogEntry) that you can use for additional processing:
var workflowLog = [Link]("short description", "stack trace ...")
var summary = [Link]
Process logging
The following logging categories can be useful:
474 chapter 31: Guidewire workflow
Guidewire PolicyCenter 9.0.9 Configuration Guide
[Link] Logging (by workers) of each work item executed at the “info” level.
[Link] Logging runners.
To write every message logged by every workflow, set the logging level of the workflow logger category to DEBUG
(using [Link]). The directive in the [Link] file is:
[Link]=DEBUG
Workflow testing
It can often be difficult to test a workflow. This is especially true for one that is asynchronous and that requires the
workflow to wait a specific amount of time before advancing to the next step. To facilitate testing, Guidewire
PolicyCenter supports a testing clock that permits the advancing of time (for development-mode servers only). If
you have permission, you can access this functionality from the (unsupported) PolicyCenter Internal Tools page.
Depending on which clock you define in the [Link] plugin registration file, you can do one of the
following:
• Increment the current clock by a given period.
• Change the setting of the clock to a specific time. The clock remains at that time until another specific time is set.
Procedure
1. In Studio, navigate to Plugins→gw→plugin→system.
2. Right-click ITestingClock, and select Implement.
3. Click Add→Java.
4. Type the following in the Class field:
[Link]
This topic discusses activity patterns, what they are, and how to configure them.
IMPORTANT After an activity pattern is in production, do not delete it as there can be old activities
tied to it. Instead, edit the activity pattern and change the Automated only field to Yes. This prevents
anyone from creating new activities of that type.
An activity pattern does not control how PolicyCenter assigns an activity. Instead, activity assignment methods in
Gosu expressions control how PolicyCenter assigns an activity. Using the pattern name, the assignment methods
determine to whom to assign the activity.
IMPORTANT You must use the activity pattern code to refer to an activity pattern in Gosu code. Do
not use a pattern ID or PublicID value.
There are two operations that you can perform in Gosu involving activity patterns:
• One is to test which activity pattern an existing activity uses.
• The other is to retrieve an activity pattern for use in creating a new activity.
To test for a specific activity pattern
Use the following Gosu code, which compares an activity pattern Code value with a string value that you supply.
[Link] == "activity_pattern_code"
Escalation dates
While the target date can indicate a service-level target (for example, complete within five business days), there can
possibly be some later deadline after which the work becomes dangerously late. (This can be, for example, a 30 day
state deadline.) PolicyCenter calls this later deadline an escalation date.
The escalation date is the date at which activity requires urgent attention. While work is shown as overdue after the
target date, PolicyCenter does not actually escalate (take action on) an activity until the escalation date passes.
Within Studio, you can define a set of rules that define what actions take place if an activity reaches its escalation
date. For example, it could be company policy to inform a supervisor if an activity passes an escalation date. You
might also want to reassign the activity.
PolicyCenter calculates the escalation date using the methodology it uses for target dates. You can specify escalation
timing in days and hours. If you do not specify Escalation Days or Escalation Hours as you define an activity pattern,
PolicyCenter uses 0 (zero) for both. An escalation date, like a target date, is optional for activities.
The maximum number of hours that you can specify is 23, and the maximum number of days that you can specify is
1825. Any value greater than the maximum is automatically limited to the maximum.
IMPORTANT Do not remove any internal (non-General type) activity patterns or change their type,
category, or code values. Internal PolicyCenter application code requires them. You can change other
fields associated with these types, however.
See also
EntityId Not Applica‐ Required. The unique public ID of the activity pattern.
ble
EscalationDays Escalation The number of days from the escalationstartpt to set the Escalation Date for an activity.
days
EscalationHours Escalation The number of hours from the escalationstartpt to set the Escalation Date for an activi‐
hours ty.
EscalationInclDays Escalation In- Specifies which days to include. You can set this businessdays or elapsed.
clude Days
EscalationStartPt Escalation The initial date used to calculate the target date. If you specify escalationdays or
start point escalationhours, you need to specify this parameter. Otherwise, this parameter is op‐
tional.
You can attach a document or email template to an activity pattern. Then, if PolicyCenter displays an activity based
on this activity pattern, it also displays a Create Document or Create Email button in the Activity Detail worksheet. This
button indicates that this type of activity typically has a document or email associated with that activity.
Procedure
3. Open the activity pattern edit screen either by creating a new activity pattern or by selecting an activity pattern
to update.
• To create a new activity pattern, click New Activity Pattern.
• To edit an existing activity pattern, click the activity pattern name, and then click Edit.
4. Use the search icon next to the Document Template or Email Template field to open a search window.
5. Find the document or email template, and then add it to the activity pattern.
Result
If you associate a document or email template with an activity pattern, you can do the following in PolicyCenter:
1. If you create a new activity from this activity pattern, PolicyCenter automatically populates any template field
for which you specified a template with the name of that template.
2. If you open this activity, PolicyCenter displays a Create Document button or a Create Email button or both in
the Activity Detail worksheet at the bottom of the screen.
3. If you then click the Create Document or the Create Email button, PolicyCenter opens a pop-up window enabling
you to create the document or email from the specified template.
See also
• For information on how to make a database column localizable (and thus, an object property localizable), see the
Globalization Guide.
Guidewire includes support for sending emails from PolicyCenter. Sending an email is one of several possible
actions to take, for example, if a user escalates an activity.
The email includes the following items:
• To and From properties
• A subject
• The name of the template used to generate the body of the email
• The object that the message references
PolicyCenter initially saves email messages and then sends them to an SMTP email server in a background process.
Procedure
1. In the Guidewire Studio Project window, expand configuration→config→Plugins→registry.
2. Double-click emailMessageTransport to open it.
3. If the Java Class is [Link], change the class
that implements the plugin:
a. Click Remove Plugin to remove the class.
b. To use the supported Gosu plugin class in the base configuration, click Add Plugin , and then click Add
Gosu Plugin.
c. In Gosu Class, type [Link], or click Browse to
navigate to the class.
If you have created a different Gosu, Java, or OSGi plugin class for the email plugin, use that class,
specifying the appropriate plugin type, instead of the JavaxEmailMessageTransport class.
4. If the Disabled check box is checked, clear the check box to enable the plugin.
5. Enter appropriate values for the following parameters:
• [Link]
• defaultSenderAddress
• defaultSenderName
• smtpHost
• smtpPort
The JavaxEmailMessageTransport email plugin class also supports many other parameters for SMTP
operation, and SSL and TLS security.
6. Save your changes.
7. Restart the PolicyCenter server.
See also
• “Add an implementation to a Plugins Registry item” on page 134
• "Sending emails" in the Integration Guide
[Link]
The Email class contains the following fields, most of which are self-explanatory:
Field Description
Subject Subject of the email
Body Content of the email
Field Description
Sender Sender of the email
ReplyTo Contact object (It is possible for this to be different from the Sender.)
[Link]
Field Description
Name Name of contact
EmailAddress Email address of contact
Contact Contact object, which can be null. If this parameter exists, it sets the Name and EmailAddress fields to the
appropriate values from the specific Contact entity.
These methods all take an entity as the first parameter. This parameter can be null. However, if specified, use the
application entity to which this email is related, such as a specific policy or activity. PolicyCenter uses this
parameter only while processing the email for transmission. See “Email transmission” on page 486.
One variation of the sendEmailWithBody method requires that you create a [Link] entity, and then
define its properties to build the Email entity. For example:
...
var testEmail : [Link]
[Link] = "This is a test."
[Link] = "Test"
...
[Link]( thisClaim, testEmail )
You can also attach multiple To, CC, and BCC addresses to the email.
Email transmission
Guidewire PolicyCenter, from the user's perspective, sends emails asynchronously by using the PolicyCenter
Messaging subsystem. If there is a method call for one of the [Link] methods, PolicyCenter creates
a Message entity with the contents and other information from the Email object.
In the sendEmail method parameters:
• If the entity parameter is non-null, PolicyCenter adds the Message entity to the entity transaction bundle.
PolicyCenter persists the Message entity any time that it creates the bundle.
• If the entity parameter is null, PolicyCenter persists the Message entity immediately.
PolicyCenter then processes the messages one at a time and sends out the emails associated with that message.
Note: You must configure a MessageTransport class to consume the email messages and perform the
actual transmission of the email.
IMPORTANT The file names of the descriptor and template files must match.
Field Description
body The email body of the emails created using this template
keywords A list of keywords for use in searching the templates
The [Link] file pairs with the actual template file ([Link]):
Thank you for your correspondence. It has been received and someone will contact you shortly to follow up on your
feedback.
Sincerely,
Text New→File .gosu Select Text from the list of file types to associate with the .gosu
extension, if necessary.
HTML New→HTML File .[Link] Set the HTML version to use in the HTML File dialog.
Studio opens an editable file with the given name in a new tab.
3. Enter the text of the email message to send in the template.
For example:
Greetings:
Sincerely,
2. Select emailtemplates, right-click, then select one of the following items from the context menu:
Text New→File .[Link] Select Text from the list of file types to associate with
the .[Link] extension, if necessary.
HTML New→HTML File .[Link] Set the HTML version to use in the HTML File dialog.
Studio opens an editable file with the given name in a new tab.
3. Enter text similar to the following, modifying the given text to suit your business needs.
Procedure
1. In Studio, create a locale folder for the template files in the resources→emailtemplates folder.
The following example illustrates how to create a locale folder for Japanese.
resources→emailtemplates→ja_JP
2. Within the locale folder, place localized versions of the email template file and its associated template
descriptor file.
Rule If you create and send an email as part of rule workflow, you do not need to commit the email transaction as it
execution is already part of the rule transaction commit. Creating an email message and storing it in the Send Queue
occurs as part of the same database transaction in which the rules run. This is the same as regular message
creations triggered through rules.
Gosu If you create and send an email directly from Gosu code, outside of a Gosu rule, it is more likely that you need
execution to commit the email transaction, depending on the exact circumstances of your Gosu code.
Example code
For a simple example of the code needed to save an email as a document, refer to the either the BillingCenter or
ClaimCenter [Link] PCF file. To see the example, select the highest level element, then open the
Code tab at the bottom of the screen.
If desired, it is possible to replicate this functionality in Gosu code using the sample code as the basis for your code.
Possible improvements to the example code include the following:
• Adding a header to the document with metadata to determine the docContainer object.
• Adding a BCC to archive email addresses.
• Creating a batch process that fetches the emails in a specific account and stores any outgoing email as a
document.
It is important to understand that the sample code in the [Link] PCF file performs a transaction
bundle commit. In most cases, you do not need to perform the bundle commit in your code:
• If calling the code from a Gosu rule, the rule is already in a commit bundle.
• If calling the code from workflow, the workflow is already in a transaction bundle.
• If calling the code from a work queue, the workqueue is mostly likely already in a transaction bundle.
[Link]
The following code first populates a number of message headers, then provides a useEmailTemplate method that
example PCF screen CreateEmailTemplate calls to set up the HTML email.
package [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
[Link]
The following example code adds additional functionality to the base configuration PolicyCenter
CreateEmailScreen PCF. This example version of the PCF screen adds HTML template-related fields to the screen,
include a read-only view of the HTML template. This field (a TextAreaInput widget) contains a PostOnChange
action that calls method executeTemplate, which, in turn, calls the useEmailTemplate method from
[Link].
490 chapter 33: Guidewire PolicyCenter and Email
Guidewire PolicyCenter 9.0.9 Configuration Guide
Note: This example uses display keys that do not exist in the base configuration. You must add the
missing display keys to [Link] in order to see the correct labels.
<?xml version="1.0"?>
<PCF
xmlns:xsi="[Link]
xsi:noNamespaceSchemaLocation="../../../../../../[Link]">
<Screen
editable="true"
id="CreateEmailScreen">
<Require
name="srcBean"
type="Activity"/>
<Require
name="docContainer"
type="Activity"/>
<Require
name="emailTemplateName"
type="String"/>
<Require
name="documentsToSend"
type="Document[]"/>
<Variable
initialValue="null"
name="documentToSave"
type="Document"/>
<Variable
initialValue="emailTemplateName == null"
name="noDefaultTemplate"
type="Boolean"/>
<Variable
initialValue="false"
name="saveAsDocument"
type="boolean"/>
<Variable
initialValue="false"
name="showCC"
type="boolean"/>
<Variable
initialValue="false"
name="showBCC"
type="boolean"/>
<Variable
initialValue="[Link]()"
name="language"
type="LanguageType"/>
<Variable
initialValue="initializeSymbolTable()"
name="symbolTable"
type="[Link]<String,Object>"/>
<Variable
initialValue="new String()"
name="content"
type="String"/>
<Variable
initialValue="emailTemplateName == null ? null : fetchTemplate()"
name="template"
type="[Link]"/>
<Variable
initialValue="initNewEmail()"
name="NewEmail"
type="[Link]"/>
<Toolbar>
<ToolbarButton
action="sendEmailToRecipients(NewEmail)"
available="true"
id="ToolbarButton0"
label="[Link]("[Link]")"
visible="true"/>
<ToolbarButton
action="[Link]()"
available="true"
id="ToolbarButton1"
label="[Link]("[Link]")"
visible="true"/>
<ToolbarDivider/>
<PickerToolbarButton
action="[Link](createSearchCriteria())"
id="EmailWorksheet_UseTemplateButton"
label="[Link]("[Link]")"
onPick="template = PickedValue;
language = [Link]([Link]);
executeTemplate(NewEmail)"
shortcut="P"
visible="noDefaultTemplate"/>
</Toolbar>
<AlertBar
id="NoDefaultTemplate"
label="[Link]("[Link]", emailTemplateName)"
showConfirmMessage="false"
visible="emailTemplateName != null and noDefaultTemplate"/>
<DetailViewPanel>
<InputColumn>
<TypeKeyInput
editable="true"
id="Language"
label="[Link]("[Link]")"
required="true"
value="language"
valueType="[Link]"
visible="[Link]( false ).Count > 1 and emailTemplateName != null">
<PostOnChange
onChange="template = fetchTemplate(); executeTemplate(NewEmail)"/>
</TypeKeyInput>
<ListViewInput
editable="true"
id="ToRecipientLVInput"
label="[Link]("[Link]")"
labelAbove="true"
visible="true">
<Toolbar
visible="true">
<IteratorButtons
addVisible="true"
iterator="ToRecipientLV"
removeVisible="true"/>
<ToolbarDivider/>
</Toolbar>
<ListViewPanel
editable="true"
id="ToRecipientLV"
visible="true">
<RowIterator
autoAdd="true"
editable="true"
elementName="ToRecipient"
numEntriesRequired="1"
numEntriesToAdd="1"
toCreateAndAdd="var newEmailContact = new [Link]();
[Link](newEmailContact); return newEmailContact;"
toRemove="[Link]( ToRecipient )"
validationLabel="[Link]("[Link]")"
value="[Link]?.toTypedArray()"
valueType="[Link][]">
<Row
editable="true">
<TextCell
editable="true"
id="ToName"
label="[Link]("[Link]")"
maxChars="60"
numCols="15"
value="[Link]"/>
<TextCell
editable="true"
id="ToEmail"
label="[Link]("[Link]")"
numCols="15"
requestValidationExpression="VALUE == null ?
[Link]("[Link]
.[Link]") : null"
required="true"
value="[Link]"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
<ButtonInput
action="showCC = true"
id="ShowCCRecipients"
labelAbove="true"
value="[Link]("[Link]")"
visible="!showCC"/>
<ListViewInput
editable="true"
id="CcRecipientLVInput"
label="[Link]("[Link]")"
labelAbove="true"
visible="showCC">
<Toolbar
visible="true">
<IteratorButtons
addVisible="true"
iterator="CcRecipientLV"
removeVisible="true"/>
</Toolbar>
<ListViewPanel
editable="true"
id="CcRecipientLV"
visible="true">
<RowIterator
editable="true"
elementName="CcRecipient"
toCreateAndAdd="var newEmailContact = new [Link]();
[Link](newEmailContact); return newEmailContact;"
toRemove="[Link]( CcRecipient )"
value="[Link]?.toTypedArray()"
valueType="[Link][]">
<Row
editable="true">
<TextCell
editable="true"
id="CcName"
label="[Link]("[Link]")"
numCols="15"
value="[Link]"/>
<TextCell
editable="true"
id="CcEmail"
label="[Link]("[Link]")"
numCols="15"
required="true"
value="[Link]"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
<ButtonInput
action="showBCC = true"
id="ShowBCCRecipients"
labelAbove="true"
value="[Link]("[Link]")"
visible="!showBCC"/>
<ListViewInput
editable="true"
id="BccRecipientLVInput"
label="[Link]("[Link]")"
labelAbove="true"
visible="showBCC">
<Toolbar
visible="true">
<IteratorButtons
addVisible="true"
iterator="BccRecipientLV"
removeVisible="true"/>
</Toolbar>
<ListViewPanel
editable="true"
id="BccRecipientLV"
visible="true">
<RowIterator
editable="true"
elementName="BccRecipient"
toCreateAndAdd="var newEmailContact = new [Link]();
[Link](newEmailContact); return newEmailContact;"
toRemove="[Link]( BccRecipient )"
value="[Link]?.toTypedArray()"
valueType="[Link][]">
<Row
editable="true">
<TextCell
editable="true"
id="BccName"
label="[Link]("[Link]")"
numCols="15"
value="[Link]"/>
<TextCell
editable="true"
id="BccEmail"
label="[Link]("[Link]")"
numCols="15"
required="true"
value="[Link]"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
<InputDivider/>
<CheckBoxInput
editable="true"
id="SaveAsDocument"
value="saveAsDocument"
valueLabel="[Link]("[Link]")"/>
</InputColumn>
<InputColumn>
<TextInput
editable="true"
id="SenderName"
label="[Link]("[Link]")"
value="[Link]"/>
<TextInput
editable="true"
id="SenderEmail"
label="[Link]("[Link]")"
value="[Link]"/>
<TextInput
editable="true"
id="Subject"
label="[Link]("[Link]")"
requestValidationExpression="VALUE == null ?
[Link]("[Link]") : null"
required="true"
value="[Link]"/>
<TextAreaInput
editable="true"
id="Content"
label="[Link]"
numCols="60"
numRows="10"
required="false"
value="content"
visible="[Link]">
<PostOnChange
onChange="executeTemplate(NewEmail)"/>
</TextAreaInput>
<TextAreaInput
editable="true"
id="Body"
label="[Link]("[Link]")"
numCols="60"
numRows="10"
requestValidationExpression="VALUE == null ?
[Link]("[Link]") : null"
required="true"
value="[Link]"
visible="![Link]"/>
<ListViewInput
editable="true"
id="AttachedDocuments"
label="[Link]("[Link]")">
<Toolbar>
<PickerToolbarButton
action="[Link](docContainer)"
id="AddDocumentButton"
label="[Link]("[Link]")"
onPick="[Link](PickedValue)"
shortcut="A"
visible="true"/>
<IteratorButtons
addVisible="false"
iterator="AttachedDocumentsLV"/>
</Toolbar>
<ListViewPanel
editable="true"
id="AttachedDocumentsLV">
<RowIterator
editable="true"
elementName="AttachedDocument"
toRemove="[Link]( AttachedDocument )"
value="[Link]?.toTypedArray()"
valueType="[Link][]">
<Row>
<TextCell
editable="true"
id="Document"
label="[Link]("[Link]")"
value="[Link]"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
</InputColumn>
</DetailViewPanel>
<TemplatePanel>
<TemplatePanelContents><![CDATA[
<% if (template != null && [Link]) printContent([Link], false) %>]]>
</TemplatePanelContents>
</TemplatePanel>
<Code><![CDATA[function initializeSymbolTable() : [Link]<String,Object> {
return { "activity" -> srcBean }
}
After you use Guidewire Studio to make configuration changes to your application, you will typically want to run
the application to test those changes. Guidewire Studio provides powerful features to help you make sure that your
application works the way you intend.
Result
The PolicyCenter server starts, and debug messages appear in the Run tool window in Studio.
Result
The PolicyCenter server starts, and debug messages appear in the Debug tool window in Studio.
See also
• “The Studio debugger” on page 502
Procedure
1. Start the PolicyCenter server.
a. Start the server using the following command:
gwb runServer --debug-shmem --no-suspend
b. Towards the beginning of the server console message output, look for the label debug-shmem:, and then
the text that is similar to the following:
Listening for transport dt_shmem at address: javaAddress
c. Make a note of the string provided for javaAddress.
2. Create the debug configuration in Studio.
a. In Studio, click Run→Edit Configurations.
b. In the Run/Debug Configurations dialog, click Add New Configuration , and then click Remote.
c. In the Name text box, type a name for the debug configuration. For example, server-shmem.
d. Next to Transport, click Shared memory.
e. Next to Debugger mode, click Attach.
500 chapter 34: Testing and debugging your configuration
Guidewire PolicyCenter 9.0.9 Configuration Guide
f. In the Shared Memory Address text box, type the javaAddress that you noted when you started the server.
g. Click OK.
3. Connect the Studio debugger to the PolicyCenter server using the shared memory connection.
a. In Studio, in the Select Run/Debug Configuration drop-down list, select the debug configuration that you
created.
b. Click Run→Debug ‘configName’, where configName is the name of the debug configuration that you
created.
Result
The debugger connects to the PolicyCenter server, and debug messages appear in the Debug tool window in Studio.
Procedure
1. Start the PolicyCenter server.
a. Start the server using the following command:
gwb runServer --debug-socket --no-suspend
b. Towards the beginning of the server console message output, look for the label debug-socket:, and then
the text that is similar to the following:
Listening for transport dt_socket at address: portNumber
c. Make a note of the value provided for portNumber.
2. Create the debug configuration in Studio.
a. In Studio, click Run→Edit Configurations.
b. In the Run/Debug Configurations dialog, click Add New Configuration , and then click Remote.
c. In the Name text box, type a name for the debug configuration. For example, server-socket.
d. Next to Transport, click Socket.
e. Next to Debugger mode, click Attach.
f. In the Host text box, type the hostname of the computer on which the PolicyCenter server is running.
g. In the Port text box, type the portNumber that you noted when you started the server.
h. Click OK.
3. Connect the Studio debugger to the PolicyCenter server using the shared memory connection.
a. In Studio, in the Select Run/Debug Configuration drop-down list, select the debug configuration that you
created.
b. Click Run→Debug ‘configName’, where configName is the name of the debug configuration that you
created.
Result
The debugger connects to the PolicyCenter server, and debug messages appear in the Debug tool window in Studio.
Testing and debugging your configuration 501
Guidewire PolicyCenter 9.0.9 Configuration Guide
When you start a PolicyCenter server in debug mode, the server completes its full startup process until it becomes
ready for client connections. In this case, you cannot begin to debug the server until it is ready. However, if the
behavior that you want to debug occurs earlier in the startup process, then you can start the server in suspended
mode instead. In suspended mode, the PolicyCenter startup pauses as soon as its Java process is initially established.
The startup process continues only once you start the Studio debugger.
• To start the PolicyCenter server in suspended mode, use one the following commands:
◦ gwb runServer --debug-shmem
◦ gwb runServer --debug-socket
Setting breakpoints
A breakpoint is a place in your code at which the debugger pauses execution, giving you the opportunity to examine
current values or begin stepping through each line. The debugger pauses before executing the line containing the
breakpoint. The debugger identifies a breakpoint by highlighting the related line of code and placing a breakpoint
symbol next to it.
Set a breakpoint
About this task
You can set multiple breakpoints throughout your code, with multiple breakpoints in the same block of code, or if
desired, breakpoints in multiple code blocks. The debugger pauses at the first breakpoint encountered during code
execution. After it pauses, the debugger ignores other breakpoints until you continue normal execution.
You can set a breakpoint in a rule condition statement, as well. You cannot set a breakpoint on a comment.
Procedure
1. Place the cursor on the line of code on which to set the breakpoint.
2. On the Run menu, click Toggle Line Breakpoint. You can also click in the gray column next to a code line:
502 chapter 34: Testing and debugging your configuration
Guidewire PolicyCenter 9.0.9 Configuration Guide
View a breakpoint
Procedure
On the Run menu, click View Breakpoints.
Result
Selecting this menu item opens the View Breakpoints dialog in which you can do the following:
• View all of your currently set breakpoints
• Deactivate any or all of your breakpoints (which makes them non-functional, but does not remove them from the
code)
• Remove any or all breakpoints
• Navigate to the code that contains the breakpoint
Thus, from this dialog, you can deactivate, remove, or add a breakpoint.
Remove a breakpoint
Procedure
1. Place the cursor on the line of code containing the breakpoint to remove.
2. On the Run menu, click Toggle Line Breakpoint. You can also click the breakpoint symbol next to the line of
code.
Step over Execute the current line. If the current line is a method call, then run the method and return to the next line in the
current code block after the method ends. To step through your code in this manner, on the Run menu, click Step Over
.
Step into Execute the current line of code. If the current line is a method call, then step into the method and pause before
executing the first line for that method. To step through your code in this manner, on the Run menu, click Step Into .
The only difference between these two stepping options is if the current line of code is a method call. You can either
step over the method and let it run without interruption, or you can step into it and pause before each line. For other
lines of code that are not methods, stepping over and stepping into behave in the same way.
Testing and debugging your configuration 503
Guidewire PolicyCenter 9.0.9 Configuration Guide
While paused, you can navigate to other rules or classes if you want to look at their code. To return to viewing the
current execution point, on the Run menu, click Show Execution Point . Studio highlights the line of code to execute
the at the next step.
Viewing variables
The Debugger tab of the Debug pane shows the root entity that is currently available. For example, in activity
assignment code, the root entity is an Actvity object. To view any property of the root entity, expand it until you
locate the property.
The Debugger tab also shows the variables that you have currently defined. Note, however, that you can view only
the entities and variables that are available in the current scope of the code. Suppose, for example, that an Activity
entity is available in an activity assignment class. However, if that class calls a different class and you step into that
class, the Activity entity is no longer part of the scope. Therefore, it is no longer available. (Unless, you pass the
Activity object in as a parameter.)
After executing each line of code, Studio resets the list of values shown in the Debug frame. In doing so, it collapses
any property hierarchies that you may have expanded. It would be inconvenient for you to expand the hierarchy after
each line and locate the desired properties all over again.
Instead, you can define a watch list containing the Gosu expressions in which you have an interest in monitoring.
The debugger evaluates each expression on the list after each line of code executes, and shows the result for each
expression on the list. For example, you can add [Link] to the watch list and then monitor the list
as you step through each line of code. If the property changes, you see that change reflected immediately on the list.
You can also add variables to the list so you can monitor their values, as well.
• In the Variables pane, right-click the expression, and then click Add to Watches.
Next steps
As you step through each line of code in the debugger, keep the Watches pane visible so that you can monitor the
values of the items on the list.
Resuming execution
After the debugger pauses execution of your code, and after you are through performing any necessary debugging
steps, you may want to resume normal execution. You can do this in the following ways:
Stop debugging Resume normal execution, and ignore all remaining breakpoints. To stop debugging, click Mute Breakpoints
, and then click Resume Execution .
Continue debug- Resume normal execution, but pause again at the next breakpoint, if any. To continue debugging, click Re-
ging sume Execution without having Mute Breakpoints set.
Code Description
Expression Returns the result of evaluating the (single‐line) expression.
Program Displays the output of the program, including calls to print and exception stack traces.
To access application data in the Gosu scratchpad, run the PolicyCenter server in debug mode, and then instruct the
scratchpad to run your code in that process. The DCEVM must be installed on the server. For information on
running the PolicyCenter server in debug mode, see “Testing PolicyCenter with Guidewire Studio” on page 499.
See also
• “Run scratchpad code in the application server debug process” on page 505.
Procedure
To generate the internal code manually, select one of the items in the Codegen menu.
Procedure
1. In Guidewire Studio, click File→Settings.
2. In the Settings dialog, in the navigation list, expand Guidewire Studio, and then click Project Settings.
3. Do one of the following:
• To disable code generation, clear the Enable Automatic Code Generation check box.
• To enable code generation, set the Enable Automatic Code Generation check box.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→res, and then to the file
[Link].
2. Double-click the file [Link] to edit it.
3. Edit the desired <module> element, and set the attribute generate-xml-sources to true.
For example:
During a product upgrade, the configuration will contain a large number of errors that prevent the application from
building successfully. Many of these errors are likely to be in the code generation of PCF files. To help you
successfully build the application as quickly as possible, you can instruct Guidewire Studio to treat PCF errors as
warnings instead. Warnings during a build do not cause the build to fail, and so you can focus on fixing other
configuration files and producing a build that Studio considers successful.
Once you have a successful build, you can then run Build→Make Project to build only changed resources rather than
the entire project.
Procedure
Using GUnit
You use Studio GUnit to configure and run repeatable tests of your Gosu code in a similar fashion as JUnit works
with Java code. (GUnit is similar to JUnit 3.0 and compatible with it.) GUnit works automatically and seamlessly
with the embedded QuickStart servlet container, enabling you to see the results of your GUnit Gosu tests within
Studio.
GUnit provides a complete test harness with base classes and utility methods. You can use GUnit to test any body of
Gosu code except for Gosu written as part of Rules. (To test Gosu in Rules, use the Studio debugger. See “Testing
and debugging your configuration” on page 499 for details.)
Note: Guidewire does not recommend or support the use of classes that extend
[Link] or classes that reside in the [Link].* package in
a production environment. Guidewire provides GUnit as a development test facility only.
Guidewire uses the TestBase class as the root class for all GUnit tests. Your test class must extend the Guidewire
TestBase class. This class provides the following:
• The base test infrastructure, setting up the environment in which the test runs.
• A set of assert methods that you can use to verify the expected result of a test.
• A set of beforeXX and afterXX methods that you can override to provide additional testing functionality (for
example, to set up required data before running a test method).
The TestBase class interacts with an embedded QuickStart servlet container in running your GUnit tests. This class
has access to all of the embedded QuickStart server files and servlets. (GUnit starts and stops the embedded
QuickStart servlet container automatically. You have no control over it.) This class also initializes all server
dependencies.
To use one of these methods, you need to provide an overridden implementations of the method in your test class.
• Use beforeClass to perform some action before GUnit instantiates the test class.
• Use afterClass to perform some action after all the tests complete but before GUnit destroys the class.
• Use beforeMethod to perform some action before GUnit invokes a particular test method.
• Use afterMethod to perform some action after a test method returns.
These methods have the following signatures.
beforeClass() throws Exception {...}
afterClass() {...}
beforeMethod() throws Exception {...}
afterMethod(Throwable possibleException) {...} //If the test resulted in an exception, parameter
//posibleException contains the exception.
When implementing a TestBase test class and running that class in Studio, do not use static initializers or initialize
variables in a constructor. Instead, initialize variables on the class as follows:
• Initialize static variables on the class by overriding the beforeClass method and initializing the variable in that
method.
• Initialize instance variables by overriding the beforeMethod method and initializing the variable in that method.
For example, when initializing a class that uses the typekey type:
class MyTypekeyRelatedTest extends TestBase
static var _transCurrency : Currency
_transCurrency = Currency.TC_EUR
...
}
...
}
The following is another example for initializing a class that uses a third-party library:
class MyComplicatedTest extends TestBase
var _testHelper : ThirdPartyClass
Data builders
If you need to set up test data before running a test, Guidewire recommends that you use a “data builder” in one of
the beforeXX methods.
• See “Using entity builders to create test data” on page 516 for details on how to create test data.
• See “Creating and testing a builder for a custom entity” on page 523 for details of using the beforeClass
method to create test data before running a test.
Or, you can add a uses statement at the beginning of the file, for example:
uses [Link]
...
@ServerTest
Server runtime
A server test is a test written in the environment of a running server. The test and the server exist in the same JVM
(Java Virtual Machine) and in the same class loader. This allows the test to communicate with the server using
standard variables. In the base configuration, Guidewire uses an embedded QuickStart servlet container pointing at a
Web application to run the tests.
PolicyCenter interprets any class that contains the annotation @ServerTest immediately before the class definition
as a server test. If you create a test class through Guidewire Studio, then Studio automatically adds the server
runtime annotation @ServerTest immediately before the class definition. At the same time, Studio also adds
extends [Link] to the class definition. All GUnit tests that you create must extend this class.
(See the “The TestBase class” on page 509 for more information on this class.)
Although Studio automatically adds the @ServerTest annotation to the class definition, it is possible to remove this
annotation safely. As the TestBase class already includes this annotation, Guidewire does not explicitly require this
annotation in any class that extends the TestBase class.
By default, the server starts at a run level set to Runlevel.NO_DAEMONS. To change this default, see the description
of the @RunLevel annotation in the next section.
Server environment
Environment tags provide additional functionality. You use environment tags to replace functionality specific to an
external environment. This can include defining new SOAP endpoints or creating tests for custom PCF page, for
example.
Guidewire provides the following environment tags for use in GUnit tests.
Procedure
1. In the Run/Debug Configurations dialog, expand Defaults, and then click Junit.
2. Enter the default configuration parameters as appropriate.
Procedure
1. To view the GUnit configuration settings before launching a test, expand the Before launch section of that
dialog.
2. Set the Show this page check box.
512 chapter 35: Using GUnit
Guidewire PolicyCenter 9.0.9 Configuration Guide
Result
If you unset this option, you do not see the Run/Debug Configurations dialog upon starting a test. Instead, the test starts
immediately. In addition, selecting Run or Debug from the Studio Run menu does not open this dialog either. To
access the Run/Debug Configurations dialog again, click Run→Edit Configurations.
Configuration parameters
Use the Run/Debug Configurations dialog to enter the following configuration parameters:
• “Name” on page 513
• “Test Kind” on page 513
• “VM options” on page 513
You may not see some of the parameter fields until you actually load a test into Studio and select it. See “Creating a
GUnit test class” on page 513 for information on how to create a GUnit test within Guidewire Studio.
Name
If desired, you can set up multiple run and debug GUnit configurations. Each named configuration represents a
different set of run and debug startup properties. To create a new named configuration, do one of the following:
• Click Add and create a new blank configuration.
• Select an existing configuration, then click Copy Configuration to copy the existing configuration parameters to
the new configuration.
• Select the test class in the Project window, and then click either Run ‘TestName’ or Debug ‘TestName’. Then, select the
name of the test from the list of GUnit tests and click OK. This has an advantage of populating the fully qualified
class name field.
After you add the new configuration node on the left-hand side, you can enter a name for it on the right-hand side of
the dialog.
Test Kind
Use to set whether to test all the classes in a package, a specific class, or a specific method in a class. The text entry
field changes as you make your selection.
• For All in Package, enter the fully qualified package name. Select this option to run all GUnit tests in the named
package.
• For Class, enter the fully qualified class name. Select this option to run all GUnit tests in the named class.
• For Method, enter both the fully qualified class name and the specific method to test in that class.
VM options
Use to set parameters associated with the JVM and the Java debugger. To set specific parameters for the JVM to use
while running this configuration, enter them as a space separated list in the VM Options text box. For example:
-client -Xmx700m -Xms200m -XX:MaxPermSize=100m -ea
You can change the JVM parameters based on the test. For example, while testing a large class or while running
numerous test methods within a class, you may want to increase your maximum heap size.
uses [Link]
@[Link]
class MyTest extends TestBase {
construct(testname : String) {
super(testname)
}
...
function testSomething() {
//perform some test
assertEquals("reason for failure", someValue, someOtherValue)
}
...
}
Server tests
You specify the type of test using annotations. Currently, Guidewire supports server tests only. Server tests provide
all of the functionality of a running server. You must include the @ServerTest annotation immediately before the
test class definition to specify that the test is a server test. See “Configuring the server environment” on page 510 for
more information on annotations.
This construct code block can be empty or it may contain initialization code.
Test methods
Within your test class, you need to define one or more test methods. Each test method must begin with the word
test. (GUnit recognizes a method as test method only if the method name begins with test. If you do not have at
least one method so named, GUnit generates an error.) Each test method uses a verification method to test a single
condition. For example, a method can test if the result of some operation is equal to a specific value. In the base
configuration, Guidewire provides a number of these verification methods. For example:
• assertTrue
• assertEquals
• verifyTextInPage
• verifyExists
• verifyNull
514 chapter 35: Using GUnit
Guidewire PolicyCenter 9.0.9 Configuration Guide
• verifyNotNull
Many of these methods appear in multiple forms. Although there are too many to list in their entirety, the following
are some of the basic assert methods. To see a complete list of these methods in their many forms, use the code
completion feature in Studio.
assertArrayDoesNotContain
assertArrayEquals
assertBigDecimalEquals
assertBigDecimalNotEquals
assertCollection
assertCollectionContains
assertCollectionDoesNotContain
assertCollectionContains
assertCollectionSame
assertComparesEqual
assertDateEquals
assertEmpty
assertEquals
assertEqualsIgnoreCase
assertEqualsIgnoreLineEnding
assertEqualsUnordered
assertFalse
assertFalseFor
assertGreaterThan
assertIteratorEquals
assertIteratorSame
assertLength
assertList
assertListEquals
assertListSame
assertMethodDeclaredAndOverridesBaseClass
assertNotNull
assertNotSame
assertNotZero
assertNull
assertSame
assertSet
assertSize
assertSuiteTornDown
assertThat
assertTrue
assertTrueWithin
assertZero
...
Guidewire recommends that you document a failure reason as part of the method rather than adding the reason in a
comment. The GUnit test console displays this text string if the assert fails, which makes it easier to understand the
reason of a failure.
@[Link]
class MyTest extends [Link] {
construct() {
...
}
...
}
Next steps
If desired, you can also create individual run/debug settings to use while running this test class. For details, see
“Configuring the test environment” on page 512.
For readability, Guidewire recommends that you place each configuration method call on an indented separate line
starting with the dot. This makes code completion easier. It also makes it simpler to alter a line or paste a new line
into the middle of the chain or to comment out a line.
Gosu builders extend from the base class [Link]. To view a list of valid builder types
in Guidewire PolicyCenter, use the Studio code completion feature. Type [Link]. in the Gosu editor
and Studio displays the list of available builders.
516 chapter 35: Using GUnit
Guidewire PolicyCenter 9.0.9 Configuration Guide
Package completion
As you create an entity builder, you must either use the full package path, or add a uses statement at the beginning
of the test file. However, in general, Guidewire recommends that you place the package path in a uses statement at
the beginning of the file.
uses [Link]
@[Link]
class MyTest extends TestBase {
construct(testname : String) {
super(testname)
}
...
function testSomething() {
//perform some test
var account = new AccountBuilder().create()
}
...
}
Guidewire provides certain of the Builder classes in [Link].* and others in [Link].
Verify the package path as you create new builders.
This creates a new builder of the specified type, with the Builder class setting various default properties on the
builder entity. Each entity builder provides different default property values depending on its particular
implementation. For example, to create (or build) a default address, use the following:
var address = new AddressBuilder()
To set specific properties to specific values, use the property configuration methods. The following are the types of
property configuration methods, each which serves a different purpose as indicated by the method’s initial word:
as A property that holds only a single state. For example, asSmallBusiness or asAgencyBill.
with The single element or property to be set. For example, the following sets a FirstName property:
withFirstName("Joe")
Use a [Link](...) configuration method to add a single property or value to a builder object. For
example, the following Gosu code creates a new Address object and uses a number of with(...) methods to
initialize properties on the new object. It then uses an asType(...) method to set the address type.
var address = new AddressBuilder()
.withAddressLine1( streetNumber + " Main St." )
.withAddressLine2( "Suite " + suiteNumber)
.withCity( "San Mateo" )
.withState( "CA" )
.withPostalCode( postalCode )
.asType(typeStr)
...
After you create a builder entity, you are responsible for writing that entity to the database as part of a transaction
bundle. In most cases, you must use one of the builder create methods to add the entity to a bundle. Which create
method one you choose depends on your purpose.
To complete the previous example, add a create method at the end.
Using GUnit 517
Guidewire PolicyCenter 9.0.9 Configuration Guide
Method Description
create() Creates an instance of this builder's entity type in the default bundle. This method does not commit the
bundle. Studio resets the default bundle before every test class and method.
createAndCommit() Creates an instance of this builder’s entity type in the default bundle, and performs a commit of that
default bundle.
create(bundle) Creates an instance of this builder’s entity type, with values determined by prior calls to the entity. The
bundle parameter sets the bundle to use while creating this builder instance.
new PersonBuilder()
.withFirstName("Sean")
.withLastName("Daniels")
.withPrimaryAddress(address)
.create()
[Link]()
In this example, Address and Person share a bundle, so committing [Link] also stores Person in the
database. If you do not need a reference to the Person, then you do not need to store it in a variable.
GUnit resets the default bundle before every test class and method.
function myTest() {
var person : Person
Nesting builders
It is possible to nest one builder inside of another by having a method on a builder that takes another builder as an
argument. For example, suppose that you want to create an Account that has an AccountLocation. In this situation,
you might want to do the following:
Using GUnit 519
Guidewire PolicyCenter 9.0.9 Configuration Guide
There are generally two kinds of accounts: person and company. By default, AccountBuilder creates a person
account. If you want a company account, then you need to assign a company contact as the account holder, as shown
in the following code sample:
uses [Link]
uses [Link]
In this example, passing false to AccountBuilder tells it not to create a default account holder. Instead, you pass in
your own account holder by calling withAccountHolderContact, which takes a ContactBuilder. In this case,
CompanyBuilder suffices. The passed in number 42 seeds the default data with something unique (ideally) and
identifiable.
The following example creates a company account and overrides some of the default values. Anywhere you see
code, it means a seed value. (String variants derive from the given values.) It also illustrates how to nest the results
of one builder inside another.
uses [Link]
uses [Link]
uses [Link]
uses [Link]
var code = 48
The following example takes the previous code and presents it as a single builder that takes other builders as
arguments. While more compact, it also takes more planning and understanding of builders to create. Notice the
successive levels of indenting used to signal the creation of a new (embedded) builder.
uses [Link]
uses [Link]
uses [Link]
uses [Link]
The following MyPersonBuilder class extends the existing PersonBuilder class. The existing PersonBuilder
class contains methods to set a home phone number and mobile phone number. The new extended class contains a
method to set the person’s alternative phone number. As there is no static field for the properties on a type, you must
look up the property by name. Note that you must first define the new property in the data model.
uses [Link]
construct() {
super( true )
}
The PersonBuilder class has two constructors. This code sample uses the one that takes a Boolean that means
create this class withDefaultOfficialID.
Another more slightly complex example would be if you extended the Person object and added a new
PreferredName property. In this case, you might want to extend the PersonBuilder class also and add a
withPreferredName method to populate that field through a builder.
...
Parameter Description
BuilderEntity Type of entity created by the builder. The create method requires this parameter so that it can return a
strongly‐typed value and, so that other builder methods can declare strongly‐typed parameters.
BuilderType Type of the builder itself. The with methods require this on the DataBuilder class so that it can return a
strongly‐typed builder value (to facilitate the chaining of with methods).
If you choose to extend the DataBuilder class ([Link]), place your newly created
builder class in the [Link] package in the Studio Tests folder. Start any method that you define in
your new builder with one of the recommended words (described previously in “Creating an entity builder” on
page 517):
as A property that holds only a single state. For example, asSmallBusiness or asAgencyBill.
with The single element or property to be set. For example, the following sets a FirstName property:
withFirstName("Joe")
Your configuration methods can set properties by calling [Link] and [Link].
You can provide property values as any of the following:
• Simple values.
• Beans to be used as subobjects.
• Other builders, which PolicyCenter uses to create subobjects if it calls your builder's create method.
• Instances of [Link], which can, for example, generate a different value (to
satisfy uniqueness constraints) for each instance constructed.
[Link] and [Link] optionally accept an integer order argument that
determines how PolicyCenter configures that property on the target object. (PolicyCenter processes properties in
ascending order.) If you do not provide an order for a property, Studio uses DataBuilder.DEFAULT_ORDER as the
order for that property. PolicyCenter processes properties with the same order value (for example, all those that do
not have an order) in the order in which they are set on the builder.
In most cases, Guidewire recommends that you omit the order value as you are implement builder configuration
methods. This enables callers of your builder to select the execution order through the order of the configuration
method calls.
Constructors for builders can call set, and similar methods to set up default values. These are useful to satisfy null
constraints so it is possible to commit built objects to the database. However, Guidewire generally recommends that
you limit the number of defaults. This is so that you have the maximum control over the target object.
return this
The AbstractBeanPopulator class automatically converts builders to beans. That is, if you pass a builder to the
constructor of AbstractBeanPopulator, it returns the bean that it builds in the execute method. The following
example illustrates this.
public MyEntityBuilder withCustomSetting( groupBuilder : DataBuilder<Group, ?> ) : MyEntityBuilder {
return this
Parameter Type
ExtSystem Typekey
UserName String
Password String
After creating your custom entity and its builder class, you would probably want to test it. To accomplish this, you
need to do the following:
Procedure
1. Add an ExtSystem typelist. Within Guidewire Studio, navigate to config→Extensions→Typelist, and then right-
click New→Typelist. Add a few external system typecodes. (For example, add SystemOne, SystemTwo, or
similar items.)
2. Create ExtCredential. Right-click Entity, and then click New→Entity. Name this file [Link] and
enter the following:
<?xml version="1.0"?>
<entity xmlns="[Link] entity="ExtCredential" table="extcred"
type="retireable" exportable="true" platerform="true" >
<typekey name="ExtSystem" typelist="ExtSystemType" desc="Type of external system"/>
<column name="UserName" type="shorttext"/>
<column name="Password" type="shorttext"/>
<foreignkey name="UserID" fkentity="User" desc="FK back to User"/>
</entity>
3. Modify the User entity. Find [Link] (in Extensions→Entity). If it does not exist, then you must create it.
However, most likely, this file exists. Open the file and add the following:
<array name="ExtCredentialRetirable" arrayentity="ExtCredential"
desc="An array of ExtCredential objects" arrayfield="UserID" exportable="false"/>
See also
• For information on extending the Guidewire PolicyCenter base configuration entities, see “Extending a base
configuration entity” on page 242.
Create an ExtCredentialBuilder class
Next, you need to extend the base DataBuilder class to create the ExtCredentialBuilder class. Place this class in
its own package under configuration and in the gsrc folder.
524 chapter 35: Using GUnit
Guidewire PolicyCenter 9.0.9 Configuration Guide
For example:
package AllMyClasses
uses [Link]
construct() {
super(ExtCredential)
}
uses [Link]
uses [Link]
@[Link]
class ExtCredentialBuilderTest extends [Link] {
function beforeClass () {
[Link]( \ bundle -> {
credential = new ExtCredentialBuilder()
.withType( "SystemOne" )
.withUserName( "Peter Rabbit" )
.withPassword( "carrots" )
.create( bundle )
}
)
}
function testUsername() {
assertEquals("User names do not match.", [Link], "Peter Rabbit")
}
function testPassword() {
assertEquals("Passwords do not match.", [Link], "carrots")
}
Example
The policy period plugin implementation ([Link]) implements the
postApplyChangesFromBranch method. Rather than putting code for each line of business directly in the plugin
implementation, this method calls postApplyChangesFromBranch for each line in the policy period:
override function postApplyChangesFromBranch(policyPeriod : PolicyPeriod, sourcePeriod : PolicyPeriod)
{
for (line in [Link]) {
[Link](sourcePeriod)
}
...
}
To implement functionality for the workers’ compensation line of business, the [Link]
class implements the postApplyChangesFromBranch method:
override function postApplyChangesFromBranch(sourcePeriod : PolicyPeriod) {
...
}
Validation in PolicyCenter
This topic provides an overview of validation types in PolicyCenter, and also includes common validation topics.
Validation overview
PolicyCenter has several types of validation:
• Field validation – Is part of the PCF rendering framework and uses regular expressions to ensure that entry is
valid. For example, field validation checks that a phone number is in the correct format.
• Class-based – You can invoke Gosu class-based validation from PCF files, job processes, wizard steps,
workflow steps, integration plugins, and from any Gosu code. The validation class checks that certain conditions
are met. The class can raise errors or warnings that includes the validation level at which it failed. For example,
after entering vehicles on a Personal Auto policy in the submission wizard, your class-based validation code can
check that the policy has at least one driver. If not, the code raises an error at a particular validation level.
• Rules-based – On a database commit, for example when you click Next in wizard, PolicyCenter calls the
validation rules on each validatable object in the bundle. The rules check that certain conditions are met on the
object. If the conditions are met, the bundle can be saved. Otherwise, the rule raises a validation error or warning
that includes the validation level at which it failed.
Field‐level validation
Field validators handle simple validation for a single field. A validator definition defines a regular expression, which
a data field must match to be valid. It can also define an optional input mask that provides a visual indication to the
user of the data to enter in the field.
PolicyCenter field-level validation is not part of the class- or rule-based validation framework. Field-level validation
does not involve Gosu business rules or classes. It is simply part of the PCF rendering framework.
The PolicyCenter rendering framework builds the user interface from sets of PCF files. During the rendering
process, PolicyCenter performs any field-level checks that have been configured in the PCF files. For example, if
you configure a specific field in a PCF as required, then if the user leaves that required field empty, the rendering
framework generates a user error.
This type of field-level validation is independent of class- or rule-based validation. PolicyCenter performs this type
of validation before policy validation and displays problems that occur at the PCF level before it runs policy
validation or other processes.
Suppose that a user does not enter a value for the Fleet field on the (Submission wizard) Policy Info page. In this case,
the rendering framework automatically generates a field-level validation error as the user attempts to move to the
next step in the Submission wizard.
PolicyCenter generates the error message text string from the MissingRequired display key, substituting the field
name for the {0} variable:
[Link] = Missing required field "{0}"
In this particular instance, you specify that the Fleet field in the [Link] PCF file is required. You do this by
setting the required property to true.
Guidewire recommends that you also implement most of the field validation checks as class-based validation as
well. For example, implement a class-based validation method for the BA line that ensures that all required fields
have been set.
See also
• “Field validation” on page 297
See also
• “Class-based validation” on page 535
See also
• Rules Guide
Class‐based validation
This topic describes the class-based validation in Guidewire PolicyCenter, how to use it, and how to configure it.
See also
IMPORTANT Guidewire does not recommend, nor support, the use of class-based validation as a
feedback mechanism for user action. Instead, if you need to provide that feedback, use confirmation
dialog boxes and user-viewable exceptions. Class-based validation is not appropriate in all contexts,
nor in all situations—use it carefully and thoughtfully.
See also
• “Policy object validation levels” on page 537
Personal Auto
• PALineAssignmentValidator
• PALineCoveragesValidator
• PALineDriversValidator
• PALineQuickQuoteValidation
• PALineStepsValidator
• PALineValidation
• PALineVehiclesValidator
• PersonalVehicleValidation
There is nothing particularly special about these entities. Thus, they are not validatable entities in the sense that
rule-based validation entities are defined as validatable. Guidewire provides these validation classes to illustrate how
to create validation classes for specific purposes. For example, the base configuration validation classes illustrate:
• How to create a Gosu class that validates an entity in the PolicyCenter data model. [Link] is an
example of a class that validates the PersonalAutoLine entity.
• How to create a Gosu class that validates a wizard step, such as the Policy Info step in the submission wizard.
[Link] and [Link] provide examples of this type of validation.
See “Invoking class-based validation” on page 547 for an example of how to invoke validation from a wizard
step.
You can write your own Gosu validation classes and implement validation logic on any entity that you choose.
However:
• Each validation class that you create must implement the PCValidation interface. A convenient way to do this is
to extend PCValidationBase or one of its subtypes.
• Each validation class that you create must provide an overridden validate function.
See also
• “Configuring class-based validation” on page 536
if [Link](TC_BINDABLE)
Depending on the result of your validation checks, you can configure PolicyCenter to display an error or warning
message to the user.
To illustrate, suppose that one class-based check validates that an underwriting company must be assigned before
binding a policy. Thus, you define the following condition in a validation class to enforce the constraint and generate
an error message in PolicyCenter if the condition is not met.
var atBindable = [Link](TC_BINDABLE)
if ( ([Link] == null) && (atBindable == true) {
[Link](Period, "bindable", [Link]("[Link]")
}
PolicyCenter provides other validation levels in the base configuration. However, as Guidewire defines these levels
in the ValidationLevel typelist, it is possible to modify, remove, or even add to them using the Studio typelist
editor.
Validation package
Guidewire provides the following validation-related classes and interfaces in the [Link] package.
[Link]
«interface»
PCValidation
PCValidationBase PCValidationContext
Context
Level
Result
PCValidationContext
ValidationResult
Legend
A relates to B
«typelist»
A B ValidationLevel
B relates to A *
A B A has a B
A B A has 0 or more Bs
EntityValidation ValidationIssue
* A is a subtype of B
A B A delegates to B *
A is enhanced by B
A B A implements B
Class names in italics indicate
an abstract class
«typelist»
ValidationIssueType
Guidewire Platform
PCValidation
All Gosu validation classes must implement the PCValidation interface. Any Gosu class (or any interface defined
in Gosu) that implements PCValidation can perform validation logic. This interface contains a single validate
method.
Classes that implement this interface can create methods that test for a single issue and call those method from their
implementation of the validate method. For an example, see [Link]. Through object
inheritance, the method doValidate does the validation:
override function doValidate() {
qualifiedGoodDriver()
appliedGoodDriverDiscount()
licenseInfoRequired()
...
}
PCValidationBase
Class PCValidationBase is a convenience class that implements PCValidation. Its constructor takes a validation
context (PCValidationContext) instance that holds the level at which to perform validation and the validation
results (warnings and errors).
Class‐based validation 539
Guidewire PolicyCenter 9.0.9 Configuration Guide
PCValidationBase provides a number of getter property methods. Some of the more important are:
property get Context() : PCValidationContext
property get Level() : ValidationLevel
property get Result() : PCValidationResult
PCValidationContext
Class PCValidationContext takes a ValidationLevel and creates a new PCValidationResult during
initialization.
This class has several important methods for use in managing validation. The following list describes each briefly.
However, for the most complete information, consult the Gosu API Reference documentation associated with the
method.
Method Description
addToVisited(validation, Use to track a complete listing of the checks that PolicyCenter performed during the
methodName) validation. The method returns false if the given [Link] and methodName
have been visited before. You can use this to determine that this particular validation
method does not need to be checked again.
This method only checks against the class name, not the validation object itself (using
hasVisited). Thus, for example, if you are validating multiple vehicles, you can not
discern whether a method has been visited for a specific vehicle.
hasVisited(className, Use to test whether the given combination of validation class name and method
methodName) name have been seen before. If so, the method returns true.
isAtLeast(ValLevel) Use to perform a test to determine if the level specified by ValidationContext is at
least valLevel. This method does not actually perform validation. Instead, you use
the information to determine whether you want to perform validation.
showVisited() Use to produce a string that lists the validation methods that were visited as valida‐
tion was performed with the provided Context. You can then use this string for de‐
bugging.
resetVisited() Resets the set of visited validation methods.
raiseExceptionIfProblemsFound() Throws an EntityValidationException if either errors or warnings have been add‐
ed to the validation context.
raiseExceptionIfErrorsFound() Throws an EntityValidationException only if errors have been added to the vali‐
dation context.
PCValidationResult
Class PCValidationResult holds the warnings and errors added by the validation implementation classes as
problems are discovered. Warnings are non-blocking. The user can clear warnings and continue. In contrast, errors
block further progress until the user resolves the problem.
PCValidationResult contains a number of object methods that you use in generating warnings and errors. The
following list describes the more important ones briefly. However, for the most complete information, consult the
Gosu API Reference documentation associated with the method.
Method Description
addError Use to add a general error message. This method takes the following arguments, of which the first three
are mandatory and the last optional:
• keyable bean (entity) that is the source of the error
• validation level associated with the error
• error reason to display to users
• ID of the wizard step where the error can be corrected
540 chapter 38: Class‐based validation
Guidewire PolicyCenter 9.0.9 Configuration Guide
Method Description
If you supply a wizardstepID, the method creates a link to the wizard step with ID wizardStepId if the
error is not in the current step.
addFieldError Use to add an error message specifically associated with a field on the given keyable bean as defined by
the relative FieldPath. This method takes the following arguments:
• keyable bean (entity) that is the source of the error
• field path to the field that must be changed to resolve the error
• validation level associated with the error
• error reason to display to users
• ID of the wizard step where the error can be corrected
If you supply a wizardstepID, the method creates a link to the wizard step with ID wizardStepId if the
error is not in the current step.
addWarning Similar to the addError method, except that it generates a warning rather than an error.
addFieldWarning Similar to the addFieldError method except that it generates a warning rather than an error.
PCValidationResult inherits several different forms of the reject method from the (platform) ValidationResult
class (which it subclasses).
Validation chaining
In the base configuration, the [Link] class is an example of policy-graph validation
in which one validation class successively calls (chains to) other validation classes to perform additional validation.
For example, while running its validation checks for the policy period, PolicyPeriodValidation chains to:
• [Link] to validate the contact roles on the policy.
• [Link] to validate multiple roles on the same contact.
• [Link] to validate each policy location.
• [Link] to validate each of its lines of business.
• [Link] to validate that all specified modifiers are valid modifier type codes.
Validation chaining is the process of one validation class calling another validation class to perform additional
validation checks. Thus, to chain validation:
• A validate method in one validation class first calls the validation methods defined in its class.
• This validate method then invokes the validate method on another validation class (often by looping through
a set of objects).
• In turn, these classes chain to validations of entities they hold. For example, to validate all vehicles on a policy
for a Personal Auto policy period, PolicyPeriodValidation chains to PALineValidation which then chains to
PALineVehiclesValidator. PALineVehiclesValidator calls PALineCoveragesValidator,
PALineDriversValidator, PALineVehiclesValidator and PALineAssignmentValidator.
• After executing the validate methods in each of the related classes, control returns to the calling class. The
calling class can then perform additional validation checks.
It is important to understand that validation chaining is not automatic. For a class to perform validation chaining,
you must specifically construct it to do so. Guidewire specifically designed the PolicyPeriodValidation class to
perform validation chaining.
PolicyPeriod
1
2 PolicyPeriodValidation
3 4
checkPeriodDates()
validateImpl()
5
checkQuoteNeededDate()
6
checkProductIsValid()
7
checkMinimumDataForQuote()
8
checkBillingInformation()
9
checkReportingPolicyIsCreatedWithFinalAudit()
10
checkOfficialIDs()
11
checkUnderwritingCompany()
12
checkAnswers()
Loop
[Location in PolicyLocations]
13 PolicyLocationValidation
14 15
allAccountLocationsAreActive
validate()
16
territoryCodeAgressWithLocation
17
checkAnswers
18 PolicyLineValidation
19 20
policyPeriodOneYearMax()
validate()
DriversValidator
21
qualifiedGoodDriver()
22
appliedGoodDriverDiscount()
23
licenseInfoRequired()
...
.
...
.
n
.
24
checkUniqueKeyBeansHaveNoDuplicates()
25
checkNamedInsuredIndustryCode()
26
checkPolicyLocationIndustryCode()
27
checkReinsuranceForBindablePeriod()
28
checkReinsuranceForBindablePeriod()
29
checkPolicyAddress()
Initially, the validateImpl method defined in PolicyPeriodValidation (3 in the graphic) executes a number of
validation methods defined in PolicyPeriodValidation, each of which tests for a certain condition. These
methods (labeled 4 through 12) are:
• checkPeriodDates
• checkQuoteNeededDate
• checkProductIsValid
• checkMinimumDataForQuote
• checkBillingInformation
• checkReportingPolicyIsCreatedWithFinalAudit
• checkOfficialIDs
• checkUnderwritingCompany
• checkAnswers
After these checks complete—still in the validateImpl method—the code executes a loop through all of the
Location objects in PolicyLocations (labeled 13). For each Location, it calls the PolicyLocationValidation
validate method on that object (labeled 14). The validation methods within PolicyLocationValidation (labeled
15 through 17) are:
• allAccountLocationsAreActive
• territoryCodeAgreesWithLocation
• checkAnswers
The PolicyPeriodValidation validateImpl method continues by invoking the validate method for each policy
line to perform line-specific validation:
[Link](\ line -> validateLine(line, \ validator -> [Link]() )
For example, if validating a Personal Auto line policy period, the code calls the validate method in
[Link] (labeled 19). This validation override first calls the local method
policyPeriodOneYearMax. It then chains to validate methods in a series of other validation classes:
• [Link]
• [Link]
• [Link]
• [Link]
Each of these validation classes contains its own override of doValidate. Among these, only a few of the methods
in DriversValidator are shown in diagram (labeled 21 through n). These methods perform specific checks for
driver qualifications, including:
• qualifiedGoodDriver
• appliedGoodDriverDiscount
• licenseInfoRequired
Each of the validators loops as needed to validate all of the coverages, assignments, vehicles, and drivers that apply
within the policy period being validated.
Finally, control returns to the original validateImpl method in PolicyPeriodValidation and calls additional
local validation methods (labeled 24 through 29), including:
• checkUniqueKeyBeansHaveNoDuplicates
• checkNamedInsuredIndustryCode
• checkPolicyLocationIndustryCode
The following topics discuss parts of this example in more detail:
• “PolicyPeriodValidation:validateImpl method” on page 545
• “PolicyPeriodValidation validation checks” on page 545
• “Invariant validation checks” on page 546
544 chapter 38: Class‐based validation
Guidewire PolicyCenter 9.0.9 Configuration Guide
PolicyPeriodValidation:validateImpl method
Ideally, the validateImpl method simply directs the flow of logic. Rather than check for problems itself, Guidewire
recommends instead that the validateImpl method call other methods, each with a specific purpose. The
[Link] method demonstrates this approach. (The following is a simplified
version of the method code.)
override protected function validateImpl() {
if (not [Link](this, "validateImpl")) {
return
}
checkPeriodDates()
checkQuoteNeededDate()
checkProductIsValid()
...
checkAnswers()
...
[Link](\ role -> new PolicyContactRoleValidation(Context, role).validate())
[Link](\ roles -> new PolicyContactRoleForSameContactValidation(Context,
roles).validate())
[Link](\ loc -> new PolicyLocationValidation(Context, loc, validatedTerritoryCodes).validate())
[Link](\ line -> validateLine(line, \ validator -> [Link]()))
checkUniqueKeyBeansHaveNoDuplicates()
checkNamedInsuredIndustryCode()
checkPolicyLocationIndustryCode()
checkReinsuranceForBindablePeriod()
checkPolicyAddress()
[Link](\ m -> new ModifierValidation(Context, m).validate() )
new InvariantValidation(Context, Period).validate()
}
First, validateImpl registers the fact that it has been called. Notice how the validateImpl method perform no
checks itself. Instead the validateImpl method calls other methods such as checkPeriodDates and
checkPolicyAddress, all of which have a very narrowly focused purpose. Also notice that validateImpl chains to
validations for entities held by PolicyPeriod:
• PolicyContactRoleValidation
• PolicyContactRoleForSameContactValidation
• PolicyLocationValidation
• PolicyLineValidation
}
}
}
}
This code initiates what Guidewire calls invariant checks. PolicyCenter uses these checks to determine whether a
policy has been modified in ways that violate implied constraints to the data model.
The method call creates a new InvariantValidation object, whose validate method initiates the actual invariant
tests and checks.
In the base configuration, these tests perform the following entity checks:
Constraint Errors
If a check indicates that the user-defined product model violates one or more constraints, PolicyCenter generates an
appropriate error message.
PolicyCenter stores the invariant errors in display keys. In Studio, in Project view, navigate to
configuration→config→locale. Assuming you are modifying the display key for English, open
display_en_US.properties and search for the following text string:
[Link].*
For example:
[Link]
wizard for Personal Auto contains the following validation code (on the beforeSave property of the
[Link]):
[Link]([Link])
This code invokes the validateDriversStep method in PALineStepsValidator before committing the Drivers
wizard step.
static function validateDriversStep(paLine : PersonalAutoLine) {
[Link](\ context -> {
var validator = new PALineValidation(context, paLine)
[Link]()
})
}
Location Use
Wizard step The beforeSave property for that step
Pop‐up The beforeCommit property for that pop‐up
The PolicyCenter user interface framework automatically handles the rendering of all errors and warnings raised
through exceptions.
Starting with SubmissionWizard is a logical first step as the Vehicles page is part the PolicyCenter Submission
wizard. Examining SubmissionWizard PCF file (within Studio) shows that it contains a referenced PCF file named
[Link], which governs the PA Vehicles page in PolicyCenter.
It is the value of the beforeSave property within [Link] that invokes validation on the
Vehicles Details card of the Vehicles page. (You must open the [Link] PCF in its own
View tab before you can access its properties.)
The validateDriversStep method starts the validation chain for the Personal Auto Vehicles screen. You can use
similar techniques for class-based validation chaining in other screens.
Quote purging provides batch processes to purge jobs that did not result in bound policies and prune alternate policy
periods created through multi-version quoting and side-by-side-quoting. Quote purging also removes orphaned
policy periods. Purging and pruning removes these jobs, policy periods, and associated objects from the
PolicyCenter database. Quote purging is not a reversible operation. Quote purging is disabled in the base
configuration.
Job
CloseDate
NextPurgeCheckDate
PurgeStatus
SelectedVersion
Legend
*
A B A has a B
PolicyPeriod
A B A has 0 or more Bs
* A is a subtype of B DoNotPurge
A B A delegates to B
A is enhanced by B
In the default configuration, quote purging purges submission and policy change job subtypes.
If the DoNotDestroy flag on Policy is true, then quote purging does not purge the Job associated with this Policy
or prune PolicyPeriod objects.
If the DoNotDestroy flag on PolicyPeriod is true, then quote purging does not prune this PolicyPeriod.
You can manage the DoNotDestroy property in Gosu code and in the PurgeAPI web service. To set the
DoNotDestroy property, you must have the Enable purging for a policy period and Disable purging for a policy period
permissions. The codes for these permissions are purgeenable and purgedisable, respectively.
See also
• Integration Guide
Legend
A relates to B
A B
B relates to A
A B A has a B
Account
A B A has 0 or more Bs
* A is a subtype of B
A B A delegates to B
A is enhanced by B
* A is purged or
A
Policy pruned
A is EffDated and is
A
purged or pruned
* *
Job * PolicyPeriod Document
FormTextData
Purging and pruning remove the policy period and all effective dated objects in the policy period branch. Purging
and pruning also remove objects connected to the policy period through a foreign key that would otherwise point to
a removed object. These objects directly related to the policy period include notes, documents, activities, and forms.
Purging and pruning does not remove objects not directly related to the policy period.
Because form text data can be shared between policy periods, quote purging does not remove form text data. As a
result, form text data can be orphaned as a result of quote purging. The Form Text Data Delete batch process
removes orphaned form text data. For more information, see the System Administration Guide.
In addition to removing policy periods, purging also removes the job. If purging removes all jobs associated with a
policy, it also removes the Policy object, for example, when a Policy only exists because of an unbound
submission. Pruning only removes policy periods; pruning does not remove the job.
The following illustration shows objects related to underwriting issues that get purged or pruned.
* A B A has a B
HumanTouchedIssues A A is pruned
*
A is EffDated and
* UWIssue A
is pruned
HumanTouched
*
UWIssueHistory
Purging and pruning also remove objects related to underwriting issues on the policy period. Human-touched
underwriting issues are not purged or pruned. A human-touched UWIssue has the HumanTouched property set to
true.
IMPORTANT The Purge and Purge Orphaned Policy Periods batch processes remove jobs and other
entities from the database. These batch processes are not reversible operations. The Reset Purge Status
and Check Dates batch process is also not reversible.
Procedure
1. In [Link], set the following parameters to true to enable running the batch processes from the Server
Tools Batch Process Info screen in PolicyCenter:
2. To enable the batch process to run on a regular schedule, uncomment the following ProcessSchedule entries
in [Link] and modify the schedule to meet your needs:
See also
Purge worker
The Purge worker picks up a job from the Purge work queue and purges or prunes jobs that meet the criteria. The
following flow chart shows how the purge worker processes the job. Any job that emerges from step 7 will be
considered for purging by the batch process on or after the NextPurgeCheckDate.
Purge worker flowchart
Evaluate job
1 and
update PurgeStatus
No
5
No
6 Update PurgeStatus
Legend
Purge worker
Calculate
7 NextPurgeCheckDate Purger
The purge date returned by the getPurgeJobDate method is less than or equal to the current • •
date.
The purge date is calculated by comparing the job close and policy end dates with configuration
parameters. For more information, see “Quote purging configuration parameters” on page 81.
Calls the getPurgeJobDate method in the PurgePlugin plugin interface.
The job has no open activities.
The job has no archived policy periods.
There are no workflows on any policy period in the job.
For information about a process that purges workflows, see the System Administration Guide.
3. In this step, the purger purges the job in two separate bundles:
a. The first bundle calls the createContext and prepareForPurge methods in the PurgePlugin plugin
interface.
For each policy period in the job, the purger calls the skipPolicyPeriodForPurge method in the
PurgePlugin plugin interface. This bundle then purges the job and the related objects.
b. The second bundle calls the postPurge method in the PurgePlugin plugin interface.
IMPORTANT Guidewire recommends that you put business critical operations in the
prepareForPurge method so that the first bundle does the purge and business critical
operations. Do not put business critical operations in the second bundle. If by chance the
system fails while the purger is processing the job, the second bundle may not occur. If the
first bundle does not complete, the bundle transaction consisting of the prepareForPurge
and the purge-from-database action is rolled back. The job will be again be a candidate for
purging or pruning the next time the batch process picks it up.
4. This decision point evaluates whether the policy periods on a job can be pruned. The policy periods on a job
can be pruned if all of the following apply:
The prune date returned by the getPruneJobDate method is less than or equal to the current • •
date.
The prune date is calculated by comparing the job close and policy end dates with configura‐
tion parameters. For more information, see “Quote purging configuration parameters” on
page 81.
Calls the getPruneJobDate method in the PurgePlugin plugin interface.
The job has no open activities.
The job has no archived policy periods.
If the previous conditions are met, then each individual policy period is evaluated for pruning. The policy
period is sent to the purger if the following apply:
5. In this step, the purger prunes policy periods on the job in two separate bundles:
a. The first bundle calls the prepareForPurge method in the PurgePlugin plugin interface.
For each policy period in the job except the selected version, the purger calls the
skipPolicyPeriodForPurge in the PurgePlugin plugin interface. This bundle then purges the policy
periods and the related objects.
b. The second bundle calls the postPurge method in the PurgePlugin plugin interface.
IMPORTANT Guidewire recommends that you put business critical operations in the
prepareForPurge method so that the first bundle does the purge and business critical
operations. Do not put business critical operations in the second bundle. If by chance the
system fails while the purger is processing the job, the second bundle may not occur. If the
first bundle does not complete, the bundle transaction consisting of the prepareForPurge
and the purge-from-database action is rolled back. The job will be again be a candidate for
purging or pruning the next time the batch process picks it up.
See also
• To enable this batch process, see “Enable quote purging batch processes” on page 555
See also
• Integration Guide
Procedure
1. Enter the policy transaction number of the job you wish to purge.
2. Click Find/Refresh Job to fetch the job from the database.
Field Description
Job Number The number of the job to purge or prune.
Subtype The job subtype.
Close Date The job close date.
DoNotDestroy flag (Policy) The value of the DoNotDestroy flag on Policy.
Policy Period(s) The number of policy periods associated with this job. The Prune -- Purge Policy Period(s) section
displays more information about each policy period.
Field Description
Coverage End The coverage end date of the policy.
PolicyCenter displays a Purge or Prune Job section. This section displays the following information about the
job:
You can select to purge or prune the selected job.
3. To purge or prune the job without checking to see if the job is eligible for purging or pruning, select Skip
configurable Purging checks or Skip configurable Pruning checks.
If you did not choose to skip checks, then the job is purged or pruned based on the current configuration,
including the PurgePlugin implementation.
If you choose to skip checks, then the job is purged or pruned regardless of the Subtype, Close Date, or Coverage
End.
If you choose to skip checks, a job can be purged or pruned only if the following are true:
• The job’s CloseDate is not null.
• The DoNotDestroy flag is not set on the policy associated with the job.
• The job has no open activities.
• The job is not archived.
Additionally, if you choose to skip checks, the following criteria also apply. For purging, each policy period
on the job must meet this criteria. For pruning, the policy period being pruned must meet this criteria.
• The PolicyPeriod is not bound.
• The DoNotDestroy flag on the PolicyPeriod is not set.
• The PolicyPeriod has no workflows.
4. Click Purge Job or Prune Job to purge or prune the selected job.
PolicyCenter does not run the Purge batch process but performs equivalent actions to purge or prune the
selected job. The purge or prune accesses the configuration parameters and runs the PurgePlugin
implementation.
Field Description
Policy Period The version number of the policy period, and whether it is the selected policy period.
Period Start The policy period start date.
Period End The policy period end date.
Period Status The policy period status.
DoNoDestroy (period) The value of the DoNotDestroy flag.
Flip DoNotDestroy bit A button to toggle the DoNotDestroy flag on this policy period.
Procedure
1. To prune policy periods without checking to see if the policy period is eligible for pruning, select Skip checks
for purging policy period.
If you choose to skip checks, then the policy period is pruned regardless of the Subtype, Close Date, or Coverage
End.
560 chapter 39: Configuring quote purging
Guidewire PolicyCenter 9.0.9 Configuration Guide
If you did not choose to skip checks, then the policy period is pruned based on the current configuration,
including the PurgePlugin implementation.
2. Click Purge in the row of the policy period you wish to prune.
The Purge button is enabled for unselected policy period versions.
PolicyCenter does not run the Purge batch process, but performs equivalent actions to prune the selected
policy period. The purge or prune accesses the configuration parameters, and runs the PurgePlugin
implementation.
Run the Purge batch process from the purging test tool
About this task
You can run the Purge batch process from the Purging Test tool.
Procedure
In Run Purge Batch Process, click Run.
This is the same as running the batch process from the Server Tools→Batch Process Info screen. The batch process
purges jobs and prunes policy periods in the PolicyCenter database.
Some insurance companies have a need to capture information from quotes that users and other processes generate
through the course of the day. Quote cloning provides one approach for retaining some of this information long
enough to capture it for business intelligence (BI) needs.
Through configuration, you define the processing of the cloned quotes. When you have gathered the data from the
clones and no longer need them, you can run Purge Quote Clones batch processing to purge the cloned quotes.
See also
• Application Guide
IMPORTANT Before enabling quote cloning, evaluate the impact on system performance, including
the impact to memory and database.
Procedure
1. Create an implementation of the PolicyPeriodQuoteClonePlugin plugin interface that implements your
functionality. See “Quote clone plugin” on page 564.
2. In the plugins registry for PolicyPeriodQuoteClonePlugin, enable the plugin and specify your
implementation as the Gosu class. See “Working with plugins” on page 134.
3. Enable Purge Quote Clones batch processing in [Link] by uncommenting the
ProcessSchedule entry for PurgeQuoteClones.
4. Modify the schedule of Purge Quote Clones batch processing to meet your needs.
Method See...
shouldCloneQuote “Determining whether to clone a quote” on page 565
cleanupAfterCloningPolicyPeriod “Cleaning up after cloning policy period” on page 565
The plugin has one method for modifying Purge Quote Clones batch processing:
Method See...
addToPurgeClonedPeriodsQuery “Adding to the Purge Quote Clones query” on page 565
When this method returns true, PolicyCenter creates a cloned policy period and sets its TemporaryClone property
to TC_UNPROCESSED.
IMPORTANT If this method is not properly implemented for your data model, loss of data or
functionality may occur.
The intent of this method is to fix up any problems caused by cloning. For example, the clone and the originating
policy period may have foreign keys pointing to the same object. If PolicyCenter attempts to delete the originating
policy period, PolicyCenter generates an error when it encounters the common object because the cloned policy
period still points to it. To avoid this, you can do a deep copy of the common object and point the foreign key on the
cloned policy period to the copy of the common object. If the common object has other relationships, you must
duplicate those relationships in copy of the common object and the clone. For example, if the common object has a
foreign key pointing back to the originating policy period, you must duplicate that relationship.
In the base configuration, if you have enabled and implemented a multicurrency system, this problem occurs with
PolicyFXRate objects. After cloning, the original policy period’s PolicyFXRate objects are also linked to from the
clone. In the example plugin implementation, the cleanupAfterCloningPolicyPeriod method provides code that
fixes the links to the PolicyFXRate object. The method does a deep copy of the FXRate and links the cloned policy
period to the PolicyFXRate copy.
See also
• “Adding to the Purge Quote Clones query” on page 565
• System Administration Guide
Configuring contingencies
PolicyCenter manages work associated with a creating or changing a policy through policy transactions. A policy
transaction is completed when the policy is bound and issued, or when the policy transaction is withdrawn.
However, the policy may still require additional work. You can use contingencies to manage this additional work
and take actions, including policy change or cancellation transactions, if conditions are not met in a timely manner.
See also
• Application Guide
Contingency Objects
Legend Policy
A B A has a B
A B A has 0 or more Bs *
* PolicyPeriod
*
Job Contingency
ContingencyInitiator
*
Owner SpawnedJobs
* * * *
ContingencyJob Activity Document Note
Contingency
Each Contingency has a number of properties, including:
Property Description
Title Brief description enabling a user to quickly understand the type of contingency.
Description Longer description which can include specific details of this instance. Can include, for example, the condi‐
tions under which the contingency can be resolved.
Status Type key indicating if this contingency is, for example, still active, has been successfully resolved, or failed
to be resolved in a timely manner.
Action What action to start if the contingency is not resolved prior to the action start date. The action can start a
policy transaction.
ActionStartDate When to initiate action if the contingency is not resolved.
DueDate The due date for the contingency. If the contingency is not closed by this date, batch processing changes
the status to failed, and closes the contingency.
CloseDate When the contingency was closed.
CloseUser The user who closed the contingency.
Policy The policy associated with the contingency.
PolicyPeriod Generally the policy period that caused the contingency to be associated with the policy. If the contingen‐
cy was attached directly to the policy, policy period is null.
Contingency Job
If a contingency is not resolved in a timely manner, Unresolved Contingency batch processing initiates action on the
contingency. ContingencyJob is the job initiated by the action.
The Spotlight integration in PolicyCenter provides access to interactive and risk assessment services available in
Guidewire Spotlight. Spotlight provides a map in PolicyCenter. If you update the address, PolicyCenter refreshes the
map. Spotlight provides risk information associated with a location.
In the base configuration, Spotlight is integrated with the commercial property line of business, and is accessible
from locations. You can add Spotlight interactive and risk assessment services to other lines of business.
The risk assessment service provides data for the selected risk profile, configured specifically for the customer.
Note: For information about obtaining access to Spotlight, contact your Guidewire support
representative.
For Spotlight services, in particular the interactive integration, to function properly and securely, the PolicyCenter
application server must be run using HTTPS with a valid certificate.
PolicyCenter Spotlight
1
Location public ID through URL
6
16 User can move
location
PolicyCenter UI Spotlight UI
2
Location public ID through HTTPS
7
SpotlightServlet InboundPolicyRequestData
15
3
8
Location 4 LocationDetailsRequestHandler
5
Details JSON OutboundPolicyData
9
17 SpotlightReturnToPCRequestHandler
10
PolicyLocationRiskAssessmentGateway
11
12
JSON OutboundPolicyData
Spotlight risk
PolicyLocationRiskAssessmentPlugin 13 assessment
JSON InboundRiskAssessmentData service
14
Risk Assessment
Results
For interactive risk assessment flow, the following steps correspond to the numbers in the previous illustration.
1. PolicyCenter When the user clicks Evaluate in Spotlight, PolicyCenter sets a variable indicating that this button
was clicked. Then PolicyCenter stores the current policy location data into the
OutboundLocationRiskAssessmentTempStore, OutboundPeriodRiskAssessmentTempStore, and
OutboundReinsurableRiskAssessmentTempStore temporary objects. PolicyCenter uses these objects to
match the data that the risk assessment service returns.
For new locations that do not have latitude and longitude, PolicyCenter sends a formatted address. The
AddressFormatter class formats the address into a globalized address. In your customization, pass the fields
you require into the formatter. In the base configuration, the fields are stored in a static function called
GeoCodableAddressFields in [Link].
Policy Center passes three parameters to Spotlight through the URL. These parameters are used in requests to
transfer JSON data from Spotlight to PolicyCenter.
• policySystemServer – Base URL which prepends the other two page parameters
• encodedLocationDetailRequestPage – Page for requesting location details from PolicyCenter including
location public ID
• encodedReturnPage – Page for returning from Spotlight to PolicyCenter to display the risk assessment
calculated by Spotlight
The URL is in the following format:
[Link]
paramsUrlFragment/encodedLocationDetailRequestPage/returnUrlFragment/encodedReturnPage
2. Spotlight After PolicyCenter sends the public ID of the LocationForRiskAssessment object to Spotlight,
Spotlight sends a request to PolicyCenter to retrieve the details of that location. The request is made through
the URL:
policySystemServer/encodedLocationDetailRequestPage
PolicyCenter Spotlight
PolicyCenter UI
PolicyLocationRiskAssessmentRequestor
PolicyLocationsRiskAssessmentWorkQueue
PolicyLocationRiskAssessmentGateway
5
JSON OutboundPolicyData
Spotlight Risk
PolicyLocationRiskAssessmentPlugin 6 assessment
JSON InboundRiskAssessmentData service
7 8
Risk Assessment
SpotlightNotificationActivityCreator
Results
9
Activity indicating
success or failure
For non-interactive risk assessment flow, the following steps correspond to the numbers in the previous illustration.
1. The user selects Update Risk Evaluations and PolicyCenter calls the
PolicyLocationRiskAssessmentRequestor class.
574 chapter 42: Configuring the Spotlight integration
Guidewire PolicyCenter 9.0.9 Configuration Guide
This class requests risk assessments for all the locations on a policy period, by calling the
enqueueForLocationsRiskAssessment method. This method creates a RiskEvaluationWorkItem which
refers to the PolicyPeriod. It also sets the RequestingUser field to the current user. The workItem is created
and committed in the PolicyPeriod bundle.
The class also provides the static query isLocationsRiskAssessmentInProgress method to determine
whether there is already an active RiskEvaluationWorkItem for this policy period.
2. Policy Locations Risk Assessment batch processing writes items to the Policy Locations Risk Assessment
work queue. This work queue starts risk assessment for all locations on the policy.
This work queue does not have a finder. Therefore, batch requests are created explicitly by the
PolicyLocationsRiskAssessmentRequestor class.
3. The work queue calls PolicyLocationRiskAssessmentGateway class. The gateway ensures that the plugin
methods are called correctly, checks permissions, and handles errors.
4. The gateway class calls the PolicyLocationRiskAssessmentPlugin plugin.
5. The plugin calls the Spotlight risk assessment service. The data is sent by OutboundPolicyData.
6. The risk assessment data is returned with InboundRiskAssessmentData.
7. The data is persisted in InboundLocationRiskAssessmentTempStore objects.
8. For each location, the SpotlightNotificationActivityCreator class creates an activity indicating whether
risk assessment succeeded or failed.
9. Users can view the activities in PolicyCenter.
* * InboundLocationRiskAssessmentTempStore
PolicyLocation OutboundLocationRiskAssessmentTempStore
FloodRisk
SpatialPoint FloodScore
SpatialPoint
*
LocationRiskAssessment
InboundLocationRiskAssessmentErrorTempStore
FloodRisk
FloodScore *
OutboundReinsurableRiskAssessmentTempStore Legend
CoverageGroup A relates to B
A B
B relates to A
TotalInsuredValue
A B A has 0 or more Bs
*
The PolicyLocation provides access to risk assessment data for a policy location through an array of
LocationRiskAssessment objects. The PolicyLocation also has a one-to-one relationship with risk assessment
data to be sent to Spotlight in the OutboundLocationRiskAssessmentTempStore object.
Property Description
AssessmentDate Time that the assessment was given to PolicyCenter.
Property Description
AssessmentDate Time that the assessment was given to PolicyCenter.
FloodRisk The flood risk set to Unknown, Low, Medium, or High. This provides an example of
parsed data from Spotlight.
FloodScore A score for the flood risk. This provides an example of risk score from Spotlight.
RiskProfileCode The code in the risk assessment service indicating how the location risk was assessed.
SnapshotReportURL Reference to report of how risk assessment took place.
SpatialPoint Latitude and longitude of this location.
UnparsedRiskAssessmentResponse The raw text from the risk assessment.
Property Description
AddressLine1 The first line of the location address. This object also includes address properties, including City, County,
State, and Country.
Property Description
CoverageGroup Coverage group type for reinsurance.
TotalInsuredValue The total insured value of the risk.
See also
Class Description
[Link] This servlet is used to handle all HTTP requests between PolicyCenter and the
Spotlight interactive service.
This servlet has two request handlers:
• URL contains [Link] – A request handler sends the
formatted address and spatial point to Spotlight interactive service so that
PolicyCenter displays the location on the Spotlight interactive map.
• URL contains [Link] – A request handler takes the data
assessed on the Spotlight Interactive side, and returns the new risk
assessment data to Policy Center. The handler redirects Spotlight
interactive back to Policy Center and the correct wizard step.
[Link] Handles HTTP requests for locationDetails and provides location data to
Spotlight.
[Link] Handles HTTP requests for SpotlightReturn. Takes Spotlight location details,
delegates to the Spotlight Policy Location Risk Assessment plugin gateway,
then redirects back to PolicyCenter.
[Link] Specifies configuration parameters for Spotlight.
[Link] Users to whom an activity is sent. In the base configuration, the producer and
underwriter associated with the policy transaction.
[Link] Handles temporary objects for policy location and location risk assessments
in [Link] and toggles the risk assessment information display.
[Link] Contains data Spotlight passes to PolicyCenter when longitude and latitude
are adjusted in Spotlight.
[Link] Contains data PolicyCenter passes to Spotlight to interactively display location
details in Spotlight.
[Link] Contains data the Spotlight risk assessment service passes to PolicyCenter af‐
ter calculating risk assessment values.
[Link] Contains the list of fields that are used determine if a previous risk assess‐
ment was performed on the same location and under similar conditions.
PolicyLocation from Spotlight. This class passes the error collector to the RiskAssessmentErrorHandler which
has a method to handle the errors in the collector.
The error collector passes the errors to one of two error handler implementations:
SpotlightInteractiveErrorHandler and SpotlightNonInteractiveErrorHandler, for handling errors in
interactive and non-interactive modes, respectively. Each error is associated by a type specified in the type list
[Link].
If risk assessment access is disabled for a service, PolicyCenter provides alert messages. In the base configuration,
the service is inaccessible from the user interface when the service is unavailable.
However, if a service is disabled and access is attempted through the user interface, PolicyCenter displays a message
indicating that the feature is not enabled. If an attempt is made programmatically to access a disabled service,
PolicyCenter sends an activity to users identified by a configured set of roles. The activity message reports a
permanent failure and advises that the administrator can provide access.
Underwriting authority in PolicyCenter provides an underwriting infrastructure which you can modify or augment.
This topic describes how to configure underwriting authority.
See also
• “Configuring underwriting authority and multicurrency” on page 697
• Application Guide
Like roles and permissions, authority grants are always additive. A user can approve an issue if the user has at least
one grant that allows them to approve that issue. For example, a user has one profile that grants a user authority to
approve total premium up to $1000. This user also has another profile that grants them the ability to approve total
premium up to $1500. In this case, the $1500 limit will be the one that is in effect.
An authority grant has an associated value if the comparator specifies a value type other than None. If the authority
grant for a given issue has an associated value, the grant can either be contingent on the given value or can apply to
any possible value. If the grant applies to any value then the ApproveAnyValue bit is set on the associated authority
grant. Otherwise, PolicyCenter sets the Value field on the authority grant, and compares the grant value to the issue
value to determine if the issue can be approved. In addition, PolicyCenter compares the grant value to the approval
value, to make sure that the approval falls within the limits of the grant.
See also
• The Application Guide for more information about creating authority profiles in the PolicyCenter application and
how to work with them.
User Legend
Array key
A is one-to-
A B one B
A is one-to-
A B many B
Derived array
A is a
A B
subtype of B
A B A implements B
UWAuthorityProfile UserAuthorityProfile
A has foreign key
A B
to B
Grants
UWAuthorityGrant
Value
IssueType
Entity Description
User The PolicyCenter user.
UWAuthorityProfile This entity contains a series of UWAuthorityGrant entities. This entity is similar to a Role entity
which serves as a collection of RolePrivilege entities. Although this entity has a Grants array to
UWAuthorityGrant, each profile can have at most one grant for a given issue type. Profile names
must be unique.
UWAuthorityGrant This entity represents a grant of authority to approve a particular type of issue. For issues that have
an associated value type, that authority can either be restricted to a particular value or can be unre‐
stricted.
UserAuthorityProfile The authority profile contains a foreign key to UWAuthorityProfile.
See also
• Application Guide
Legend
A B A has a B
A B A has 0 or more Bs
*
Policy A B
A relates to B
IssueHistories B relates to A
A B B is a subtype of A
* * *
UWIssueHistory PolicyPeriod UWReferralReason Rule
IssueKey AvailableToRun
Name
RuleCondition
*
UWIssue UWIssueType
UWRule
ApprovalInvalidFrom Name
IssueKey Code Jurisdictions
IssueType BlockingPoint LinesOfBusiness
ShortDescription CheckingSet Versions
LongDescription Comparator
Value LimitOnly
IssueType
The following table describes some of the entities associated with underwriting issues.
The actual link between User and UWAuthorityProfile is through the array key from User to
UserAuthorityProfile then through the foreign key from that entity to UWAuthorityProfile. For convenience,
there is a derived array from User to UWAuthorityProfile.
Value In Description
UI?
All PolicyCenter checks this rule at all blocking points. PolicyCenter removes an existing underwriting issue if
the evaluators do not trigger this type of issue. Issues created by this checking set may come from external
systems in a way that is not necessarily synchronized with the job flow. For example, a claim system sends
notice of excessive claims, or a billing system sends notice of a delinquent account. If you have an issue that
cannot change once the policy is quoted (without re‐editing the policy), do not use this checking set.
Manual • The underwriting issue is created when the user manually added an issue to the policy period. PolicyCenter
displays Manual issues on the Risk Analysis screen.
MVR For motor vehicle record underwriting issues. PolicyCenter checks for this issue at quote, quote release,
bind, and issuance.
PolicyRene- • PolicyCenter checks this rule prior to calling policy renewal web services. Policy renewal web services pro‐
walAPI vides methods for managing renewals in PolicyCenter. See the Integration Guide.
PreBind • For underwriting issues that can only be detected immediately prior to binding the job. PolicyCenter checks
this rule prior to binding.
PreIssuance • For underwriting issues that can be detected immediately prior to issuance. For submission policy transac‐
tions, PolicyCenter checks this rule prior to issuing the policy. If the policy transaction does not have an issu‐
ance step, PolicyCenter checks this rule prior to binding.
PreQuote • For underwriting issues that can be detected on the policy period even before quote, such as issues related
to data entered in draft mode. PolicyCenter checks this rule prior to generating a quote.
PreQuoteR- • For underwriting issues that need information from a valid quote or that can be detected after a valid
elease quote. For example, use this checking set for issues that depend on the premium. PolicyCenter checks this
rule after a valid quote, but before releasing the quote.
Question For underwriting issues is based on answers to a question set. PolicyCenter checks this rule before quote.
For information on how to associate underwriting rules with questions, see the Product Model Guide.
Value In Description
UI?
Referral For underwriting issues is related to underwriting referral reasons on the policy. PolicyCenter checks this
rule at all blocking points. PolicyCenter displays these issues in the UW Referral Reasons tab of the Risk Analysis
screen.
You can also add a referral reason to a policy by using the addReferralReason API.
Regulatory- For underwriting issues related to policy holds with the Regulatory Hold hold type. PolicyCenter checks this
Hold rule at all blocking points. The user is notified each time the job advances to the next step.
Reinsur- For underwriting issues related to reinsurance. For example, you can use this checking set to raise an issue if
ance a policy has insufficient reinsurance. PolicyCenter checks this rule at all blocking points except quote.
Renewal • For underwriting issues related to renewals. PolicyCenter checks this rule in renewal policy transactions at
quote and issuance.
Upgrade In certain cases, Guidewire uses this value when upgrading PolicyCenter. Do not use this value for any other
purpose.
UWHold Use for underwriting issues related to policy holds with the Underwriting Hold hold type. PolicyCenter checks
this rule at all blocking points. Therefore, the user is notified each time the policy transaction advances to
the next step.
The In UI column indicates the values that appear in the Rule screen of the base configuration. The
TriggeringPointKey.TF_UWRULECHECKINGSETFILTER filter narrows the choices in the user interface. Modify this
filter to add hidden values such a RegulatoryHold.
Except for All, a rule can be associated with only one checking set.
Checking set values correspond to the [Link] property. The UWIssueCheckingSet typelist
defines these values.
The blocking point at which each checking set is evaluated is specified in the [Link]
class. The code specifies which checking sets are evaluated at all blocking points. For each blocking point, the code
specifies which additional checking sets are evaluated. Each job type can also specify when checking sets are
evaluated.
For more information about checking sets and blocking points, see:
• “Checking sets and evaluators” on page 592
• “Blocking points” on page 593
• “Job interactions with underwriting issues” on page 594
Procedure
1. In Studio, open the [Link] typelist extension.
2. Add a new typecode entering a code, name, description, and optional priority.
3. Add the same typecode to the [Link] typelist extension.
Next, link the checking set typecode to the triggering point key.
4. In [Link], add a category. Set typelist to TriggeringPointKey and code to the
typecode value.
5. Open [Link].
6. Modify the static function that returns a JobProcessUWIssueEvaluator associated with the specific job type
or types that you wish to affect. An example in the default configuration is the forRenewal method. This
588 chapter 43: Configuring underwriting authority
Guidewire PolicyCenter 9.0.9 Configuration Guide
method overrides the built-in checking at the Quote and Issuance blocking points. (Both the
CheckedAtAllBlockingPoints as well as the blocking-point-specific lists are examined.)
7. If JobProcessUWIssueEvaluator has been modified in a way that affects the CheckedAt properties or logic,
then you may need to make modifications. Do a similar review of JobProcess and how it may call
JobProcessUWIssueEvaluator or otherwise affect the CheckedAt behavior.
In set State_Set Treat the authority grant or approval value as a set of jurisdictions, and the issue value must be with‐
in that set.
See also
• “Comparing issue values” on page 598
• Application Guide
If you prefer not to instantiate the wrapper in UWIssueValueComparatorWrapper, you can instantiate the
wrapper in the location of your choice. However, the wrapper must be instantiated in a class that loads before
PolicyCenter calls [Link]. For example, you can instantiate your wrappers
in a startable plugin which runs after loading the database, but before serving any web pages. For more
information, see the Integration Guide.
590 chapter 43: Configuring underwriting authority
Guidewire PolicyCenter 9.0.9 Configuration Guide
IMPORTANT Failure to guarantee that PolicyCenter instantiates the wrapper before loading
UWIssueValueComparatorWrapper may result in non-deterministic null pointer exceptions if
UWIssueValueComparatorWrapper returns null for an extended typekey.
Value In UI Description
Age • Formats the value as an age followed by the abbreviation yrs.
Currency Formats the value as the currency associated with the current locale.
Integer • Formats the value as an integer.
MonetaryAmount Formats the value as a MonetaryAmount, which contains a value and a currency.
Number • Formats the value as a BigDecimal.
The In UI column indicates values that appear in Rule screen of the base configuration. If you add hidden values
such as Currency, PolicyCenter supports those values without further configuration.
The value formatter type corresponds to the [Link] property.
The ValueFormatterType typelist defines these values. The code is the same as the value or name. The formatter
types allow the presentation of values in a localizable and consistent manner in the user interface. Only output uses
formatters. You can configure formatters to meet a wide range of output needs.
See also
• Application Guide
format the value. For example, the following is the code for the Integer value formatter in the
ValueFormatter class:
final public static var FOR_INTEGER : ValueFormatter = new ValueFormatter(TC_INTEGER) {
The code ValueFormatter = new ValueFormatter(TC_INTEGER) links the formatter to the Integer
typekey. The formatInteger method formats the value.
If you prefer not to instantiate a value formatter in the ValueFormatter class, you can instantiate it in the
location of your choice. However, the value formatter must be instantiated in a class that is guaranteed to load
before PolicyCenter calls the [Link] method. For example, you can instantiate your
wrappers in a startable plugin which runs after loading the database, but before serving any web pages. For
more information, see the Integration Guide.
IMPORTANT Failure to guarantee that the value formatter is instantiated before loading
ValueFormatter may result in non-deterministic null pointer exceptions if
[Link] returns null for an extended typekey.
See also
• “Job interactions with underwriting issues” on page 594
• Application Guide
Evaluator Classes
The evaluator classes contain methods that raise underwriting issues based upon the checking set. In the base
configuration, the default evaluator class, [Link], raises underwriting issues for all
lines of business. Each line of business implements its own evaluator class. For example, the evaluator for the
personal auto line of business is PA_UnderwriterEvaluator.gs. These evaluator classes contain methods that raise
underwriting issues for a checking set. For example, the onRenewal method in the default evaluator raises
underwriting issues for the Renewal checking set.
Note: The evaluator classes ignore the Enabled setting of the underwriting rule defined in the
Underwriting Rule user interface. Therefore, these classes raise underwriting issues regardless of the
Enabled setting.
If you make code changes to the methods that raise underwriting issues, the code must adhere to the following:
• The method must raise issues only for that checking set.
• Only one checking set can raise a given underwriting issue type.
In the default configuration, the evaluators always raise auto-approvable issues regardless of whether the current (or
other) user has sufficient authority to approve them. The evaluators always raise these issues because the issue needs
to exist for the least-privileged user of the system. This approach separates the underwriting guidelines for things
require approval from the approval levels assigned to users. For users with sufficient authority to approve the
592 chapter 43: Configuring underwriting authority
Guidewire PolicyCenter 9.0.9 Configuration Guide
resulting issue, PolicyCenter usually does not display the issue in the user interface. (The user can easily view the
issue by selecting different view options.)
You can configure the application to raise auto-approvable issues only when one or more users would be unable to
approve them. One reason to do this would be to improve performance by reducing the number of auto-approvable
issues being raised and silently approved.
See also
• “Creating externally managed underwriting rules in Gosu code” on page 603
Blocking points
Blocking points represent points in the job at which an issue can block progress of the job.
The blocking point values, listed in priority order from lowest to highest, are:
The job process classes evaluate whether to raise underwriting issues and check for blocking issues in the
evaluateAndCheckForBlockingUWIssues method. For example, the job process calls this method before binding a
policy change. Before binding, the PolicyChangeProcess evaluates the all, pre-bind, and pre-issuance checking
sets and then checks to see if any issues block issuance. PolicyCenter determines the current point at which an issue
blocks both by its type and any associated approval or rejection. Thus, the issue blocks operation if the priority of
the current point is greater than or equal to the priority of the operation. Therefore, a rejected issue blocks
everything, a non-blocking issue blocks nothing. An issue that blocks bind also blocks issuance but does not block
quoting.
See also
• Application Guide
See also
• Application Guide
• Integration Guide
Submission
The SubmissionProcess class handles checking sets and blocking points at the following times:
Renewal
Unlike other jobs, the RenewalProcess is often automated. As a result, renewal follows a different flow than the
other jobs. There are a few primary differences in the automated flow:
• Checks are done and then repeated at various timeout points in the process.
• Blocking issues generate exceptions. When this occurs, the renewal is escalated to the underwriter.
The renewal job handles checking sets and blocking points at the following times:
The code handles automated renewals differently from manual renewals. In automated renewals, all issues are run as
auto-approvable. Issues are given automated approvals if the special renewal user has sufficient authority to
progress the job. The runMethodAsRenewalUser method gets a user from the getAutomatedRenewalUser method
in the IPolicyRenewalPlugin. In the default configuration, the user is renewal_daemon. The automated renewal
runs the job as this user, using the authority profile of this user for approvals. This user approves the issues.
The runMethodAsRenewalUser method sets a flag on the RenewalProcess object indicating that the renewal is
automated.
Configuring underwriting authority 595
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• For more information about the IPolicyRenewalPlugin, see the Integration Guide.
Policy Change
The PolicyChangeProcess class handles checking sets and blocking points at the following times:
The code handles automated policy changes differently from manual policy changes. In automated policy changes,
all issues are run as auto-approvable. Issues are given automated approvals if the special policy change user has
sufficient authority to progress the job. In the default configuration, the user is policychange_daemon. The
automated policy changes runs the job as this user, using the authority profile of this user for approvals. This user
approves the issues.
Rewrite
The RewriteProcess and RewriteNewAccountProcess classes handle checking sets and blocking points at the
following times:
Issuance
The IssuanceProcess class handles checking sets and blocking points at the following times:
Reinstatement
When you reinstate a canceled policy, approvals carry over from the canceled policy even if they were approved
only until the next change. PolicyCenter does not consider reinstatement a change.
Cancellation
Cancellation jobs do no checks for underwriting issues.
Audit
Audit jobs do no checks for underwriting issues.
Issue keys
The underwriting rule and issue key uniquely identify each underwriting issue. For any given combination of
underwriting rule and issue key, there can be only one issue on a policy period at a given time. When creating an
issue, any pre-existing issue with the given type and key will be returned, and any deactivated issue that matches
will be activated and then returned.
On the underwriting issue, the [Link] property specifies the UWIssueType of the corresponding the
underwriting rule. Issue key is specified in the [Link] property. The PolicyEvalContext object
automatically enforces this.
Guidewire recommends that you do not change the algorithm for forming the key for an issue after moving that
algorithm to production. If you change the algorithm, current issues may be treated as orphaned. PolicyCenter will
create new copies of the issues, requiring new approvals or rejections.
See also
• Application Guide
or VIN of the vehicle as well as the jurisdiction. Changing the garage jurisdiction generates a new issue, rather than
modifies the existing issue. This behavior also applies to set comparator types that you develop.
If the issue relates to a specific location, or a specific building at a certain location, encode the FixedID or other
invariant identifier into the issue key. This encoding ensures that approving Building 2 in San Francisco to go
without an alarm does not approve the same for Building 2 in Los Angeles.
UWIssueHistoryStatus typelist
The Status field on the UWHistory entity is an UWIssueHistoryStatus typelist. The UWIssueHistoryStatus
typelist represents the type of action recorded by the history. Values are:
Value Description
Approved The issue was approved.
BIG_DECIMAL type, and STATE_SET type. The BIG_DECIMAL type converts and validates to and from a big decimal
number. The STATE_SET is a comma-separated list of codes for jurisdictions. The STATE_SET type can either be an
inclusive or exclusive set. If the list is preceded by not, a jurisdiction is part of the set if it is not in the list.
You can use STATE_SET as an example for writing comparators for other types of sets.
You can create comparators for other types of numeric values such as dates. Dates would need a greater than or
equal comparator that operates on dates instead of numbers. The UWIssueValueComparatorWrapper is bound to a
particular UWIssueValueType. The comparator wrapper implements a compare(String, String) method, which
indicates whether or not the given issue value is within the bounds of the given grant value. The wrapper also
implements a calculateDefaultApprovalValue method. The wrapper ties together an issue type to its underlying
value type (if any). Every key in the ValueComparator typelist must have an associated subclass of
UWIssueValueComparatorWrapper.
See also
• Application Guide
Configuring default values for assignment type and value offset amount
For an underwriting rule, Default Value Assignment Type is used if the value comparator is At least, At least (monetary), or
At most. In turn, if Default Value Assignment Type is Offset Amount, the Default Value Offset Amount and Default Value Offset
Currency are used. These fields correspond to properties on the UWIssueType object.
You can extended this default setting behavior for other numeric types. Positive offsets reflect increased
underwriting risk for the at least and at most comparators. For example, the At most comparator can be used for
determining the risk associated with the value of a car. If the authority grant provides default approval at $100,000
with 10% offset, the user can approve a car whose value is as high as $110,000. The At least comparator can be used
for determining the risk of a deductible. If the authority grant provides default approval for at least $1000, with 10%
offset, then the user can approve a deductible as low as $900.
See also
• The UWIssueType entity in “Underwriting rules object model” on page 585
Configuring approvals
PolicyCenter creates an approval when you approve or reject an issue. The UWIssueApproval object represents an
approval. To approve an issue, you must have an authority grant in an authority profile for that issue type. If the
issue has a value, the authority grant must be valid for that value.
Note: In the default configuration, the Approve button is only available if the user has the authority to
approve the issue to its default level. You can modify the configuration if you have a different use
case.
Approvals can be generated either by a user clicking to approve or reject an issue, or automatically by the
application. Automatic approval is most commonly seen for auto-approvable issues, but also occurs during
unattended processing, such as in routine renewals or automated policy changes. You can identify automatically-
generated approval through the IsManual property.
At any point in effective time, each UWIssue can have at most one approval. If you reapprove an issue, PolicyCenter
removes any existing approvals from that point forward in effective time. Approvals always extend from the current
slice the user is working with until the end of the period. An issue is eligible for approval if it currently blocks
progress and has not been rejected. If the issue has already been rejected, it must be reopened before being
approved. If the issue has been approved through issuance with a sufficient value, it must be reopened before being
approved for a different value or different approval settings.
Rejecting an Issue
Rejections generate an approval, but with the BlockingPoint set to Rejected. A rejection prevents the job from
crossing any blocking point. The user must have the uwreject permission. The user can reject an issue if:
• It is eligible for approval.
• It is a non-blocking issue and has not already been rejected.
Note: The user need not have sufficient authority to approve the issue to reject it.
Reopening an Issue
Reopening an issue removes an approval from the issue. The issue then blocks at the blocking point associated with
the issue type. To reopen an issue, you must have the uwreopen permission or be able to approve the issue.
Approval expiration
Approvals can be set to expire after a certain point in time by specifying one or three years in the
DefaultDurationType of the UWIssueType. When an approval of this type is created, the expiration date is
calculated and written to the ApprovalInvalidFrom field.
complete, whether issues have been approved or not, the underwriter clicks the Release Lock button. This action
releases the policy from underwriting, and PolicyCenter sends an activity to the user who initiated the referral. The
InitialReferrer role stores the name of this user. (The underwriter can modify the recipient and other fields in the
activity.)
To facilitate passing policies between agents and underwriters, a given policy period can be flagged as edit locked
and quote hidden. After an agent hands these policies to an underwriter, the agent usually cannot edit the policy or
view the quote. The permissions for editing or viewing the quote while under review are usually reserved for
underwriters.
When the EditLocked flag is true, only users with the editlockoverride permission can edit the policy. The
intention is that this permission is granted to underwriters but not to producers. The EditLocked flag is set to true
when the user clicks the Request Approval button to request approval from another user. If a policy has not been
formally submitted for underwriting review, the underwriter expects the quote to be hidden and the policy locked for
editing. Therefore, the EditLocked flag is also set to true whenever a user with the editlockoverride permission
quotes a policy. The EditLocked flag is set back to false when the underwriter sends the policy back to an agent by
clicking the Release button on the associated activity. (Click Release Lock to get to the activity.) The Release button is
available even if the policy has blocking issues. The EditLocked flag is also set to false when the policy is bound
and/or issued. The EditLocked flag is always set to false when a job starts.
Note: The PCF files check the EditLocked flag to determine whether or not the policy can be edited.
The EditLocked flag does not lock the PolicyPeriod object.
When the QuoteHidden flag is set to true, only users with the quotehideoverride permission can see the quote for
that PolicyPeriod. Similar to the editlockoverride permission, the intention is that the permission only be
granted to underwriters.
The QuoteHidden flag is set to true when requesting approval if the job does not already have a valid quote. The
flag is also set to true during quoting if the PreQuoteRelease blocking point has blocking issues or if the policy
being quoted is marked as EditLocked. Thus, if an underwriter with editlockoverride quotes a policy, the policy
will end up both edit locked and quote hidden. The QuoteHidden flag is set to false if a user, such as a producer,
who does not have the editlockoverride permission approves all issues blocking quote release.
In the default configuration, when EditLocked is set to false, QuoteHidden is also set to false. Invalidating the
quote also sets QuoteHidden to false. However, for policies that are under edit lock, QuoteHidden is immediately
set to true on quoting. Thus any policy in underwriting review will have its quote hidden if it has ever had an
invalid quote while under review.
Note: The PCF files for the job wizards determine whether to display the quote step by calling the
canViewQuote method in the JobProcess class. The canViewQuote method checks the value of the
QuoteHidden flag. The QuoteHidden flag does not lock the PolicyPeriod object.
The InitialReferrer user role facilitates passing policies between underwriting and producers. The initial referrer
is the user who referred the policy to underwriting. When requesting approval for issues on a policy period, if the
InitialReferrer user role is not set, the role is set to the current user. When the underwriter releases the policy by
clicking Release, the InitialReferrer role is unset. An activity is sent to the InitialReferrer on the period. You
can customize this by using activity assignment as described in the Rules Guide. You can also customize the
InitialReferrer user role.
The InitialReferrer user role is a transient role assigned to users in the context of their role in the job. Because it
is a transient role, it is assigned by the job code rather than being assigned to the user in the Administration tab.
Because it is a transient role, it is not in the UserRole typelist.
See also
• Application Guide
IMPORTANT To avoid unexpected results, specify the rule condition in either the user interface or in
Gosu code, but not in both. PolicyCenter first executes the Rule Condition defined in the user interface
and raises an underwriting issue when the condition evaluates to true. Then PolicyCenter executes the
rule condition in Gosu.
See also
• “Configuring underwriting rules” on page 585
• Application Guide
However, be careful about when the button is available. Rules cannot be toggled between ExternallyManaged
and not ExternallyManaged. Make this button available to set ExternallyManaged to true on a brand new rule
that has no information beyond the underwriting issue type fields defined.
If ExternallyManaged is true, then the business rules framework does not run the rule.
• Provide the rule condition logic in the Gosu code. See “Creating underwriting issues with policy evaluation
plugin” on page 604.
• Manage the rule execution in the Gosu code. See “Raise underwriting issues in Gosu code” on page 605.
Name Name
Code Code
Advanced tab
Auto-approvable AutoApprovable
In an externally managed rule, values in the other underwriting Rule fields have no effect.
Note: After upgrading from PolicyCenter 7.0 or 8.0, legacy underwriting rules have a corresponding
externally managed underwriting Rule. You can modify the UWIssueType properties listed above in
the user interface.
When you evaluate each checking set, your implementation must raise issues and refresh existing issues with current
values. Your implementation must also remove orphaned issues. Guidewire recommends that your implementation
use the PolicyEvalContext class to create and remove orphaned issues because these are complex and error-prone
tasks.
See also
• Integration Guide
Procedure
1. To raise underwriting issues for all lines of business, modify the default evaluator class,
[Link]. To raise underwriting issues for a particular line of
business, modify the evaluator class for that line of business, [Link].PA_UnderwriterEvaluator.gs, for
example.
2. Find the appropriate method for the checking set. For example, to raise underwriting issues for the Renewal
checking set, add code in the onRenewal method of the evaluator class. You can view and modify the
correspondence between checking set and method in the AbstractUnderwriterEvaluator class.
3. Use the [Link] method to add underwriting issues. To raise underwriting issues, you
need to write Gosu code which examines the PolicyPeriod and determines whether to raise one or more
issues of this type. For example, the code may raise multiple issues if the PolicyPeriod entity contains
multiple items of the same type, such as cars or buildings.
a. Add an addIssue method (using one the available method signatures). For example:
addIssue( issueType, key, shortDescriptionBlock, longDescriptionBlock, value)
issueType Code from the Underwriting Rule Details in the underwriting Rule definition. Becomes [Link].
key Issue Key in the Underwriting Issue Details on the underwriting Rule definition. Becomes
[Link].
c. Provide a block for the shortDescription and longDescription parameters (one each). This allows the
method to localize the description text for all available locales. (PolicyCenter performs the localization as
it evaluates the display key.) Use this format:
shortDescriptionBlock = \ -> shortDescriptionDisplayKey
longDescriptionBlock = \ -> longDescriptionDisplayKey
d. Enter the value, which is the value that PolicyCenter checks to determine whether to raise the issue.
4. Use the [Link] method to remove orphaned underwriting issues. The
removeOrphanedIssues method is called in the PolicyEvalContext plugin.
This topic discusses how to implement the PolicyCenter business rule plugin.
Object Function
BlackListedMethods Provides the list of blacklisted (not permitted) methods for types other than symbols that might
be present in the context definition. In the base configuration, PolicyCenter whitelists (permits) all
methods on types other than symbols present in the context definition.
BlacklistedProperties Provides a list of blacklisted (not permitted) properties on rule context symbols. In the base con‐
figuration, PolicyCenter whitelists (permits) all properties on context symbols. This action makes
the properties available in the Rule Condition builder in the business rule editor. Adding a property
to the list hides the property in autocomplete in the Rule Condition builder.
Note: Array properties such as [Link], do not allow de‐referencing. For example,
PolicyCenter does not allow [Link][0]. However, PolicyCenter does permit array
properties such as [Link].
Object Function
RuleActions Provides the class that defines the valid rule actions. In the base configuration, this is Gosu class
AddUWIssueRuleAction. It is possible to modify or replace this Gosu class.
RulePermissionProvider Provides the set of user permissions used with business rules. In the base configuration,
PolicyCenter uses class UWRulePermissionProvider to define the permissions used by business
rules users. It is possible to implement your own permission provider class.
TriggeringPointMap Maps between triggering points and the associated rule context definitions for each triggering
point. It is not possible to add new triggering points.
WhiteListedMethods Provides a list of whitelisted (permitted) methods on the rule context symbols. In the base config‐
uration, PolicyCenter blacklists (does not permit) all methods on context symbols to ensure that
invoking a rule does not change the state of an entity. Adding a method to the list permits the
symbol method to show on autocomplete in the Rule Condition builder.
Whenever PolicyCenter executes a rule, it evaluates the rule condition against a PolicyPeriod object. If the
condition meets the specified criteria, PolicyCenter calls the execute method on AddUWIssueRuleAction to create
an underwriting issue. This is the main functionality of this class. The CommandParameterDefinitions property
contains parameters needed during execution.
You can add, delete, or modify the default underwriting rule triggering points. See “Adding a new checking set” on
page 587.
It is possible for you to modify this class or replace it entirely with a class of your own.
To access a custom function in the expression builder, use the following syntax, with xxxx being the name of the
custom method.
[Link]()
Gosu class PolicyContextDefinitionLibrary, in the [Link] package, defines
the available custom functions. In the base configuration, this class contains such functions as
hasGoodDriverDiscount and monetaryAmount.
To add new functions to this class, use the existing functions as examples of how to define a new function. In this
way, you can make a utility function accessible as a context symbol. You can also exclude a utility function from a
rule context.
Rule Description
Context PolicyCenter uses the rule context definition to define the symbol table that provides the list of symbols availa‐
definition ble in the business rules editor while creating or editing a rule during rule development.
Context PolicyCenter uses the rule context as a runtime construct to populate the context definition symbols with actual
data from the rule that triggered the current action. It then uses these symbol data during execution of the
triggered rule.
To add a new rule context definition, follow the steps outlined in “Add new underwriter rule context definition” on
page 610.
See also
• Application Guide
– If this is to be an iterable rule context definition, call exactly one addIterativeSymbol method.
c. Define the applicability of the new rule context definition to the PolicyCenter policy lines in function
appliesToPolicyLines.
3. In the Studio Project window, navigate to configurtion→config→Extensions→Typelist.
a. Create a RuleContextDefinitionKey typelist extension, if one does not exist.
b. Add a typecode to this typelist for the rule context definition that you created in the previous step.
4. In the Studio Project window, navigate to configuration→gsrc→gw→plugin→[Link].
a. Open class BizRulesPlugins.
This class is the IBizRulesPlugin default implementation class. If you have changed the default
implementation class for this plugin, use that implementation class instead.
b. Add an entry to the class constructor for the new rule context definition. Use an existing entry as an
example.
5. In the Studio Project window, navigate to configuration→gsrc→gw→bizrules→provisioning→triggeringpoints.
a. Open class UnderwriterEvaluatorTriggeringPoint.
b. In function supportedContexts, add an entry for the typecode that you added to the
RuleContextDefinitionKey typelist. Use an existing entry as an example.
6. Restart the application server for these changes to become effective.
7. Open Guidewire PolicyCenter and navigate to Administration→Business Settings→Business Rules→Underwriting
Rules.
a. Create a new Underwriter rule.
b. Verify that the new context symbol shows in the Context drop-down of the rule editor.
c. Experiment with the different policy lines that show in the Applies To section of the rule editor.
As part of the applicability criteria test, PolicyCenter also tests whether the rule execution date (today’s date) is
between the defined start and end dates for the rule.
Single‐value The business rule data model stores single applicability values as a property on the UWRule entity type. To use
rule criteria a single‐value criterion, add properties for single values to the UWRule entity type, then update the PCF file
that displays the rule.
Multi‐value The business rules data model stores multiple applicability values in their own entity type with a foreign key
rule criteria to the UWRule entity type. These linked entities need to implement the RuleVersionDependent interface.
Implementing this interface ensures that PolicyCenter imports and exports these entity properties as part of
the rule.
Guidewire provides Gosu class UWRuleApplicabilityCriteriaPredicate to filter the execution of the business
rules based on applicability criteria. This class contains a test method that takes in a RuleVersion object and
returns true or false, depending on whether the associated rule matches the defined applicability criteria. Each
class that implements the ITriggeringPoint interface uses the UWRuleApplicabilityCriteriaPredicate class to
determine how to filter the rules for execution whenever application logic triggers the business rules framework.
See also
• Application Guide
Adding a new applicability criterion to the set of availability criteria available in the PolicyCenter base configuration
is a multistep process.
Procedure
The Account Holder Info screen is an example of a summary screen which consolidates information about an account
holder from PolicyCenter and other applications. The Account Holder Info screen brings together account holder
profile information from PolicyCenter, BillingCenter, ClaimCenter, and ContactManager. You can create similar
screens which display summary and status information for an individual contact, based on selected account contact
roles held by that contact. This summary screen can gather this information from Guidewire PolicyCenter,
Guidewire BillingCenter, Guidewire ClaimCenter, and Guidewire ContactManager. You can configure this screen to
obtain information from other third-party applications.
In the default configuration, some fields in the Account Holder Info screen display meaningful data only if
PolicyCenter is integrated with BillingCenter, ClaimCenter, and ContactManager. Through configuration, you can
retrieve equivalent information from third-party billing, claims, and contact systems of record.
The Account Holder Info screen includes information such as:
• Basic information, including the account holder’s name, number of accounts on which this contact is the account
holder, and in-force premium value across all policies on those accounts.
• Billing summary, including total billed and unbilled, total past due, and total outstanding.
• Value metrics, including first policy effective year, number of active policies, number and type of cancellations,
lifetime premium value, open claim count, and net total incurred on those claims.
• Various alerts, such as past-due payments and open claims.
• Summary of policy transactions in progress, with links to policy transaction details.
• Summary of open claims, with links to the affected policies.
This topic provides configuration information about the Account Holder Info screen and guidance for creating similar
screens.
See also
• Application Guide
The Account Holder Info screen retrieves information from other InsuranceSuite applications of the same release
version. With additional configuration, the screen can work with other versions of these products, as well as with
third-party billing, claims, and contact management systems.
Procedure
1. Create an appropriate new contact role if needed; for example, SecondaryAcctHolder_Ext, then restart the
server.
2. In Studio, open the ContactFile_AccountHolder PCF file.
3. Select the Page element to display its properties in the workspace area at the bottom of the screen.
4. On the Properties tab, change the canVisit property to include the name of the new contact role. The default
canVisit property displays the screen if the user has viewaccountholderinfo permissions and the selected
contact is an account holder of more than zero accounts.
[Link] and
[Link](contact)
To keep the default behavior and display the Account Holder Info screen for the new contact role, you can add the
new contact to the array of roles in [Link]. The
canViewAccountHolderPage method uses this variable:
final static var _roles : Set<Type<AccountContactRole>> as RolesAllowedToViewTheAccountHoldersPage =
{
614 chapter 45: Configuring the Account Holder Info screen
Guidewire PolicyCenter 9.0.9 Configuration Guide
AccountHolder,
SecondaryAcctHolder_Ext
}
The Account Holder Info screen uses the Account Holder Info (viewaccountholderinfo) permission to control access.
You must add this permission to the roles for users who will view the Account Holder Info screen. Users who have
permission to navigate to and view the Account Holder Info screen need additional permissions to see some of the
summary information:
• View Claim System (viewclaimsystem) permission is required to view summary claim information.
• View Billing System (viewbillingsystem) permission is required to view billing summary information.
The Account Holder Info screen also respects producer code security. If you do not have permission to view a particular
account or policy, the Account Holder Info screen does not display that information, even though the screen itself is
available. Furthermore, any totals that the Account Holder Info screen displays apply only to the accounts and policies
for which you have permission to view.
Procedure
1. In Studio, navigate to the [Link] Gosu class.
2. Modify the constant CANCELLATION_MONTHS_SINCE from its default value of 12 to a different value. The
cancellationsResultFor method uses this constant.
Procedure
1. In Studio, navigate to the [Link] Gosu class.
2. Modify the code in the calculateLifetimePremium method.
Gosu class that provides data to the Account Holder Info screen
Variables and methods defined in the [Link] Gosu class provide data for the
Account Holder Info screen. The helper class [Link] provides access to
various policy metrics for the selected account holder contact.
Configuring the Account Holder Info screen 617
Guidewire PolicyCenter 9.0.9 Configuration Guide
Note: If you extend the functionality of the Account Holder Info screen, you can modify the code directly
in its class, or make the needed changes in a subclass. Guidewire recommends that you extend the
implementation in a subclass to insulate your code modifications from future product updates.
In the default configuration, policy data import/export is provided in the commercial property line of business for
buildings and locations. Policy data is imported and exported to a spreadsheet in .xlsx format. You can add policy
data import/export of buildings and locations to other lines of business. You can also implement policy data import/
export for other entity types, such as vehicles in a commercial auto policy.
See also
• Application Guide
Procedure
1. Create a new XML file that describes the fields to export from and import into the entity. Name the file
[Link] and save it in configuration→ config→resources→exportimport in Studio.
Use the [Link] and [Link] files as a model for creating additional EntityInfo
XML files.
2. Add the following root element to the file:
<EntityInfo
EntityTypeName="[Link]"
ParentEntityTypeName="[Link]"
ParentEntityColumnPath="[Link]">
ParentEntityTypeName Optional If the parent entity is also to be imported and exported, the name of the parent
entity preceded by:
entity.
ParentEntityColumnPath Optional The path that identifies the unique ID column of the parent entity, if a parent
entity is specified.
3. Within the EntityInfo element, add a collection of ColumnInfo child elements. Each ColumnInfo element
specifies one column to be exported to and imported from the spreadsheet. The order of the ColumnInfo
elements determines the order of the columns in the exported spreadsheet.
<ColumnInfo
ColumnType="pathTypeName"
ExcludeFromTemplate="true|false"
FlagsAction="true|false"
FlagsEntityId="true|false"
Header="displayKeyPath"
id="columnName"
Locked="true|false"
Path="beanPathToColumnValue"
RequiredForImport="true|false">
4. If the entity you are defining is a child of another entity that is to be exported and imported, add a Parent
element within the EntityInfo element. Within the Parent element, add a map of the parent’s ColumnInfo
elements.
For example:
<EntityInfo ...>
.
.
.
<Parent>
<ColumnInfo
Path="[Link]"
Header="[Link]"
Locked="true"
ColumnType="[Link]" />
<ColumnInfo
Path="[Link]"
Header="[Link]"
ColumnType="[Link]" />
...
</Parent>
.
.
.
</EntityInfo>
single attribute, purpose, that is a key to the id of a ColumnInfo on which the containing ColumnInfo is
dependent. For example:
<!-- Column that can have dependent columns because it has an id attribute -->
<ColumnInfo
Path="[Link]"
Header="[Link]"
ColumnType="[Link]"
id="stateColumn"
RequiredForImport="true" />
.
.
.
<!-- Column that depends on another column -->
<ColumnInfo
Path="ClassCode"
Header="[Link]"
ColumnType="[Link]"
RequiredForImport="true" >
<Dependent purpose="State">stateColumn</Dependent>
</ColumnInfo>
See also
• For more information about dependent elements, “Create an XML file describing columns to import and export”
on page 620
Procedure
1. To open this class, use Studio to navigate to configuration→gsrc and open the class
[Link].
2. Map each new column data resolver class to an appropriate type in the TYPE_RESOLVER_MAP.
Procedure
1. In Studio, navigate to configuration→gsrc and define a new class in [Link]. Name
the class to reflect the entity you are configuring. For example, if you are configuring the PersonalVehicle
entity for import and export, name the new class PersonalVehicleImportStrategy.
2. Implement the deleteEntity and createEntity methods as needed, using return values that are appropriate
to the entity.
3. Specify a true or false return value for the AllowCreate and AllowDelete properties. If the entity you are
configuring has complex deletion requirements, consider prohibiting delete during import.
Examine the [Link] and [Link] as models for creating
new import strategies.
• CPLocationImportStrategy illustrates how to allow creation of new entities and prevent deletion. Deleting
locations is prohibited. PolicyCenter does not allow deleting a location that is in use, and there is no easy
way to determine if a location is in use during an import operation.
• [Link] illustrates a somewhat more complex scenario of creating buildings within
a location as well as the scenario of deleting a building.
Procedure
1. In Studio, navigate to configuration→gsrc and edit the class
[Link].
2. In the TYPE_STRATEGY_MAP variable declaration, map the entity you are configuring to your new import
strategy. For example:
static final var TYPE_STRATEGY_MAP : Map<Type, EntityImportStrategy> = {
CPBuilding -> new CPBuildingImportStrategy(),
Earned premium is the portion of premium that applies to the expired part of the policy period. In other words,
earned premium is the amount of premium that has been earned as of the current date. This topic describes how to
configure the earned premium which appears on the Earned Premium field on the policy Summary screen.
For reporting policies, the calculation includes the earned-but-unreported (EBUR) amount prior to final audit. For
package policies, PolicyCenter displays earned premium for each line of business.
See also
• Application Guide
• Integration Guide
2) And the as-of date is after the date of the last premium reporting period.
For these transactions, the earned amount is the prorated portion between the last premium report date
and the as-of date.
See also
• Application Guide
This method calls the earnedAsOf method with the asof parameter set to the current date. The parameters are
described in that method.
The time and database workload required for running the Team Screens batch process may be significant and may
adversely impact system performance if run too frequently.
See also
• System Administration Guide
Configuring the Team tab 627
Guidewire PolicyCenter 9.0.9 Configuration Guide
In the default configuration, the reporting categories for activities and policy transactions are for one week.
You can set the window for reporting categories to the following sizes:
Window Description
size
This week The window starts at the beginning of the current business week until the most current run of the Team Screens
batch process.
The start of current business week is the end of the last business week. In the base configuration, the end of a
business week is configured as Friday at 5:00 p.m. Therefore, the start of the current business week is 5:00 pm of
the Friday prior to the current day. If that day is a holiday, then PolicyCenter goes back to the last know business
day.
This The start of the current month until the most current run of the Team Screens batch process.
month The start of the current month is the first day of the current month at 12:00 a.m.
N days The window is the last N days of activity, including the current day.
The start of a day is 24 hours prior to the most current run of the Team Screens batch process. Therefore, for a one
day window, if the batch process runs at July 11 10:54 a.m., the start of the window is July 10 10:54 a.m.
You can configure the statistics window for all reporting categories except activities.
In Studio, you configure the window size in [Link] by modifying the following parameters:
Note: You cannot change how PolicyCenter calculates the status of reporting categories.
The Calculation column in the following table describes how PolicyCenter calculates the status for each activity in
the Activities reporting category.
The Example column describes which activities will be included. The example assumes that the statistics were last
calculated at July 11 10:54 a.m. and that the activities window is one day.
The default window size for activities and policy transactions is this week.
The Calculation column in the following table describes how PolicyCenter calculates the status for each submission
in the Submission by User reporting category.
The Example column describes which submissions will be included. The example assumes that the statistics were
last calculated at July 11 10:54 a.m. and that the submissions window is this week. The July 11 date is a Friday. In the
base configuration, the end of the business week is Friday at 5:00 p.m. Therefore, the business week started on
Friday, July 4 at 5:00 p.m.
The Calculation column in the following table describes how PolicyCenter calculates the status for each renewal in
the Renewals by User reporting category.
The Example column describes which renewals will be included. The example assumes that the statistics were last
calculated at July 11 10:54 a.m. and that the renewal window is this month. The month started on July 1 at 12:00 a.m.
Status Calculation
Open The job close date field is not set.
New The job close date is not set, and the job create time is on or after the window start date.
Approved Any policy period associated with the job has a non‐null model number. The job close date is on or after the window
start date.
See also
• “TeamScreenTabVisibilityRowCountCutoff ” on page 59
Guidewire Rating Management has been designed to be extended through configuration if required. However, major
configuration changes may not be required.
Legend
RateBook
A B A has a B
A B A has 0 or more Bs
*
*
RateTable RateTableDefinition RateTableMatchOpDefinition
EntityName
CoverageFactorRow
The RateTable entity represents a rate table. The rate table has a pointer to a RateTableDefinition.
Configuring Rating Management 631
Guidewire PolicyCenter 9.0.9 Configuration Guide
The RateTableDefinition entity represents a rate table definition. The EntityName property contains the name of
the physical table or entity of a rate factor row. The rate factor row entity describes the data types that you can assign
to parameters and factors.
In the default configuration, the rate factor row entities are DefaultRateFactorRow and CoverageRateFactor.
See also
• Application Guide
RateBook CalcRoutineDefinition
BookVersion UpdateTime
UpdateTime * * UpdateUser
UpdateUser Version
*
RateTable * * Legend
RateBookCalcRoutine
UpdateTime A B A has 0 or more Bs
UpdateUser *
The RateBook object represents a rate book and contains rate tables and rating routines.
The RateTable object represents a rate table.
The CalcRoutineDefinition object represents a rate routine definition. In PolicyCenter, you define rate routines
on the Administration→Rate Routines screen.
The RateBookCalcRoutine object represents a rate routine included in a rate book. In PolicyCenter, rate routines
included in a rate book appear on the Included Rate Routines tab on the Rate Book Details screen.
Rate Routine Objects
CalcRoutineDefinition
Legend
PolicyLinePatternCode
A B A has a B
UpdateTime
UpdateUser A B A has 0 or more Bs
Version *
* *
RateBookCalcRoutine CalcStepDefinition CalcRoutineParameterSet
Notes PolicyLinePatternCode
* *
CalcStepDefinitionOperand CalcRoutineParameter
*
CalcStepDefinitionArgument
InScopeParam
RateBookPreloadEnabled parameter
The RateBookPreloadEnabled configuration parameter controls whether Rating Management components are
preloaded on system startup. This parameter is set to true in the base configuration.
Note: Unrelated to whether this parameter is true or false, PolicyCenter always preloads some parts
of rate books that load quickly. After this, PolicyCenter writes this message to the log file:
INFO [Link] Preloading all ratebooks
OverriddenTableArgsLabelSimple parameter
You can speed up rate table preloading by setting the configuration parameter OverriddenTableArgsLabelSimple
to true. (The RateBookPreloadEnabled parameter must also be true.)
When true, when viewing a rate routine on the Rate Routine screen, parameters in rate routine steps may appear as
ellipses (...).
To change which rate books are preloaded, you can modify the RateBooksToPreload getter in the
RateBookPreloadPlugin plugin implementation.
To preload Rating Management components, the [Link] method calls the primeForAllRateBooks
method in RTMLoadActions class. This class is not modifiable. You can create your own class and call it instead of
RTMLoadActions from [Link]. Use RTMLoadActions as a model. For example, consider checking
the RateBookPreloadEnabled parameter as the [Link] method does:
if ([Link]()) {
... // preload Rating Management components
}
In the [Link] method, you can also preload other Rating Management components, such as classes
outside of rate books. This can speed up the first visit to Rating Management screens.
The code that loads parameter sets is in the prime method in the RatebookPrimer class. Independent of the setting
of RateBookPreloadEnabled parameter, this code always preloads parameters sets when the server is in
development mode.
Requirements
Precompiling rate routines JAR requires that you adhere to the following:
• You must adhere to the rate book lifecycle as described in Application Guide. In the lifecycle, the rate book
moves to Approved status in the stage/test environment. The rate book is imported to the production environment
and then updated to Active status.
• All rate routines used in rating must be in one of the rate books returned by RateRoutinesToExportToJAR getter
of the rate book preload plugin. PolicyCenter throws an exception when it attempts to use a rate routine that is
not in the list of rate books.
For example, rate book R contains rate routine X, and rate book R is not in the list of rate books returned by the
plugin. If rating attempts to use rate routine X, PolicyCenter throws an exception, even if R is in Active status.
PolicyCenter relies on the list of rate book returned by the RateRoutinesToExportToJAR getter.
PolicyCenter keeps the JAR file up-to-date by responding to changes in rate books. In the base configuration, the
JAR file is updated when a rate book is imported from XML or when a rate book is promoted to Active status. (The
JAR file is updated only if the rate book's rate routines are not in the JAR file.) This enables you to make changes to
rate books without having to regenerate the JAR file and rebuild and redeploy PolicyCenter.
Note: If the production environment contains Active rate books that are not in the stage/test
environment, then those rate routines are initially missing from the JAR file created in the stage/test
environment. When the production system starts up, PolicyCenter updates the JAR file with the
missing rate routines. However, this increases startup time.
Procedure
Enable
1. In Studio, open [Link].
2. Set the value of the EnableRateRoutinesJar parameter to true.
Setting this parameter to true:
• Causes the Rate Books screen to display the Generate JAR File and Download JAR File buttons and other user
interface elements for creating the rate routines JAR file. If you wish to hide these user interface elements in
the production system, you can modify the [Link] file.
• Enables preloading rate routines from the rate routines JAR file.
3. In the RateRoutinesJarFile parameter, specify the path where the rate routines JAR file will be located in
PolicyCenter. The recommended name and location is modules/configuration/plugins/Gosu/lib/
[Link]. SeeIntegration Guide for allowed locations.
4. If you are running on Windows Server:
a. Specify the rate routines update JAR file in the RateRoutinesUpdateJarFile parameter.
On Windows Server, PolicyCenter updates this JAR file when changes occur in rate books. If you do not
specify this parameter, the JAR file is not updated when changes occur. If you run PolicyCenter from
Studio, you get and exception and a message that the file is locked by another process.
b. Modify the startup process as described in “RateRoutinesUpdateJarFile” on page 84.
Configure
5. Review the base implementation of the RateBookPreloadPlugin plugin implementation and decide whether
you will use the base implementation or create your own. You can use the base implementation as a model.
6. If you only modified configuration parameters, restart PolicyCenter to pick up these changes. If you changed
the RateBookPreloadPlugin plugin, then recompile and restart PolicyCenter.
Configuring Rating Management 635
Guidewire PolicyCenter 9.0.9 Configuration Guide
Next steps
“Generate and download the rate routines JAR file” on page 636
Procedure
1. On the stage/test system, go to the Rate Books screen and click Generate JAR File to create the rate routines JAR
file. This action is asynchronous, so you can navigate to other screens.
If you make changes to rate books, redo this step.
2. When you have finalized the JAR file, click Download JAR file on the Rate Books page. This button becomes
active after you generate the JAR file. If Download JAR file is not active, navigate away from and back to this
page.
The downloaded JAR file is saved to a location specified by your browser and operating system. For example,
on Windows, the file may be saved to the Downloads folder.
Next steps
“Deploy the rate routines JAR to the production system” on page 636
Procedure
1. In the PolicyCenter application directory for the production system, copy the downloaded [Link]
to the directory you specified in the RateRoutinesJarFile configuration parameter.
2. Build PolicyCenter.
In the default implementation, the RateBooksToPreload getter returns the list of rate books that are in Active status.
The rate books must meet the following criteria:
• For all Active rate books with the same code, the rate book with the most recent effective date.
• All Active rate books with effective date in the future. The assumption is that the rate book will soon be in use.
The precompiling rate routines JAR file feature calls the RateBooksToExportToJar getter to get the list of rate
books whose rate routines will be included in the JAR file. PolicyCenter calls this getter when you generate the rate
routines JAR file by clicking Generate JAR file on the Rate Books screen. PolicyCenter then compiles the rate routines
in the list of rate books into the JAR file.
Note:
All rate routines used in rating must be in one of the rate books returned by
RateRoutinesToExportToJAR getter of the rate book preload plugin. PolicyCenter throws an
exception when it attempts to use a rate routine that is not in the list of rate books.
For example, rate book R contains rate routine X, and rate book R is not in the list of rate books
returned by the plugin. If rating attempts to use rate routine X, PolicyCenter throws an exception, even
if R is in Active status. PolicyCenter relies on the list of rate book returned by the
RateRoutinesToExportToJAR getter.
In the default implementation, the RateBooksToExportToJar getter returns the list of rate books that are in Active
status. Returning rate books whose status is not Active from this method may have undesirable effects.
This feature calls the update method when PolicyCenter needs to update the rate routines JAR file. The update
method uses the RateBooksToExportToJar getter.
In the default implementation, the JAR file is updated when:
• A rate book is promoted to Active status
• A rate book is imported
The input parameter to the update method is an event as defined by RateBookEvent enumerated list:
Activate
Rate book changed to Active status
Create
Rate book created with Draft status
Approve
Rate book changed to Approved status
Export
Rate book exported to XML
Import
Rate book imported from XML
Stage
Rate book changed to Stage status
You can use the default implementation, RateBookPreloadPluginImpl, as an example for creating your own plugin
implementation.
In your implementation, you may decide to preload one set of rate books, and compile a different set of rate books
into the JAR file.
Your implementation can update the JAR file for other rate book events.
Preloading Rating Management components and precompiling rate routines JAR file
To use both the preloading Rating Management components feature and the precompiling rate routines JAR feature,
set the configuration parameters as follows:
• RateBookPreloadEnabled to true
• EnableRateRoutinesJar to true
When you start the server with both features enabled:
• If the RateRoutinesJarFile parameter points to a valid JAR file:
◦ Then all rate routines in the JAR file are preloaded.
◦ If the RateBooksToExportToJar method in the rate book preload plugin returns rate books whose rate routines
are not in the JAR file, the JAR file is recompiled. Then the JAR file is preloaded. Because this slows startup
time, you are encouraged to avoid this situation.
• If the RateRoutinesJarFile parameter points to an invalid JAR file:
◦ PolicyCenter throws an exception and does not start.
See also
• Application Guide
See also
• Application Guide
Configuring Rating Management 639
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• Integration Guide
See also
• Application Guide
Category Description
[Link] Logging for messages related to Guidewire Rating Management.
[Link] Logging for messages related to rate table management.
[Link] Logging for messages related to creating and executing rate routines.
See also
POI library
The POI library supports reading and writing rate tables to and from Microsoft Excel workbooks. POI is an Apache
licensed library. This library provides Java APIs for manipulating various file formats based upon the Office Open
XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2).
See also
• Application Guide
See also
• The Application Guide for user-level information
See also
• Application Guide
Procedure
1. In Product Designer, navigate to the rtm_matchop_defs.xml system table.
Configuring Rating Management 645
Guidewire PolicyCenter 9.0.9 Configuration Guide
2. In RateTableMatchOpDefinition, add an entry to the system table. You must specify the following:
• OpCode – A code that uniquely identifies this match operation.
• OpName – Appears in PolicyCenter as a match operation choice when the user clicks Add in the Parameters
tab of the Rate Table Definition Editor screen.
• NumberOfParameters – The number of parameters.
• ImplClass – The fully qualified name of the new match operation factory class. For example, you can define
the class as [Link].
3. Create the following new classes:
• A factory class that extends abstract [Link]. See “Extending
the match operation factory class” on page 646.
• A class that extends abstract [Link]. See “Match operation
implementation” on page 646.
4. Optionally, create a custom validator for the match operation.
• A class that extends [Link]. See “Match operation validator” on
page 647.
This method must create and return a new instance of the match operation implementation class as described in
“Match operation implementation” on page 646.
This method must create and return a new instance of the match operation validator class as described in “Match
operation validator” on page 647.
This in-memory filter evaluates all rows still under consideration, and returns only those rows which satisfy the
conditions for the match operation. This filter is only called when the match operation is active. A corresponding
relax method is not needed, because the list of results to be filtered are pre-partitioned according to whether the row
would match a filter or a relax. The input results must be fully ordered and stay that way upon output. For more
information about relaxing, see also the Application Guide.
A stateless match operation doing in-memory filtering expects its input to be in ascending order with respect to the
field or fields being matched by the match operation. For example, a range match operation matches the fields int1
(minimum) and int2 (maximum. This operation assumes that the rows are ordered according to increasing int1
value, with a tie being broken by comparing the int2 values.
The output of the stateless match operation must be a list that is properly formatted for the next match operation.
Therefore, the output must be in ascending order according to the field or fields matched by that next match
operation.
To meet this requirement, PolicyCenter sorts the rate table when it is first loaded, using order by/then by sorting.
The rate table is sorted by the first match operation’s columns. Then each region with equal values for the first
match operation is sorted for the second match operation’s columns, and so on. A match operation controls how its
rows are ordered by overriding the method:
compareRowValues(a : Comparable, b : Comparable) : int
If a match operation does not naturally produce correctly-ordered output from this form of input, it needs to reorder
the rows as part of its filtering process. For most match operations, an easy way to do this is to override the property
needsSubrangeMerge so that it returns true. The StatelessLessThanOrEqualMatch provides an example of this.
Adds a constraint to the database query and returns the adjusted query.
Entity instances that are passed into the above functions represent rate factor entities such as RateFactorRow,
CoverageRateFactor, or any other custom entity.
Used to compute a score for the input argument, Comparable, in relation to rate table row value,
OrderedPersistenceAdapter. This score is used during rate table matching to determine the best match.
Validate Method
This method signature is:
function validate(List<Comparable>) : boolean
Returns true if all values are valid from the point of view of this match operation. For example, an exact match
accepts any value, so it always returns true. See Optionally, create a custom validator for the match operation. in
“Configure a new match operation” on page 645.
A range match operation accepts a list of two values where either value can be null or the first value is less then the
second value. Otherwise, return false.
Validates two sets of values against each other and returns true if both sets are valid with regards to each other.
This method is mainly used to identify overlaps and other value conflicts. For example, for the range match
operation validator, this function checks if two numeric (or date) ranges have no overlap.
See also
• Application Guide
See also
• The Integration Guide for instructions on how to enable the PCRatingPlugin plugin and extend it to other lines
of business.
• Application Guide
IMPORTANT When adding code that executes a rate routine, be aware that simply executing a rate
routine consumes both time and resources, whether or not the rate routine performs any actions.
Therefore, only execute the rate routine when necessary. For example if a rate routine applies to a
specific coverage on a policy, then make sure your code executes the rate routine only when the policy
contains that coverage. The executeCalcRoutine method executes the rate routine.
Procedure
1. In the rating engine, add code that calls the [Link] method. For example, to execute
a new rate routine in personal auto, modify the PARatingEngine class in the [Link] package.
The method signature for executeCalcRoutine method is:
function executeCalcRoutine(code : String, costData : CostData<Cost, PolicyLine>,
worksheetContainer : WorksheetEntryContainer,
paramSet : Map<CalcRoutineParamName,Object>)
See also
• Application Guide
Configuring Rating Management 649
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Logging rate routine functions in a rating worksheet” on page 662
See also
• Application Guide
Procedure
1. In Studio, open the [Link] typelist. The Typelist tab lists the typecodes in the typelist.
2. Click the Outgoing Categories tab.
3. Expand the optrounding category.
This category contains the optional rounding operators. The floor operator is in this category.
4. Return to the Typelist tab.
5. In the Element hierarchy, expand the floor typecode to reveal the category contained within.
For the floor operator, the category value is optrounding.
6. In the Element hierarchy, click category in the floor typecode.
7. Change Value of the code to rounding.
8. Click the Categories tab to verify that floor now appears in the rounding category.
Procedure
1. In Studio, localize the display key as described in .
For each type, the following table contains the name of the display key, the default prefix, alternate prefix, and
the unicode value of the alternate prefix. The alternate prefix is provided as a suggestion only. You can define
the prefix to a string of your choice. You can enter the unicode character directly into the Studio editor.
If you add a variable prefix, the prefix appears for user defined variables and multiple factor variables.
2. In PolicyCenter, navigate to a rate routine to view the new prefix.
See also
Procedure
1. In Studio, add a column with the name of the variant identifier to [Link] and include
the name in the index. For detailed instructions, see “Extending a base configuration entity” on page 242.
For example, add a column for the variant identifier named NewVariantIdentifier defined as follows:
Name Value
name NewVariantIdentifier
type shorttext
nullok true
localization a_table_name
Name Value
name NewVariantIdentifier
keyposition 4
3. Change the Retired index keyposition from 4 to 5. The NewVariantIdentifier index is inserted before
Retired.
Next steps
Now you can go to the next step, “Add the rate routine variant identifier to PCF files” on page 653.
Add the rate routine variant identifier to the rate routine plugin
Before you begin
Before you begin, you must complete “Add the variant identifier to the data model” on page 652.
Procedure
In the implementation of the rate routine plugin, add the name of the variant identifier to the fields variable of the
getter for the BranchingFields property.
For example, add NewVariantIdentifier to the fields variable as follows:
override property get BranchingFields() : IEntityPropertyInfo[] {
var fields : ArrayList<String> = {"Jurisdiction", "NewVariantIdentifier"}
...
}
Next steps
Now you can go to the next step, “Add the rate routine variant identifier to PCF files” on page 653.
Procedure
1. Add New Variant Identifier to the Rate Routine Details and New Rate Routine screens.
a. Add a [Link] display key and set the value to New
Variant. You can add the display key by adding it to the display_languageCode.properties file in
configuration→config→Localizations.
b. In [Link], add a basic input after the Jurisdiction input. For example, from the Toolbox,
go to Basic Inputs and insert an Input with the following properties:
2. On the Rate Routine Details screen, change the name of the Create Jurisdiction Variant button to something more
descriptive such as Create Variant Rate Routines. This button will now create variants where you can set
Jurisdiction and New Variant.
Configuring Rating Management 653
Guidewire PolicyCenter 9.0.9 Configuration Guide
3. Add a New Variant column in the Search Results on the Rate Routines screen.
In [Link], add a basic cell just after the Jurisdiction cell. For example, go to Basic
Cells and insert a Cell with the following properties:
4. On the Rate Book Details screen, add New Variant to the Included Rate Routines tab.
In [Link], add a TextCell just after Jurisdiction with the following properties:
5. Add New Variant to other rate routine screens where the Jurisdiction variant appears.
See also
• “Rate routine plugin methods” on page 666
• Application Guide
Using Gosu to get the rate factor from the rate table
You can get the rate factor from a rate table in a rate routine. In certain circumstances however, getting the rate
factor may involve more complex logic than rate routines support. This topic describes how to get the rate factor
from the rate table using Gosu code. You might add this code in the rating engine or in a rate routine function.
This topic provides an example of how to accomplish this using workers’ compensation as an example.
Next steps
You can now move to the next step “Define a method to get the rate factor” on page 655.
654 chapter 49: Configuring Rating Management
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. In the public method for the class, add private variables for storing the policy period and rate book status.
class WCRateFactorSearch {
construct() {
2. Insert uses statements after the package statement at the top of the file. The method that you define in the
following steps uses these classes.
package [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
uses [Link]
class WCRateFactorSearch {
3. After the class constructor, add the getFactor method that gets the rate factor.
construct() {
}
private function getFactor<Q extends Comparable>(jurisdiction : Jurisdiction,
inputParams : List<RateQueryParam<Q>>,
tableCode : String,
ratingDate : Date) : BigDecimal
{
/* Constructs a new rateBookQueryFilter object and sets properties such as Jurisdiction */
/* and UWCompany. */
var filter = new RateBookQueryFilter(ratingDate, [Link],
[Link])
{:Jurisdiction = jurisdiction,
:UWCompany = [Link],
:Offering = [Link],
:MinimumRatingLevel = MinimumRatingLevel,
:RenewalJob = [Link] typeis RenewalProcess
}
var result = new RatingQueryFacade().getFactor<Q, BigDecimal>(filter, tableCode, inputParams)
return ![Link] ? [Link] : [Link]
}
• ratingDate – The date for which to obtain rates. The date is compared against the
[Link] or [Link] properties depending upon the job type.
In the user interface, ratingDate is the Policy Effective or Coverage Reference Date or Renewal Effective Date in
Policy Criteria on the Rate Book Details screen.
This method return the rate factor as a BigDecimal. If no rate factor is found, the method return the value 1.
Next steps
Now you can go to the next step, “Define methods that get the rate factor” on page 656.
Before you begin, you must complete “Define a method to get the rate factor” on page 655.
In this series of steps, you define a method that gets the rate factor. The rate factor is used to calculate rates for
ratable objects such as coverables. Repeat these steps to define a method for each ratable object. This example gets
the rate factor for a workers’ compensation class code.
Procedure
1. If you must get the jurisdiction from a policy location, add a uses statement at the top of the file after the
package name.
The method that gets the jurisdiction for a particular ratable object uses methods in this class.
uses [Link]
2. In the public method for the class, add a private variable for storing the code of the rate table. The code is
passed to the getFactor method in the tableCode parameter.
class WCRateFactorSearch {
The private variable is not strictly necessary. Instead of using this private variable, you could pass the
tableCode parameter directly in the call to the getFactor method.
3. Add a method that gets the rate factor for a particular ratable object. This method calls the getFactor method.
Name the method appropriately for the type of ratable object.
In this example, the method is getClassCodeRate. This method gets the rate for a covered employee’s class
code from the rate table.
function getClassCodeRate(covEmp : WCCoveredEmployee, ratingDate : Date) : BigDecimal {
var jurisdiction
[Link]([Link])
var params = {
new RateQueryParam<String>("CLASSCODE", [Link])
}
return getFactor(jurisdiction, params, WC7_CLASS_CODE_TABLE, ratingDate)
}
The input parameters to this method vary depending upon the ratable object. The input parameters to the
getClassCodeRate method are:
• covEmp – The WCCoveredEmployee object from which to get the class code.
• ratingDate – The date for which to get the rate.
This method returns the rate factor as a BigDecimal.
656 chapter 49: Configuring Rating Management
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Adding a new parameter to the rating engine” on page 658
• Application Guide
Add the parameter to the parameter name typelist for rate routines
About this task
Create a new typekey for the parameter. In a parameter set, the parameter Name appears in the Name column on the
Parameter Sets→Parameters tab in PolicyCenter.
Configuring Rating Management 657
Guidewire PolicyCenter 9.0.9 Configuration Guide
Procedure
1. In Studio, open [Link] in configuration→config→Metadata→Typelist.
2. Click typelist at the top of the Element hierarchy.
3. Click the drop-down list next to and choose typecode. This adds a typecode for the new parameter to this
typelist. For example, you can add a PATest parameter defined as follows:
Next steps
You can now move to the next step, “Enter the default type for the parameter” on page 658.
Procedure
1. In Studio, open [Link] in the [Link] package.
2. In the mapFromCodeToType static variable, enter a mapping for the code of the new parameter.
Enter the code in capital letters prefixed by CalcRoutineParamName.TC_. Enter the default type as the fully
qualified object type. For example:
CalcRoutineParamName.TC_PATEST -> "[Link]"
Next steps
Now you can move to the next step, “Include the parameter in a parameter set in PolicyCenter” on page 658.
Procedure
In the PolicyCenter user interface, include the parameter in one or more parameter sets.
When you add the parameter, you can override the default type. Keep in mind that the object the rating engine
passes must be compatible with the type of object that rate routine expects. For instructions and more information,
see the Application Guide.
routine. This object or entity instance must be compatible with the type specified in the parameter set associated
with the rate routine being executed. A compatible type is the same type or a subtype. If the object or entity instance
is not compatible, then PolicyCenter throws an exception.
Note: For instructions on how to add a new parameter for use in PolicyCenter, see “Configuring new
parameters in parameter sets” on page 657.
In these steps, you include the new parameter in Gosu code that executes each rate routine associated with this
parameter set.
The rating engine code executes each rate routine by calling the [Link] method. One of
the parameters to this method is a map of parameters that the rate routine uses. This map must be a superset of the
parameter set in PolicyCenter. By definition, a superset contains at least all of a set.
Procedure
1. In Studio, open the rating engine class for the line of business that uses this parameter. For example, open
[Link] if this parameter is for the personal auto line. The PARatingEngine class is in the
[Link] package.
2. Modify the executeCalcRoutine method call for each rate routine associated with a parameter set that
includes this parameter.
The following example assumes that you added a parameter to the PIP NJ Parameter Set parameter set. The rate
routine with the pa_pip_nj_basic_rr code uses this parameter set.
The code that executes this rate routine is:
[Link]("pa_pip_nj_basic_rr",
:costData = data,
:worksheetContainer = data,
rateRoutineParameterMap)
In the map, the Object must be compatible with the type for the parameter set being used by the executing
rate routine. You specify the type in the Type column on the Parameter Sets→Parameters tab in the PolicyCenter
user interface.
In the map, the Object must be compatible with the type for the parameter set being used by the executing
rate routine. You specify the type in the Type column on the Parameter Sets → Parameters tab in the PolicyCenter
user interface.
3. In the rateRoutineParameterMap variable, add a map entry for your new parameter.
4. Start or restart PolicyCenter to view your changes.
In Studio, create a new Gosu class the implements [Link]. For an example, see
[Link] in the [Link] package.
See also
• Application Guide
See also
• Application Guide
See also
• Application Guide
In the base configuration, this batch process is not scheduled to run on a regular basis. You can run it manually or
schedule it.
In the base configuration, the batch process extracts worksheet data to files to an extracted_worksheets directory
off the file system root. Extract Rating Worksheets processes WorksheetContainer objects attached to a Policy on
which all jobs are closed. Closed jobs have a non-null [Link]. The batch process does not process
WorksheetContainer objects that have already been extracted.
In Studio, you can change the extract destination directory by modifying [Link]. Modify
the value of the WorksheetExtractDestination parameter.
In Studio, you can modify the behavior of the batch process by modifying the worksheet extract plugin. For more
information, see “Worksheet Extract plugin” on page 661.
See also
• “Worksheet Purge plugin” on page 662
Procedure
1. In [Link], set the PurgeWorksheetsEnabled parameter to true.
2. In [Link], to enable the batch process to run on a regular schedule, uncomment the
ProcessSchedule entry for PurgeWorksheets and modify the schedule to meet your needs.
See also
• “Adding a new rate routine function” on page 650
662 chapter 49: Configuring Rating Management
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• Application Guide
Procedure
1. In Studio, open [Link] in configuration→config→Plugins→registry.
2. Change Gosu Class from:
[Link]
to:
[Link]
See also
“Impact testing plugin” on page 669
See also
• System Administration Guide
See also
• Application Guide
• System Administration Guide
See also
• “Configuring rate routines” on page 648
• Application Guide
CPLine CP [Link]
If the product abbreviation does not fit this mapping, the makeAbbrevMap and makeConfigClassName methods make
adjustments to the mapping. In the [Link], these methods make an adjustment for the business
auto line. If you need to make other adjustments, you must create your own version of the rate routine plugin.
The line-of-business configuration classes implement the IRateRoutineConfig interface.
See also
• “Configuring rating worksheets” on page 660 for additional steps to enable rating worksheet
• Application Guide
Set Parameters
The setParameters method gets the values of the WorksheetsEnabled parameter defined in the plugin registry and
sets the values on internal variables. The value defined in the plugin registry overrides the plugin setting. The
method signature is:
override function setParameters(params : Map<Object, Object>)
In the built-in implementation, RateRoutinePlugin class transfers processing to the method of the same name in
the line-specific rate configuration class, such as PARateRoutineConfig.
In the line-specific configuration class, the getCostDataWrapperType method gets the wrapper type that will be
used by rate routines for the given parameter set. The rate routine editor accesses a CostData instance using this
wrapper type. The rate routine editor uses the wrapper to display the desired set of properties related to CostData in
virtual form. For example, when entering an Instruction or Operand in a rate routine step in PolicyCenter, you can
select a property on the cost such as AdjustedRate. The wrapper implementation maps AdjustedRate to the correct
underlying CostData property: StandardAdjRate, OverrideAdjRate, or ActualAdjRate. For example, if the
CostData supports overrides, this could be the override or standard property. If the CostData does not support
overrides, it is almost certainly the standard property.
The parameter is:
paramSet The parameter set for which to return the corresponding wrapper type
The method returns the IType corresponding to the instance that makeCostDataWrapper would return for the given
paramSet.
In the built-in implementation, [Link] transfers processing to the method of the same name in the
line-specific rate configuration class, such as [Link].
In the line-specific configuration class, the makeCostDataWrapper method makes a wrapper for the given CostData
instance.
The parameters are:
paramSet The parameter set for which to return the corresponding wrapper
costData An instance of the CostData subclass
defaultRoundingLevel The default rounding level of the CostData
The method returns a wrapper instance of the IType that getCostDataWrapperType returns for the paramSet.
In the built-in implementation, [Link] enables worksheets for a policy line if the
worksheetsEnabledForLine method in the line-specific configuration class returns true.
The parameter is:
The method returns true if worksheets are enabled for the line of business with the given pattern.
For more information, see “Add an implementation to a Plugins Registry item” on page 134.
In the default configuration, jurisdiction is an example of a rate routine variant identifier. In the PolicyCenter user
interface, the jurisdiction variant is referred to as the jurisdiction variant.
If you add a new variant identifier, you must add the name of the variant identifier to the fields variable of the
getter for the BranchingFields property.
For more information about adding a variant identifier, see “Configuring variant identifiers for a rate routine” on
page 652.
Include Property
The includeProperty method is a filter on which properties on Parameters the user can select in an Instruction or
Operand of a rate routine step. Return true to make a property available. Return false to make a property
unavailable. Return null to retain the default value of this property. It is recommended that this method end with a
catch-all return null, so that any property which is not explicitly handled gets default behavior.
The signature is:
override function includeProperty(policyLinePatternCode : String, prop : IPropertyInfo) : Boolean
This method operates during the traversal of the policy graph, and controls whether a reference from one class to
another will be traversed. (In contrast, the filterIrrelevantItems method runs after the traversal of the policy
graph.)
668 chapter 49: Configuring Rating Management
Guidewire PolicyCenter 9.0.9 Configuration Guide
For example, PolicyLocation has a foreign key to an AccountLocation. In the built-in implementation,
[Link] is not traversed. To change this behavior, you might add the condition:
if ([Link]([Link]) and [Link] == "AccountLocation") {
return true
}
In the built-in implementation, the RateRoutinePlugin class transfers processing to the method of the same name
in the line-specific rate configuration class, such as PARateRoutineConfig. The built-in implementation calls the
ItemFilter class which performs the default filtering. You can modify this class and add subclass helpers for
specific implementations.
In the built-in implementation, ItemFilter considers the following types as irrelevant items:
• Ignored paths – List of paths to filter out (defined in the _ignoredPaths variable). For example, the built-in
implementation filters out .EffectiveDate and .ExpirationDate. See the plugin implementation for the
complete list.
• Ignored types – List of object types to filter out (defined in the _ignoredTypes variable). For example, the built-
in implementation filters out policy period and policy line pattern. See the plugin implementation for the
complete list.
• Arrays or maps of [Link] can optionally filter by policy line pattern code.
See also
• “Configuring impact testing” on page 663
• Application Guide
Parameter Description
original The original bound policy period from which to create a baseline policy period.
Parameter Description
original The original bound policy period from which the baseline policy period was created.
baseline The baseline policy period created by createBaselinePeriod.
This method can create the test policy period using either the original or baseline policy period, or a combination of
both.
This method returns the test policy period.
Parameter Description
period The baseline policy period
Parameter Description
period The test policy period.
Parameter Description
period The policy period to be considered for inclusion or exclusion
If the return value is true, then include the policy period in the test policy periods.
Parameter Description
books A list of alternate rate books. Pass null to not override rate books.
You can use this plugin to lookup values in a fail-over rate book. Extend the rate book entity to point to the fail-over
rate book. For example, if you change rate table codes between the old and new editions of the rate book, you can
extend the rate book to include a mapping table. Use the mapping table to fail-over to alternate rate tables.
You can also use this plugin to implementing capping. Capping uses the current renewal policy data and uses the
prior policy period’s rate book to determine the rate factor, or capping basis. Tables in the old edition of the rate
book may be missing values for the renewal policy. For example, the old rate table does not contain values for new
or changed coverages. With the plugin, lookup can fail-over to the table in the new edition of the rate book.
See also
• Application Guide
Create Transactions
The createTransaction method creates a Transaction object in the given policy period branch that is appropriate
for the Cost type. The method signature is:
Transaction createTransaction( PolicyPeriod branch )
Get Reinsurable
The getReinsurable method gets the single reinsurable that is associated with this cost. The method signature is:
Reinsurable getReinsurable()
This method returns null if the cost does not represent a premium. For example, a cost for taxes or fees does not
represent a premium.
Get Coverable
Implement a getter for the Coverable property. The getter returns a coverable if there is a coverable associated with
this cost. Impact testing uses this getter. The signature is:
override property get Coverable()
This getter returns the coverable associated with this cost or null if this cost is not associated with a coverable. This
method can return null if impact testing is not enabled for this line of business.
The getter returns the name of the coverable if there is a coverable associated with this cost. The name is usually, but
not always, equivalent to the display name or the coverable. An exception is in the Personal Auto line. All premium
costs are computed with respect to a vehicle. The getNameOfCoverable returns the DisplayName of the vehicle
even where getCoverable returns the Personal Auto Line instance.
Is Matching Bean
For reporting differences, returns true if the two beans are a match. The signature is:
override function isMatchingBean(bean : KeyableBean)
The bean parameter is the other bean to compare with this one.
See also
• Integration Guide
Programs
* * *
RIAttachmentInclusion AgreementParticipant ProgramTreaty
«delegate» RIAgreement
RIContract
NonProportionalRIAgreement ProportionalRIAgreement
CalculateCededPremium
CedingRate
CedingRateAdjusted
GNPSubtotal FacProportionalRIAgreement
AnnualAggregateRITreaty QuotaShareRITreaty
ExcessOfLossRITreaty SurplusRITreaty
FacExcessOfLossRIAgreement
FacNetExcessOfLossRIAgreement
Legend
A relates to B
A B
B relates to A
NetExcessOfLossRITreaty
A B A has a B
A B A has 0 or more Bs
*
PerEventRITreaty A B
A is a subtype of B
A delegates to B
The following illustration shows the proportional reinsurance entities and their delegates.
ProportionalRIAgreement subtypes
«delegates» FacProportionalRIAgreement
Facultative
«delegates»
PerRisk
QuotaShareRITreaty
«delegates»
Treaty
SurplusRITreaty Legend
A B A delegates to B
The following illustration shows the non-proportional reinsurance entities and their delegates.
NonProportionalRIAgreement subtypes
PerEventRITreaty
AnnualAggregateRITreaty
«delegates» «delegates»
Treaty LossDateAttachable
ExcessOfLossRITreaty
NetExcessOfLossRITreaty
«delegates»
PerRisk
FacExcessOfLossRIAgreement
«delegates»
Facultative
Legend
FacNetExcessOfLossRIAgreement
A B A delegates to B
Treaty entities
All entities that represent treaties delegate to the Treaty entity. In the default configuration, the treaty entities are:
Proportional Non‐proportional
QuotaShareRITreaty PerEventRITreaty
SurplusRITreaty AnnualAggregateRITreaty
ExcessOfLossRITreaty
NetExcessOfLossRITreaty
All entities that represent facultative agreements delegate to the Facultative entity. In the default configuration, the
facultative agreement entities are:
Proportional Non‐proportional
FacProportionalRIAgreement FacExcessOfLossRIAgreement
FacNetExcessOfLossRIAgreement
All entities that represent loss date attachment agreements delegate to the LossDateAttachable entity. In the default
configuration, the loss date attachment agreement entities are:
Non‐proportional
PerEventRITreaty
Non‐proportional
AnnualAggregateRITreaty
ExcessOfLossRITreaty
NetExcessOfLossRITreaty
Proportional Non‐proportional
FacProportionalRIAgreement ExcessOfLossRITreaty
QuotaShareRITreaty NetExcessOfLossRITreaty
SurplusRITreaty FacExcessOfLossRIAgreement
FacNetExcessOfLossRIAgreement
ReinsurableCoverable
Reinsurable LossDateAttachmentProgram
TotalInsuredValue PolicyAttachmentProgram
Legend
A has a B
A B A implements the B
* * * * interface
LocationRisk PolicyRisk RIRisk A B A has 0 or more Bs
*
A B A is a subtype of B
Coverages of same RICoverageGroup are not all grouped into a same reinsurable risk, but are divided further by
what reinsurable coverable they apply to. In the default configuration, the reinsurable coverable entities are
PolicyLocation and PolicyPeriod. The reinsurable risks associated with these coverables are LocationRisk and
PolicyRisk, respectively. For example, if all property coverages for all buildings at the same policy location are
grouped into a single reinsurable risk, the reinsurable coverable is the policy location.
Reinsurable coverables implement the ReinsurableCoverable interface. One ReinsurableCoverable can create
multiple reinsurable risks depending upon how many RICoverageGroup entities the coverages under that
ReinsurableCoverable have.
Legend
Reinsurable
A relates to B
A B
B relates to A RiskNumber
A B A has a B
A B A has 0 or more Bs
* A is a subtype of B PolicyPeriod PolicyRisk LocationRisk
A B
A delegates to B
ValidReinsurance *
*
*
RIRiskVersionList RIAttachmentInclusion
RiskNumber *
AllVersions
*
RIRisk
RiskNumber
*
RIAgreement
The RiskNumber field is used to uniquely identify a risk in various entities in the object model. For example, the
RIRisk and PolicyRisk entities have the same risk if they have the same RiskNumber.
The RIRisk entity delegates to the SimpleEffDated delegate which has EffectiveDate and ExpirationDate
fields. Each instance of this entity represent a reinsurance risk for a period of time when it unchanged. The RIRisk
represents a version of the risk.
The RIRiskVersionList entity is the container for all versions of a RIRisk created by a policy period. The version
list has a link back to the policy period which created it.
Edit RI policies basic editreinsuranceforpolicybasic Permission to edit basic reinsurance fields for policies
Edit RI programs editreinsuranceprogram Permission to edit reinsurance programs
View RI policies viewreinsuranceforpolicy Permission to view reinsurance for policies
View RI programs viewreinsuranceprogram Permission to view reinsurance programs
Procedure
1. In Product Designer, open a policy line and go to the Coverages page.
2. Select a coverage.
3. Go to the Reinsurance page for that coverage.
4. Select a Reinsurance Coverage Group from the drop-down list. You can also add a Reinsurance Coverage Group
Script.
Selecting a Reinsurance Coverage Group sets the RICoverageGroup on the Coverage entity.
Procedure
In Product Designer, open the policy line and make the following changes to each coverage on the
Coverages→Reinsurance page:
• Set Reinsurance Coverage Group to <none selected>.
• Remove any Reinsurance Coverage Group Script.
If no coverages are linked to a coverage group, then no reinsurable risk will be created. Therefore, there will be no
checking for reinsurance or linking to reinsurance agreements.
See also
• The Application Guide for more information about the Reinsurance checking set.
Some insurers need to handle high volumes of quote requests generated by external applications, such as the web
sites of comparative raters. A comparative rater’s web site enables its customer to view and choose between quotes
from multiple insurers. Insurers who receive these requests must generate large volumes of quotes. The comparative
rater’s customer expects to see information quickly, therefore PolicyCenter must quickly generate the quote.
Most of these high volume requests do not result in a policy. Therefore, it is desirable to save the quotes in an
external database rather than the PolicyCenter database. In general, this external database is partitioned to
concurrently handle requests from multiple instances of PolicyCenter.
For these types of insurers, Guidewire recommends a quoting architecture and provides an API and plugin interface
for generating quotes. To handle the high volume of quote requests, the architecture uses multiple instances of
PolicyCenter. All instances leverage the same PolicyCenter version and configuration. To avoid database
performance issues, the quote-only instances are not clustered. One or more quote-only instances process quotes
directly from comparative raters. The architecture uses a separate PolicyCenter system-of-record (SOR) to complete
submissions and issue policies.
Note: For efficient insertion and purging with an Oracle database, use composite range hash
partitioning with the range based on a time interval, such as monthly. Partitioning by time enables you
to easily purge old quotes. Use a similar mechanism if you are writing to another database.
Handling lower volumes of quote requests – Every PolicyCenter instance, even the SOR, includes the API which
provide quotes that are stored outside the PolicyCenter instance. If you handle a lower volume of quote requests,
you can use this API with the PolicyCenter SOR handling quote requests. Store the quotes outside the SOR database
until they are bound.
Keeping Quick Quotes outside the main database – In a submission, you can choose to do a Quick Quote rather
than a Full Application. In the base configuration, Quick Quote stores the quotes in the PolicyCenter SOR database. If
your bind rate on these policies is low, you can modify Quick Quote to store the quote outside the SOR database
until the quote is bound. You can do this by modifying the Quick Quote wizard to provide the quote and then call the
Quoting Data plugin to write the quote to the quoting table.
of inputs that affect rating. Before sending the request, the comparative raters can make external calls to
validate vehicle or address information.
2. The quote-only instance validates these objects. This validation may be customized for the comparative rater
or can be the same as for other channels, such as call centers or portals.
3. To enhance the quote data, the quote-only instance can make external service calls, such as credit checks.
4. The quote-only instance rates the policy. Rating can be done by Guidewire Rating Management or another
rating engine.
5. The rating engine returns pricing data and a reference number.
6. The quote-only instance stores both the original request and the completed quote in a Quote table, for
example, located in an external quoting database. This quoting database has its own schema which does not
necessarily follow the PolicyCenter object model, allowing for a different database storage strategy than the
SOR database. The Quote table stores high-level quote details for identification and verification. The SOR can
search this external quoting database without necessarily retrieving the full quote.
7. The quote-only instance sends the completed response back to the comparative rater.
8. The quote request/response data are immediately available for sending to a data warehouse for analytical
purposes. If the quote results in a bound policy, the reference number can be used for auditing.
If the comparative rater’s customer wants to purchase a policy while still on the comparative rater’s web site:
1. The customer is automatically navigated to the insurer’s web portal. The portal simultaneously makes a web
service call to the PolicyCenter SOR to retrieve the Quote from the external quoting database using the
reference number.
2. The SOR retrieves the Quote from the external quoting database and transforms it into a PolicyCenter
submission. The SOR marks the record in the Quote table as converted to exclude it from further searches and
multiple conversions.
3. The portal guides the user through additional questions and validation required to complete the submission.
If the comparative rater’s customer calls the call center to purchase a policy:
1. The call center consultant uses the PolicyCenter SOR screens to retrieve the Quote from the external quoting
database using the reference number or other quote details.
2. The SOR retrieves the Quote from the external quoting database and transforms it into a PolicyCenter
submission. The SOR marks the record in the Quote table as converted to exclude it from further searches and
multiple conversions.
3. In PolicyCenter, the consultant guides the user through additional questions and validation required to
complete the submission.
1
Website A
Browsers
Carrier
environment PolicyCenter
For handling quotes
PolicyCenter
For handling quotes
Web service
3 3
4 GX Model
...
QuotingProcessorPlugin
PolicyCenter
Database
(not system of QuotingDataPlugin
record)
5
GX Model
Quoting Database
PolicyCenter
System of record
7
PolicyCenter
Database
(system of record)
1. Website A is a comparative rater. Their web site enables potential customers to view policy quotes gathered
from multiple insurers. A potential customer on Website A enters basic policy information and requests
quotes. One of these insurers uses PolicyCenter to handle these requests.
2. Website A sends the policy information to multiple insurers. One of these requests goes to a insurer with
PolicyCenter.
The insurer has multiple instances of PolicyCenter to handle these requests.
3. Your web service formats the request. The base configuration does not contain an example of this type of web
service. The web service verifies the data, then formats the data in the GX model of a PolicyPeriod. See the
Integration Guide.
4. Your web service then calls the quoteSubmission method in the Quoting Processor plugin interface
(QuotingProcessorPlugin) to generate a quote.
5. The quoteSubmission method calls the Quoting Data plugin (QuotingDataPlugin) to obtain an account.
Then this method generates a policy period and a quote. This method returns the quote and a quote identifier.
Generating the policy period and quote access the PolicyCenter database attached to the PolicyCenter instance
for handling quotes. This database is not a system of record. In this proposed implementation, neither the
policy period nor the quote are committed to the PolicyCenter database. The external quoting database,
described in the next step, is optimized for storing the quoting information.
6. The quoteSubmission method calls the Quoting Data plugin to save this quote to the external quoting
database. The quoting database is partitioned so that it can concurrently handle requests from multiple
instances of PolicyCenter.
7. If the potential customer decides to purchase the insurer’s policy, then the PolicyCenter system of record
retrieves the GX model of the quote from the external quoting database. The PolicyCenter SOR uses the quote
identifier to retrieve the GX model. You implement this step.
Optionally, the Customer Service Representative can display the quote on the screen and make changes. The
policy can be bound and saved to the PolicyCenter database.
The quoteSubmission method sends the quoting data to the Quoting Data plugin. The plugin saves the quoting data
to an external database. The quoteSubmission method does not commit the policy period to the PolicyCenter
database.
The quoteSubmission method returns a QuoteData object. This object contains a quote identifier and the quoting
data formatted as a policy period in GX model format.
Logging
The quoting processor plugin logs messages about quoting jobs (policy transactions) to the
[Link] category.
Get Account
The getAccount method of the Quoting Data Plugin returns the account associated with the input parameter,
requestData. The method signature is:
getAccount(requestData : Object) : Account
When the QuotingProcessor class calls getAccount, the requestData is policy period data in GX model format.
To use the requestData argument, downcast it from Object to the appropriate GX model format. For example
[Link] (the policy period type fully
qualified name).
Configure the account to have one producer code and set the preferred underwriter on the producer code. The
preferred underwriter provides improved performance by avoiding round robin assignment.
Your implementation of this method can use the requestData parameter to retrieve a PolicyCenter account. If you
always use a single PolicyCenter account for these types of quotes, ignore the requestData argument and return
Handling high volume quote requests 687
Guidewire PolicyCenter 9.0.9 Configuration Guide
that account. For example, you might use a single account if rating does not depend upon properties of the account.
Using this single account avoids creating accounts for each request, since few of these accounts will be associated
with full submissions. Similarly, if rating depends upon only a few account properties, the Quoting Data Plugin
implementation can have one account per unique combination of properties.
The plugin implementation can return any type of object that you require for the unique identifier. For example, the
built-in implementation returns an Integer.
Configuring multicurrency
See also
• Application Guide
• Globalization Guide
See also
• “MulticurrencyDisplayMode” on page 67
• “DefaultApplicationCurrency” on page 66
Next steps
Now you can move to the next step, “Add a currency to a coverage” on page 690.
Procedure
1. In Product Designer, navigate to Product Model→Policy Lines→Commercial Property Line.
2. Under Available Coverage Currencies, click Add and select EUR from the drop-down list.
Product Designer displays both EUR and the existing coverage currency as choices for coverages.
3. Go to Coverages and select Building Coverage.
4. Go to Terms and select the Limit coverage term.
The Value Type of this coverage term is Money.
5. Click to Add a currency.
6. Select EUR and enter 75,000, for example, as a default value. Optionally enter minimum and maximum values
such as 25,000 and 100,000.
7. Go to Terms→Deductible.
The Value Type of this coverage term is Money. This is a option coverage term which presents a list of values.
690 chapter 52: Configuring multicurrency
Guidewire PolicyCenter 9.0.9 Configuration Guide
8. Go to Options.
9. Add options in euros, such as 250, 500, and 750. Prefix the Code with EUR to distinguish the euro options, for
example EUR250.
10. Commit the change list and synchronize the product model.
Next steps
Now you can go to the next step, “Check your work” on page 691.
Procedure
1. Log in to PolicyCenter as a producer such as aapplegate.
2. Go to the Wright Construction account.
3. Create a Commercial Property submission.
4. On the Policy Info screen, verify that USD and EUR appear in the Preferred Currency→Coverage drop-down list and
select EUR.
The preferred coverage currency will be the default currency for coverables on the policy.
5. Advance to the Buildings and Locations screen.
6. Add a building to the primary location and fill in any required fields on the Building Information screen.
Verify that the Coverages in drop-down list includes USD and EUR, and the preferred coverage currency, EUR, is
selected.
7. Fill in required fields on the Details tab.
8. Go to the Coverages tab.
Notice that the Limit is set to the default value for EUR. The Deductible drop-down list contains the EUR options
you defined in Product Designer.
9. Deselect all coverages except for Building Coverage.
10. Advance to the Policy Review screen.
Notice that for the building, the Coverages in are in euros.
11. Quote the policy.
The quote is in U.S. dollars because that is the settlement currency.
If you intend to deploy a product model on PolicyCenter servers that are not configured for multiple currency
display mode, do not configure multiple currencies in any part of the product model. However, you can test
multicurrency products on a staging server configured for multicurrency while the production system is configured
for a single currency.
To get the default preferred coverage currency for the specified policy period, you can use the
lookupDefaultPreferredCoverageCurrency method in the [Link] Gosu class.
PolicyPeriod
PreferredCoverageCurrency
PreferredSettlementCurrency
Legend
* A B A has 0 or more Bs
CommercialPropertyLine *
A A is a Coverable
PreferredCoverageCurrency
*
CPLocation
PreferredCoverageCurrency
*
CPBuilding
PreferredCoverageCurrency
In the base configuration, the jurisdiction on the address maps to a country, and each country has a currency.
However, if for some reason an address does not map to a currency, the createAccountForContact method
initializes this property to the system default currency. A properly configured system always specifies the currency
and does not rely on this fail-safe behavior.
The ContactCurrencyInitializer class contains methods for editing the currency for a contact. PCF files that
enable a user to edit the currency for a contact use these methods. The ContactCurrencyInputSet PCF file uses
this class to set the Preferred Currency for a contact. You can see an example of this Preferred Currency field when you
view a contact on the Contact File Details screen.
The Account Holder Info screen uses the preferred settlement currency on the contact to aggregate policy, claim, and
billing metrics and display them in the settlement currency. The contact’s preferred settlement currency becomes the
default settlement currency for an account created from that contact.
the reinsurable risk (RIRisk) objects. If an appropriate reinsurance program is available, PolicyCenter attaches the
program to the reinsurable risk. The program has the same currency as the reinsurable risk.
In the ReinsuranceConfigPlugin plugin, the getReinsuranceCurrency method returns the currency that the
RIRisk uses for TIV/SI. To change how PolicyCenter selects the reinsurance currency, you can override this
method.
The input parameter to the getReinsuranceCurrency method is a list of all the coverages associated with a single
ReinsurableCoverable. The PolicyPeriodBaseEnhancement Gosu class calls this method when creating
Reinsurables. In the base configuration, the method gets the jurisdiction specified in the
[Link] property and looks up the currency associated with that jurisdiction. That mapping is
returned by the RegionCurrencyMappingUtil class and configured through the Country, Jurisdiction, State,
and Currency typelists.
The reinsurance program and reinsurance contract entities, RIProgram and RIAgreement respectively, delegate to
the reinsurance contract entity, RIContract. The RIContract entity has a non-nullable currency property,
Currency, that the RIProgram and RIAgreement entities implement. The program and agreements associated with
the program must have the same currency.
When PolicyCenter attaches an RIProgram or an RIAgreement to an RIRisk, the Currency properties must match.
The Premium Ceding batch process runs and calls the PCCedingCalculator class to process premium transactions.
This class does the conversion from the reinsurance currency to the settlement currency.
See also
• Integration Guide
RIRisk Reinsurable
RIContract RIProgram
Currency ReinsurableCurrency
Currency Currency TotalInsuredValue TotalInsuredValue
Legend
* A B A has a B
RIAgreement
A B A has 0 or more Bs
Currency * * A is a subtype of B
A B A delegates to B
A is enhanced by B
See also
• Application Guide
Configuring multicurrency 695
Guidewire PolicyCenter 9.0.9 Configuration Guide
Property Description
ActualAmountBilling The ActualAmount in the settlement currency for accounting and reporting.
StandardAmountBilling The StandardAmount in the settlement currency for accounting and reporting.
OverrideAmountBilling The OverrideAmount in the settlement currency for accounting and reporting.
ActualTermAmountBilling The ActualTermAmount in the settlement currency for accounting and reporting.
StandardTermAmountBilling The StandardTermAmount in the settlement currency for accounting and reporting.
OverrideTermAmountBilling The OverrideTermAmount in the settlement currency for accounting and reporting.
PolicyFXRate If the coverage currency is not the same as the settlement currency, this property contains a
foreign key to a copy of the exchange rate from the exchange rate service. PolicyCenter uses
this PolicyFXRate to convert the as‐rated costs from the coverage currency to billing costs in
the settlement currency. When you configure PolicyCenter, do not keep more than one copy of
the same PolicyFXRate on a single policy period.
The policy period has an array of exchange rates used for monetary amount conversion. This array is
[Link].
Exchange rates on a policy period
Legend
PolicyPeriod
A B A has a B
A B A has 0 or more Bs
PolicyFXRates *
* * *
Cost PolicyFXRate Transaction
ActualAmount FromCurrency Amount
ActualAmountBilling Market AmountBilling
ActualTermAmount MarketTime
ActualTermAmountBilling Rate
ToCurrency
Each FXRate object records an exchange rate and the time that it was obtained from the market. Exchange rates can
vary over the life of the policy, come from different sources, or cover different currency pairs, therefore the policy
period maintains an array of exchange rates.
The following table describes some of the properties on the PolicyFXRate object:
Property Description
Rate The exchange rate at which one currency can be converted to another.
MarketTime The time at which the market indicated the rate went into effect.
RetrievedAt The time at which the quotation was obtained from the market.
FromCurrency The currency to convert from.
Property Description
Amount The transaction amount.
AmountBilling The Amount in the settlement currency for billing.
PolicyFXRate A foreign key to a copy of the exchange rate from the exchange rate service. This points to the same ex‐
change rate used to calculate the cost associated with this transaction.
See also
• “Configuring underwriting rules” on page 585
• Application Guide
Field Description
Comparator Value Comparator set to At least or At most. These values correspond to the codes Monetary_GE
or Monetary_LE, respectively.
DefaultValueAssignmentType Set to OffsetAmount.
The PATotalPremium underwriting rule is an example that shows multicurrency. In PolicyCenter, you can view this
underwriting rule in Administration→Business Rules→Underwriting Rules. In the Personal Auto line of business, the
evaluator Gosu class (PA_UnderwriterEvaluator.gs) determines whether to raise PATotalPremium underwriting
issues.
As with other underwriting issues, the code that creates the issue determines the value for the issue. PolicyCenter
displays this value in the underwriting screens, therefore consider keeping the value (and approval) in the original
currency. In the base configuration, the value comparator for monetary issues does a conversion between currencies,
if needed. This conversion enables you to specify authority grants in a single currency per issue, yet have that grant
to apply to all currencies for the issue. Then PolicyCenter determines whether or not to raise an underwriting issue.
The UWIssueValueComparatorWrapper class in the [Link] package uses the
MonetaryGEValueComparatorWrapper and MonetaryLEValueComparatorWrapper classes to convert the currency
and compare monetary values.
See also
See also
See also
• Application Guide
698 chapter 52: Configuring multicurrency
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• “Billing Plans” in the BillingCenter Application Guide
See also
• “Payment Plans” in the BillingCenter Application Guide
See also
• “Agency Bill Plans” in the BillingCenter Application Guide
• Application Guide
See also
• “Delinquency Plans” in the BillingCenter Application Guide
See also
• “Commission Plans” in the BillingCenter Application Guide
• Application Guide
See also
• “Authority Limit Profiles” in the BillingCenter Application Guide
Archiving is the process of moving policy terms from the active PolicyCenter database to a document storage area.
You can still search for and retrieve archived policy terms, but they occupy less space in the active database while
archived.
From the user interface standpoint, PolicyCenter considers a given policy term archived if one or more of the
periods in the term is archived, even if not all are archived.
See also
• “Understanding the archiving plugins” on page 708
• Integration Guide
Batch Processing to Run Prior to Running Archive Policy Term Batch Processing
PolicyCenter does not archive a policy term if the policy term is associated with one or more workflows. To more
effectively archive policy terms, run the following batch processing types to clean up workflows before archiving:
• Purge Workflow
• Purge Workflow Logs
• Workflow
See also
• System Administration Guide
Tool Description
Work Queue Info The Server Tools→Work Queue Info screen shows the status of the archive work queue. You can use tools on
this screen to run a work queue writer and to stop and restart workers.
Archive Info The Server Tools→Info Pages→Archive Info screen provides status information about the archiving process. The
screen includes information on the following:
• Entities archived
• Entities excluded because of business logic
• Entities excluded because of failure
The Archive Info screen provides tools to reset various archive items as well.
Domain Graph Info The Server Tools→Info Pages→Domain Graph Info screen provides information on the archive domain graph used
by PolicyCenter to construct the set of related entities to archive. The Warnings tab on this screen lists any
non‐fatal archive issues that occur during server startup.
See also
• “The PolicyCenter archive domain graph” on page 325
• System Administration Guide
See also
• System Administration Guide
See also
• System Administration Guide
Policy
The Policy entity has the following properties related to archiving:
Property Description
DoNotArchive Do not archive any of the terms for this policy. If you change this property from true to false, terms already
archived are not automatically retrieved.
PolicyTerm
The PolicyTerm entity has the following properties related to archiving:
Property Description
Archived Value is true if at least one policy period associated with this policy term is archived.
NextArchiveCheckDate The date to next evaluate this PolicyTerm for archiving. Value is null if archiving is to be checked at
the next opportunity.
RestoreRequests Array to PolicyTermRestoreRequest entity instances.
PolicyTermRestoreRequest
The PolicyTermRestoreRequest entity represents a request made to retrieve this term from the archive backing
store and restore it to the PolicyCenter application database. This entity has the following properties related to
archiving:
Property Description
PolicyTerm A foreign key to the policy term to retrieve from the archive.
Reason The reason provided by the user.
RequestingUser The user that initiated this request to retrieve the policy term.
ShouldCreateActivity A flag that indicates whether to create an activity after processing this request.
PolicyPeriod
The PolicyPeriod entity has the following properties related to archiving:
Property Description
Archived This value is true if this policy period is archived.
ArchiveDate The date on which archiving was attempted on the PolicyPeriod. Value is null if archiving has
never been attempted.
ArchiveFailure A foreign key to ArchiveFailure.
ArchiveFailureDetails A foreign key to ArchiveFailureDetails.
ArchiveSchemaInfo A foreign key to UpgradeDatamodelInfo, the schema version at which the PolicyPeriod was ar‐
chived. Value is null if it was not archived.
ArchiveState A type key that indicates the archive state of the graph. Values can be:
• archived – Graph has been archived
• retrieving – Graph is marked for retrieving
Locked The row is locked and cannot be edited. It is only possible to archive a locked policy period.
ArchiveFailure
The ArchiveFailure entity contains a short description of the reason that archiving failed.
706 chapter 53: Policy Term archiving
Guidewire PolicyCenter 9.0.9 Configuration Guide
ArchiveFailureDetails
The ArchiveFailureDetails entity contains a detailed description of the reason that archiving failed.
See also
• “Archive parameters” on page 44
A PCF file that displays or potentially modifies archivable entities calls the JobForward or PolicyFileForward
PCF file. These PCF files contain code to handle the display of an archived policy term or policy period. Care still
needs to be taken with actions (such as calculating differences or starting jobs) whose success is dependent on other
terms.
See also
• Application Guide
• Integration Guide
Note: The data destruction features described in these topics provide a set of features that help enable
insurers to comply with some of their data destruction requirements. These requirements may be
driven by insurers’ policies and practices, as well as by their interpretation of various regulatory
requirements. Such regulatory requirements may come from, for example, the European Union
General Data Protection Regulation (GDPR) or the New York State Cybersecurity Requirements for
Financial Services Companies law.
Data destruction is the process of requesting that data be destroyed, making the data impossible to retrieve. Data
destruction is typically initiated with a request that specifies a contact or user whose data is to be destroyed. In the
base configuration, PolicyCenter provides a web service that is intended to be called by an external application. You
use the external application to manage the destruction of the data across Guidewire applications.
Data destruction can be implemented as either purging or obfuscation of data, depending on the data to be destroyed.
Purging is a form of data destruction that completely removes contact data and policy or account data from
PolicyCenter. There can be multiple objects associated with the policy, account, or contact that are also removed as
they are detected by traversing the entity domain graph.
Obfuscation is a form of data destruction that permanently overwrites fields, such as user contact fields, with data
that replaces the original data. Some actual removal of data can also be involved, such as deletion of an address
referenced only by one user.
For example, obfuscation might be required if destroying the data affects policies that cannot be destroyed. Purging
user data for a former employee could affect hundreds or even thousands of accounts, policies, policy terms, and so
on. Therefore it makes more sense to obfuscate the data for the user and leave the other data alone.
ArchiveReferenceTrackingEnabled
During an archive operation, if this value is true, PolicyCenter stores references to objects outside an archive
graph in a specific table. The purpose of this table is to allow for the purging of non- archive graphs.
For PolicyCenter, set this value to true. If you have already archived policies before setting this parameter to
true, then you must run the ArchiveReferenceTrackingSync batch process in order to add reference tracking
for previously archived documents. The ArchiveReferenceTrackingSync batch process must first complete for
each previously archived document before you can use personal data purge.
See also
• “Identifying archived objects that affect destruction of data” on page 714
• Integration Guide
• Application Guide
DestructionRootPinnable delegate
An entity that implements this delegate gets a Do Not Destroy flag that can be checked as part of the destruction
process. An entity that is intended to be the root of an entity graph must implement the DestructionRootPinnable
delegate if it is to be used in personal data destruction.
Callable<String> getDescription
A block that returns either a String to be used as a history event comment or null.
PolicyCenter checks this flag as part of the destruction process. For example:
• If DoNotDestroy is set to true for the contact, the associated accounts, policies, and policy periods are not
destroyed.
• The contact specified in a personal data destruction request has two accounts, and only one of the accounts has
DoNotDestroy set to true. The other account has DoNotDestroy set to false. PolicyCenter does a partial purge
and deletes the account that has DoNotDestroy set to false.
Obfuscatable delegate
If you intend to use obfuscation with an entity, it must implement the Obfuscatable delegate. This delegate is
necessary to support marking fields as personally identifiable information with the PersonalData tag.
Note: A Delegate is a reusable type that defines database columns, an interface, and a default
implementation of that interface. A delegate permits an entity to implement an interface while
delegating the implementation of that interface to another class, that of the delegate. Each delegate
type provides additional columns on the affected tables.
The Obfuscatable delegate has one column, ObfuscatedInternal, which cannot be set in Gosu code. This
limitation exists because after the ObfuscatedInternal column has been set to true, it must not be set to false.
Note: If the parent of an entity implements the Obfuscatable delegate, all child entities inherit that
implementation.
The Obfuscatable delegate extends the interfaces Obfuscator and ObfuscatablePublicMethods. These interfaces
provide the following methods:
markAsObfuscated
Marks the entity instance as having been obfuscated by setting ObfuscateInternal to true on the delegate.
isObfuscated
Returns true if obfuscate has been called and completed successfully. Otherwise returns false.
obfuscate
Obfuscates the columns that are marked for obfuscation on this object.
obfuscateSimple
Works the same as obfuscate, but for objects that are not EffDated.
Obfuscator interface
If you intend to use obfuscation with an entity, the entity must implement the Obfuscator interface. Each entity that
implements the Obfuscator interface must also designate an implementation class, such as
UserContactObfuscator.
Note: If the parent of an entity implements the Obfuscator interface, all child entities inherit that
implementation, including the implementation class. You can override the parent implementation by
declaring implementsInterface in the child entity.
For example, in the base configuration, [Link] has the following definition:
<extension xmlns="[Link]
entityName="UserContact">
<implementsInterface
iface="[Link]"
impl="[Link]"/>
<column-override
name="EmployeeNumber">
<tag
name="PersonalData"
value="ObfuscateDefault"/>
</column-override>
</extension>
In the base configuration, an entity can implement the Obfuscatable delegate but have an Obfuscator interface
implementation of UnsupportedObfuscator. In this case, even if the entity is marked as obfuscatable, any attempt
to obfuscate it results in an UnsupportedOperation exception.
To be able to obfuscate an entity, you must use or write a suitable Obfuscator, such as one that extends
PCPersonalDataObfuscator.
Note
If the configuration of implementsInterface is coded incorrectly, then the server startup verification check will not
be able to detect the error. The error will be caught when the application is starting up instead.
For example, suppose you coded the impl part of implementsInterface with a misspelled class name,
OfuscatorImpl2:
<implementsEntity
name="Obfuscatable"/>
<implementsInterface
iface="[Link]"
impl="[Link].ObfuscatorImpl2"/>
The server startup verification check cannot detect this error. When the application starts up, it generates a Class Not
Found exception. If you see this exception on server startup, correct the code in the configuration.
See also
• “Personal data obfuscator classes” on page 723
• “Implementing the Obfuscator interface in an entity” on page 722
Note: If a field is not nullable, it must be given a default value if you mark it for obfuscation. For one
of these fields, obfuscation will fail if you tag the field obfuscate_default and provide no default
value.
In the base configuration, all the entities that implement the Obfuscator interface have fields tagged PersonalData.
Additionally, many of the fields tagged as PersonalData are in .etx files to enable you to modify them. For
example, the Name field of Contact is defined in [Link] as follows:
<column-override
name="Name">
<tag
name="PersonalData"
value="ObfuscateUnique"/>
</column-override>
In addition, the following delegates have fields tagged PersonalData. An entity that implements one or more of
these delegates does not have to implement Obfuscator and Obfuscatable unless you want the entity to support
obfuscation.
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
• [Link]
See also
• For a list of entities that implement Obfuscator, see “Implementing the Obfuscator interface in an entity” on
page 722.
enabled, then at server startup, if there are validation issues with any entity domain graph, those issues are logged
and the server fails to start. This process is similar to how archiving domain graph validation works.
See also
• “The PolicyCenter archive domain graph” on page 325
• “<delegate> elements and related data object types” on page 180
IMPORTANT Running this batch process is required to use the personal data destruction feature.
Running it can slow your system noticeably. It is suggested that you run it before deploying the
upgraded Guidewire application.
obfuscated user contacts to or removing them from groups and roles. You can create additional permissions and
configure PolicyCenter to further limit editing of obfuscated objects.
IMPORTANT Data destruction proceeds regardless of the work items that might be pointing to an
object to be destroyed. If you have a work item in progress, ensure that it is complete or removed
before any object used by the work item is destroyed.
See also
• “Entity domain graphs” on page 713
• “Data obfuscation in PolicyCenter” on page 721
Account Account
Policy Term Policy Term Policy Term Policy Term Policy Term
PersonalDataPurgeTree
In PolicyCenter, entity domain graphs enable purging of Contact, Account, Policy, PolicyTerm, and
PolicyPeriod objects. The class PersonalDataPurgeTree creates a tree that stores the relationship of the relevant
nodes to determine if the specified pinnable root can or cannot be purged.
The PinnableDomainMethods class defines methods that can be used to find parents, children, and descendants of
the current object in the tree, like getPinnableChildren, getPinnableDescendants, and getPinnableParents.
The purge API can then be called, and best effort purging is performed. What gets purged is determined by the
results of multiple passes through the domain graphs configured for each pinnable root. Purging is determined by the
domain graphs configured for each pinnable root. The Account domain graph is a super-set of the Policy domain
graph, and the Policy domain graph is a super-set of the PolicyTerm domain graph. However, the Contact domain
graph intersects with the other domain graphs, but is not a super-set of the Account domain graph.
Note: Even though policy period and policy term are pinnable roots, in the base configuration,
PolicyCenter does not provide the ability to purge them directly. Personal data purge must get to them
through a higher level graph in the pinnable hierarchy.
The tree is constructed by using the pinnable hierarchy to determine the parents and children of each pinnable node.
Starting from the specified start node, all its ancestors are included. For each of the descendants, if there are multiple
parents, such as an account with multiple contacts, those parents will be included in the graph. Multiple parents are
included because the ability of the parents to be destroyed can affect the start node and the purgeability of the
children.
Purgeability for each node in the tree is then computed by performing a multi-step process for evaluating the nodes
in the tree. Values are propagated to the appropriate ancestors, descendants, and siblings.
In the base configuration, PolicyPeriod and PolicyTerm are not destroyable if they have a sibling that is not
destroyable.
Domain graphs are nested for Account, Policy, PolicyTerm, and PolicyPeriod. Consequently, purging at the
account level removes roots below it and does not require an explicit call to each of the pinnable roots below the
account. Based on the tree and ability of each node to be destroyed, the minimum set of roots necessary to purge all
destroyable roots is calculated and stored in the tree.
The main place that you control the objects that can be purged is in your implementation of
PersonalDataDestructionPlugin. In the class, you define MUST_NOT_DESTROY, MAY_DESTROY, and MUST_DESTROY
return values for shouldDestroyObject methods.
716 chapter 54: Configuring personal data destruction
Guidewire PolicyCenter 9.0.9 Configuration Guide
The result of this process is one of the following values defined in PersonalDataPurgeStatus:
• CompletePurgeExecuted
• PartialPurgeExecuted
• NothingPurged
• ExceptionThrownOnPurge
• PurgeHasNotBeenAttempted
See also
• “Personal data destruction plugin implementation classes” on page 720
See also
• “Pinnable hierarchy in PolicyCenter” on page 715
• “PersonalDataPurgeTree” on page 716
See also
• “PersonalDataPurgeTree” on page 716
See also
• “PersonalDataDestruction plugin interface” on page 720
Sets of related Policy, PolicyTerm, and PolicyPeriod objects are kept or purged together. If a single object in
the set has a Do Not Destroy flag, the entire set is kept. For an example, a single PolicyTerm with a Do Not
Destroy flag prevents the purge of any Policy, PolicyTerm, and PolicyPeriod in the set.
See also
• “Do Not Destroy flag” on page 710
See also
• “Data Protection Officer” on page 714
See also
• Integration Guide
PersonalDataPurge event
When a personal data purge of certain objects is committed, PolicyCenter generates a PersonalDataPurge event
that you can respond to in an Event Fired rule to send a message. For example, you might want to send a message to
a downstream system.
Configuring personal data destruction 719
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• Rules Guide
In the base configuration, PolicyCenter registers the PCPersonalDataDestructionPlugin class as the default class
that implements PersonalDataDestruction, which prevents destruction of any of the pinnable root entities. A
more realistic starting point for your purge definition is the SamplePersonalDataDestructionPlugin class.
See also
• “Personal data destruction plugin implementation classes” on page 720
• “Entity domain graphs” on page 713
PCPersonalDataDestructionPlugin
In the base configuration, PCPersonalDataDestructionPlugin calls getDestroyer to obtain the destroyer defined
in PCPersonalDataDestroyer. Additionally, this class prevents data destruction by returning MUST_NOT_DESTROY
for all calls to destroy pinnable root entities. For example:
override function shouldDestroyPolicyTerm(
policyTerm: PolicyTerm, descendants: Collection<DestructionRootPinnable>,
origin: DestructionRootPinnable): PersonalDataDisposition {
return MUST_NOT_DESTROY
}
override function shouldDestroyPolicy(
policy: Policy, descendants: Collection<DestructionRootPinnable>,
origin: DestructionRootPinnable): PersonalDataDisposition {
return MUST_NOT_DESTROY
}
override function shouldDestroyAccount(
account: Account, descendants: Collection<DestructionRootPinnable>,
origin: DestructionRootPinnable): PersonalDataDisposition {
return MUST_NOT_DESTROY
}
override function shouldDestroyContact(
contact: Contact, descendants: Collection<DestructionRootPinnable>,
origin: DestructionRootPinnable): PersonalDataDisposition {
return MUST_NOT_DESTROY
}
SamplePersonalDataDestructionPlugin
You can use the class SamplePersonalDataDestructionPlugin as a guide for writing your own personal data
destruction code.
SamplePersonalDataDestructionPlugin has examples that use other return values than MUST_NOT_DESTROY for
the pinnable root entities. For example:
The method shouldDestroyUser determines if there is a User object associated with the UserContact object. If
not, it returns MUST_DESTROY. If the database query indicates that the users’s credential is active, the method returns
MUST_NOT_DESTROY. Otherwise, the credential is not active and destroying the UserContact is permitted, so the
method returns MAY_DESTROY.
The method shouldDestroyPolicy checks:
• If the policy is retired. If so, the method returns MUST_DESTROY.
• A number of scenarios that would prevent the policy from being destroyed, and returns MUST_NOT_DESTROY if
any of them are true, such as:
◦ Any open activities
◦ Any policy terms marked MUST_NOT_DESTROY
◦ Any pinnable dependents marked MUST_NOT_DESTROY
• If any pinnable dependents are marked MUST_DESTROY. If so, the method returns MUST_DESTROY.
• Returns a default value of MAY_DESTROY if the previous checks show that nothing is marked MUST_NOT_DESTROY
or MUST_DESTROY.
There are additional overridden methods for shouldDestroyPolicyTerm, shouldDestroyAccount, and
shouldDestroyContact that you can review to see how these pinnable root entities might be handled.
See also
• “DestructionRootPinnable delegate” on page 710
• “Entity domain graphs” on page 713
because of the way data creation and changes are recorded. In particular, objects in the database are connected to the
user that created them, and, in many cases, the user that last modified them.
Because an employee is likely to create or modify hundreds of thousands of objects, it would be computationally
expensive to locate all those objects in the database. It would also be expensive to change those references to
something else. It is not necessary to destroy the relationship between all the work that the employee performed and
the fact that it was performed by a specific employee. If the employee's personally identifiable data is destroyed, the
set of objects associated with the employee can remain and not violate the need to destroy personal data.
Therefore, in the base configuration, PolicyCenter obfuscates data related to UserContact objects.
Obfuscated objects
Each object can indicate whether it has been obfuscated in its Obfuscated flag. The system has no special handling
for objects that have gone through obfuscation. Obfuscated objects act like any other active object in the system
regarding search results, batch processes, and so on. You can implement additional functionality to filter obfuscated
beans, according to PolicyCenter configuration capabilities. In your obfuscation implementation, you must take into
account how your custom obfuscation might affect existing processes in PolicyCenter.
Preupdate rules
Data obfuscation works the same as a normal entity editing, so changes made during obfuscation will trigger
preupdate rules for entity types that have rules registered.
See also
• “Marking entity fields for obfuscation” on page 712
• “Implementing the Obfuscator interface in an entity” on page 722
• “Obfuscatable delegate” on page 711
• “Do Not Destroy flag” on page 710
The following entities implement the Obfuscatable delegate, and in the base configuration their Obfuscator
interface implementation is UnsupportedObfuscator:
• Address
• AddressReplacement
• AffinityGroup
• Contact
• ContactAddress
• ContactCategoryScore
• ContactContact
• ContactTag
• OutboundLocationRiskAssessmentTempStore
See also
• “Obfuscator interface” on page 712
See also
• “Implementing the Obfuscator interface in an entity” on page 722
• “Obfuscator interface” on page 712
• “Marking entity fields for obfuscation” on page 712
PersonalDataObfuscator
PCPersonalDataObfuscator DefaultPersonalDataObfuscator
UserContactDefaultObfuscator
Legend
A B A is a subclass of B
PersonalDataObfuscator
PersonalDataObfuscator is the parent class for the obfuscator classes. It is a general class that obfuscates the
fields for any entity. You are required to extend this class or one of its subclasses when implementing obfuscation
for entities that do not have obfuscator classes defined.
724 chapter 54: Configuring personal data destruction
Guidewire PolicyCenter 9.0.9 Configuration Guide
PersonalDataObfuscator handles setting the obfuscation for effdated and non-effdated fields. If you have tagged
the entity fields PersonalData with value ObfuscateUnique, and there is no need to do any special preprocessing
of the fields, you can use this class.
The following methods are provided:
isObfuscated
Checks the field ObfuscatedInternal and returns true or false depending on the value.
obfuscate
Finds all the columns that are marked for obfuscation on this object.
• If the object is an instance of EffDated then the method obfuscates all versions of that column on the
EffDated object.
• Otherwise, the method sets the field value with the obfuscatedValue.
• Before obfuscating the column, the method calls preProcessPersonalDataFieldBeforeObfuscating to
do any preprocessing. If the column is marked PersonalData with a value of ObfuscateDefault, the
method sets the value to either null or the default value. If the column is marked PersonalData with a
value of something other than ObfuscateDefault, the method calls
getObfuscatedValueForPersonalDataField. That method passes the tag value, and you must provide the
object that the method uses to obfuscate the field.
• At the end, the method sets the ObfuscateInternal column to true by using
[Link].
obfuscateSimple
Works the same as obfuscate, but for objects that are not EffDated.
If you want to do preprocessing before obfuscation, you can extend PersonalDataObfuscator or a subclass of this
class and override the beforeObfuscate method. If you want to change the value of the personal data field before
obfuscation, you can override getObfuscatedValueForPersonalDataField.
The method getObfuscatedValueForPersonalDataField(Obfuscatable bean, IEntityPropertyInfo
personalDataField, String tagValue) defines default obfuscation behavior for fields that are tagged
OfuscateUnique and ObfuscateDefault.
See also
• “Marking entity fields for obfuscation” on page 712
UnsupportedObfuscator
This Java class provides a default implementation for any entity that implements the interface Obfuscator and
declares UnsupportedObfuscator as the implementation. When obfuscate is called, this class throws
unsupportedOperationException for the field.
PersonalDataObfuscatorUtil
This Gosu class is in the same package as the personal data obfuscation classes, [Link].
The class implements the method computeMD5Padding. If a personal data field has a PersonalData tag with value
ObfuscateUnique, this method is called to obfuscate the field.
The method computes an MD5 String based on the type of entity and the PublicID, and then returns that string so
the field can be obfuscated with that value.
For example, DefaultPersonalDataObfuscator calls this method in its
getObfuscatedValueForPersonalDataField method when the field’s PersonalData tag has the value
PersonalDataTagValue.TC_OBFUSCATEUNIQUE.Code.
See also
• “Marking entity fields for obfuscation” on page 712
Configuring personal data destruction 725
Guidewire PolicyCenter 9.0.9 Configuration Guide
To access this tool, log in to PolicyCenter, press Alt+Shift+T, and select Internal Tools→Personal Data Destruction Test.
The tool enables you to enter a contact public ID, an account number, or a policy number or policy public ID and
then:
• Click Preview Purge to see the domain graph nodes that the code traverses and the disposition for each node.
The disposition is the return value for the shouldDestroyObject methods you defined in your plugin
implementation class for the PCPersonalDataDestruction plugin.
• Depending on the object you want to test, click Purge Contact, Purge Account, or Purge Policy to attempt to purge all
objects in the graph.
See also
• “Personal data destruction plugin implementation classes” on page 720
Configuring jobs
Configuring PolicyCenter jobs involves making changes to the product model, Gosu classes and rules, page
configuration files (PCF files), wizards, configuration parameters, plugins, and sometimes workflows. Each can be
configured based on your business requirements. It is the combination of these elements that allows you to create or
modify a policy.
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
In contrast to jobs, the product model defines the types of policies that you can offer to your customers. Each
product can contain one or more lines of business offering various coverages. For more information, see the
Application Guide.
See also
• “Introduction to page configuration” on page 363
Configuring jobs 729
Guidewire PolicyCenter 9.0.9 Configuration Guide
Be careful when you modify a subclass because it modifies the job process and can easily cause the job process
to break.
If you create a subclass, you must modify the job process customization plugin. For more information, see the
Integration Guide.
• Enhancement – You can use a Gosu enhancement to add methods and properties to a class. These methods and
properties are available to all objects of the enhanced type. The default application contains some enhancements
to the job entities, and you may modify these or add your own enhancements. Enhancements often contain code
that is not the core functionality of the job and that you can customize to meet your business needs.
If you need to modify the enhancement for the submission class, edit [Link]:
enhancement SubmissionEnhancement : Submission {
...
}
IMPORTANT The job class code may change in future releases. Therefore, be sure to use comments in
the code to clearly delimit and document your changes. As part of moving to a new release, you may
have to implement (not just upgrade) your changes again. Review your modifications to the job class
and enhancement as well your modifications to job subclasses.
See also
• Gosu Reference Guide
Note: Instead of using rules, you can also add your business logic in the Gosu job process code.
Inserting logic in the job code allows for a more centralized job flow and is easier to debug. The
default application puts most of the business logic in the Gosu job process code.
See also
• Rules Guide
Job workflows
PolicyCenter uses workflows for asynchronous steps and for automated processes. In the default installation, only
renewal and cancellation jobs have workflows. Cancellation has a workflow that handles the potential waiting
period between the time the cancellation is scheduled or issued and completed. Renewal has workflows to handle
automated renewals.
The workflow calls and is called by the job code and by rules in the rule sets. In some cases, the wizard calls the
workflow and sends control back to the wizard.
See also
• “Guidewire workflow” on page 445
You can configure both the scheduling and the amount of time that must elapse before expiration. Configure the
batch process by modifying the following parameters in the [Link] file:
• JobExpirationEffDateThreshold is the number of days past the effective date of the policy version before a
job can be expired. PolicyCenter compares this value with the effective date of the policy version, the default
value is 7 (a week).
• JobExpirationCreateDateThreshold is the number of days past the create date of the submission before a
submission can be expired. The create date is the day the submission entered the system. PolicyCenter compares
this value with [Link].
See also
• The System Administration Guide for more information on how to configure the Job Expire batch process.
• “Job expiration parameters” on page 71
• The second createCustomHistoryEvent method is similar, but allows you to provide the originalValue and
newValue fields of the History.
function createCustomHistoryEvent(type : CustomHistoryType, description : block() : String,
originalValue : String, newValue : String) : History
Example Code that Localizes the Event Message to the Primary Language
The description argument of createCustomHistoryEvent is wrapped in a block so that it can be localized to the
primary language of the policy or account. This example describes the code that does this.
Code in [Link] calls the [Link] method:
private function startScheduledCancellation(processDate : Date) {
...
if (InitialNotificationsHaveBeenSent) {
[Link](CustomHistoryType.TC_CANCEL_RESCHEDULE, \ ->
[Link](processDate))
...
}
The description parameter is a method, block(), that returns a String. In code above, the parameter is the
[Link] method.
The createCustomHistoryEvent method contains code which temporarily switches the locale to the primary
language of the policy and runs the description method. Therefore, the history event message is localized to the
language of the policy.
732 chapter 55: Configuring jobs
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• Gosu Reference Guide
• Globalization Guide
Account
PolicyCenter logs the following history events in an account:
• An Account created event is created when new accounts are created through the user interface or the AccountAPI.
• An Account changed event is created:
◦ When the account status changes from Pending to Active at the start of a submission.
◦ When the account holder is changed to a different contact. The event contains the old and new values.
You can add additional history events by configuring PolicyCenter.
Job
PolicyCenter logs the following history events for jobs (policy transaction):
• Cancellations
◦ A Cancel reschedule event is created when a cancellation is rescheduled.
• Policy change
◦ A PolicyChange created event is created when the job is created.
◦ A PolicyChange Effective Date change event is created when the edit effective date of the policy change changes.
• Questions
◦ An Answer changed event is generated when you change an incorrect answer to a blocking question to a correct
answer.
• Renewals
◦ A Renewal event is created for numerous events in a renewal job. Since renewals are typically automated, the
histories provide insight into the progress of the job. The Renewal event is created:
– When an automated renewal is escalated or manually edited.
– When a user presses the Renew, NonRenew, Not taken, or Issue Now buttons.
– When the automated renewal enters the pending renew, pending non-renew or pending not taken states.
– If the product is no longer available and the renewal will be non-renewed.
– When the renewal is quoted.
– When the renewal is withdrawn.
– When the renewal completes issuance, non-renewal, or not taken.
• Rewrite
◦ A Rewrite created event is created when the rewrite job starts.
• Submissions
◦ A Submission bound event is generated when the job is bound.
◦ A Submission created event is generated when the job is created.
◦ A Submission decline event is generated when the job is declined.
◦ A Submission issued event is generated when the job is issued.
◦ A Submission quoted event is generated when the job is quoted.
Configuring jobs 733
Guidewire PolicyCenter 9.0.9 Configuration Guide
Policy Term
PolicyCenter logs the following history event for policy terms:
• Pre-renewal
◦ A Pre-renewal event is created when a user sets the pre-renewal direction of a policy.
◦ A Pre-renewal event is created when a user non-renews a renewal. Although the non-renewal action occurs in
the renewal job, the history event is added to the PolicyTerm. The history description in the user interface is
made by concatenating certain pre-defined strings when the user adds or removes a non-renewal explanation
pattern.
See also
• Application Guide
Segmentation Example
Segmentation classes determine the segmentation, and, therefore, the available underwriting companies for a policy.
Large insurers typically license more than one subsidiary to underwrite policies on behalf of the insurer. The
primary reason for having multiple subsidiaries is to accommodate state regulatory requirements. (Many states do
not allow insurers to have more than one set of rates per underwriting company.) Therefore, if an insurer desires to
offer multiple sets of rates in that state, the insurer must file each set of rates under a separate underwriting company
for that state.
734 chapter 55: Configuring jobs
Guidewire PolicyCenter 9.0.9 Configuration Guide
Underwriters typically profile an account to determine the segment (category) into which an account falls. The
segment determines which underwriting company actually underwrites the policy. By extension, segmentation sets
the rates for which an account is eligible. The underwriter then uses appropriate set of rates to quote the policy.
For example, a workers’ compensation insurer can segment accounts into three different segments:
• High hazard
• Medium hazard
• Low hazard
The insurer has three underwriting companies corresponding to each of the segments. To generate a quote for the
policy, an underwriter indicates the underwriting company with which to place the policy. The rating engine takes
this information and uses it to calculate a quote for the policy with the appropriate set of rates.
In the following example from WC_SegmentEvaluator, segmentation sets the segmentation level for any policy
written for the state of Hawaii to high risk.
override property get IsHighRisk() : boolean {
return _policyPeriod.[Link] == TC_HI
}
Segmentation classes
The following Gosu classes implement segmentation:
• SegmentEvaluator – The interface
• AbstractSegmentEvaluator – Implements the SegmentEvaluator interface
• Subclasses – DefaultSegmentEvaluator and line specific ones like WC_SegmentEvaluator that is created from
PolicyLineMethods#createSegmentEvaluator.
PolicyPeriodBaseEnhancement
The [Link] enhancement ([Link]) contains
code for auto-selecting an underwriting company. In particular, it contains the following method:
autoSelectUWCompany
Guidewire intends that you customize this enhancement to meet your specific business needs.
This method contains simple logic for determining the best underwriting company for the PolicyPeriod based on
segment and lowest price.
A user triggers the autoSelectUWCompany method within PolicyCenter if the user clicks Autoselect for underwriter.
(As mentioned, this button is available only if the user does not have the Multiple company quote underwriting
permission.)
You set this method on PolicyPeriod in Studio, in any of the following PCF files:
• IssuanceWizard_PolicyInfoDV
• RenewalWizard_PolicyInfoDV
• RewriteWizard_PolicyInfoDV
• SubmissionWizard_PolicyInfoDV
To see this in the base configuration, open one of these files (IssuanceWizard_PolicyInfoDV, for example). Then,
find the Autoselect button on the PCF page and select it. View the action property for this widget (at the bottom of
the page). You see the following:
[Link]()
getUWCompaniesForStates
Use the following method to return a set of underwriting companies based on the effective dates and all the states
needed for the PolicyPeriod.
Configuring jobs 735
Guidewire PolicyCenter 9.0.9 Configuration Guide
[Link](boolean allStates)
Configuring submissions
This topic describes how to configure submission jobs (submission policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• “Configuring jobs” on page 729
• “Selecting the underwriting company through segmentation” on page 734
• Application Guide
get the job, the policy period, and a quote if it exists. It cancels any open activities on the submission, auto assigns
the user role, and checks to see if the job can be expired, withdrawn, or approved by an underwriter. It also checks to
see if the job can be started as new.
The [Link] starts a new submission and assigns a requestor and producer. The beginEditing
method moves a new submission to Draft status. Segmentation classes determines the available underwriting
companies for a policy.
Next, the submission process determines whether quoting can be initiated. The process determines if the branch can
be quoted in its current state by calling the canRequestQuote method. It also determines whether the submission
needs to be reviewed by an underwriter. If the submission began as a quick quote, it also converts it to a full
application. That in turn allows a job to be bound bindOnly and issue.
After PolicyCenter starts the bind process for the submission (branch), the submission may be rejected, marked for
review by an underwriter, or returned to Draft for additional editing. Otherwise, binding begins, which puts the
submission in the Binding status, updates the policy number, and sends an event for additional processing.
To complete binding, PolicyCenter calls the finishBinding method. This method completes the binding of a policy
period without issuing it. The policy period is marked as bound and the job is finished. However, if issuance is being
held, then PolicyCenter promotes the branch to the main policy period. Branches with no hold status must go
through the finishIssuing method. This method promotes the policy period by marking it Bound and the
completes job.
After issuing a submission, the user can bill the submission. The billing system plugin interface
IBillingSystemPlugin defines the contract between PolicyCenter and the billing system. For example, the billing
plugin implementation sends messages to the billing system about new billing instructions associated with a new
submission.
Note: The submission job no workflows because it has no background processes. PolicyCenter uses
workflows only for background processes.
Submission enhancements
There are other submission enhancements that contain additional functionality. You can modify these files.
• [Link] – This enhancement creates a copy of a submission and commits it. However,
PolicyCenter does not validate the copied submission during the commit.
In the copyPolicyPeriod method, you can insert code for any additional copying. For fields that you do not
want to copy, you can erase or reset them to default values.
For entities that you do not want to copy, you can implement the PolicyPeriod plugin method
returnTypesToNotCopyOnNewPeriod. In addition, you can implement the postCopyBranchIntoNewPolicy
method of this plugin which is called just after the copy. See the Integration Guide.
The [Link] method groups a submission job into the appropriate submission
group or creates a new one if a valid group does not exist.
• [Link] – This enhancement returns an array of the producers of the
submissions in the submission group. It also verifies, through the canAnySubmisssionSendLetter method, if
any submission in the batch can have a letter generated for it. If it does, then you see that option in the user
interface. Lastly, there is a sendConfirmationLetter that is a placeholder for implementing through integration,
a confirmation letter. Its purpose is to send a confirmation letter with every possible submission in the batch.
For more information about job enhancements, see “Gosu classes for jobs” on page 730.
738 chapter 56: Configuring submissions
Guidewire PolicyCenter 9.0.9 Configuration Guide
Submission integration
PolicyCenter integrates with many types of external systems through a diverse toolbox of services that can link
PolicyCenter with custom code and external systems. This topic describes web services and plugins that the
submission job uses.
Submission plugins
Submissions use the following plugins.
Name Description
IAccountPlugin This account plugin interface contains methods for detecting existing accounts, performing name
clearance, generating account numbers, and doing risk reservation.
IBillingSystemPlugin This plugin notifies an external system about billing events.
IEffectiveTimePlugin This plugin determines the initial time component of effective/expiration dates (the
PeriodStart/PeriodEnd dates) for a policy period when starting a new job. Submission is one of
the affected jobs. All of the methods of this interface have a PolicyPeriod parameter, which can
be used to access additional information that might be used to determine the desired time, such
as:
• The line or lines of business
• The base jurisdiction
• Other revisions
The return value from each method is a Date, with its time component, HH:mm:ss, set to the de‐
sired time. The plugin discards the day component, dd/MM/yyyy. As a convenience, each method
returns null to leave the time component set to the default (midnight).
IJobNumberGenPlugin This plugin generates a new unique job number.
AccountLocationPlugin For account locations and policy locations, customize how PolicyCenter:
• Determines that two locations are the same
• Clones a location
IPolicyNumGenPlugin This plugin returns an identifier for a new period of a policy. The policy number may vary from
period to period. Call this plugin for the initial period of a policy as part of a Submission job. You
can also call this plugin if you want to generate a new identifier when renewing or rewriting a
policy.
Name Description
IPolicyPeriodDiffPlugin This plugin does the following:
• Compares two policy periods, returning a list of DiffItems representing the differences
between them. The following call the compareBranches method:
◦ Multi‐version quote
◦ Comparing PolicyPeriods of a Policy
◦ Comparing Jobs of a Policy
• Filters a list of DiffItems that originate from the database.
IPolicyPeriodPlugin This plugin mainly calculates period end dates and creates the job process for that period.
IVinPlugin For a VIN (Vehicle Identification Number), the getVehicleInfo method returns the model,
make, year, and color of vehicle.
See also
• The Integration Guide for information about these plugins
Expiring submissions
The Job Expire batch process changes submission jobs from New, Draft, or Quote status to Expired if they have passed
an expiration threshold. In the base configuration, the batch process expires submission jobs with these statuses that
are at least seven days past the effective date of the policy. The batch process, by default, runs every day at 6 A.M.
as configured in the [Link] file. The batch process expires all versions of a policy in a job that can
be expired. If the policy version is already closed by being withdrawn, issued, or not taken, then it will not be
expired.
See also
• “Changing jobs to expired status” on page 731
Configuring issuance
This topic describes how to configure issuance jobs (issuance policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• “Selecting the underwriting company through segmentation” on page 734
Issuance integration
Issuance integrates with many types of external systems through a diverse toolbox of services and APIs that can link
PolicyCenter with custom code and external systems. This topic describes APIs, plugins, and events that the
Configuring issuance 741
Guidewire PolicyCenter 9.0.9 Configuration Guide
issuance job uses. There are multiple integration points that an issuance job requires. Most likely, you will integrate
to a print issuance system.
Issuance plugins
The issuance job uses the following plugin.
Configuring renewals
This topic describes how to configure renewal jobs (renewal policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• “Selecting the underwriting company through segmentation” on page 734
• Application Guide
cannot process the job automatically, it blocks the renewal from advancing, raises an issue, and refers the renewal to
an underwriter so that it can be manually processed.
Note: The [Link] Gosu class contains methods that are common to all jobs, including
renewal. You can view that class in Studio and see the complete list of methods.
The renewal process class includes methods that do the following:
• Starts the renewal
• Sends renewal documents
• Escalates the renewal
• Issues and binds the renewal
• Handles user actions such as:
◦ Issue Now – Immediately binds the policy.
◦ NonRenew – Puts the policy period in NonRenewing status.
◦ Not Taken – Puts the policy period in NotTaking status.
◦ Renew – Puts the policy period in Renewing status.
◦ Edit Policy Transaction – Puts the period back in Draft mode for editing and checks the conditions for which a
new version of the policy period can be created.
◦ Withdraw Transaction – Withdraws the policy period. If the renewal is at a point where it cannot be withdrawn,
then a message appears stating that the renewal cannot be withdrawn.
See also
• Gosu Reference Guide
Renewal enhancement
Enhancement files are editable, and you can add additional logic to the renewal process in
[Link].
Renewal workflows
Note: PolicyCenter uses workflows in certain job (policy transaction) situations. It is not necessary to
use workflows to start a job. Only job steps that are asynchronous use workflows. For synchronous
steps, Gosu classes and enhancements contain the logic.
In the default configuration of PolicyCenter, if the renewal process job is automated and not dependent on user
actions, then a workflow controls the process. However, if manual intervention is necessary, then the renewal
workflow is not used. The renewal process class handles manual renewal steps. See “Renewal process Gosu class”
on page 743.
The renewal job uses the following workflows:
• “Renewal workflows” on page 744
• “Renewal workflows” on page 744
This simple workflow has Begin and Done steps. The Begin step gets the user which the automated renewal will
use, and starts the automatic renewal by calling the beginAutomaticRenewal method defined in
[Link].
See also
• “Renewal process Gosu class” on page 743
Renewal integration
PolicyCenter integrates with many types of external systems through a diverse set of services. This topic describes
web services, plugins, and events that apply to the renewal job (policy transaction).
Name Description
PolicyRenewalAPI The policy renewal web service provides methods for managing renewals in PolicyCenter.
The policy renewal web service provides methods to:
• Start renewals on policies that exist in PolicyCenter. There is no gap in coverage between the renewal
and its based‐on policy period.
• Import a policy from a legacy system and renew the policy. There is no gap in coverage between the
renewal and its based‐on policy period.
• Process a renewal in a billing system
For more information see the Integration Guide.
Name Description
JobAPI The job web service primarily adds an activity to a job by using an activity pattern. This web service also
has methods to find and withdraw jobs.
The job ID of the activity is set to the given job ID. The previous UserID of the activity is set to the current
user. The Assignment Engine assigns the newly created activity to the specified group and user. Finally,
the activity is saved to the database, and the public ID of the newly created activity is returned.
For more information, see the Integration Guide.
PolicyPeriodAPI The policy period web service provides methods for performing various operations on policy periods
within PolicyCenter. It allows you to do the following:
• Add a note to the policy and policy period
• Add a document to the policy period
• Add a referral reason code to the policy period
For more information, see the Integration Guide.
WorkflowAPI The workflow web service provides methods for performing various operations on workflows within
PolicyCenter. This web service can:
• Invoke a trigger that starts an action to advance the workflow to the next step.
• Resume a workflow or all workflows. The workflow engine can attempt to advance the workflow (or
all workflows) to the next step. If there is an error, then the API logs it.
• Suspend a workflow.
For more information, see the Integration Guide.
Renewal plugins
Renewal jobs use the following plugins. For the complete list, see the Integration Guide.
Name Description
IPolicyRenewalPlugin Determines whether to start a renewal job. For more information, see the Integration Guide.
INotificationPlugin Called by IPolicyRenewalPlugin. Returns the date a notification must be mailed. For more in‐
formation, see the Integration Guide.
IEffectiveTimePlugin This plugin determines the initial time component of a policy period's effective/expiration dates
(the PeriodStart/PeriodEnd dates) when starting a new job. Renewal is one of the affected
jobs. All of this interface's methods have a PolicyPeriod parameter, which can be used to ac‐
cess additional information that might be used to determine the desired time, such as:
• The line or lines of business
• The base jurisdiction
• Other revisions
The return value from each method is a Date, with its time component, HH:mm:ss, set to the de‐
sired time. The plugin ignores the day component, dd/MM/yyyy. As a convenience, each method
returns null to leave the time component set to the default (midnight)
IJobNumberGenPlugin This plugin generates a new unique job number.
AccountLocationPlugin For account locations and policy locations, customize how PolicyCenter:
• Determines that two locations are the same
• Clones a location
IPolicyNumGenPlugin This plugin returns an identifier for a new period of a policy. The policy number may vary from
period to period. Call this plugin for the initial period of a policy as part of a Submission job. You
can also call this plugin if you want to generate a new identifier when renewing or rewriting a
policy.
Name Description
IPolicyPeriodDiffPlugin This plugin does the following:
• Compares two policy periods, returning a list of DiffItems representing the differences
between them. The compareBranches method is called in the following:
◦ Multi‐version quote
◦ Comparing PolicyPeriods of a Policy
◦ Comparing Jobs of a Policy
• Filters a list of Diff terms that originate from the database.
IPolicyPeriodPlugin This plugin calculates period end dates and creates the job process for that period.
IPolicyPlugin This plugin contains methods including canStartRenewal which checks to see whether the
PolicyPeriod can be renewed.
IVinPlugin For a VIN (Vehicle Identification Number), the getVehicleInfo method returns the model,
make, year, and color of vehicle.
Renewal events
Events are changes in PolicyCenter that might be of interest to an external system. The renewal job uses the
following events:
• SendRenewalDocuments
• SendNonRenewalDocuments
• SendNotTakenDocuments
• SendNotTaken
• SendNonRenewal
• IssueRenewal
See also
• Integration Guide
Notification Plugin
NotificationConfig
System Table
PolicyCenter handles the renewal job process through a series of workflows that monitor its progress and move it to
the next step. This series of workflows is the optimal way to begin renewals.
See also
• The Application Guide, which includes information on configuring the renewal process lead time.
• System Administration Guide
If the policy has multiple lines of business, then use the longest lead time determined across all lines of business on
the policy. You can configure how to calculate the renewal lead time.
748 chapter 58: Configuring renewals
Guidewire PolicyCenter 9.0.9 Configuration Guide
See also
• Integration Guide
See also
• Product Model Guide
If the policy has multiple lines of business, then the Renewal plugin uses the longest lead time determined across all
lines of business on the policy.
You can configure these values in the Renewal plugin.
You can configure this in the Renewal plugin. For more information, see the Integration Guide.
Configuring renewals 749
Guidewire PolicyCenter 9.0.9 Configuration Guide
File Description
[Link] Definitions for non‐renewal explanation patterns.
See also
• Application Guide
Configuring cancellations
This topic describes how to configure cancellation jobs (cancellation policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• Application Guide
Note: Since the cancellation process for any insurer can be configured based on business
requirements, all discussions apply to the default application only.
See also
For more information about how to control jobs in Gosu and when to use workflows:
• “Configuring jobs” on page 729
For more information on configuration:
• “Cancellation Gosu classes” on page 752
• “Complete cancellation workflow” on page 753
• “Cancellation integration” on page 753
• “Calculating the cancellation effective date” on page 754
• “Configuring the premium calculation method” on page 755
Start Function
Pressing Start Cancellation (in [Link]) indirectly invokes the start function. The Start button calls
the [Link] method which indirectly calls start.
Cancellation enhancements
The cancellation enhancement, [Link], enhances the Cancellation entity with additional
functionality. You can edit this file.
This enhancement contains functions that do the following:
• Determines which refund calculation functions displays based on the cancellation reason.
• Calculates the earliest and latest effective date of the cancellation.
• Returns the last date of the underwriting period.
• Withdraws later cancellations with the same based on period.
752 chapter 59: Configuring cancellations
Guidewire PolicyCenter 9.0.9 Configuration Guide
Cancellation integration
PolicyCenter integrates with many types of external systems and custom code through a diverse toolbox of services.
This topic describes web services and events that the cancellation job uses.
A common integration is with a billing system to start a cancellation for non-payment or to rescind a cancellation
after receiving payment.
Another common integration is with a rating engine to calculate the premium amount.
See also
• Integration Guide
Cancellation plugins
The following plugins might be useful for cancellation.
Name Description
IBillingPlugin If you need to integrate with an external billing system, use this plugin to notify an external billing
system about billing events.
MessageTransport Use this plugin to send a message to an external/remote system by using any transport protocol.
IEffectiveTimePlugin Determines the time of day (since midnight) for a job. Use to calculate the effective time.
IJobNumberGenPlugin Generates a new, unique job number. Use to generate cancellation job numbers.
Name Description
IPolicyPlugin Lets PolicyCenter know whether, based on dynamic calculations on the policy, it is OK to start various
jobs. Use to determine if a cancellation job can be started.
INotificationPlugin Returns cancellation lead time.
See also
Integration Guide
Cancellation events
PolicyCenter generates events for changes in PolicyCenter that might be of interest to an external system. You can
also programmatically generate an event. For example, in the [Link] class, the sendNotices
method generates a SendCancellationNotices event.
The Cancellation entity has the following events:
• CancellationAdded
• CancellationChanged
• CancellationRemoved
The PolicyPeriod entity has the following events pertaining to cancellation:
• SendCancellationNotices – Message to an external system to send cancellation notices.
• IssueCancellation – Message to an external System of Record (SOR) to send cancellation notices.
• SendRescindNotices – Message to an external system to send rescind cancellation notices.
See also
• Integration Guide
b. The Notification plugin retrieves the underwriting period from the notification_configs.xml system
table. The underwriting period is specified in rows with ActionType of Underwriting Period. The
underwriting period is the value in the LeadTime column.
If xDays is less than or equal to the LeadTime, then the policy is in the underwriting period.
If the policy is in the underwriting period, the application will use underwriting period action types and
categories in the notification_configs.xml system table to determine the cancellation lead time.
3. The Notification plugin retrieves the maximum lead time required for notification from the
notification_configs.xml system table. The plugin retrieves the maximum lead time based on the
cancellation reason, whether the policy is in the underwriting period, the policy jurisdiction, and the line of
business.
Note: If a policy includes multiple jurisdictions, there can be multiple matching rows. A policy that
includes more than one line of business (such as a commercial package policy) can include both
multiple jurisdictions and lines of business. In this case, the Notification plugin retrieves the
maximum lead time. Therefore, the plugin returns the longest lead time specified for any of the
jurisdiction and line of business combinations in the policy.
The cancellation effective date is equal to the current date plus the LeadTime for the matching row plus one day.
Cancellation does not take place until the full notification period has passed. If ten days notification is required,
cancellation does not take place earlier than 10:01 a.m. on day 11.
This topic describes how to configure policy change jobs (policy change transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• Application Guide
Method Description
Starting a policy change
start This method starts the job and automatically assigns a requestor and producer.
startAutomatic This method calls three methods which start the job, request a quote, and bind the
policy. The PolicyChangeAPI calls this method.
Binding a policy change
Method Description
canBind canBind – Checks that the policy can be bound. Some of the checks include:
• Has the policy been quoted?
• Does the user have the correct permissions to bind the policy?
bind Begins the binding process for a PolicyPeriod.
This method verifies if the branch can be bound. For multi‐version jobs, there is on‐
ly one selected branch on the job which is specified by [Link]. That
branch must have a valid quote. If the branch can be bound, then bind starts the
binding process and sets the policy status to Binding.
This method ensures that there is a producer of service on the policy.
This method also calls out to the FormInferenceEngine, which is the main integra‐
tion point for forms.
Lastly, the startBinding method has commented out code to add an
IssuePolicyChange event.
finishBinding Completes the policy change job. This method also checks new conditions and
sends billing information through the IBillingSystemPlugin.
failBinding If binding fails, then the policy can be edited again by an underwriter.
Editing the effective date
canStartChangeEditEffectiveDate Check to see if Actions→Edit→Effective Date is available.
canFinishChangeEditEffectiveDate Check to see if the current policy change can change its effective date to the input
parameter value.
changeEditEffectiveDate PolicyCenter invokes this method when you select Effective Date in the Actions menu.
If canStartChangeEditEffectiveDate is false, then this method is not called.
This method calls canFinishChangeEditEffectiveDate to verify that the change is
valid before applying it.
Handling future bound jobs
applyChangesToFutureBoundRenewal Applies changes from this policy change to a renewal that is bound in the future.
applyChangesToFutureUnboundRenewal Applies changes from this policy change to a renewal that is unbound in the future.
Flags
canRequestQuote Indicates whether quoting can be initiated on the PolicyPeriod.
canWithdraw Checks to see if a branch can be withdrawn.
The PolicyChangeProcess class also identifies and raises underwriting issues with the policy, using underwriting
rules to identify the types of issues to raise.
See also
• “Configuring underwriting authority” on page 583
• “Adding a new checking set” on page 587
• Application Guide
IPolicyPlugin
The canStartPolicyChange method returns an error message if a change cannot be started for a policy and an
effective date. Changes that are started internally or externally call this plugin.
For more information, see the Integration Guide.
IPolicyPeriodPlugin
The postCreateNewBranchForChangeEditEffectiveDate method is called to handle a change to the effective date
of a job such as a policy change. In the default configuration, policy change is the only job that calls this method.
See also
• Integration Guide
Configuring reinstatement
This topic describes how to configure reinstatement jobs (reinstatement policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• Application Guide
The [Link] contains functions for reinstatement. The [Link] contains general
functions used by different types of jobs.
The [Link] class extends the JobProcess Gosu class. The JobProcess class contains
functions that allow you to get the job and the policy period. It cancels open activities on the reinstatement and auto
assigns the user role. It also checks to see if the job can be expired or withdrawn, and checks if the job can be started
as new.
This class identifies and raises underwriting issues with the policy, using underwriting rules to identify the types of
issues to raise.
Methods in [Link] start the job as a draft, then automatically assign the producer and
underwriter roles to the job.
Note: The reinstatement job has no workflows because it has no background processes. PolicyCenter
uses workflows only for background processes.
See also
• “Configuring underwriting authority” on page 583
• Application Guide
Reinstatement integration
PolicyCenter integrates with many types of external systems through a diverse toolbox of services that can link
PolicyCenter with custom code and external systems. This topic describes web services and events that the
reinstatement job uses.
See also
• Integration Guide
Reinstatement plugins
The following plugins may be useful to integrate with reinstatement.
Name Description
IBillingPlugin If you need to integrate with an external billing system, use this plugin to notify an external billing
system about billing events.
MessageTransport Use this plugin to send a message to an external/remote system by using any transport protocol.
Name Description
IEffectiveTimePlugin Determines the time of day (since midnight) for a job. Use to calculate the effective time.
IJobNumberGenPlugin Generates a new, unique job number. Use to generate reinstatement job numbers.
IPolicyPlugin Lets PolicyCenter know whether to start various jobs, based on dynamic calculations on the policy.
Use to determine when a reinstatement job can be started.
See also
• Integration Guide
Reinstatement events
PolicyCenter generates events for changes that might be of interest to an external system. You can also
programmatically generate an event. For example, in the [Link] class, the function
startReinstate generates an IssueReinstatement event.
The Reinstatement entity has the following events:
• ReinstatementAdded
• ReinstatementChanged
• ReinstatementRemoved
The PolicyPeriod entity has the following events pertaining to reinstatement:
• IssueReinstatement – a message that notifies an external system to issue a reinstatement for a particular policy
period.
See also
• Integration Guide
Configuring rewrite
This topic describes how to configure rewrite jobs (rewrite policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• “Selecting the underwriting company through segmentation” on page 734
• Application Guide
See also
• “Configuring jobs” on page 729 to learn more about how jobs work in Gosu and how to use workflows
The [Link] class extends the JobProcess Gosu class. The JobProcess class contains functions that
allow you to get the job and the policy period. It cancels open activities on the rewrite and auto assigns the user role.
It also checks to see if the job can be expired, or withdrawn, and checks if the job can be started as new.
Functions in [Link] start the rewrite job, request a quote, and rewrite the policy period.
Note: The rewrite job has no workflows because it has no background processes. PolicyCenter uses
workflows only for background processes.
Rewrite integration
PolicyCenter integrates with many types of external systems through a diverse toolbox of services that can link
PolicyCenter with custom code and external systems. This topic describes events for the rewrite job (policy
transaction). The rewrite job has no web services.
Rewrite events
PolicyCenter generates events for changes in PolicyCenter that might be of interest to an external system. You can
also programmatically generate an event. For example, in the [Link] class, the rewrite function
generates an IssueRewrite event (by calling the startBinding function).
The Rewrite entity has the following events:
• RewriteAdded
• RewriteChanged
• RewriteRemoved
The PolicyPeriod entity has the following events pertaining to rewrite:
• IssueRewrite – A message that notifies an external system to issue a rewrite for a particular policy period.
See also
• Integration Guide
This topic describes how to configure rewrite new account jobs (rewrite new account policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• Application Guide
Job Policy
CreatesNewPolicy RewrittenToNewAccountDestination
IsNewTerm RewrittenToNewAccountSource Legend
A relates to B
A B
B relates to A
A B A has a B
* *
RewriteNewAccount PolicyPeriod A B A has 0 or more Bs
* A is a subtype of B
A B
A delegates to B
BasedOn
The RewriteNewAccount entity represents the rewrite new account job. This entity has a PolicyPeriod field which
returns the policy period associated with the job.
The PolicyPeriod entity associated with the RewriteNewAccount entity has a BasedOn field that returns the policy
period on which the source policy is based.
Policy Entity
The Policy entity has the following fields related to the rewrite new account job:
Field Description
RewrittenToNewAccountDestination If this policy was rewritten to a new account, returns the destination policy.
RewrittenToNewAccountSource If this policy was rewritten to a new account, returns the source policy.
Job Entity
In a rewrite new account job, the Job entity has the following values:
Field Description
CreatesNewPolicy Value is True if this job creates a new policy with a new policy number. This value is True for rewrite new
account jobs.
IsNewTerm Value is True if this job creates a new policy term. This value is True for rewrite new account jobs.
rewr_new_acct_bound This event appears on the target policy term when the job is bound.
In the base configuration, PolicyCenter provides two types of premium audit jobs: final audits and premium reports.
Audits are included in the Workers’ Compensation and General Liability lines of business. You can configure final
audits and premium reports to meet your requirements. You can add and configure new audit types such as checking
audits. You can add audit to additional lines of business.
This topic describes how to configure premium audit jobs (premium audit policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• Application Guide
IMPORTANT Since the audit process for any insurer can be configured based on business
requirements, all discussions apply to the default application only.
See also
• “Configuring jobs” on page 729 to learn more about how jobs work in Gosu and how to use workflows
• Product Model Guide
Methods in the AuditScheduler class call the createAuditInformation method on the AuditSchedulePattern
interface. The createAuditInformation method creates an AuditInformation entity instance but does not return
a pointer to the instance. If you need to modify the AuditInformation entity instance, you can retrieve it by
creating a query. For example, you added properties to the AuditInformation entity definition, and need to set
these values in the entity instance. After you retrieve the instance, set values for the properties you added.
The AuditInformation entity has properties for information defined in the audit schedule. The properties include
values for the audit method, audit schedule type, start date, and due date, among others.
Audit plugins
The following plugins may be useful to integrate with premium audit.
Name Description
IAuditSchedulePatternSelectorPlugin In the base configuration, this plugin sets the default audit schedule for final au‐
dits. Cancellation final audits are scheduled by phone and expiration final audits
are scheduled physically.
If the audit method is dependent on the premium value, you can configure it in
this plugin.
IBillingSystemPlugin If you need to integrate with an external billing system, use this plugin to notify an
external billing system about billing events.
Audit events
PolicyCenter generates events for changes that might be of interest to an external system. You can also
programmatically generate an event.
There are no events for premium audit.
In Product Designer, you can add audit schedules and modify properties of audit schedules. For example, in Product
Designer you can change the audit schedule’s method from voluntary to phone.
If you select calendar months, an additional audit schedule field comes into play. This audit schedule field is the
round to next month field. This field allows you to control for a first report that is very short. If the policy effective
date is after the round to date, then the first report covers the first short month and the second month. Subsequent
periods correspond to calendar months. The following table shows reports for an audit schedule of Monthly reports by
calendar months with round to next month on day 15.
In Product Designer, you can view and modify Monthly Reports by calendar month, excluding last month, which provides
an example of a premium report schedule. The schedule specifies that the audit method is voluntary and has a 10%
772 chapter 64: Configuring premium audit
Guidewire PolicyCenter 9.0.9 Configuration Guide
deposit. In the schedule details, the minimum audit period length is set to 15 days. The last audit period is excluded.
In the period details, the audit is set to start five calendar days before the audit period end date. The audit is due 15
calendar days after the audit period end date.
Procedure
1. In Product Designer, navigate to Product Model→Audit Schedules.
2. Click Add.
3. Enter a Code, Name, select an Audit Type. The Audit Type drop-down list displays the audit types defined in
PolicyCenter.
4. If the audit schedule type can be either single or series, such as checking audit, then select a Schedule Type.
5. Click OK.
Product Designer displays the new audit schedule with properties initially based on properties specified in the
audit schedule properties files for this audit type. See “Audit schedule properties file” on page 775.
6. In the audit schedule, add and change properties such as a description, when to initiate the audit, and the type
of days.
Audit Schedules configuration > config > resources > productmodel > auditschedules
[Link]
auditMethod = REQUIRED
…. Audit schedule properties
In an audit schedule properties file, you define properties of the audit schedule as well as basic properties of the
audit type. Basic properties of the audit type include the audit method. This file also defines the schedule type,
Configuring premium audit 773
Guidewire PolicyCenter 9.0.9 Configuration Guide
which specifies whether the audit has a single occurrence or occurs in a series. You can edit the properties file in
Studio. However, only Product Designer uses this file. PolicyCenter does not.
In Product Designer, you can add new audit schedules based on the audit types. When you save an audit schedule
and commit the changes, Product Designer writes the audit schedule to an audit schedule pattern XML file in
PolicyCenter.
Procedure
1. Extend the audit schedule typelist to include the new audit type. This enables you to configure the new audit
type and define audit schedules based upon the new audit type in Product Designer. See “Extend audit
schedule type typelist” on page 774.
2. Add code to handle the new audit type in all lines of business for which this audit type applies. For guidance,
see:
• Product Model Guide
• “Configuring premium audit overview” on page 769
You may also need to add or modify PCF files and entities to configure the new audit type.
For audit types, such as Final Audit and Premium Reports, that require schedules, you must do the following
steps. In the base configuration, Retrospective Rating is an audit type that does not require schedules.
3. Add audit schedule properties files for the new audit type. Product Designer loads your new audit schedule
properties files when you log out, switch change lists, or restart Product Designer. See “Audit schedule
properties file” on page 775.
4. Define audit schedules in Product Designer for the new audit type. When you commit changes, Product
Designer updates the audit schedule pattern XML file. See “Audit schedule pattern” on page 777.
Procedure
1. In configuration→config→Extensions→Typelist, open [Link]. Or if the file does not exist,
create a new Typelist Extension extending AuditScheduleType.
2. Add a typecode for new audit type.
3. For code, enter the AuditType as specified in the name of audit schedule properties file. For example, enter
the code FinalAudit for [Link].
4. For name, enter the display name of the audit type.
5. If the audit type requires schedules, right-click the typefilter named ConfigurablePatterns and select Add
New→Include Into Filter. Select the typecode for the new audit type. Add the typefilter if it does not exist.
This is the same name as the typefilter on the base typelist.
6. Right-click the typefilter and select Add New→Include Into Filter. Select the typecode for the new audit type.
7. Click Next.
8. In the Select filter tab, select ConfigurablePatterns.
774 chapter 64: Configuring premium audit
Guidewire PolicyCenter 9.0.9 Configuration Guide
9. Click Finish.
Where:
• AuditType – The name of the audit type.
• scheduleType – The schedule type can be single or series. A single audit occurs once. A series audit occurs
one or more times.
For example, Final Audits are always single audits because they only occur once per policy term. Therefore, there is
only a [Link] file.
Premium Reports are generally series audits, because there is a series of them during a policy term. Therefore, there
is only a [Link] file. Some types of audits, for example, Checking Audits, may
happen both as single audits and as series audits. These audits require audit schedule properties files for single and
series.
In the audit schedule properties file, specify one of the following values for each property. The value has the
following effect when defining an audit schedule in Product Designer:
• REQUIRED – When defining an audit schedule of this type, the user must specify a value for this field.
• EDITABLE – The user can specify a value for this field. The field is not required.
• HIDDEN – This field is hidden.
In the properties file, specify values for the following properties for schedules for your new audit type. If you do not
specify a value, the value defaults to EDITABLE.
frequency Scheduled A drop‐down list to select how often audits occur. Values are defined in
the AuditFrequency typelist.
intervalComputationType Schedule Basis A drop‐down list to select the schedule basis. Values are defined in the
AuditIntervalComputeType typelist. In the base configuration, the
values are:
• Calendar Month
• Policy Month
calendarMonthRoundDate Round to Next A text box to enter which day rounds up to the next month.
Month on Day
minimumAuditPeriodLength Minimum Audit Peri- A text box to enter the minimum audit period.
od (Days)
endDateDelayAmount Single Checking A text box to enter the number of days after the policy period start the
Ends After Policy single audit ends.
Period Start (days)
endDateDelayUnit Type of Days A drop‐down list to specify the type of days to use when calculating the
end date for the audit. Values are defined in the DateCalcUnit typelist.
In the base configuration, values are:
• Calendar Days
• Business Days
Audit Report Initiation fields that apply to both single and series audit schedules
initDelayDirection Audit Initiated A drop‐down list to specify whether the audit is initiated before or after
the audit period end date. Values are defined in
AuditReportDateDirection typelist. This typelist is final.
initDelayAmount Days Before Depending upon the Audit Initiated selection, a text box to enter the
Days After number of days, before or after, to adjust the audit initiation date from
the audit period end date.
initDelayUnit Type of Days A drop‐down list to specify the type of days. Values are defined in the
DateCalcUnit typelist.
initBusinessDayAdjustment If Initiated on a Non- A drop‐down list to specify how to adjust the calculated audit initiation
Business Day date if it occurs on a non‐business day. Values are defined in the
AuditBusinessDayAdjust typelist.
Audit Deadline fields that apply to both single and series audit schedules
dueDelayDirection Audit Due A drop‐down list to specify whether the audit is due before or after the
audit period end date. Values are defined in
AuditReportDateDirection typelist. This typelist is final.
dueDelayAmount Days Before Depending upon the Audit Due selection, a text box to enter the number
Days After of days, before or after, to adjust the audit due date.
dueDelayUnit Type of Days A drop‐down list to specify the type of days. Values are defined in the
DateCalcUnit typelist.
dueBusinessDayAdjustment If Due on a Non- A drop‐down list to specify how to adjust the audit due date if it occurs
Business Day on a non‐business day. Values are defined in the
AuditBusinessDayAdjust typelist.
Escalation fields that apply to both single and series audit schedules
numDaysAfterFirstEscalation Escalate Number of A text box to enter the number of days to wait before the first escala‐
Days after First tion.
Prompt
firstEscalationPrompt First Escalation A drop‐down list to specify what prompts the first escalation. Values
Prompt are defined in the EscalationPromptType typelist.
numDaysAfterSecondEscalation Escalate Number of A text box to enter the number of days to wait before the second esca‐
Days after Second lation.
Prompt
secondEscalationPrompt Second Escalation A drop‐down list to specify what prompts the second escalation. Values
Prompt are defined in the EscalationPromptType typelist.
Miscellaneous fields
reportingDefaultDepositPct Reporting Default A text box to enter a default deposit percentage. For an example, see
Deposit % [Link] and
[Link].
In the base configuration, PolicyCenter does not use the escalation fields. You can write code to escalate audits when
they are not completed.
Product Designer loads your new audit schedule properties files when you log out, switch change lists, or restart
Product Designer.
This topic describes how to configure side-by-side quoting for jobs (policy transactions).
Note: In PolicyCenter, the user interface uses the term policy transaction to refer to submissions,
policy changes, and other policy transactions. Policy transactions are implemented as jobs in the data
model, and referred to as jobs in PCF files, Gosu classes, and other configuration files. Therefore, the
configuration documentation refers to policy transactions as jobs.
See also
• “Multiple revision jobs and the job selected branch property” on page 734
• Application Guide
See also
Job Entity
The Job entity has the following fields related to side-by-side quoting:
Field Description
SideBySide Specifies whether this job has side‐by‐side quoting.
SelectedVersion This foreign key points to the PolicyPeriod of the selected version.
MaxNumberOfSideBySideQuotes This derived property returns the maximum number of side‐by‐side quotes specified in
[Link] for the job type.
IMPORTANT Guidewire requires that base data entities or fields on the Side-by-Side Quoting screen not
be editable in more than one place on a given screen.
Placing an editable widget for a base data field in the columns replicated for each version is a violation of this
requirement. This requirement applies to fields that are implicitly base data, such as contact or location information
that can be synchronized.
PolicyCenter must open that period for edit. (The user does not explicitly open the period for edit.) Opening the
period for edit invalidates the premiums, and moves the policy period from quoted to draft status.
• Not quoted – If the edited period is not in the quoted state,
◦ A change to a widget, such as a check box, that adds or removes a coverage triggers a post to the server. The
post ensures that PolicyCenter reevaluates the availability logic in the product model.
◦ An edit to a coverage term value does not trigger a post.
In personal auto, the one exception to this rule is the PALiability coverage and its coverage terms. The
PALiability coverage has dependencies with other coverages in the policy period, therefore a post is
necessary.
Regardless of the policy period status:
• Clicking Quote All or New Version triggers a post and a page refresh.
• Clicking Use Defaults for an offering triggers a post and a page refresh.
Procedure
1. In Studio, open a PCF file, such as [Link].
2. Select a PCF element, such as the BooleanRadioInput.
3. In Properties, select the PostOnChange tab, then select Enable targeted Post On Change.
4. In the disablePostOnEnter property, enter code to set this property.
When enabled, PolicyCenter checks the value of disablePostOnEnter to determine whether to post changes.
In the personal auto line of business, some examples of base data are:
• Policy location
• Driver information such as motor vehicle records
• Line modifiers such as a multi-policy discount
Is field
Yes Skip field.
excluded?
No
Is field a
column or Yes Copy the field.
typekey?
Field is a reference to an No
entity. Look at the referenced
entity.
Is entity
Yes Skip field.
excluded?
No
If the field is an array, one-to-one, foreign key, or edge foreign key, then base data copy checks to see if the entity
pointed to is effective dated. Revisioned entities implement the EffDated delegate. Base data copy skips arrays of
entities that are not effective dated because they are implicitly side-by-side data. Base data copy stops recursion on
an entity that is side-by-side.
For a complete list of excluded entities and fields, see “Excluding side-by-side data from base data” on page 784.
The copySlice method calls the MatchableTreeTraverser class to build a map of MatchableKey objects for each
node in the policy graph. The MatchableKey objects are used to determine if nodes from two different policy
periods are logically equivalent.
The copySlice method also calls the MatchableTreeTraverser class to build an edge map. The edge map contains
a set of node to node edges for each relationship between nodes in the policy graph.
The following illustration shows the node and edge maps for the policy graph of a source policy period.
Source policy period
Legend
Source policy graph Source node map Source edge map
MatchableKey
1
B A B C
1 2 3 A Policy graph node
B B D
C D 2 2 4
C C E
3 3 5
E A
D C A
4 3 1
E
5
The copySlice method calls MatchableTreeTraverser to build node and edge maps for each destination policy
period.
The following illustration shows the node and edge maps for the policy graph of a destination policy period.
Destination policy period
Legend
Destination policy graph Destination node map Destination edge map
MatchableKey
1
B B B C
2 2 3 A Policy graph node
C B D
C D 3 2 4
D C E
4 3 5
E F
E D F
5 4 6
F
6
The copySlice method compares the source and destination node maps and creates or removes nodes from the
destination policy graph.
In the following illustration, MatchableKey 1 exists in the source but not the destination. Therefore, copySlice
creates a corresponding MatchableKey and a copy of the A node in the destination.
The MatchableKey 6 exists only in the destination node map. Therefore, copySlice removes the MatchableKey and
the node.
C C
3 3
D D
4 4
E E
5 5
Using the edge map of the source, the new node is inserted into the policy graph of the destination.
MatchableKey
B C B 1
2 3
A Policy graph node
B D C
2 4 D
C E
3 5
E A F
C A
3 1
Note: PolicyCenter also excludes data which is only accessible through excluded entities.
VehicleDriver
1
PersonalVehicle
* * PolicyDriver
2 Version #1 Version #2
PersonalVehicle PersonalVehicle
Ford Ford
VehicleDriver VehicleDriver
Vehicle=Ford Vehicle=Ford
PolicyDriver=Susan PolicyDriver=Susan
Legend
A * B
A has a one-to-many
relationship to B
PolicyDriver PolicyDriver A B A has a foreign key to B
Susan Susan A is excluded from base
A
data copy
1. The VehicleDriver entity can be reach through PolicyDriver and PersonalVehicle. However, only
PersonalVehicle is excluded from base data copy.
2. Initially, PersonalVehicle and VehicleDriver in Version #1 and Version #2 have the same values.
The following illustration shows changes that happen when the agent edits policy Version #2.
Incorrect configuration: Entity reachable through two paths not excluded, continued
3 Version #1 Version #2
PolicyDriver PolicyDriver
Susan Susan
Legend
Incorrect configuration: Entity reachable through two paths not excluded, continued
4 Version #1 Version #2
PersonalVehicle PersonalVehicle
Ford Chevy
VehicleDriver VehicleDriver
Vehicle=Ford Vehicle=Chevy
PolicyDriver=Susan PolicyDriver=Susan Legend
4. When the agent saves the edits, PolicyCenter does the base data copy.
Removing the Ford and adding the Chevy is not a problem because PersonalVehicle is side-by-side data and does
not affect other versions. However, VehicleDriver is a base data entity and must be the same in all versions. In
Configuring side‐by‐side quoting 789
Guidewire PolicyCenter 9.0.9 Configuration Guide
Version #1, the Vehicle field points to the Ford. In Version #2, it points to the Chevy. Version #1 would contain bad
data if base data copies Vehicle=Chevy to Version #1.
The VehicleDriver entity is reachable through two paths. Therefore, Guidewire recommends making the
VehicleDriver entity side-by-side data by excluding it from base data copy, as shown in the following illustration.
VehicleDriver
1
PersonalVehicle
* * PolicyDriver
2 Version #1 Version #2
PolicyDriver PolicyDriver
Susan Susan
Legend
A * B
A has a one-to-many
relationship to B
1. Base data copy excludes both the PersonalVehicle and VehicleDriver entities.
2. It does not matter that the PersonalVehicle and VehicleDriver differ between the versions because base
data copy excludes them.
However, in some limited cases, your implementation may need to Quote All even though there are validation
warnings. To quote when there are validation warnings, set the SideBySideQuoteBlockedByWarnings parameter in
[Link] to false. The default value is true. If this parameter is not in [Link], you need to add it.
Changing this parameter can affect product configuration files and Gosu code. Some code may assume that side-by-
side quoting only occurs if there are no validation warnings. Test thoroughly to avoid problems.
In [Link], in the call to the requestQuote method has the SideBySide parameter as an
argument.